Mercurial > code > home > repos > homeauto
view service/collector/static/state.js @ 1465:9d22aa924e8a
prettier times. new streamed-graph browse link
Ignore-this: beb72354711b5b68777f622c28fea740
darcs-hash:f86e69afb36753d1afc51f92b5c75ba80b5055d6
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Wed, 18 Dec 2019 17:23:34 -0800 |
parents | 71684fc9c692 |
children |
line wrap: on
line source
import { LitElement, TemplateResult, html, css } from '/lib/lit-element/2.2.0/lit-element-custom.js'; class CollectorState extends LitElement { static get properties() { return { latestState: { type: Object } }; } firstUpdated() { this.latestState = {graphClients: {}}; this.refreshLoop(); } refreshLoop() { setTimeout(() => { requestAnimationFrame(() => { this.refresh(); }); }, 5000); } refresh() { fetch('state') .then((response) => { return response.json(); }) .then((newState) => { this.latestState = newState; this.refreshLoop(); }); } static get styles() { return css` :host { display: inline-block; border: 2px solid gray; padding: 5px; }`; } render() { const sourcesTable = (clients) => { const clientRow = (client) => { const d = client.reconnectedPatchSource; const now = Date.now() / 1000; const dispSec = (sec) => ( Math.abs(sec) > now - 1 ? '--' : Math.abs(sec) > 3600 ? `${Math.round(sec/3600)} hr` : Math.abs(sec) > 60 ? `${Math.round(sec/60)} min` : `${Math.round(sec*10)/10} sec`); return html` <tr> <td><a href="/rdf/browse/?graph=${d.url}">[browse]</a> <a href="${d.url}">${d.url}</a></td> <td>${d.fullGraphReceived}</td> <td>${d.patchesReceived}</td> <td>${dispSec(d.time.open - now)}</td> <td>${dispSec(d.time.fullGraph - d.time.open)}</td> <td>${dispSec(d.time.latestPatch - now)}</td> </tr> `; }; return html` <table> <thead> <tr> <th>patch source</th> <th>full graph recv</th> <th>patches recv</th> <th>time open (rel)</th> <th>time fullGraph (after open)</th> <th>time latest patch (rel)</th> </tr> </thead> <tbody> ${clients.map(clientRow)} </tbody> </table> `; }; const handlersTable = (handlers) => { const handlerRow = (d) => { return html` <tr> <td>${d.created}</td> <td>${d.ageHours}</td> <td><a href="/rdf/browse/?graph=/sse_collector/graph/${d.streamId}">${d.streamId}</a></td> <td>${d.foafAgent}</td> <td>${d.userAgent}</td> </tr> `; }; return html` <table> <thead> <tr> <th>created</th> <th>age hours</th> <th>stream</th> <th>foaf agent</th> <th>user agent</th> </tr> </thead> <tbody> ${handlers.map(handlerRow)} </tbody> </table> `; }; if (!this.latestState) { return 'loading...'; } const d = this.latestState.graphClients; return html` <div> <p> Graph: ${d.statements ? d.statements.len : 0} statements </p> <p> Sources: ${sourcesTable(d.clients || [])} </p> <p> Listening clients: ${handlersTable(d.sseHandlers || [])} </p> </div>`; } } customElements.define('collector-state', CollectorState);