Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OPNSense widget #730

Merged
merged 6 commits into from
Dec 26, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions public/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -406,5 +406,11 @@
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Memory Used",
Oupsman marked this conversation as resolved.
Show resolved Hide resolved
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
}
}
1 change: 1 addition & 0 deletions src/widgets/components.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const components = {
nzbget: dynamic(() => import("./nzbget/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")),
pihole: dynamic(() => import("./pihole/component")),
Expand Down
50 changes: 50 additions & 0 deletions src/widgets/opnsense/component.jsx
Original file line number Diff line number Diff line change
@@ -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";

export default function Component({ service }) {
const { t } = useTranslation();

const { widget } = service;

const { data: activityData, error: activityError } = useWidgetAPI(widget, "activity");
const { data: interfaceData, error: interfaceError } = useWidgetAPI(widget, "interface");

if (activityError || interfaceError) {
const finalError = activityError ?? interfaceError;
return <Container error={ finalError } />;
}

if (!activityData || !interfaceData) {
return (
<Container service={service}>
<Block label="opnsense.cpu" />
<Block label="opnsense.memory" />
<Block label="opnsense.wanUpload" />
<Block label="opnsense.wanDownload" />
</Container>
);
}


const cpuidle = activityData.headers[2].substring(60,64);
const cpu = 100 - parseFloat(cpuidle);
Oupsman marked this conversation as resolved.
Show resolved Hide resolved
const memoryInfos = activityData.headers[3].split(" ");
const totalMemory = parseFloat(memoryInfos[1]) + parseFloat(memoryInfos[3]) + parseFloat(memoryInfos[5]) + parseFloat(memoryInfos[7]) + parseFloat(memoryInfos[9])/1024 + parseFloat(memoryInfos[11]);
const memory = ( 1 - parseFloat(memoryInfos[11]) / totalMemory) * 100;
Oupsman marked this conversation as resolved.
Show resolved Hide resolved

const wanUpload = interfaceData.interfaces.wan['bytes transmitted'];
const wanDownload = interfaceData.interfaces.wan['bytes received'];

return (
<Container service={service}>
<Block label="opnsense.cpu" value={t("common.percent", { value: cpu.toFixed(2) })} />
<Block label="opnsense.memory" value={t("common.percent", { value: memory })} />
shamoon marked this conversation as resolved.
Show resolved Hide resolved
<Block label="opnsense.wanUpload" value={t("common.bytes", { value: wanUpload })} />
<Block label="opnsense.wanDownload" value={t("common.bytes", { value: wanDownload })} />

</Container>
);
}
24 changes: 24 additions & 0 deletions src/widgets/opnsense/widget.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

import genericProxyHandler from "utils/proxy/handlers/generic";

const widget = {
api: "{url}/api/{endpoint}",
proxyHandler: genericProxyHandler,

mappings: {
activity: {
endpoint: "diagnostics/activity/getActivity",
shamoon marked this conversation as resolved.
Show resolved Hide resolved
validate: [
"headers"
]
},
interface: {
endpoint: "diagnostics/traffic/interface",
validate: [
"interfaces"
]
}
},
};

export default widget;
2 changes: 2 additions & 0 deletions src/widgets/widgets.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import npm from "./npm/widget";
import nzbget from "./nzbget/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 pihole from "./pihole/widget";
Expand Down Expand Up @@ -80,6 +81,7 @@ const widgets = {
nzbget,
omada,
ombi,
opnsense,
overseerr,
paperlessngx,
pihole,
Expand Down