From 1e874e790c12839695761a654b44fb427149a353 Mon Sep 17 00:00:00 2001 From: "bozo.kopic" Date: Wed, 28 Jul 2021 01:43:55 +0200 Subject: init --- src_js/common.js | 24 +++++++++++++++++++++ src_js/main.js | 19 +++++++++++++++++ src_js/vt.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 src_js/common.js create mode 100644 src_js/main.js create mode 100644 src_js/vt.js (limited to 'src_js') 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})`] + ]), + ]; +} -- cgit v1.2.3-70-g09d2