diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx
new file mode 100644
index 00000000..017a0616
--- /dev/null
+++ b/src/widgets/glances/component.jsx
@@ -0,0 +1,50 @@
+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";
+
+function convertToFahrenheit(t) {
+ return t * 9/5 + 32;
+}
+
+export default function GlancesStats({ service }) {
+ const { t } = useTranslation();
+
+ const { widget } = service;
+
+ const { data: memData, error: memError } = useWidgetAPI(widget, "mem");
+ const { data: tempData, error: tempError } = useWidgetAPI(widget, "temp");
+
+ if (memError || tempError) {
+ return ;
+ }
+
+ if (!memData || !tempData) {
+ return (
+
+
+
+
+ );
+ }
+
+ const unit = "celsius";
+ const memPercent = Math.round((memData.used / memData.total) * 100);
+ const tempValue = tempData[0].value;
+
+ return (
+
+
+
+
+ );
+}
diff --git a/src/widgets/glances/widget.js b/src/widgets/glances/widget.js
new file mode 100644
index 00000000..d9b9313f
--- /dev/null
+++ b/src/widgets/glances/widget.js
@@ -0,0 +1,24 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+ api: "{url}/api/3/{endpoint}",
+ proxyHandler: genericProxyHandler,
+
+ mappings: {
+ mem: {
+ endpoint: "mem",
+ },
+ temp: {
+ endpoint: "sensors",
+ },
+ },
+};
+
+export default widget;
+
+
+
+
+
+
+
diff --git a/src/widgets/swizzin/component.jsx b/src/widgets/swizzin/component.jsx
new file mode 100644
index 00000000..1c64c706
--- /dev/null
+++ b/src/widgets/swizzin/component.jsx
@@ -0,0 +1,36 @@
+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 SwizzinStats({ service }) {
+ // eslint-disable-next-line no-unused-vars
+ const { t } = useTranslation();
+
+ const { widget } = service;
+
+ const { data: ramData, error: ramError } = useWidgetAPI(widget, "ram");
+ const { data: diskData, error: diskError } = useWidgetAPI(widget, "disk");
+
+ if (ramError || diskError) {
+ return ;
+ }
+
+ if (!ramData || !diskData) {
+ return (
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ );
+}
+
diff --git a/src/widgets/swizzin/widget.js b/src/widgets/swizzin/widget.js
new file mode 100644
index 00000000..9e24de57
--- /dev/null
+++ b/src/widgets/swizzin/widget.js
@@ -0,0 +1,24 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+ api: "{url}/stats/{endpoint}",
+ proxyHandler: genericProxyHandler,
+
+ mappings: {
+ ram: {
+ endpoint: "ram",
+ },
+ disk: {
+ endpoint: "disk",
+ },
+ },
+};
+
+export default widget;
+
+
+
+
+
+
+