trace-viz 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE +21 -0
- package/README.md +385 -0
- package/dist/adapters/index.d.ts +32 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +83 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/agent.d.ts +66 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +329 -0
- package/dist/agent.js.map +1 -0
- package/dist/atlas/atlas.d.ts +203 -0
- package/dist/atlas/atlas.d.ts.map +1 -0
- package/dist/atlas/atlas.js +1466 -0
- package/dist/atlas/atlas.js.map +1 -0
- package/dist/atlas/index.d.ts +7 -0
- package/dist/atlas/index.d.ts.map +1 -0
- package/dist/atlas/index.js +4 -0
- package/dist/atlas/index.js.map +1 -0
- package/dist/atlas/layout.d.ts +44 -0
- package/dist/atlas/layout.d.ts.map +1 -0
- package/dist/atlas/layout.js +103 -0
- package/dist/atlas/layout.js.map +1 -0
- package/dist/atlas/model.d.ts +164 -0
- package/dist/atlas/model.d.ts.map +1 -0
- package/dist/atlas/model.js +489 -0
- package/dist/atlas/model.js.map +1 -0
- package/dist/channels.d.ts +105 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +411 -0
- package/dist/channels.js.map +1 -0
- package/dist/components.d.ts +76 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +432 -0
- package/dist/components.js.map +1 -0
- package/dist/estate.d.ts +25 -0
- package/dist/estate.d.ts.map +1 -0
- package/dist/estate.js +285 -0
- package/dist/estate.js.map +1 -0
- package/dist/failure.d.ts +36 -0
- package/dist/failure.d.ts.map +1 -0
- package/dist/failure.js +82 -0
- package/dist/failure.js.map +1 -0
- package/dist/geometry.d.ts +24 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +92 -0
- package/dist/geometry.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +66 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +152 -0
- package/dist/layout.js.map +1 -0
- package/dist/layout3d.d.ts +98 -0
- package/dist/layout3d.d.ts.map +1 -0
- package/dist/layout3d.js +350 -0
- package/dist/layout3d.js.map +1 -0
- package/dist/mesh.d.ts +23 -0
- package/dist/mesh.d.ts.map +1 -0
- package/dist/mesh.js +263 -0
- package/dist/mesh.js.map +1 -0
- package/dist/model.d.ts +94 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +84 -0
- package/dist/model.js.map +1 -0
- package/dist/particles.d.ts +80 -0
- package/dist/particles.d.ts.map +1 -0
- package/dist/particles.js +118 -0
- package/dist/particles.js.map +1 -0
- package/dist/project.d.ts +113 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +288 -0
- package/dist/project.js.map +1 -0
- package/dist/react/index.d.ts +22 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +69 -0
- package/dist/react/index.js.map +1 -0
- package/dist/renderer.d.ts +252 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +1710 -0
- package/dist/renderer.js.map +1 -0
- package/dist/scales.d.ts +99 -0
- package/dist/scales.d.ts.map +1 -0
- package/dist/scales.js +126 -0
- package/dist/scales.js.map +1 -0
- package/dist/scene.d.ts +53 -0
- package/dist/scene.d.ts.map +1 -0
- package/dist/scene.js +44 -0
- package/dist/scene.js.map +1 -0
- package/dist/schema.d.ts +24 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +131 -0
- package/dist/schema.js.map +1 -0
- package/dist/seed.d.ts +33 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +173 -0
- package/dist/seed.js.map +1 -0
- package/dist/theme.d.ts +35 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +83 -0
- package/dist/theme.js.map +1 -0
- package/dist/trace-viz.esm.js +15 -0
- package/dist/trace-viz.min.js +15 -0
- package/dist/types.d.ts +92 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +105 -0
package/dist/agent.js
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { CHANNELS } from './channels.js';
|
|
2
|
+
import { COMPONENTS } from './components.js';
|
|
3
|
+
import { isMeasure } from './project.js';
|
|
4
|
+
/** Ask a model to compose the view, then validate whatever comes back. */
|
|
5
|
+
export async function proposeSpec(request, opts) {
|
|
6
|
+
const prompt = buildPrompt(request, opts.schema, opts.current);
|
|
7
|
+
let raw;
|
|
8
|
+
try {
|
|
9
|
+
raw = await opts.complete(prompt);
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
return {
|
|
13
|
+
spec: heuristicSpec(request, opts.schema, opts.current),
|
|
14
|
+
issues: [`model call failed (${err.message}); used the built-in heuristic instead`],
|
|
15
|
+
source: 'fallback',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const parsed = extractJson(raw);
|
|
19
|
+
if (!parsed) {
|
|
20
|
+
return {
|
|
21
|
+
spec: heuristicSpec(request, opts.schema, opts.current),
|
|
22
|
+
issues: ['no JSON object found in the model response; used the built-in heuristic instead'],
|
|
23
|
+
source: 'fallback',
|
|
24
|
+
raw,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const { spec, issues } = validateSpec(parsed, opts.schema);
|
|
28
|
+
if (!spec.nodeKey.length) {
|
|
29
|
+
const fallback = heuristicSpec(request, opts.schema, opts.current);
|
|
30
|
+
return { spec: fallback, issues: [...issues, 'proposal had no usable node key'], source: 'fallback', raw };
|
|
31
|
+
}
|
|
32
|
+
return { spec, issues, source: 'model', raw };
|
|
33
|
+
}
|
|
34
|
+
export function buildPrompt(request, schema, current) {
|
|
35
|
+
const dims = schema.dimensions
|
|
36
|
+
.map((d) => {
|
|
37
|
+
const sample = d.values.slice(0, 6).join(', ');
|
|
38
|
+
const where = [d.endpoint ? 'endpoint' : null, d.flow ? 'flow' : null].filter(Boolean).join('+');
|
|
39
|
+
return `- ${d.name} (${d.cardinality} values, ${where}): ${sample}${d.truncated ? ', …' : ''}`;
|
|
40
|
+
})
|
|
41
|
+
.join('\n');
|
|
42
|
+
const channels = Object.keys(CHANNELS)
|
|
43
|
+
.map((name) => {
|
|
44
|
+
const c = CHANNELS[name];
|
|
45
|
+
const cap = c.maxCardinality ? `, max ${c.maxCardinality} values` : '';
|
|
46
|
+
return `- ${name} (${c.target}, takes a ${c.accepts}${cap}): ${c.summary}`;
|
|
47
|
+
})
|
|
48
|
+
.join('\n');
|
|
49
|
+
const system = [
|
|
50
|
+
'You configure a service-topology visualization by returning a JSON view spec.',
|
|
51
|
+
'You never write code and never invent field names. Every field you use must appear in the schema below, and every channel must be one of the listed channels.',
|
|
52
|
+
'',
|
|
53
|
+
'Rules that matter:',
|
|
54
|
+
'- nodeKey decides what a box is. Fewer dimensions means fewer, bigger boxes.',
|
|
55
|
+
'- Binding a dimension to an edge channel splits edges by it, so only bind dimensions worth splitting on.',
|
|
56
|
+
'- Never bind a high-cardinality dimension to hue, glyph, dash or lane; respect the stated maximums.',
|
|
57
|
+
'- Prefer two or three channels. A picture encoding eight things communicates none of them.',
|
|
58
|
+
'- Use mode "world" when the request is about seeing the system as a place, or mentions instances, capacity, CPU, memory, or shapes. Otherwise use "flat".',
|
|
59
|
+
'- distance is a real channel: bind "share" (the fraction of a caller\'s traffic on an edge) so coupled services sit together, "rps" for raw volume, or a dimension so things sharing it cluster. Add "strength" (0-3) to dial it.',
|
|
60
|
+
'- column arranges boxes left to right by a dimension; add "order" (a list of its values) to choose the sequence. halo can size by instances.',
|
|
61
|
+
'',
|
|
62
|
+
`Available world components: ${Object.keys(COMPONENTS).join(', ')}.`,
|
|
63
|
+
'',
|
|
64
|
+
'Reply with a single JSON object and nothing else.',
|
|
65
|
+
].join('\n');
|
|
66
|
+
const user = [
|
|
67
|
+
`Request: ${request}`,
|
|
68
|
+
'',
|
|
69
|
+
'Dimensions:',
|
|
70
|
+
dims || '(none)',
|
|
71
|
+
'',
|
|
72
|
+
`Measures on flows: ${schema.measures.join(', ') || '(none)'}`,
|
|
73
|
+
`Numeric attributes on things: ${schema.nodeAttrs.join(', ') || '(none)'}`,
|
|
74
|
+
'',
|
|
75
|
+
'Channels:',
|
|
76
|
+
channels,
|
|
77
|
+
'',
|
|
78
|
+
current ? `Current spec (change as little as needed):\n${JSON.stringify(current, null, 2)}` : '',
|
|
79
|
+
'',
|
|
80
|
+
'Shape of the answer:',
|
|
81
|
+
JSON.stringify({
|
|
82
|
+
nodeKey: ['service'],
|
|
83
|
+
where: { env: ['prod'] },
|
|
84
|
+
channels: { hue: { field: 'region' }, coupling: { field: 'failure' }, distance: { field: 'share' } },
|
|
85
|
+
mode: 'world',
|
|
86
|
+
world: { tierBy: 'kind', instances: 'instances', gauges: ['cpu', 'mem'] },
|
|
87
|
+
title: 'one short sentence describing what this view shows',
|
|
88
|
+
}, null, 2),
|
|
89
|
+
]
|
|
90
|
+
.filter(Boolean)
|
|
91
|
+
.join('\n');
|
|
92
|
+
return { system, user };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Validate a proposed spec against the table and the registry.
|
|
96
|
+
*
|
|
97
|
+
* Everything unrecognised is dropped with a reason rather than rejected whole:
|
|
98
|
+
* a proposal that got four things right and one wrong is still worth rendering,
|
|
99
|
+
* and the dropped item is reported so the user can see what happened.
|
|
100
|
+
*/
|
|
101
|
+
export function validateSpec(raw, schema) {
|
|
102
|
+
const issues = [];
|
|
103
|
+
const input = (raw ?? {});
|
|
104
|
+
const dimByName = new Map(schema.dimensions.map((d) => [d.name, d]));
|
|
105
|
+
const known = (field) => dimByName.has(field) || schema.measures.includes(field) || schema.nodeAttrs.includes(field);
|
|
106
|
+
const nodeKey = [];
|
|
107
|
+
for (const k of asStringArray(input.nodeKey)) {
|
|
108
|
+
const dim = dimByName.get(k);
|
|
109
|
+
if (!dim)
|
|
110
|
+
issues.push(`nodeKey: no dimension called "${k}"`);
|
|
111
|
+
else if (!dim.endpoint)
|
|
112
|
+
issues.push(`nodeKey: "${k}" is a flow dimension and cannot identify a node`);
|
|
113
|
+
else
|
|
114
|
+
nodeKey.push(k);
|
|
115
|
+
}
|
|
116
|
+
const where = {};
|
|
117
|
+
for (const [field, values] of Object.entries(asRecord(input.where))) {
|
|
118
|
+
const dim = dimByName.get(field);
|
|
119
|
+
if (!dim) {
|
|
120
|
+
issues.push(`where: no dimension called "${field}"`);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const allowed = asStringArray(values).filter((v) => {
|
|
124
|
+
const ok = !dim.truncated ? dim.values.includes(v) : true;
|
|
125
|
+
if (!ok)
|
|
126
|
+
issues.push(`where.${field}: "${v}" is not a value of that dimension`);
|
|
127
|
+
return ok;
|
|
128
|
+
});
|
|
129
|
+
if (allowed.length)
|
|
130
|
+
where[field] = allowed;
|
|
131
|
+
}
|
|
132
|
+
const channels = {};
|
|
133
|
+
for (const [name, value] of Object.entries(asRecord(input.channels))) {
|
|
134
|
+
const def = CHANNELS[name];
|
|
135
|
+
if (!def) {
|
|
136
|
+
issues.push(`channels: "${name}" is not a channel`);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const binding = asRecord(value);
|
|
140
|
+
const field = typeof binding.field === 'string' ? binding.field : typeof value === 'string' ? value : '';
|
|
141
|
+
if (!field || !known(field)) {
|
|
142
|
+
issues.push(`channels.${name}: no field called "${field || '(missing)'}"`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const measure = isMeasure(field) || schema.nodeAttrs.includes(field);
|
|
146
|
+
if (def.accepts === 'measure' && !measure) {
|
|
147
|
+
issues.push(`channels.${name}: needs a measure, but "${field}" is a dimension`);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (def.accepts === 'dimension' && measure) {
|
|
151
|
+
issues.push(`channels.${name}: needs a dimension, but "${field}" is a measure`);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const dim = dimByName.get(field);
|
|
155
|
+
if (def.maxCardinality && dim && dim.cardinality > def.maxCardinality) {
|
|
156
|
+
issues.push(`channels.${name}: "${field}" has ${dim.cardinality} values, more than ${name} can show (${def.maxCardinality})`);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const out = { field };
|
|
160
|
+
if (binding.scale === 'log' || binding.scale === 'linear' || binding.scale === 'sqrt')
|
|
161
|
+
out.scale = binding.scale;
|
|
162
|
+
if (binding.invert === true)
|
|
163
|
+
out.invert = true;
|
|
164
|
+
if (typeof binding.strength === 'number' && Number.isFinite(binding.strength)) {
|
|
165
|
+
out.strength = Math.max(0, Math.min(3, binding.strength));
|
|
166
|
+
}
|
|
167
|
+
const order = asStringArray(binding.order);
|
|
168
|
+
if (order.length)
|
|
169
|
+
out.order = order;
|
|
170
|
+
const map = asRecord(binding.map);
|
|
171
|
+
if (Object.keys(map).length) {
|
|
172
|
+
out.map = Object.fromEntries(Object.entries(map).filter(([, v]) => typeof v === 'string'));
|
|
173
|
+
}
|
|
174
|
+
channels[name] = out;
|
|
175
|
+
}
|
|
176
|
+
const spec = { nodeKey };
|
|
177
|
+
if (Object.keys(where).length)
|
|
178
|
+
spec.where = where;
|
|
179
|
+
if (Object.keys(channels).length)
|
|
180
|
+
spec.channels = channels;
|
|
181
|
+
if (input.mode === 'world' || input.mode === 'flat')
|
|
182
|
+
spec.mode = input.mode;
|
|
183
|
+
const layout = asRecord(input.layout);
|
|
184
|
+
if (layout.rowSort === 'auto' || layout.rowSort === 'name' || layout.rowSort === 'traffic')
|
|
185
|
+
spec.layout = { rowSort: layout.rowSort };
|
|
186
|
+
if (typeof input.title === 'string')
|
|
187
|
+
spec.title = input.title.slice(0, 160);
|
|
188
|
+
if (input.dropSelfEdges === true)
|
|
189
|
+
spec.dropSelfEdges = true;
|
|
190
|
+
const killed = asStringArray(input.killed);
|
|
191
|
+
if (killed.length)
|
|
192
|
+
spec.killed = killed;
|
|
193
|
+
const focus = asRecord(input.focus);
|
|
194
|
+
const expandBy = asStringArray(focus.expandBy).filter((f) => dimByName.get(f)?.endpoint);
|
|
195
|
+
const match = Object.fromEntries(Object.entries(asRecord(focus.match)).filter(([k, v]) => dimByName.has(k) && typeof v === 'string'));
|
|
196
|
+
if (expandBy.length && Object.keys(match).length)
|
|
197
|
+
spec.focus = { match, expandBy };
|
|
198
|
+
const world = asRecord(input.world);
|
|
199
|
+
if (Object.keys(world).length) {
|
|
200
|
+
const w = {};
|
|
201
|
+
if (typeof world.tierBy === 'string' && dimByName.has(world.tierBy))
|
|
202
|
+
w.tierBy = world.tierBy;
|
|
203
|
+
else if (world.tierBy)
|
|
204
|
+
issues.push(`world.tierBy: no dimension called "${String(world.tierBy)}"`);
|
|
205
|
+
const tiers = asStringArray(world.tiers);
|
|
206
|
+
if (tiers.length)
|
|
207
|
+
w.tiers = tiers;
|
|
208
|
+
if (typeof world.componentBy === 'string' && dimByName.has(world.componentBy))
|
|
209
|
+
w.componentBy = world.componentBy;
|
|
210
|
+
const map = asRecord(world.componentMap);
|
|
211
|
+
const componentMap = {};
|
|
212
|
+
for (const [k, v] of Object.entries(map)) {
|
|
213
|
+
if (typeof v === 'string' && COMPONENTS[v])
|
|
214
|
+
componentMap[k] = v;
|
|
215
|
+
else
|
|
216
|
+
issues.push(`world.componentMap.${k}: "${String(v)}" is not a registered component`);
|
|
217
|
+
}
|
|
218
|
+
if (Object.keys(componentMap).length)
|
|
219
|
+
w.componentMap = componentMap;
|
|
220
|
+
if (typeof world.instances === 'string' && schema.nodeAttrs.includes(world.instances))
|
|
221
|
+
w.instances = world.instances;
|
|
222
|
+
const gauges = asStringArray(world.gauges).filter((g) => schema.nodeAttrs.includes(g));
|
|
223
|
+
if (gauges.length)
|
|
224
|
+
w.gauges = gauges.slice(0, 4);
|
|
225
|
+
if (Object.keys(w).length)
|
|
226
|
+
spec.world = w;
|
|
227
|
+
}
|
|
228
|
+
return { spec, issues };
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* A deterministic reading of the request, used when no model is available and
|
|
232
|
+
* as the floor under a bad proposal. Crude on purpose: it should never surprise
|
|
233
|
+
* anyone, and it makes the tests reproducible.
|
|
234
|
+
*/
|
|
235
|
+
export function heuristicSpec(request, schema, current) {
|
|
236
|
+
const q = request.toLowerCase();
|
|
237
|
+
const has = (name) => schema.dimensions.some((d) => d.name === name && d.endpoint);
|
|
238
|
+
const dim = (name) => schema.dimensions.some((d) => d.name === name);
|
|
239
|
+
const nodeKey = [];
|
|
240
|
+
if (has('region') && q.includes('region'))
|
|
241
|
+
nodeKey.push('region');
|
|
242
|
+
if (has('service'))
|
|
243
|
+
nodeKey.push('service');
|
|
244
|
+
if (has('api') && /\bapi|endpoint|route/.test(q))
|
|
245
|
+
nodeKey.push('api');
|
|
246
|
+
if (!nodeKey.length)
|
|
247
|
+
nodeKey.push(schema.dimensions.find((d) => d.endpoint)?.name ?? 'service');
|
|
248
|
+
const channels = {};
|
|
249
|
+
if (dim('failure') && /fail|blast|outage|kill|resilien|depend/.test(q))
|
|
250
|
+
channels.coupling = { field: 'failure' };
|
|
251
|
+
if (dim('region') && !nodeKey.includes('region') && /region|geo|locality/.test(q))
|
|
252
|
+
channels.hue = { field: 'region' };
|
|
253
|
+
else if (dim('env') && /env|prod|staging/.test(q))
|
|
254
|
+
channels.hue = { field: 'env' };
|
|
255
|
+
if (/cluster|close|near|coupl|distance/.test(q)) {
|
|
256
|
+
channels.distance = dim('team') && /team|owner/.test(q) ? { field: 'team' } : { field: /volume|rps|heavy/.test(q) ? 'rps' : 'share' };
|
|
257
|
+
}
|
|
258
|
+
if (/error|failing|5xx/.test(q))
|
|
259
|
+
channels.radius = { field: 'errorRate', scale: 'sqrt' };
|
|
260
|
+
if (/slow|latency|p99/.test(q))
|
|
261
|
+
channels.speed = { field: 'latencyMs' };
|
|
262
|
+
const spec = { nodeKey };
|
|
263
|
+
if (Object.keys(channels).length)
|
|
264
|
+
spec.channels = channels;
|
|
265
|
+
const wantsWorld = /world|3d|instance|capacity|cpu|memory|shape|machine|fleet/.test(q);
|
|
266
|
+
if (wantsWorld) {
|
|
267
|
+
spec.mode = 'world';
|
|
268
|
+
spec.world = {
|
|
269
|
+
...(schema.nodeAttrs.includes('instances') ? { instances: 'instances' } : {}),
|
|
270
|
+
gauges: ['cpu', 'mem'].filter((g) => schema.nodeAttrs.includes(g)),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
else if (current?.mode) {
|
|
274
|
+
spec.mode = current.mode;
|
|
275
|
+
if (current.world)
|
|
276
|
+
spec.world = current.world;
|
|
277
|
+
}
|
|
278
|
+
const envDim = schema.dimensions.find((d) => d.name === 'env');
|
|
279
|
+
if (envDim?.values.includes('prod') && /prod/.test(q))
|
|
280
|
+
spec.where = { env: ['prod'] };
|
|
281
|
+
spec.title = request.slice(0, 160);
|
|
282
|
+
return spec;
|
|
283
|
+
}
|
|
284
|
+
// --- parsing helpers -------------------------------------------------------
|
|
285
|
+
/** Pull the first balanced JSON object out of a model response, fences and all. */
|
|
286
|
+
export function extractJson(text) {
|
|
287
|
+
const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
288
|
+
const body = fenced?.[1] ?? text;
|
|
289
|
+
const start = body.indexOf('{');
|
|
290
|
+
if (start < 0)
|
|
291
|
+
return null;
|
|
292
|
+
let depth = 0;
|
|
293
|
+
let inString = false;
|
|
294
|
+
let escape = false;
|
|
295
|
+
for (let i = start; i < body.length; i++) {
|
|
296
|
+
const ch = body[i];
|
|
297
|
+
if (inString) {
|
|
298
|
+
if (escape)
|
|
299
|
+
escape = false;
|
|
300
|
+
else if (ch === '\\')
|
|
301
|
+
escape = true;
|
|
302
|
+
else if (ch === '"')
|
|
303
|
+
inString = false;
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
if (ch === '"')
|
|
307
|
+
inString = true;
|
|
308
|
+
else if (ch === '{')
|
|
309
|
+
depth++;
|
|
310
|
+
else if (ch === '}' && --depth === 0) {
|
|
311
|
+
try {
|
|
312
|
+
return JSON.parse(body.slice(start, i + 1));
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
function asRecord(v) {
|
|
322
|
+
return v && typeof v === 'object' && !Array.isArray(v) ? v : {};
|
|
323
|
+
}
|
|
324
|
+
function asStringArray(v) {
|
|
325
|
+
if (typeof v === 'string')
|
|
326
|
+
return [v];
|
|
327
|
+
return Array.isArray(v) ? v.filter((x) => typeof x === 'string') : [];
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { FlowTable } from '../model.js';
|
|
2
|
+
import { type Theme } from '../theme.js';
|
|
3
|
+
import { search as searchModel, type AtlasModel, type AtlasModelOptions, type AtlasState } from './model.js';
|
|
4
|
+
import { type Rect } from './layout.js';
|
|
5
|
+
export type LensName = 'traffic' | 'reliability' | 'latency' | 'ownership' | 'kafka' | 'blast';
|
|
6
|
+
export declare const LENSES: Record<LensName, {
|
|
7
|
+
label: string;
|
|
8
|
+
summary: string;
|
|
9
|
+
}>;
|
|
10
|
+
export interface AtlasHover {
|
|
11
|
+
kind: 'unit' | 'edge' | 'band';
|
|
12
|
+
id: string;
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
}
|
|
16
|
+
export interface AtlasOptions extends AtlasModelOptions {
|
|
17
|
+
theme?: 'auto' | 'light' | 'dark' | Theme;
|
|
18
|
+
lens?: LensName;
|
|
19
|
+
animate?: boolean;
|
|
20
|
+
seed?: number;
|
|
21
|
+
/** Screen areas covered by the page's own chrome, so fits avoid them. */
|
|
22
|
+
insets?: {
|
|
23
|
+
top?: number;
|
|
24
|
+
right?: number;
|
|
25
|
+
bottom?: number;
|
|
26
|
+
left?: number;
|
|
27
|
+
};
|
|
28
|
+
onState?: (state: AtlasState) => void;
|
|
29
|
+
onHover?: (hover: AtlasHover | null) => void;
|
|
30
|
+
onSelect?: (id: string | null) => void;
|
|
31
|
+
onCamera?: () => void;
|
|
32
|
+
}
|
|
33
|
+
export interface InspectEntry {
|
|
34
|
+
id: string;
|
|
35
|
+
label: string;
|
|
36
|
+
kind: string;
|
|
37
|
+
rps: number;
|
|
38
|
+
latencyMs: number;
|
|
39
|
+
errorRate: number;
|
|
40
|
+
async: boolean;
|
|
41
|
+
rigid: boolean;
|
|
42
|
+
apis: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface Inspection {
|
|
45
|
+
id: string;
|
|
46
|
+
kind: 'leaf' | 'group';
|
|
47
|
+
label: string;
|
|
48
|
+
path: string[];
|
|
49
|
+
dims: Record<string, string>;
|
|
50
|
+
attrs: Record<string, number>;
|
|
51
|
+
inRps: number;
|
|
52
|
+
outRps: number;
|
|
53
|
+
errorRate: number;
|
|
54
|
+
members: number;
|
|
55
|
+
upstream: InspectEntry[];
|
|
56
|
+
downstream: InspectEntry[];
|
|
57
|
+
health: 'ok' | 'degraded' | 'dead';
|
|
58
|
+
}
|
|
59
|
+
interface Camera {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
scale: number;
|
|
63
|
+
}
|
|
64
|
+
export declare class Atlas {
|
|
65
|
+
private container;
|
|
66
|
+
private canvas;
|
|
67
|
+
private ctx;
|
|
68
|
+
private tooltip;
|
|
69
|
+
private theme;
|
|
70
|
+
private opts;
|
|
71
|
+
private rand;
|
|
72
|
+
private model;
|
|
73
|
+
private state;
|
|
74
|
+
private lens;
|
|
75
|
+
private units;
|
|
76
|
+
private unitById;
|
|
77
|
+
private expanded;
|
|
78
|
+
private layoutResult;
|
|
79
|
+
private edges;
|
|
80
|
+
private unitOf;
|
|
81
|
+
private internal;
|
|
82
|
+
private domainRps;
|
|
83
|
+
private health;
|
|
84
|
+
private trailIds;
|
|
85
|
+
private trailEdges;
|
|
86
|
+
private ego;
|
|
87
|
+
/** Where every shape (tile or band) is now, and where it is going. */
|
|
88
|
+
private shapes;
|
|
89
|
+
private shapesFrom;
|
|
90
|
+
private shapesTo;
|
|
91
|
+
private morphStart;
|
|
92
|
+
private morphing;
|
|
93
|
+
private appearing;
|
|
94
|
+
private camera;
|
|
95
|
+
private cameraFrom;
|
|
96
|
+
private cameraTo;
|
|
97
|
+
private cameraStart;
|
|
98
|
+
private fitScale;
|
|
99
|
+
private views;
|
|
100
|
+
private particles;
|
|
101
|
+
private dash;
|
|
102
|
+
private width;
|
|
103
|
+
private height;
|
|
104
|
+
private dpr;
|
|
105
|
+
private raf;
|
|
106
|
+
private last;
|
|
107
|
+
private hovered;
|
|
108
|
+
private pointer;
|
|
109
|
+
private drag;
|
|
110
|
+
private lastSemantic;
|
|
111
|
+
private resizeObserver?;
|
|
112
|
+
private groupColour;
|
|
113
|
+
constructor(container: HTMLElement, options?: AtlasOptions);
|
|
114
|
+
setTable(table: FlowTable, options?: AtlasModelOptions): void;
|
|
115
|
+
getModel(): AtlasModel | null;
|
|
116
|
+
getState(): AtlasState;
|
|
117
|
+
setState(state: Partial<AtlasState>, fitTo?: string | null): void;
|
|
118
|
+
getLens(): LensName;
|
|
119
|
+
setLens(lens: LensName): void;
|
|
120
|
+
setTheme(theme: 'auto' | 'light' | 'dark' | Theme): void;
|
|
121
|
+
expand(id: string, fit?: boolean): void;
|
|
122
|
+
collapse(id: string, fit?: boolean): void;
|
|
123
|
+
toggle(id: string): void;
|
|
124
|
+
/** Collapse one level: the deepest expanded group containing the focus, else the most recently expanded. */
|
|
125
|
+
up(): void;
|
|
126
|
+
collapseAll(): void;
|
|
127
|
+
focus(id: string | null, hops?: number): void;
|
|
128
|
+
setHops(hops: number): void;
|
|
129
|
+
kill(ids: string[]): void;
|
|
130
|
+
revive(): void;
|
|
131
|
+
setTrail(from: string, to: string): string[] | null;
|
|
132
|
+
clearTrail(): void;
|
|
133
|
+
search(query: string, limit?: number): ReturnType<typeof searchModel>;
|
|
134
|
+
/** Expand down to a unit and centre it. Works for leaves and groups. */
|
|
135
|
+
goTo(id: string): void;
|
|
136
|
+
/** Where the viewer is: the expanded chain that contains the focus, or the deepest expanded chain. */
|
|
137
|
+
breadcrumb(): {
|
|
138
|
+
id: string;
|
|
139
|
+
label: string;
|
|
140
|
+
kind: string;
|
|
141
|
+
}[];
|
|
142
|
+
inspect(id: string): Inspection | null;
|
|
143
|
+
/** Animate the camera to a unit, a band, `ego:<leaf>`, `trail`, or the whole map. */
|
|
144
|
+
fit(target?: string, animate?: boolean): void;
|
|
145
|
+
zoomTo(rect: Rect, animate?: boolean): void;
|
|
146
|
+
getCamera(): Camera;
|
|
147
|
+
panBy(dx: number, dy: number): void;
|
|
148
|
+
/** Paint the whole map as a heat strip with the viewport, into another canvas. */
|
|
149
|
+
drawMinimap(canvas: HTMLCanvasElement): void;
|
|
150
|
+
/** Map a click on the minimap to a camera move. */
|
|
151
|
+
minimapClick(canvas: HTMLCanvasElement, px: number, py: number): void;
|
|
152
|
+
toDataURL(type?: string): string;
|
|
153
|
+
stats(): {
|
|
154
|
+
units: number;
|
|
155
|
+
edges: number;
|
|
156
|
+
leaves: number;
|
|
157
|
+
particles: number;
|
|
158
|
+
};
|
|
159
|
+
destroy(): void;
|
|
160
|
+
private rebuild;
|
|
161
|
+
private ancestorShape;
|
|
162
|
+
private egoRect;
|
|
163
|
+
private union;
|
|
164
|
+
private start;
|
|
165
|
+
private step;
|
|
166
|
+
private buildViews;
|
|
167
|
+
private showEdge;
|
|
168
|
+
private stepParticles;
|
|
169
|
+
private isLeafEdge;
|
|
170
|
+
private touchesEgo;
|
|
171
|
+
private resize;
|
|
172
|
+
private computeFitScale;
|
|
173
|
+
private toScreen;
|
|
174
|
+
private toWorld;
|
|
175
|
+
private draw;
|
|
176
|
+
private drawColumns;
|
|
177
|
+
private drawBands;
|
|
178
|
+
private drawEdge;
|
|
179
|
+
private drawParticles;
|
|
180
|
+
private drawUnit;
|
|
181
|
+
/** A Kafka topic: a pipe, partition ticks, lag filling it from the left. */
|
|
182
|
+
private drawRail;
|
|
183
|
+
private drawGlow;
|
|
184
|
+
private hatch;
|
|
185
|
+
private rootOf;
|
|
186
|
+
private colourOf;
|
|
187
|
+
private fillOf;
|
|
188
|
+
private edgeColour;
|
|
189
|
+
private brighten;
|
|
190
|
+
private errorOf;
|
|
191
|
+
private hit;
|
|
192
|
+
private onDown;
|
|
193
|
+
private onMove;
|
|
194
|
+
private onUp;
|
|
195
|
+
private onLeave;
|
|
196
|
+
private onDbl;
|
|
197
|
+
private onWheel;
|
|
198
|
+
/** Zoom around a screen point, with semantic zoom at the ends of the range. */
|
|
199
|
+
zoomAt(sx: number, sy: number, factor: number): void;
|
|
200
|
+
private updateTooltip;
|
|
201
|
+
}
|
|
202
|
+
export {};
|
|
203
|
+
//# sourceMappingURL=atlas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas.d.ts","sourceRoot":"","sources":["../../src/atlas/atlas.ts"],"names":[],"mappings":"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"}
|