diff --git a/src/widgets/grafana/component.jsx b/src/widgets/grafana/component.jsx new file mode 100755 index 00000000..2aba23ba --- /dev/null +++ b/src/widgets/grafana/component.jsx @@ -0,0 +1,40 @@ +import { useTranslation } from "next-i18next"; + +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + const { data: alertsData, error: alertsError } = useWidgetAPI(widget, "alerts"); + + if (alertsError) { + return ; + } + + if (!alertsData) { + return ( + + + + + ); + } + + const totalAlerts = Object.keys(alertsData).length; + let alertsTriggered = 0; + Object.keys(alertsData).forEach((key) => { + if (alertsData[key].state === "alerting") { + alertsTriggered += 1; + } + }); + + return ( + + + + + ); +} diff --git a/src/widgets/grafana/widget.js b/src/widgets/grafana/widget.js new file mode 100755 index 00000000..6ab53db0 --- /dev/null +++ b/src/widgets/grafana/widget.js @@ -0,0 +1,14 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/api/{endpoint}", + proxyHandler: genericProxyHandler, + + mappings: { + alerts: { + endpoint: "alerts", + }, + }, +}; + +export default widget; \ No newline at end of file diff --git a/src/widgets/strelaysrv/components.js b/src/widgets/strelaysrv/components.js new file mode 100755 index 00000000..ba94b3b5 --- /dev/null +++ b/src/widgets/strelaysrv/components.js @@ -0,0 +1,76 @@ +import dynamic from "next/dynamic"; + +const components = { + adguard: dynamic(() => import("./adguard/component")), + authentik: dynamic(() => import("./authentik/component")), + autobrr: dynamic(() => import("./autobrr/component")), + bazarr: dynamic(() => import("./bazarr/component")), + changedetectionio: dynamic(() => import("./changedetectionio/component")), + cloudflared: dynamic(() => import("./cloudflared/component")), + coinmarketcap: dynamic(() => import("./coinmarketcap/component")), + deluge: dynamic(() => import("./deluge/component")), + diskstation: dynamic(() => import("./diskstation/component")), + downloadstation: dynamic(() => import("./downloadstation/component")), + docker: dynamic(() => import("./docker/component")), + kubernetes: dynamic(() => import("./kubernetes/component")), + emby: dynamic(() => import("./emby/component")), + fileflows: dynamic(() => import("./fileflows/component")), + flood: dynamic(() => import("./flood/component")), + gluetun: dynamic(() => import("./gluetun/component")), + gotify: dynamic(() => import("./gotify/component")), + grafana: dynamic(() => import("./grafana/component")), + hdhomerun: dynamic(() => import("./hdhomerun/component")), + homebridge: dynamic(() => import("./homebridge/component")), + jackett: dynamic(() => import("./jackett/component")), + jellyfin: dynamic(() => import("./emby/component")), + jellyseerr: dynamic(() => import("./jellyseerr/component")), + komga: dynamic(() => import("./komga/component")), + kopia: dynamic(() => import("./kopia/component")), + lidarr: dynamic(() => import("./lidarr/component")), + mastodon: dynamic(() => import("./mastodon/component")), + medusa: dynamic(() => import("./medusa/component")), + miniflux: dynamic(() => import("./miniflux/component")), + mikrotik: dynamic(() => import("./mikrotik/component")), + moonraker: dynamic(() => import("./moonraker/component")), + mylar: dynamic(() => import("./mylar/component")), + navidrome: dynamic(() => import("./navidrome/component")), + nextdns: dynamic(() => import("./nextdns/component")), + npm: dynamic(() => import("./npm/component")), + nzbget: dynamic(() => import("./nzbget/component")), + octoprint: dynamic(() => import("./octoprint/component")), + omada: dynamic(() => import("./omada/component")), + ombi: dynamic(() => import("./ombi/component")), + opnsense: dynamic(() => import("./opnsense/component")), + overseerr: dynamic(() => import("./overseerr/component")), + paperlessngx: dynamic(() => import("./paperlessngx/component")), + photoprism: dynamic(() => import("./photoprism/component")), + proxmoxbackupserver: dynamic(() => import("./proxmoxbackupserver/component")), + pihole: dynamic(() => import("./pihole/component")), + plex: dynamic(() => import("./plex/component")), + portainer: dynamic(() => import("./portainer/component")), + prowlarr: dynamic(() => import("./prowlarr/component")), + proxmox: dynamic(() => import("./proxmox/component")), + pyload: dynamic(() => import("./pyload/component")), + qbittorrent: dynamic(() => import("./qbittorrent/component")), + radarr: dynamic(() => import("./radarr/component")), + readarr: dynamic(() => import("./readarr/component")), + rutorrent: dynamic(() => import("./rutorrent/component")), + sabnzbd: dynamic(() => import("./sabnzbd/component")), + scrutiny: dynamic(() => import("./scrutiny/component")), + sonarr: dynamic(() => import("./sonarr/component")), + speedtest: dynamic(() => import("./speedtest/component")), + strelaysrv: dynamic(() => import("./strelaysrv/component")), + tautulli: dynamic(() => import("./tautulli/component")), + tdarr: dynamic(() => import("./tdarr/component")), + traefik: dynamic(() => import("./traefik/component")), + transmission: dynamic(() => import("./transmission/component")), + tubearchivist: dynamic(() => import("./tubearchivist/component")), + truenas: dynamic(() => import("./truenas/component")), + unifi: dynamic(() => import("./unifi/component")), + watchtower: dynamic(() => import("./watchtower/component")), + xteve: dynamic(() => import("./xteve/component")), + immich: dynamic(() => import("./immich/component")), + uptimekuma: dynamic(() => import("./uptimekuma/component")), +}; + +export default components; \ No newline at end of file diff --git a/src/widgets/strelaysrv/widgets.js b/src/widgets/strelaysrv/widgets.js new file mode 100755 index 00000000..00cb75fc --- /dev/null +++ b/src/widgets/strelaysrv/widgets.js @@ -0,0 +1,141 @@ +import adguard from "./adguard/widget"; +import authentik from "./authentik/widget"; +import autobrr from "./autobrr/widget"; +import bazarr from "./bazarr/widget"; +import changedetectionio from "./changedetectionio/widget"; +import cloudflared from "./cloudflared/widget"; +import coinmarketcap from "./coinmarketcap/widget"; +import deluge from "./deluge/widget"; +import diskstation from "./diskstation/widget"; +import downloadstation from "./downloadstation/widget"; +import emby from "./emby/widget"; +import fileflows from "./fileflows/widget"; +import flood from "./flood/widget"; +import gluetun from "./gluetun/widget"; +import gotify from "./gotify/widget"; +import grafana from "./grafana/widget"; +import hdhomerun from "./hdhomerun/widget"; +import homebridge from "./homebridge/widget"; +import jackett from "./jackett/widget"; +import jellyseerr from "./jellyseerr/widget"; +import komga from "./komga/widget"; +import kopia from "./kopia/widget"; +import lidarr from "./lidarr/widget"; +import mastodon from "./mastodon/widget"; +import medusa from "./medusa/widget"; +import miniflux from "./miniflux/widget"; +import mikrotik from "./mikrotik/widget"; +import moonraker from "./moonraker/widget"; +import mylar from "./mylar/widget"; +import navidrome from "./navidrome/widget"; +import nextdns from "./nextdns/widget"; +import npm from "./npm/widget"; +import nzbget from "./nzbget/widget"; +import octoprint from "./octoprint/widget"; +import omada from "./omada/widget"; +import ombi from "./ombi/widget"; +import opnsense from "./opnsense/widget"; +import overseerr from "./overseerr/widget"; +import paperlessngx from "./paperlessngx/widget"; +import photoprism from "./photoprism/widget"; +import proxmoxbackupserver from "./proxmoxbackupserver/widget"; +import pihole from "./pihole/widget"; +import plex from "./plex/widget"; +import portainer from "./portainer/widget"; +import prowlarr from "./prowlarr/widget"; +import proxmox from "./proxmox/widget"; +import pyload from "./pyload/widget"; +import qbittorrent from "./qbittorrent/widget"; +import radarr from "./radarr/widget"; +import readarr from "./readarr/widget"; +import rutorrent from "./rutorrent/widget"; +import sabnzbd from "./sabnzbd/widget"; +import scrutiny from "./scrutiny/widget"; +import sonarr from "./sonarr/widget"; +import speedtest from "./speedtest/widget"; +import strelaysrv from "./strelaysrv/widget"; +import tautulli from "./tautulli/widget"; +import tdarr from "./tdarr/widget"; +import traefik from "./traefik/widget"; +import transmission from "./transmission/widget"; +import tubearchivist from "./tubearchivist/widget"; +import truenas from "./truenas/widget"; +import unifi from "./unifi/widget"; +import watchtower from "./watchtower/widget"; +import xteve from "./xteve/widget"; +import immich from "./immich/widget"; +import uptimekuma from "./uptimekuma/widget"; + +const widgets = { + adguard, + authentik, + autobrr, + bazarr, + changedetectionio, + cloudflared, + coinmarketcap, + deluge, + diskstation, + downloadstation, + emby, + fileflows, + flood, + gluetun, + gotify, + grafana, + hdhomerun, + homebridge, + jackett, + jellyfin: emby, + jellyseerr, + komga, + kopia, + lidarr, + mastodon, + medusa, + miniflux, + mikrotik, + moonraker, + mylar, + navidrome, + nextdns, + npm, + nzbget, + octoprint, + omada, + ombi, + opnsense, + overseerr, + paperlessngx, + photoprism, + proxmoxbackupserver, + pihole, + plex, + portainer, + prowlarr, + proxmox, + pyload, + qbittorrent, + radarr, + readarr, + rutorrent, + sabnzbd, + scrutiny, + sonarr, + speedtest, + strelaysrv, + tautulli, + tdarr, + traefik, + transmission, + tubearchivist, + truenas, + unifi, + unifi_console: unifi, + watchtower, + xteve, + immich, + uptimekuma, +}; + +export default widgets; \ No newline at end of file