import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/pages/Overview.tsx");import { template as _$template } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { createComponent as _$createComponent } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { memo as _$memo } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { insert as _$insert } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { $$component as _$$component } from "/@solid-refresh";
|
import { $$refresh as _$$refresh } from "/@solid-refresh";
|
import { $$registry as _$$registry } from "/@solid-refresh";
|
const _REGISTRY = _$$registry();
|
const _tmpl$ = /*#__PURE__*/_$template(`<div class="stat flex-1 place-items-center"><div class="stat-title text-primary-content"></div><div class="stat-value text-2xl text-primary-content lg:text-3xl">`),
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class="flex flex-col gap-2"><div class="stats stats-vertical w-full grid-cols-2 bg-primary shadow lg:stats-horizontal lg:flex"></div><div class="rounded-box flex flex-col gap-2 bg-base-300 py-4 lg:flex-row"><div class=flex-1></div><div class=flex-1>`);
|
import { makeTimer } from "/node_modules/.vite/deps/@solid-primitives_timer.js?v=50652594";
|
import byteSize from "/node_modules/.vite/deps/byte-size.js?v=b5a96bd7";
|
import __vite__cjsImport9_lodash from "/node_modules/.vite/deps/lodash.js?v=dbaf0206"; const merge = __vite__cjsImport9_lodash["merge"];
|
import { SolidApexCharts } from "/node_modules/solid-apexcharts/dist/dev.jsx";
|
import { batch, children, createEffect, createMemo, createSignal } from "/node_modules/.vite/deps/solid-js.js?v=93754656";
|
import { CHART_MAX_XAXIS, DEFAULT_CHART_OPTIONS } from "/src/constants/index.ts";
|
import { useI18n } from "/src/i18n/index.tsx";
|
import { latestConnectionMsg, useWsRequest } from "/src/signals/index.ts";
|
const TrafficWidget = _$$component(_REGISTRY, "TrafficWidget", props => (() => {
|
const _el$ = _tmpl$(),
|
_el$2 = _el$.firstChild,
|
_el$3 = _el$2.nextSibling;
|
_$insert(_el$2, () => props.label);
|
_$insert(_el$3, children(() => props.children));
|
return _el$;
|
})(), {
|
location: "src\\pages\\Overview.tsx:19:63"
|
});
|
export default (() => {
|
const [t] = useI18n();
|
const [traffics, setTraffics] = createSignal([]);
|
const [memories, setMemories] = createSignal([]);
|
|
// https://github.com/apexcharts/apexcharts.js/blob/main/samples/source/line/realtime.xml
|
// TODO: needs a better way
|
makeTimer(() => {
|
batch(() => {
|
setTraffics(traffics => traffics.slice(-CHART_MAX_XAXIS));
|
setMemories(memo => memo.slice(-CHART_MAX_XAXIS));
|
});
|
},
|
// we shrink the chart data array size down every minute to prevent memory leaks
|
60 * 1000, setInterval);
|
const traffic = useWsRequest('traffic');
|
createEffect(() => {
|
const t = traffic();
|
if (t) setTraffics(traffics => [...traffics, t]);
|
});
|
const trafficChartOptions = createMemo(() => merge({
|
title: {
|
text: t('traffic')
|
}
|
}, DEFAULT_CHART_OPTIONS));
|
const trafficChartSeries = createMemo(() => [{
|
name: t('down'),
|
data: traffics().map(t => t.down)
|
}, {
|
name: t('up'),
|
data: traffics().map(t => t.up)
|
}]);
|
const memory = useWsRequest('memory');
|
createEffect(() => {
|
const m = memory()?.inuse;
|
if (m) setMemories(memories => [...memories, m]);
|
});
|
const memoryChartOptions = createMemo(() => merge({
|
title: {
|
text: t('memory')
|
}
|
}, DEFAULT_CHART_OPTIONS));
|
const memoryChartSeries = createMemo(() => [{
|
name: t('memory'),
|
data: memories()
|
}]);
|
return (() => {
|
const _el$4 = _tmpl$2(),
|
_el$5 = _el$4.firstChild,
|
_el$6 = _el$5.nextSibling,
|
_el$7 = _el$6.firstChild,
|
_el$8 = _el$7.nextSibling;
|
_$insert(_el$5, _$createComponent(TrafficWidget, {
|
get label() {
|
return t('upload');
|
},
|
get children() {
|
return [_$memo(() => byteSize(traffic()?.up || 0).toString()), "/s"];
|
}
|
}), null);
|
_$insert(_el$5, _$createComponent(TrafficWidget, {
|
get label() {
|
return t('download');
|
},
|
get children() {
|
return [_$memo(() => byteSize(traffic()?.down || 0).toString()), "/s"];
|
}
|
}), null);
|
_$insert(_el$5, _$createComponent(TrafficWidget, {
|
get label() {
|
return t('uploadTotal');
|
},
|
get children() {
|
return byteSize(latestConnectionMsg()?.uploadTotal || 0).toString();
|
}
|
}), null);
|
_$insert(_el$5, _$createComponent(TrafficWidget, {
|
get label() {
|
return t('downloadTotal');
|
},
|
get children() {
|
return byteSize(latestConnectionMsg()?.downloadTotal || 0).toString();
|
}
|
}), null);
|
_$insert(_el$5, _$createComponent(TrafficWidget, {
|
get label() {
|
return t('activeConnections');
|
},
|
get children() {
|
return latestConnectionMsg()?.connections?.length || 0;
|
}
|
}), null);
|
_$insert(_el$5, _$createComponent(TrafficWidget, {
|
get label() {
|
return t('memoryUsage');
|
},
|
get children() {
|
return byteSize(memory()?.inuse || 0).toString();
|
}
|
}), null);
|
_$insert(_el$7, _$createComponent(SolidApexCharts, {
|
type: "area",
|
get options() {
|
return trafficChartOptions();
|
},
|
get series() {
|
return trafficChartSeries();
|
}
|
}));
|
_$insert(_el$8, _$createComponent(SolidApexCharts, {
|
type: "line",
|
get options() {
|
return memoryChartOptions();
|
},
|
get series() {
|
return memoryChartSeries();
|
}
|
}));
|
return _el$4;
|
})();
|
});
|
if (import.meta.hot) {
|
_$$refresh("vite", import.meta.hot, _REGISTRY);
|
import.meta.hot.accept();
|
}
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWtlVGltZXIiLCJieXRlU2l6ZSIsIm1lcmdlIiwiU29saWRBcGV4Q2hhcnRzIiwiYmF0Y2giLCJjaGlsZHJlbiIsImNyZWF0ZUVmZmVjdCIsImNyZWF0ZU1lbW8iLCJjcmVhdGVTaWduYWwiLCJDSEFSVF9NQVhfWEFYSVMiLCJERUZBVUxUX0NIQVJUX09QVElPTlMiLCJ1c2VJMThuIiwibGF0ZXN0Q29ubmVjdGlvbk1zZyIsInVzZVdzUmVxdWVzdCIsIlRyYWZmaWNXaWRnZXQiLCJfJCRjb21wb25lbnQiLCJfUkVHSVNUUlkiLCJwcm9wcyIsIl9lbCQiLCJfdG1wbCQiLCJfZWwkMiIsImZpcnN0Q2hpbGQiLCJfZWwkMyIsIm5leHRTaWJsaW5nIiwiXyRpbnNlcnQiLCJsYWJlbCIsImxvY2F0aW9uIiwidCIsInRyYWZmaWNzIiwic2V0VHJhZmZpY3MiLCJtZW1vcmllcyIsInNldE1lbW9yaWVzIiwic2xpY2UiLCJtZW1vIiwic2V0SW50ZXJ2YWwiLCJ0cmFmZmljIiwidHJhZmZpY0NoYXJ0T3B0aW9ucyIsInRpdGxlIiwidGV4dCIsInRyYWZmaWNDaGFydFNlcmllcyIsIm5hbWUiLCJkYXRhIiwibWFwIiwiZG93biIsInVwIiwibWVtb3J5IiwibSIsImludXNlIiwibWVtb3J5Q2hhcnRPcHRpb25zIiwibWVtb3J5Q2hhcnRTZXJpZXMiLCJfZWwkNCIsIl90bXBsJDIiLCJfZWwkNSIsIl9lbCQ2IiwiX2VsJDciLCJfZWwkOCIsIl8kY3JlYXRlQ29tcG9uZW50IiwiXyRtZW1vIiwidG9TdHJpbmciLCJ1cGxvYWRUb3RhbCIsImRvd25sb2FkVG90YWwiLCJjb25uZWN0aW9ucyIsImxlbmd0aCIsInR5cGUiLCJvcHRpb25zIiwic2VyaWVzIiwiaW1wb3J0IiwibWV0YSIsImhvdCIsIl8kJHJlZnJlc2giLCJhY2NlcHQiXSwic291cmNlcyI6WyJPdmVydmlldy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZVRpbWVyIH0gZnJvbSAnQHNvbGlkLXByaW1pdGl2ZXMvdGltZXInXHJcbmltcG9ydCB0eXBlIHsgQXBleE9wdGlvbnMgfSBmcm9tICdhcGV4Y2hhcnRzJ1xyXG5pbXBvcnQgYnl0ZVNpemUgZnJvbSAnYnl0ZS1zaXplJ1xyXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgU29saWRBcGV4Q2hhcnRzIH0gZnJvbSAnc29saWQtYXBleGNoYXJ0cydcclxuaW1wb3J0IHtcclxuICBKU1gsXHJcbiAgUGFyZW50Q29tcG9uZW50LFxyXG4gIGJhdGNoLFxyXG4gIGNoaWxkcmVuLFxyXG4gIGNyZWF0ZUVmZmVjdCxcclxuICBjcmVhdGVNZW1vLFxyXG4gIGNyZWF0ZVNpZ25hbCxcclxufSBmcm9tICdzb2xpZC1qcydcclxuaW1wb3J0IHsgQ0hBUlRfTUFYX1hBWElTLCBERUZBVUxUX0NIQVJUX09QVElPTlMgfSBmcm9tICd+L2NvbnN0YW50cydcclxuaW1wb3J0IHsgdXNlSTE4biB9IGZyb20gJ34vaTE4bidcclxuaW1wb3J0IHsgbGF0ZXN0Q29ubmVjdGlvbk1zZywgdXNlV3NSZXF1ZXN0IH0gZnJvbSAnfi9zaWduYWxzJ1xyXG5cclxuY29uc3QgVHJhZmZpY1dpZGdldDogUGFyZW50Q29tcG9uZW50PHsgbGFiZWw6IEpTWC5FbGVtZW50IH0+ID0gKHByb3BzKSA9PiAoXHJcbiAgPGRpdiBjbGFzcz1cInN0YXQgZmxleC0xIHBsYWNlLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInN0YXQtdGl0bGUgdGV4dC1wcmltYXJ5LWNvbnRlbnRcIj57cHJvcHMubGFiZWx9PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3RhdC12YWx1ZSB0ZXh0LTJ4bCB0ZXh0LXByaW1hcnktY29udGVudCBsZzp0ZXh0LTN4bFwiPlxyXG4gICAgICB7Y2hpbGRyZW4oKCkgPT4gcHJvcHMuY2hpbGRyZW4pKCl9XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuKVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIGNvbnN0IFt0XSA9IHVzZUkxOG4oKVxyXG5cclxuICBjb25zdCBbdHJhZmZpY3MsIHNldFRyYWZmaWNzXSA9IGNyZWF0ZVNpZ25hbDx7IGRvd246IG51bWJlcjsgdXA6IG51bWJlciB9W10+KFxyXG4gICAgW10sXHJcbiAgKVxyXG4gIGNvbnN0IFttZW1vcmllcywgc2V0TWVtb3JpZXNdID0gY3JlYXRlU2lnbmFsPG51bWJlcltdPihbXSlcclxuXHJcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwZXhjaGFydHMvYXBleGNoYXJ0cy5qcy9ibG9iL21haW4vc2FtcGxlcy9zb3VyY2UvbGluZS9yZWFsdGltZS54bWxcclxuICAvLyBUT0RPOiBuZWVkcyBhIGJldHRlciB3YXlcclxuICBtYWtlVGltZXIoXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIGJhdGNoKCgpID0+IHtcclxuICAgICAgICBzZXRUcmFmZmljcygodHJhZmZpY3MpID0+IHRyYWZmaWNzLnNsaWNlKC1DSEFSVF9NQVhfWEFYSVMpKVxyXG4gICAgICAgIHNldE1lbW9yaWVzKChtZW1vKSA9PiBtZW1vLnNsaWNlKC1DSEFSVF9NQVhfWEFYSVMpKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIC8vIHdlIHNocmluayB0aGUgY2hhcnQgZGF0YSBhcnJheSBzaXplIGRvd24gZXZlcnkgbWludXRlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXHJcbiAgICA2MCAqIDEwMDAsXHJcbiAgICBzZXRJbnRlcnZhbCxcclxuICApXHJcblxyXG4gIGNvbnN0IHRyYWZmaWMgPSB1c2VXc1JlcXVlc3Q8eyBkb3duOiBudW1iZXI7IHVwOiBudW1iZXIgfT4oJ3RyYWZmaWMnKVxyXG5cclxuICBjcmVhdGVFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgdCA9IHRyYWZmaWMoKVxyXG5cclxuICAgIGlmICh0KSBzZXRUcmFmZmljcygodHJhZmZpY3MpID0+IFsuLi50cmFmZmljcywgdF0pXHJcbiAgfSlcclxuXHJcbiAgY29uc3QgdHJhZmZpY0NoYXJ0T3B0aW9ucyA9IGNyZWF0ZU1lbW88QXBleE9wdGlvbnM+KCgpID0+XHJcbiAgICBtZXJnZSh7IHRpdGxlOiB7IHRleHQ6IHQoJ3RyYWZmaWMnKSB9IH0sIERFRkFVTFRfQ0hBUlRfT1BUSU9OUyksXHJcbiAgKVxyXG5cclxuICBjb25zdCB0cmFmZmljQ2hhcnRTZXJpZXMgPSBjcmVhdGVNZW1vKCgpID0+IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogdCgnZG93bicpLFxyXG4gICAgICBkYXRhOiB0cmFmZmljcygpLm1hcCgodCkgPT4gdC5kb3duKSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHQoJ3VwJyksXHJcbiAgICAgIGRhdGE6IHRyYWZmaWNzKCkubWFwKCh0KSA9PiB0LnVwKSxcclxuICAgIH0sXHJcbiAgXSlcclxuXHJcbiAgY29uc3QgbWVtb3J5ID0gdXNlV3NSZXF1ZXN0PHsgaW51c2U6IG51bWJlciB9PignbWVtb3J5JylcclxuXHJcbiAgY3JlYXRlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IG0gPSBtZW1vcnkoKT8uaW51c2VcclxuXHJcbiAgICBpZiAobSkgc2V0TWVtb3JpZXMoKG1lbW9yaWVzKSA9PiBbLi4ubWVtb3JpZXMsIG1dKVxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IG1lbW9yeUNoYXJ0T3B0aW9ucyA9IGNyZWF0ZU1lbW88QXBleE9wdGlvbnM+KCgpID0+XHJcbiAgICBtZXJnZSh7IHRpdGxlOiB7IHRleHQ6IHQoJ21lbW9yeScpIH0gfSwgREVGQVVMVF9DSEFSVF9PUFRJT05TKSxcclxuICApXHJcblxyXG4gIGNvbnN0IG1lbW9yeUNoYXJ0U2VyaWVzID0gY3JlYXRlTWVtbygoKSA9PiBbXHJcbiAgICB7IG5hbWU6IHQoJ21lbW9yeScpLCBkYXRhOiBtZW1vcmllcygpIH0sXHJcbiAgXSlcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cyBzdGF0cy12ZXJ0aWNhbCB3LWZ1bGwgZ3JpZC1jb2xzLTIgYmctcHJpbWFyeSBzaGFkb3cgbGc6c3RhdHMtaG9yaXpvbnRhbCBsZzpmbGV4XCI+XHJcbiAgICAgICAgPFRyYWZmaWNXaWRnZXQgbGFiZWw9e3QoJ3VwbG9hZCcpfT5cclxuICAgICAgICAgIHtieXRlU2l6ZSh0cmFmZmljKCk/LnVwIHx8IDApLnRvU3RyaW5nKCl9L3NcclxuICAgICAgICA8L1RyYWZmaWNXaWRnZXQ+XHJcblxyXG4gICAgICAgIDxUcmFmZmljV2lkZ2V0IGxhYmVsPXt0KCdkb3dubG9hZCcpfT5cclxuICAgICAgICAgIHtieXRlU2l6ZSh0cmFmZmljKCk/LmRvd24gfHwgMCkudG9TdHJpbmcoKX0vc1xyXG4gICAgICAgIDwvVHJhZmZpY1dpZGdldD5cclxuXHJcbiAgICAgICAgPFRyYWZmaWNXaWRnZXQgbGFiZWw9e3QoJ3VwbG9hZFRvdGFsJyl9PlxyXG4gICAgICAgICAge2J5dGVTaXplKGxhdGVzdENvbm5lY3Rpb25Nc2coKT8udXBsb2FkVG90YWwgfHwgMCkudG9TdHJpbmcoKX1cclxuICAgICAgICA8L1RyYWZmaWNXaWRnZXQ+XHJcblxyXG4gICAgICAgIDxUcmFmZmljV2lkZ2V0IGxhYmVsPXt0KCdkb3dubG9hZFRvdGFsJyl9PlxyXG4gICAgICAgICAge2J5dGVTaXplKGxhdGVzdENvbm5lY3Rpb25Nc2coKT8uZG93bmxvYWRUb3RhbCB8fCAwKS50b1N0cmluZygpfVxyXG4gICAgICAgIDwvVHJhZmZpY1dpZGdldD5cclxuXHJcbiAgICAgICAgPFRyYWZmaWNXaWRnZXQgbGFiZWw9e3QoJ2FjdGl2ZUNvbm5lY3Rpb25zJyl9PlxyXG4gICAgICAgICAge2xhdGVzdENvbm5lY3Rpb25Nc2coKT8uY29ubmVjdGlvbnM/Lmxlbmd0aCB8fCAwfVxyXG4gICAgICAgIDwvVHJhZmZpY1dpZGdldD5cclxuXHJcbiAgICAgICAgPFRyYWZmaWNXaWRnZXQgbGFiZWw9e3QoJ21lbW9yeVVzYWdlJyl9PlxyXG4gICAgICAgICAge2J5dGVTaXplKG1lbW9yeSgpPy5pbnVzZSB8fCAwKS50b1N0cmluZygpfVxyXG4gICAgICAgIDwvVHJhZmZpY1dpZGdldD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1ib3ggZmxleCBmbGV4LWNvbCBnYXAtMiBiZy1iYXNlLTMwMCBweS00IGxnOmZsZXgtcm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPlxyXG4gICAgICAgICAgPFNvbGlkQXBleENoYXJ0c1xyXG4gICAgICAgICAgICB0eXBlPVwiYXJlYVwiXHJcbiAgICAgICAgICAgIG9wdGlvbnM9e3RyYWZmaWNDaGFydE9wdGlvbnMoKX1cclxuICAgICAgICAgICAgc2VyaWVzPXt0cmFmZmljQ2hhcnRTZXJpZXMoKX1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPlxyXG4gICAgICAgICAgPFNvbGlkQXBleENoYXJ0c1xyXG4gICAgICAgICAgICB0eXBlPVwibGluZVwiXHJcbiAgICAgICAgICAgIG9wdGlvbnM9e21lbW9yeUNoYXJ0T3B0aW9ucygpfVxyXG4gICAgICAgICAgICBzZXJpZXM9e21lbW9yeUNoYXJ0U2VyaWVzKCl9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIClcclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxTQUFTQSxTQUFTLFFBQVEseUJBQXlCO0FBRW5ELE9BQU9DLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLFNBQVNDLEtBQUssUUFBUSxRQUFRO0FBQzlCLFNBQVNDLGVBQWUsUUFBUSxrQkFBa0I7QUFDbEQsU0FHRUMsS0FBSyxFQUNMQyxRQUFRLEVBQ1JDLFlBQVksRUFDWkMsVUFBVSxFQUNWQyxZQUFZLFFBQ1AsVUFBVTtBQUNqQixTQUFTQyxlQUFlLEVBQUVDLHFC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
|