annotate src/CollectorState.ts @ 8:c48b7bbc3a64

refactor
author drewp@bigasterisk.com
date Fri, 25 Nov 2022 20:32:05 -0800
parents
children bfd95926be6e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
1 import { LitElement, html, css } from "lit";
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
2 import { customElement, property } from "lit/decorators.js";
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
3 export { StreamedGraph } from "@bigasterisk/streamed-graph";
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
4
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
5 @customElement("collector-state")
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
6 export class CollectorState extends LitElement {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
7 @property() latestState: { graphClients: any } ;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
8
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
9 constructor() {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
10 super();
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
11 this.latestState = { graphClients: {} };
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
12 this.refresh();
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
13 }
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
14
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
15 delayedRefresh() {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
16 setTimeout(() => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
17 requestAnimationFrame(() => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
18 this.refresh();
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
19 });
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
20 }, 5000);
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
21 }
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
22
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
23 refresh() {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
24 fetch("state")
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
25 .then((response) => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
26 return response.json();
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
27 })
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
28 .then((newState) => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
29 this.latestState = newState;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
30 this.delayedRefresh();
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
31 });
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
32 }
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
33
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
34 static get styles() {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
35 return css`
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
36 :host {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
37 display: inline-block;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
38 border: 2px solid gray;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
39 padding: 5px;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
40 }
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
41 `;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
42 }
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
43
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
44 render() {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
45 const sourcesTable = (clients: Array<any>) => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
46 const clientRow = (client: any) => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
47 const d = client.reconnectedPatchSource;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
48 const now = Date.now() / 1000;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
49 const dispSec = (sec: number) =>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
50 Math.abs(sec) > now - 1
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
51 ? "--"
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
52 : Math.abs(sec) > 3600
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
53 ? `${Math.round(sec / 3600)} hr`
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
54 : Math.abs(sec) > 60
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
55 ? `${Math.round(sec / 60)} min`
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
56 : `${Math.round(sec * 10) / 10} sec`;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
57 return html`
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
58 <tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
59 <td><a href="${d.url.replace("/events", "")}">[browse]</a> <a href="${d.url}">${d.url}</a></td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
60 <td>${d.fullGraphReceived}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
61 <td>${d.patchesReceived}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
62 <td>${dispSec(d.time.open - now)}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
63 <td>${dispSec(d.time.fullGraph - d.time.open)}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
64 <td>${dispSec(d.time.latestPatch - now)}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
65 </tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
66 `;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
67 };
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
68
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
69 return html`
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
70 rendered!
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
71 <table>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
72 <thead>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
73 <tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
74 <th>patch source</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
75 <th>full graph recv</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
76 <th>patches recv</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
77 <th>time open (rel)</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
78 <th>time fullGraph (after open)</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
79 <th>time latest patch (rel)</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
80 </tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
81 </thead>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
82 <tbody>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
83 ${clients.map(clientRow)}
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
84 </tbody>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
85 </table>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
86 `;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
87 };
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
88
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
89 const handlersTable = (handlers: Array<any>) => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
90 const handlerRow = (d: any) => {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
91 return html`
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
92 <tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
93 <td>${d.created}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
94 <td>${d.ageHours}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
95 <td><a href="graph/${d.streamId}">${d.streamId}</a></td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
96 <td>${d.foafAgent}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
97 <td>${d.userAgent}</td>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
98 </tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
99 `;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
100 };
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
101
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
102 return html`
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
103 <table>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
104 <thead>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
105 <tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
106 <th>created</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
107 <th>age hours</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
108 <th>stream</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
109 <th>foaf agent</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
110 <th>user agent</th>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
111 </tr>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
112 </thead>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
113 <tbody>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
114 ${handlers.map(handlerRow)}
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
115 </tbody>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
116 </table>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
117 `;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
118 };
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
119
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
120 if (!this.latestState) {
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
121 return "loading...";
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
122 }
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
123 const d = this.latestState.graphClients;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
124 return html` <div>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
125 <p>Graph: ${d.statements ? d.statements.len : 0} statements</p>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
126
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
127 <p>Sources: ${sourcesTable(d.clients || [])}</p>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
128
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
129 <p>Listening clients: ${handlersTable(d.sseHandlers || [])}</p>
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
130 </div>`;
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
131 }
c48b7bbc3a64 refactor
drewp@bigasterisk.com
parents:
diff changeset
132 }