diff --git a/docs/widgets/services/netdata.md b/docs/widgets/services/netdata.md
new file mode 100644
index 00000000..70acf490
--- /dev/null
+++ b/docs/widgets/services/netdata.md
@@ -0,0 +1,12 @@
+---
+title: Netdata
+description: Netdata Widget Configuration
+---
+
+Allowed fields: `["warnings", "criticals"]`.
+
+```yaml
+widget:
+ type: Netdata
+ url: http://netdata.host.or.ip
+```
diff --git a/mkdocs.yml b/mkdocs.yml
index 77f55dde..0968da60 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -84,6 +84,7 @@ nav:
- widgets/services/moonraker.md
- widgets/services/mylar.md
- widgets/services/navidrome.md
+ - widgets/services/netdata.md
- widgets/services/nextcloud.md
- widgets/services/nextdns.md
- widgets/services/nginx-proxy-manager.md
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 1c43e506..eaed3344 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -795,5 +795,9 @@
"digitalRelease": "Digital release",
"noEventsToday": "No events for today!",
"noEventsFound": "No events found"
+ },
+ "netdata": {
+ "warnings": "Warnings",
+ "criticals": "Criticals"
}
}
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 4209b69a..30e95740 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -58,6 +58,7 @@ const components = {
moonraker: dynamic(() => import("./moonraker/component")),
mylar: dynamic(() => import("./mylar/component")),
navidrome: dynamic(() => import("./navidrome/component")),
+ netdata: dynamic(() => import("./netdata/component")),
nextcloud: dynamic(() => import("./nextcloud/component")),
nextdns: dynamic(() => import("./nextdns/component")),
npm: dynamic(() => import("./npm/component")),
diff --git a/src/widgets/netdata/component.jsx b/src/widgets/netdata/component.jsx
new file mode 100644
index 00000000..9d7f2469
--- /dev/null
+++ b/src/widgets/netdata/component.jsx
@@ -0,0 +1,33 @@
+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: netdataData, error: netdataError } = useWidgetAPI(widget, "info");
+
+ if (netdataError) {
+ return ;
+ }
+
+ if (!netdataData) {
+ return (
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ );
+}
diff --git a/src/widgets/netdata/widget.js b/src/widgets/netdata/widget.js
new file mode 100644
index 00000000..9c7b2457
--- /dev/null
+++ b/src/widgets/netdata/widget.js
@@ -0,0 +1,14 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+ api: "{url}/api/v1/{endpoint}",
+ proxyHandler: genericProxyHandler,
+
+ mappings: {
+ info: {
+ endpoint: "info",
+ },
+ },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 904bd701..b925bf74 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -50,6 +50,7 @@ import mjpeg from "./mjpeg/widget";
import moonraker from "./moonraker/widget";
import mylar from "./mylar/widget";
import navidrome from "./navidrome/widget";
+import netdata from "./netdata/widget";
import nextcloud from "./nextcloud/widget";
import nextdns from "./nextdns/widget";
import npm from "./npm/widget";
@@ -155,6 +156,7 @@ const widgets = {
moonraker,
mylar,
navidrome,
+ netdata,
nextcloud,
nextdns,
npm,