aboutsummaryrefslogtreecommitdiff
path: root/src_js
diff options
context:
space:
mode:
Diffstat (limited to 'src_js')
-rw-r--r--src_js/common.js24
-rw-r--r--src_js/main.js19
-rw-r--r--src_js/vt.js65
3 files changed, 108 insertions, 0 deletions
diff --git a/src_js/common.js b/src_js/common.js
new file mode 100644
index 0000000..4bd6f23
--- /dev/null
+++ b/src_js/common.js
@@ -0,0 +1,24 @@
+import r from '@hat-core/renderer';
+
+
+const localTimezoneOffset = (new Date()).getTimezoneOffset() * 60;
+
+
+export const state = {
+ entries: []
+};
+
+
+export function init() {
+ fetch('/entries').then(response =>
+ response.json()
+ ).then(data =>
+ r.set('entries', data['entries'])
+ );
+}
+
+
+export function timestampToString(timestamp) {
+ const date = new Date((timestamp - localTimezoneOffset) * 1000);
+ return date.toISOString().replace('T', ' ').replace('Z', '');
+}
diff --git a/src_js/main.js b/src_js/main.js
new file mode 100644
index 0000000..7dd5e1b
--- /dev/null
+++ b/src_js/main.js
@@ -0,0 +1,19 @@
+import r from '@hat-core/renderer';
+import * as u from '@hat-core/util';
+
+import * as common from './common';
+import * as vt from './vt';
+
+import 'main.scss';
+
+
+function main() {
+ const root = document.body.appendChild(document.createElement('div'));
+ r.init(root, common.state, vt.main);
+ common.init();
+}
+
+
+window.addEventListener('load', main);
+window.r = r;
+window.u = u;
diff --git a/src_js/vt.js b/src_js/vt.js
new file mode 100644
index 0000000..1f390ab
--- /dev/null
+++ b/src_js/vt.js
@@ -0,0 +1,65 @@
+import r from '@hat-core/renderer';
+import * as u from '@hat-core/util';
+
+import * as common from './common';
+
+
+export function main() {
+ const entries = r.get('entries');
+
+ return ['div.main',
+ ['table',
+ ['thead',
+ ['tr',
+ ['th.col-id', 'ID'],
+ ['th.col-time', 'Time'],
+ ['th.col-address', 'Address'],
+ ['th.col-source', 'Source'],
+ ['th.col-type', 'Type'],
+ ['th.col-data', 'Data']
+ ]
+ ],
+ ['tbody', entries.map(entry =>
+ ['tr',
+ ['td.col-id', String(entry.entry_id)],
+ ['td.col-time', common.timestampToString(entry.timestamp)],
+ ['td.col-address', String(entry.address)],
+ ['td.col-source', String(entry.source)],
+ ['td.col-type', String(entry.type)],
+ ['td.col-data', data(entry.type, entry.data)]
+ ]
+ )]
+ ]
+ ];
+}
+
+
+function data(type, data) {
+ if (type == 'builtin.status.linux')
+ return builtinStatusLinux(data);
+
+ return JSON.stringify(data);
+}
+
+
+function builtinStatusLinux(data) {
+ const timestamp = u.get('timestamp', data);
+ const uptime = u.get('uptime', data);
+ const thermal = u.get('thermal', data) || [];
+ const disks = u.get('disks', data) || [];
+
+ return ['div.data',
+ ['label', 'Time:'],
+ ['span', common.timestampToString(timestamp)],
+ ['label', 'Uptime:'],
+ ['span', `${uptime}s`],
+ thermal.map(i => [
+ ['label', `Temp - ${i.type}:`],
+ ['span', `${i.temp}°C`]
+ ]),
+ disks.map(i => [
+ ['label', `Disk - ${i.name}:`],
+ ['span', `${i.percent} (${i.used}/${i.size})`]
+ ]),
+ ];
+}