From 21017e4716b1b79fcfa39ac0e60703731cb473ba Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 22 Oct 2022 23:00:51 -0700 Subject: [PATCH] Add detailed Error component for service widgets --- src/components/services/widget/container.jsx | 8 +++----- src/widgets/adguard/component.jsx | 6 +++--- src/widgets/authentik/component.jsx | 5 +++-- src/widgets/bazarr/component.jsx | 5 +++-- src/widgets/changedetectionio/component.jsx | 8 ++++---- src/widgets/coinmarketcap/component.jsx | 5 +++-- src/widgets/docker/component.jsx | 5 +++-- src/widgets/emby/component.jsx | 5 +++-- src/widgets/gotify/component.jsx | 9 +++------ src/widgets/jackett/component.jsx | 5 +++-- src/widgets/jellyseerr/component.jsx | 9 +++------ src/widgets/lidarr/component.jsx | 5 +++-- src/widgets/mastodon/component.jsx | 5 +++-- src/widgets/npm/component.jsx | 8 ++------ src/widgets/nzbget/component.jsx | 5 +++-- src/widgets/ombi/component.jsx | 9 +++------ src/widgets/overseerr/component.jsx | 9 +++------ src/widgets/pihole/component.jsx | 5 +++-- src/widgets/plex/component.jsx | 5 +++-- src/widgets/plex/proxy.js | 7 ++++++- src/widgets/portainer/component.jsx | 5 +++-- src/widgets/prowlarr/component.jsx | 9 +++------ src/widgets/proxmox/component.jsx | 5 +++-- src/widgets/qbittorrent/component.jsx | 5 +++-- src/widgets/radarr/component.jsx | 9 +++------ src/widgets/readarr/component.jsx | 5 +++-- src/widgets/rutorrent/component.jsx | 5 +++-- src/widgets/sabnzbd/component.jsx | 5 +++-- src/widgets/sonarr/component.jsx | 9 +++------ src/widgets/speedtest/component.jsx | 5 +++-- src/widgets/strelaysrv/component.jsx | 5 +++-- src/widgets/tautulli/component.jsx | 7 ++++--- src/widgets/traefik/component.jsx | 9 +++------ src/widgets/transmission/component.jsx | 5 +++-- src/widgets/transmission/proxy.js | 1 + src/widgets/unifi/component.jsx | 3 ++- src/widgets/unifi/proxy.js | 6 ++++-- 37 files changed, 113 insertions(+), 113 deletions(-) diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index 60536e86b..945b8f6f1 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -1,10 +1,8 @@ +import Error from "./error"; + export default function Container({ error = false, children, service }) { if (error) { - return ( -
-
{error}
-
- ); + return } let visibleChildren = children; diff --git a/src/widgets/adguard/component.jsx b/src/widgets/adguard/component.jsx index 0c78113d0..3147ffcf8 100644 --- a/src/widgets/adguard/component.jsx +++ b/src/widgets/adguard/component.jsx @@ -11,10 +11,10 @@ export default function Component({ service }) { const { data: adguardData, error: adguardError } = useWidgetAPI(widget, "stats"); - if (adguardError) { - return ; + if (adguardError || adguardData?.error) { + const finalError = adguardError ?? adguardData.error; + return ; } - if (!adguardData) { return ( diff --git a/src/widgets/authentik/component.jsx b/src/widgets/authentik/component.jsx index 31f864d17..d4aa8dba7 100644 --- a/src/widgets/authentik/component.jsx +++ b/src/widgets/authentik/component.jsx @@ -13,8 +13,9 @@ export default function Component({ service }) { const { data: loginsData, error: loginsError } = useWidgetAPI(widget, "login"); const { data: failedLoginsData, error: failedLoginsError } = useWidgetAPI(widget, "login_failed"); - if (usersError || loginsError || failedLoginsError) { - return ; + if (usersError || usersData?.error || loginsError || loginsData?.error || failedLoginsError || failedLoginsData?.error) { + const finalError = usersError ?? usersData?.error ?? loginsError ?? loginsData?.error ?? failedLoginsError ?? failedLoginsData?.error; + return ; } if (!usersData || !loginsData || !failedLoginsData) { diff --git a/src/widgets/bazarr/component.jsx b/src/widgets/bazarr/component.jsx index 24fef1ce2..070f82326 100644 --- a/src/widgets/bazarr/component.jsx +++ b/src/widgets/bazarr/component.jsx @@ -12,8 +12,9 @@ export default function Component({ service }) { const { data: episodesData, error: episodesError } = useWidgetAPI(widget, "episodes"); const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movies"); - if (episodesError || moviesError) { - return ; + if (moviesError || moviesData?.error || episodesError || episodesData?.error) { + const finalError = moviesError ?? moviesData?.error ?? episodesError ?? episodesData?.error; + return ; } if (!episodesData || !moviesData) { diff --git a/src/widgets/changedetectionio/component.jsx b/src/widgets/changedetectionio/component.jsx index 70936489f..ce29691f2 100644 --- a/src/widgets/changedetectionio/component.jsx +++ b/src/widgets/changedetectionio/component.jsx @@ -9,12 +9,12 @@ export default function Component({ service }) { const { widget } = service; - const { data } = useWidgetAPI(widget, "info"); + const { data, error } = useWidgetAPI(widget, "info"); - if (!data) { - return ; + if (error || data?.error) { + const finalError = error ?? data.error; + return ; } - const totalObserved = Object.keys(data).length; let diffsDetected = 0; diff --git a/src/widgets/coinmarketcap/component.jsx b/src/widgets/coinmarketcap/component.jsx index 0b970b315..fa5844bdf 100644 --- a/src/widgets/coinmarketcap/component.jsx +++ b/src/widgets/coinmarketcap/component.jsx @@ -36,8 +36,9 @@ export default function Component({ service }) { ); } - if (statsError) { - return ; + if (statsError || statsData?.error) { + const finalError = statsError ?? statsData.error; + return ; } if (!statsData || !dateRange) { diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx index 542fbde75..bdc49be38 100644 --- a/src/widgets/docker/component.jsx +++ b/src/widgets/docker/component.jsx @@ -17,8 +17,9 @@ export default function Component({ service }) { const { data: statsData, error: statsError } = useSWR(`/api/docker/stats/${widget.container}/${widget.server || ""}`); - if (statsError || statusError) { - return ; + if (statsError || statsData?.error || statusError || statusData?.error) { + const finalError = statsError ?? statsData?.error ?? statusError ?? statusData?.error; + return ; } if (statusData && statusData.status !== "running") { diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx index 59d66c056..26371c814 100644 --- a/src/widgets/emby/component.jsx +++ b/src/widgets/emby/component.jsx @@ -3,8 +3,8 @@ import { useTranslation } from "next-i18next"; import { BsVolumeMuteFill, BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; import { MdOutlineSmartDisplay } from "react-icons/md"; -import Container from "components/services/widget/container"; import { formatProxyUrl, formatProxyUrlWithSegments } from "utils/proxy/api-helpers"; +import Container from "components/services/widget/container"; function ticksToTime(ticks) { const milliseconds = ticks / 10000; @@ -172,7 +172,8 @@ export default function Component({ service }) { } if (sessionsError || sessionsData?.error) { - return ; + const finalError = sessionsError ?? sessionsData.error; + return ; } if (!sessionsData) { diff --git a/src/widgets/gotify/component.jsx b/src/widgets/gotify/component.jsx index 40f5793bf..cedc3f84a 100644 --- a/src/widgets/gotify/component.jsx +++ b/src/widgets/gotify/component.jsx @@ -1,20 +1,17 @@ -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: appsData, error: appsError } = useWidgetAPI(widget, "application"); const { data: messagesData, error: messagesError } = useWidgetAPI(widget, "message"); const { data: clientsData, error: clientsError } = useWidgetAPI(widget, "client"); - if (appsError || messagesError || clientsError) { - return ; + if (appsError || appsData?.error || messagesError || messagesData?.error || clientsError || clientsData?.error) { + const finalError = appsError ?? appsData?.error ?? messagesError ?? messagesData?.error ?? clientsError ?? clientsData?.error; + return ; } diff --git a/src/widgets/jackett/component.jsx b/src/widgets/jackett/component.jsx index 9629e2669..e9fcd95a8 100644 --- a/src/widgets/jackett/component.jsx +++ b/src/widgets/jackett/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers"); - if (indexersError) { - return ; + if (indexersError || indexersData?.error) { + const finalError = indexersError ?? indexersData.error; + return ; } if (!indexersData) { diff --git a/src/widgets/jellyseerr/component.jsx b/src/widgets/jellyseerr/component.jsx index 217e406eb..aece8560f 100644 --- a/src/widgets/jellyseerr/component.jsx +++ b/src/widgets/jellyseerr/component.jsx @@ -1,18 +1,15 @@ -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: statsData, error: statsError } = useWidgetAPI(widget, "request/count"); - if (statsError) { - return ; + if (statsError || statsData?.error) { + const finalError = statsError ?? statsData.error; + return ; } if (!statsData) { diff --git a/src/widgets/lidarr/component.jsx b/src/widgets/lidarr/component.jsx index 343760e78..5951e094c 100644 --- a/src/widgets/lidarr/component.jsx +++ b/src/widgets/lidarr/component.jsx @@ -13,8 +13,9 @@ export default function Component({ service }) { const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing"); const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue/status"); - if (albumsError || wantedError || queueError) { - return ; + if (albumsError || albumsData?.error || wantedError || wantedData?.error || queueError || queueData?.error) { + const finalError = albumsError ?? albumsData?.error ?? wantedError ?? wantedData?.error ?? queueError ?? queueData?.error; + return ; } if (!albumsData || !wantedData || !queueData) { diff --git a/src/widgets/mastodon/component.jsx b/src/widgets/mastodon/component.jsx index ec12fca11..477d648ec 100644 --- a/src/widgets/mastodon/component.jsx +++ b/src/widgets/mastodon/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: statsData, error: statsError } = useWidgetAPI(widget, "instance"); - if (statsError) { - return ; + if (statsError || statsData?.error) { + const finalError = statsError ?? statsData.error; + return ; } if (!statsData) { diff --git a/src/widgets/npm/component.jsx b/src/widgets/npm/component.jsx index 92aef0359..b6d42ad98 100644 --- a/src/widgets/npm/component.jsx +++ b/src/widgets/npm/component.jsx @@ -1,18 +1,14 @@ -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: infoData, error: infoError } = useWidgetAPI(widget, "nginx/proxy-hosts"); - if (infoError || infoData?.error) { - return ; + if (infoError) { + return ; } if (!infoData) { diff --git a/src/widgets/nzbget/component.jsx b/src/widgets/nzbget/component.jsx index f9ace707a..92408982a 100644 --- a/src/widgets/nzbget/component.jsx +++ b/src/widgets/nzbget/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: statusData, error: statusError } = useWidgetAPI(widget, "status"); - if (statusError) { - return ; + if (statusError || statusData?.error) { + const finalError = statusError ?? statusData.error; + return ; } if (!statusData) { diff --git a/src/widgets/ombi/component.jsx b/src/widgets/ombi/component.jsx index 60128c379..a5a0a0b73 100644 --- a/src/widgets/ombi/component.jsx +++ b/src/widgets/ombi/component.jsx @@ -1,18 +1,15 @@ -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: statsData, error: statsError } = useWidgetAPI(widget, "Request/count"); - if (statsError) { - return ; + if (statsError || statsData?.error) { + const finalError = statsError ?? statsData.error; + return ; } if (!statsData) { diff --git a/src/widgets/overseerr/component.jsx b/src/widgets/overseerr/component.jsx index 47131f6ee..f0269b4f1 100644 --- a/src/widgets/overseerr/component.jsx +++ b/src/widgets/overseerr/component.jsx @@ -1,18 +1,15 @@ -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: statsData, error: statsError } = useWidgetAPI(widget, "request/count"); - if (statsError) { - return ; + if (statsError || statsData?.error) { + const finalError = statsError ?? statsData.error; + return ; } if (!statsData) { diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx index 17a186271..cb77cc2b6 100644 --- a/src/widgets/pihole/component.jsx +++ b/src/widgets/pihole/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: piholeData, error: piholeError } = useWidgetAPI(widget, "api.php"); - if (piholeError) { - return ; + if (piholeError || piholeData?.error) { + const finalError = piholeError ?? piholeData.error; + return ; } if (!piholeData) { diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx index 9de60fd1e..cf6d705cf 100644 --- a/src/widgets/plex/component.jsx +++ b/src/widgets/plex/component.jsx @@ -14,8 +14,9 @@ export default function Component({ service }) { refreshInterval: 5000, }); - if (plexAPIError) { - return ; + if (plexAPIError || plexData?.error) { + const finalError = plexAPIError ?? plexData.error; + return ; } if (!plexData) { diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js index 46ebb27c1..c016023dd 100644 --- a/src/widgets/plex/proxy.js +++ b/src/widgets/plex/proxy.js @@ -44,7 +44,7 @@ async function fetchFromPlexAPI(endpoint, widget) { if (status !== 200) { logger.error("HTTP %d communicating with Plex. Data: %s", status, data.toString()); - return [status, data.toString()]; + return [status, data]; } try { @@ -65,6 +65,11 @@ export default async function plexProxyHandler(req, res) { logger.debug("Getting streams from Plex API"); let streams; let [status, apiData] = await fetchFromPlexAPI("/status/sessions", widget); + + if (status !== 200) { + return res.status(status).json({error: {message: "HTTP error communicating with Plex API", data: apiData}}); + } + if (apiData && apiData.MediaContainer) { streams = apiData.MediaContainer._attributes.size; } diff --git a/src/widgets/portainer/component.jsx b/src/widgets/portainer/component.jsx index bd44d77e0..87c173dd8 100644 --- a/src/widgets/portainer/component.jsx +++ b/src/widgets/portainer/component.jsx @@ -13,8 +13,9 @@ export default function Component({ service }) { all: 1, }); - if (containersError) { - return ; + if (containersError || containersData?.error) { + const finalError = containersError ?? containersData.error; + return ; } if (!containersData) { diff --git a/src/widgets/prowlarr/component.jsx b/src/widgets/prowlarr/component.jsx index bb0825193..6649fdefd 100644 --- a/src/widgets/prowlarr/component.jsx +++ b/src/widgets/prowlarr/component.jsx @@ -1,19 +1,16 @@ -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: indexersData, error: indexersError } = useWidgetAPI(widget, "indexer"); const { data: grabsData, error: grabsError } = useWidgetAPI(widget, "indexerstats"); - if (indexersError || grabsError) { - return ; + if (indexersError || indexersData?.error || grabsError || grabsData?.error) { + const finalError = indexersError ?? indexersData?.error ?? grabsError ?? grabsData?.error; + return ; } if (!indexersData || !grabsData) { diff --git a/src/widgets/proxmox/component.jsx b/src/widgets/proxmox/component.jsx index 9cdb26f7f..79d2d8814 100644 --- a/src/widgets/proxmox/component.jsx +++ b/src/widgets/proxmox/component.jsx @@ -15,8 +15,9 @@ export default function Component({ service }) { const { data: clusterData, error: clusterError } = useWidgetAPI(widget, "cluster/resources"); - if (clusterError) { - return ; + if (clusterError || clusterData?.error) { + const finalError = clusterError ?? clusterData.error; + return ; } if (!clusterData || !clusterData.data) { diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx index 4d3a3585d..541032a1f 100644 --- a/src/widgets/qbittorrent/component.jsx +++ b/src/widgets/qbittorrent/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents/info"); - if (torrentError) { - return ; + if (torrentError || torrentData?.error) { + const finalError = torrentError ?? torrentData.error; + return ; } if (!torrentData) { diff --git a/src/widgets/radarr/component.jsx b/src/widgets/radarr/component.jsx index fe5a69684..679ce4fd0 100644 --- a/src/widgets/radarr/component.jsx +++ b/src/widgets/radarr/component.jsx @@ -1,19 +1,16 @@ -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: moviesData, error: moviesError } = useWidgetAPI(widget, "movie"); const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue/status"); - if (moviesError || queuedError) { - return ; + if (moviesError || moviesData?.error || queuedError || queuedData?.error) { + const finalError = moviesError ?? moviesData?.error ?? queuedError ?? queuedData?.error; + return ; } if (!moviesData || !queuedData) { diff --git a/src/widgets/readarr/component.jsx b/src/widgets/readarr/component.jsx index 1e55d7cd9..ddf2dfd7c 100644 --- a/src/widgets/readarr/component.jsx +++ b/src/widgets/readarr/component.jsx @@ -13,8 +13,9 @@ export default function Component({ service }) { const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing"); const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue/status"); - if (booksError || wantedError || queueError) { - return ; + if (booksError || booksData?.error || wantedError || wantedData?.error || queueError || queueData?.error) { + const finalError = booksError ?? booksData?.error ?? wantedError ?? wantedData?.error ?? queueError ?? queueData?.error; + return ; } if (!booksData || !wantedData || !queueData) { diff --git a/src/widgets/rutorrent/component.jsx b/src/widgets/rutorrent/component.jsx index 279bdf0e5..4f7340f58 100644 --- a/src/widgets/rutorrent/component.jsx +++ b/src/widgets/rutorrent/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: statusData, error: statusError } = useWidgetAPI(widget); - if (statusError) { - return ; + if (statusError || statusData?.error) { + const finalError = statusError ?? statusData.error; + return ; } if (!statusData) { diff --git a/src/widgets/sabnzbd/component.jsx b/src/widgets/sabnzbd/component.jsx index c4e64c9ad..db49160b2 100644 --- a/src/widgets/sabnzbd/component.jsx +++ b/src/widgets/sabnzbd/component.jsx @@ -21,8 +21,9 @@ export default function Component({ service }) { const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue"); - if (queueError) { - return ; + if (queueError || queueData?.error) { + const finalError = queueError ?? queueData.error; + return ; } if (!queueData) { diff --git a/src/widgets/sonarr/component.jsx b/src/widgets/sonarr/component.jsx index 8618b5126..28751eb66 100644 --- a/src/widgets/sonarr/component.jsx +++ b/src/widgets/sonarr/component.jsx @@ -1,20 +1,17 @@ -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: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing"); const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue"); const { data: seriesData, error: seriesError } = useWidgetAPI(widget, "series"); - if (wantedError || queuedError || seriesError) { - return ; + if (wantedError || wantedData?.error || queuedError || queuedData?.error || seriesError || seriesData?.error) { + const finalError = wantedError ?? wantedData?.error ?? queuedError ?? queuedData?.error ?? seriesError ?? seriesData?.error; + return ; } if (!wantedData || !queuedData || !seriesData) { diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index e93c69637..b8bc7fdd6 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: speedtestData, error: speedtestError } = useWidgetAPI(widget, "speedtest/latest"); - if (speedtestError || (speedtestData && !speedtestData.data)) { - return ; + if (speedtestError || speedtestData?.error) { + const finalError = speedtestError ?? speedtestData.error; + return ; } if (!speedtestData) { diff --git a/src/widgets/strelaysrv/component.jsx b/src/widgets/strelaysrv/component.jsx index c7b887db5..3366ffc29 100644 --- a/src/widgets/strelaysrv/component.jsx +++ b/src/widgets/strelaysrv/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: statsData, error: statsError } = useWidgetAPI(widget, "status"); - if (statsError) { - return ; + if (statsError || statsData?.error) { + const finalError = statsError ?? statsData.error; + return ; } if (!statsData) { diff --git a/src/widgets/tautulli/component.jsx b/src/widgets/tautulli/component.jsx index 98207c43c..d77f2b1e4 100644 --- a/src/widgets/tautulli/component.jsx +++ b/src/widgets/tautulli/component.jsx @@ -4,8 +4,8 @@ import { useTranslation } from "next-i18next"; import { BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md"; -import Container from "components/services/widget/container"; import { formatProxyUrl } from "utils/proxy/api-helpers"; +import Container from "components/services/widget/container"; function millisecondsToTime(milliseconds) { const seconds = Math.floor((milliseconds / 1000) % 60); @@ -123,8 +123,9 @@ export default function Component({ service }) { refreshInterval: 5000, }); - if (activityError) { - return ; + if (activityError || activityData?.error) { + const finalError = activityError ?? activityData.error; + return ; } if (!activityData) { diff --git a/src/widgets/traefik/component.jsx b/src/widgets/traefik/component.jsx index d24edb9e5..bee59c290 100644 --- a/src/widgets/traefik/component.jsx +++ b/src/widgets/traefik/component.jsx @@ -1,18 +1,15 @@ -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: traefikData, error: traefikError } = useWidgetAPI(widget, "overview"); - if (traefikError) { - return ; + if (traefikError || traefikData?.error) { + const finalError = traefikError ?? traefikData.error; + return ; } if (!traefikData) { diff --git a/src/widgets/transmission/component.jsx b/src/widgets/transmission/component.jsx index 3c2f38ef1..6cc8efe6e 100644 --- a/src/widgets/transmission/component.jsx +++ b/src/widgets/transmission/component.jsx @@ -11,8 +11,9 @@ export default function Component({ service }) { const { data: torrentData, error: torrentError } = useWidgetAPI(widget); - if (torrentError) { - return ; + if (torrentError || torrentData?.error) { + const finalError = torrentError ?? torrentData.error; + return ; } if (!torrentData) { diff --git a/src/widgets/transmission/proxy.js b/src/widgets/transmission/proxy.js index 34bbd480d..cdc1e9c92 100644 --- a/src/widgets/transmission/proxy.js +++ b/src/widgets/transmission/proxy.js @@ -68,6 +68,7 @@ export default async function transmissionProxyHandler(req, res) { if (status !== 200) { logger.error("Error getting data from Transmission: %d. Data: %s", status, data); + return res.status(500).send({error: {message:"Error getting data from Transmission", url, data}}); } if (contentType) res.setHeader("Content-Type", contentType); diff --git a/src/widgets/unifi/component.jsx b/src/widgets/unifi/component.jsx index 9a3232599..ea161d674 100644 --- a/src/widgets/unifi/component.jsx +++ b/src/widgets/unifi/component.jsx @@ -12,7 +12,8 @@ export default function Component({ service }) { const { data: statsData, error: statsError } = useWidgetAPI(widget, "stat/sites"); if (statsError || statsData?.error) { - return ; + const finalError = statsError ?? statsData.error; + return ; } const defaultSite = statsData?.data?.find(s => s.name === "default"); diff --git a/src/widgets/unifi/proxy.js b/src/widgets/unifi/proxy.js index 95ac331e0..abb5986f4 100644 --- a/src/widgets/unifi/proxy.js +++ b/src/widgets/unifi/proxy.js @@ -74,7 +74,7 @@ export default async function unifiProxyHandler(req, res) { // don't make two requests each time data from Unifi is required [status, contentType, data, responseHeaders] = await httpProxy(widget.url); prefix = ""; - if (responseHeaders["x-csrf-token"]) { + if (responseHeaders?.["x-csrf-token"]) { prefix = udmpPrefix; } cache.put(prefixCacheKey, prefix); @@ -88,13 +88,14 @@ export default async function unifiProxyHandler(req, res) { setCookieHeader(url, params); [status, contentType, data, responseHeaders] = await httpProxy(url, params); + if (status === 401) { logger.debug("Unifi isn't logged in or rejected the reqeust, attempting login."); [status, contentType, data, responseHeaders] = await login(widget); if (status !== 200) { logger.error("HTTP %d logging in to Unifi. Data: %s", status, data); - return res.status(status).end(data); + return res.status(status).json({error: {message: `HTTP Error ${status}`, url, data}}); } const json = JSON.parse(data.toString()); @@ -112,6 +113,7 @@ export default async function unifiProxyHandler(req, res) { if (status !== 200) { logger.error("HTTP %d getting data from Unifi endpoint %s. Data: %s", status, url.href, data); + return res.status(status).json({error: {message: `HTTP Error ${status}`, url, data}}); } if (contentType) res.setHeader("Content-Type", contentType);