Mercurial > code > home > repos > light9
annotate web/metrics/StatsLine.ts @ 2441:0761cdd5bff0
fix delay on setting midi, so it doesn't grab faders when you're sliding them
author | drewp@bigasterisk.com |
---|---|
date | Fri, 31 May 2024 11:52:47 -0700 |
parents | 4556eebe5d73 |
children |
rev | line source |
---|---|
2033 | 1 import { css, html, LitElement, TemplateResult } from "lit"; |
2 import { customElement, property } from "lit/decorators.js"; | |
2034 | 3 export { StatsProcess } from "./StatsProcess"; |
4 import parsePrometheusTextFormat from "parse-prometheus-text-format"; | |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
5 import debug from "debug"; |
2372
06bf6dae8e64
reorg tools into light9/web/ and a single vite instance
drewp@bigasterisk.com
parents:
2357
diff
changeset
|
6 import { clamp } from "../floating_color_picker"; |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
7 const log = debug("home"); |
2034 | 8 |
9 interface Value { | |
10 labels: { string: string }; | |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
11 value?: string; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
12 count?: number; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
13 sum?: number; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
14 buckets?: { [value: string]: string }; |
2034 | 15 } |
16 interface Metric { | |
17 name: string; | |
18 help: string; | |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
19 type: "GAUGE" | "SUMMARY" | "COUNTER" | "HISTOGRAM" | "UNTYPED"; |
2034 | 20 metrics: Value[]; |
21 } | |
22 type Metrics = Metric[]; | |
2033 | 23 |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
24 function nonBoring(m: Metric) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
25 return ( |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
26 !m.name.endsWith("_created") && // |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
27 !m.name.startsWith("python_gc_") && |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
28 m.name != "python_info" && |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
29 m.name != "process_max_fds" && |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
30 m.name != "process_virtual_memory_bytes" && |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
31 m.name != "process_resident_memory_bytes" && |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
32 m.name != "process_start_time_seconds" && |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
33 m.name != "process_cpu_seconds_total" |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
34 ); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
35 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
36 |
2033 | 37 @customElement("stats-line") |
38 export class StatsLine extends LitElement { | |
39 @property() name = "?"; | |
2034 | 40 @property() stats: Metrics = []; |
1935
5acdf209394d
start live stats displayer on home page
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
41 |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
42 prevCpuNow = 0; |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
43 prevCpuTotal = 0; |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
44 @property() cpu = 0; |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
45 @property() mem = 0; |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
46 |
2033 | 47 updated(changedProperties: any) { |
48 changedProperties.forEach((oldValue: any, propName: string) => { | |
49 if (propName == "name") { | |
50 const reload = () => { | |
2375 | 51 fetch("/service/" + this.name + "/metrics").then((resp) => { |
2033 | 52 if (resp.ok) { |
53 resp | |
2034 | 54 .text() |
2033 | 55 .then((msg) => { |
2034 | 56 this.stats = parsePrometheusTextFormat(msg) as Metrics; |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
57 this.extractProcessStats(this.stats); |
2033 | 58 setTimeout(reload, 1000); |
59 }) | |
60 .catch((err) => { | |
2375 | 61 log(`${this.name} failing`, err); |
2033 | 62 setTimeout(reload, 1000); |
63 }); | |
64 } else { | |
65 if (resp.status == 502) { | |
66 setTimeout(reload, 5000); | |
67 } | |
68 // 404: likely not mapped to a responding server | |
69 } | |
70 }); | |
1935
5acdf209394d
start live stats displayer on home page
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
71 }; |
2033 | 72 reload(); |
73 } | |
74 }); | |
75 } | |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
76 extractProcessStats(stats: Metrics) { |
2357 | 77 stats.forEach((row: Metric) => { |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
78 if (row.name == "process_resident_memory_bytes") { |
2357 | 79 this.mem = parseFloat(row.metrics[0].value!) / 1024 / 1024; |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
80 } |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
81 if (row.name == "process_cpu_seconds_total") { |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
82 const now = Date.now() / 1000; |
2357 | 83 const cpuSecondsTotal = parseFloat(row.metrics[0].value!); |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
84 this.cpu = (cpuSecondsTotal - this.prevCpuTotal) / (now - this.prevCpuNow); |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
85 this.prevCpuTotal = cpuSecondsTotal; |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
86 this.prevCpuNow = now; |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
87 } |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
88 }); |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
89 } |
1935
5acdf209394d
start live stats displayer on home page
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
90 |
2033 | 91 static styles = [ |
92 css` | |
93 :host { | |
94 border: 2px solid #46a79f; | |
95 display: inline-block; | |
96 } | |
97 table { | |
98 border-collapse: collapse; | |
99 background: #000; | |
100 color: #ccc; | |
101 font-family: sans-serif; | |
102 } | |
103 th, | |
104 td { | |
105 outline: 1px solid #000; | |
106 } | |
107 th { | |
108 padding: 2px 4px; | |
109 background: #2f2f2f; | |
2357 | 110 text-align: left; |
2033 | 111 } |
112 td { | |
113 padding: 0; | |
114 vertical-align: top; | |
115 text-align: center; | |
116 } | |
117 td.val { | |
118 padding: 2px 4px; | |
119 background: #3b5651; | |
120 } | |
121 .recents { | |
122 display: flex; | |
123 align-items: flex-end; | |
124 height: 30px; | |
125 } | |
126 .recents > div { | |
127 width: 3px; | |
128 background: red; | |
129 border-right: 1px solid black; | |
130 } | |
131 .bigInt { | |
132 min-width: 6em; | |
133 } | |
134 `, | |
135 ]; | |
136 | |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
137 tdWrap(content: TemplateResult): TemplateResult { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
138 return html`<td>${content}</td>`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
139 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
140 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
141 recents(d: any, path: string[]): TemplateResult { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
142 const hi = Math.max.apply(null, d.recents); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
143 const scl = 30 / hi; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
144 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
145 const bar = (y: number) => { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
146 let color; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
147 if (y < d.average) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
148 color = "#6a6aff"; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
149 } else { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
150 color = "#d09e4c"; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
151 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
152 return html`<div class="bar" style="height: ${y * scl}px; background: ${color};"></div>`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
153 }; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
154 return html`<td> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
155 <div class="recents">${d.recents.map(bar)}</div> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
156 <div>avg=${d.average.toPrecision(3)}</div> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
157 </td>`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
158 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
159 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
160 table(d: Metrics, path: string[]): TemplateResult { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
161 const byName = new Map<string, Metric>(); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
162 d.forEach((row) => { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
163 byName.set(row.name, row); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
164 }); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
165 let cols = d.map((row) => row.name); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
166 cols.sort(); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
167 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
168 if (path.length == 0) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
169 ["webServer", "process"].forEach((earlyKey) => { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
170 let i = cols.indexOf(earlyKey); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
171 if (i != -1) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
172 cols = [earlyKey].concat(cols.slice(0, i), cols.slice(i + 1)); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
173 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
174 }); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
175 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
176 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
177 const th = (col: string): TemplateResult => { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
178 return html`<th>${col}</th>`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
179 }; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
180 const td = (col: string): TemplateResult => { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
181 const cell = byName.get(col)!; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
182 return html`${this.drawLevel(cell, path.concat(col))}`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
183 }; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
184 return html` <table> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
185 <tr> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
186 ${cols.map(th)} |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
187 </tr> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
188 <tr> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
189 ${cols.map(td)} |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
190 </tr> |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
191 </table>`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
192 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
193 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
194 drawLevel(d: Metric, path: string[]) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
195 return html`[NEW ${JSON.stringify(d)} ${path}]`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
196 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
197 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
198 valueDisplay(m: Metric, v: Value): TemplateResult { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
199 if (m.type == "GAUGE") { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
200 return html`${v.value}`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
201 } else if (m.type == "COUNTER") { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
202 return html`${v.value}`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
203 } else if (m.type == "HISTOGRAM") { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
204 return this.histoDisplay(v.buckets!); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
205 } else if (m.type == "UNTYPED") { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
206 return html`${v.value}`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
207 } else if (m.type == "SUMMARY") { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
208 if (!v.count) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
209 return html`err: summary without count`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
210 } |
2357 | 211 return html`n=${v.count} percall=${((v.count && v.sum ? v.sum / v.count : 0) * 1000).toPrecision(3)}ms`; |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
212 } else { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
213 throw m.type; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
214 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
215 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
216 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
217 private histoDisplay(b: { [value: string]: string }) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
218 const lines: TemplateResult[] = []; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
219 let firstLevel; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
220 let lastLevel; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
221 let prev = 0; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
222 |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
223 let maxDelta = 0; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
224 for (let level in b) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
225 if (firstLevel === undefined) firstLevel = level; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
226 lastLevel = level; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
227 let count = parseFloat(b[level]); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
228 let delta = count - prev; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
229 prev = count; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
230 if (delta > maxDelta) maxDelta = delta; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
231 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
232 prev = 0; |
2357 | 233 const maxBarH = 30; |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
234 for (let level in b) { |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
235 let count = parseFloat(b[level]); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
236 let delta = count - prev; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
237 prev = count; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
238 let levelf = parseFloat(level); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
239 const h = clamp((delta / maxDelta) * maxBarH, 1, maxBarH); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
240 lines.push( |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
241 html`<div |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
242 title="bucket=${level} count=${count}" |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
243 style="background: yellow; margin-right: 1px; width: 8px; height: ${h}px; display: inline-block" |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
244 ></div>` |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
245 ); |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
246 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
247 return html`${firstLevel} ${lines} ${lastLevel}`; |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
248 } |
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
249 |
2357 | 250 tightLabel(labs: { [key: string]: string }): string { |
2375 | 251 const d: { [key: string]: string } = {}; |
2357 | 252 for (let k in labs) { |
2375 | 253 if (k == "app_name") continue; |
254 if (k == "output") continue; | |
255 if (k == "status_code" && labs[k] == "200") continue; | |
256 d[k] = labs[k]; | |
2357 | 257 } |
2375 | 258 const ret = JSON.stringify(d); |
259 return ret == "{}" ? "" : ret; | |
2357 | 260 } |
261 tightMetric(name: string): string { | |
2375 | 262 return name.replace("starlette", "⭐").replace("_request", "_req").replace("_duration", "_dur").replace("_seconds", "_s"); |
2357 | 263 } |
2033 | 264 render() { |
265 const now = Date.now() / 1000; | |
266 | |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
267 const displayedStats = this.stats.filter(nonBoring); |
2034 | 268 return html` |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
269 <div> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
270 <table> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
271 ${displayedStats.map( |
2375 | 272 (row, rowNum) => html` |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
273 <tr> |
2357 | 274 <th>${this.tightMetric(row.name)}</th> |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
275 <td> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
276 <table> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
277 ${row.metrics.map( |
2375 | 278 (v) => html` |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
279 <tr> |
2357 | 280 <td>${this.tightLabel(v.labels)}</td> |
2280
e462853f1ef6
redo homepage and metrics calcs. still a mess
drewp@bigasterisk.com
parents:
2037
diff
changeset
|
281 <td>${this.valueDisplay(row, v)}</td> |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
282 </tr> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
283 ` |
2375 | 284 )} |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
285 </table> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
286 </td> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
287 ${rowNum == 0 |
2375 | 288 ? html` |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
289 <td rowspan="${displayedStats.length}"> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
290 <stats-process id="proc" cpu="${this.cpu}" mem="${this.mem}"></stats-process> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
291 </td> |
2034 | 292 ` |
2375 | 293 : ""} |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
294 </tr> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
295 ` |
2375 | 296 )} |
2036
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
297 </table> |
00afa5ec081a
restore more of the stats widget including the cpu/mem spinner
drewp@bigasterisk.com
parents:
2034
diff
changeset
|
298 </div> |
2034 | 299 `; |
2033 | 300 } |
1935
5acdf209394d
start live stats displayer on home page
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
301 } |