diff --git a/lib/grafana.ts b/lib/grafana.ts
index 5e6310a..2c3fd0a 100644
--- a/lib/grafana.ts
+++ b/lib/grafana.ts
@@ -57,7 +57,7 @@ export const getRootFsUsage = async () => {
})
return {
- usage: response.results.A.frames[0].data.values[1][15].toFixed(2)
+ rootFsUsage: response.results.A.frames[0].data.values[1][15].toFixed(2)
}
}
@@ -88,12 +88,72 @@ export const getUptime = async () => {
const seconds = response.results.A.frames[0].data.values[1][15]
const minutes = (seconds / 60).toFixed(2)
const hours = (seconds / 3_600).toFixed(2)
+ const days = (seconds / 86400).toFixed(2)
const weeks = (seconds / 604_800).toFixed(2)
return {
seconds: (seconds).toFixed(2),
minutes,
hours,
+ days,
weeks
}
+}
+
+export const getRamUsage = async () => {
+ const response = await fetcher(GRAFANA_URL, {
+ method: 'POST',
+ headers: {
+ Authorization: `Bearer ${GRAFANA_TOKEN}`,
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ "queries": [
+ {
+ "datasource": {
+ "uid": "4f-R6jgRz",
+ "type": "prometheus"
+ },
+ "expr": "100 - ((node_memory_MemAvailable_bytes * 100) / node_memory_MemTotal_bytes)",
+ "maxDataPoints": 100
+ }
+ ],
+ "from": "now-5m",
+ "to": "now"
+ })
+ })
+
+ return {
+ ramUsage: response.results.A.frames[0].data.values[1][15].toFixed(2)
+ }
+}
+
+export const getSysLoad = async () => {
+ const response = await fetcher(GRAFANA_URL, {
+ method: 'POST',
+ headers: {
+ Authorization: `Bearer ${GRAFANA_TOKEN}`,
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ "queries": [
+ {
+ "datasource": {
+ "uid": "4f-R6jgRz",
+ "type": "prometheus"
+ },
+ "expr": "avg(node_load5) / count(count(node_cpu_seconds_total) by (cpu)) * 100",
+ "maxDataPoints": 100
+ }
+ ],
+ "from": "now-5m",
+ "to": "now"
+ })
+ })
+
+ return {
+ sysLoad: response.results.A.frames[0].data.values[1][15].toFixed(2)
+ }
}
\ No newline at end of file
diff --git a/pages/api/grafana/ram.ts b/pages/api/grafana/ram.ts
new file mode 100644
index 0000000..2dd3a62
--- /dev/null
+++ b/pages/api/grafana/ram.ts
@@ -0,0 +1,8 @@
+import {NextApiRequest, NextApiResponse} from 'next'
+import {getRamUsage} from '@/lib/grafana'
+
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+ const response = await getRamUsage()
+
+ return res.status(200).json(response)
+}
\ No newline at end of file
diff --git a/pages/api/grafana/sysload.ts b/pages/api/grafana/sysload.ts
new file mode 100644
index 0000000..ef53172
--- /dev/null
+++ b/pages/api/grafana/sysload.ts
@@ -0,0 +1,8 @@
+import {NextApiRequest, NextApiResponse} from 'next'
+import {getSysLoad} from '@/lib/grafana'
+
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+ const response = await getSysLoad()
+
+ return res.status(200).json(response)
+}
\ No newline at end of file
diff --git a/pages/dashboard.tsx b/pages/dashboard.tsx
index 3912c06..c587b61 100644
--- a/pages/dashboard.tsx
+++ b/pages/dashboard.tsx
@@ -16,6 +16,8 @@ const config = {
export default function Dashboard({metrics}: { metrics: MetricGroup }) {
const {data: tempData} = useSWR('api/grafana/temp', fetcher, config)
+ const {data: sysLoadData} = useSWR('api/grafana/sysload', fetcher, config)
+ const {data: ramData} = useSWR('api/grafana/ram', fetcher, config)
const {data: rootFsData} = useSWR('api/grafana/rootfs', fetcher, config)
const {data: uptimeData} = useSWR('api/grafana/uptime', fetcher, config)
@@ -61,7 +63,23 @@ export default function Dashboard({metrics}: { metrics: MetricGroup }) {
Temperature
- {tempData ? `${tempData.temp} ℃` : "—"}
+ {tempData ? `${tempData.temp}℃` : "—"}
+
+
+
+
+ Sys load (5m avg)
+
+
+ {sysLoadData ? `${sysLoadData.sysLoad}%` : "—"}
+
+
+
+
+ RAM usage
+
+
+ {ramData ? `${ramData.ramUsage}%` : "—"}
@@ -69,15 +87,15 @@ export default function Dashboard({metrics}: { metrics: MetricGroup }) {
Root FS usage
- {rootFsData ? `${rootFsData.usage} %` : "—"}
+ {rootFsData ? `${rootFsData.rootFsUsage}%` : "—"}
- Uptime minutes
+ Uptime days
- {uptimeData ? `${numberFormat(uptimeData.minutes)}` : "—"}
+ {uptimeData ? `${numberFormat(uptimeData.days)}` : "—"}