inspeffct 1.0.4 → 1.0.5
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/dist/bin.js +179 -63
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import * as NodeRuntime from '@effect/platform-node/NodeRuntime';
|
|
3
3
|
import * as NodeServices from '@effect/platform-node/NodeServices';
|
|
4
4
|
import * as Effect10 from 'effect/Effect';
|
|
5
|
-
import * as
|
|
6
|
-
import * as
|
|
5
|
+
import * as Command6 from 'effect/unstable/cli/Command';
|
|
6
|
+
import * as Argument3 from 'effect/unstable/cli/Argument';
|
|
7
7
|
import * as Context4 from 'effect/Context';
|
|
8
8
|
import * as Fiber from 'effect/Fiber';
|
|
9
9
|
import * as FileSystem from 'effect/FileSystem';
|
|
@@ -332,9 +332,9 @@ var randomUUID = Effect10.gen(function* () {
|
|
|
332
332
|
hex.slice(10, 16).join("")
|
|
333
333
|
].join("-");
|
|
334
334
|
});
|
|
335
|
-
var
|
|
335
|
+
var RunId = class extends Context4.Service()("inspeffct/RunId") {
|
|
336
336
|
};
|
|
337
|
-
var layer3 = Layer8.effect(
|
|
337
|
+
var layer3 = Layer8.effect(RunId, randomUUID);
|
|
338
338
|
var isSchema = (u) => typeof u === "object" && u !== null && "ast" in u;
|
|
339
339
|
var getMembers = (schema) => "members" in schema && Array.isArray(schema.members) ? schema.members : "cases" in schema ? Object.values(schema.cases) : [schema];
|
|
340
340
|
var evolveNested = (schema, evolve2) => {
|
|
@@ -516,13 +516,13 @@ var create_otel_tables_default = Effect10.gen(function* () {
|
|
|
516
516
|
});
|
|
517
517
|
var create_span_exits_table_default = Effect10.void;
|
|
518
518
|
var simplify_span_exits_default = Effect10.void;
|
|
519
|
-
var
|
|
519
|
+
var add_run_id_default = Effect10.gen(function* () {
|
|
520
520
|
const sql = yield* SqlClient5.SqlClient;
|
|
521
|
-
yield* sql`ALTER TABLE spans ADD COLUMN
|
|
522
|
-
Effect10.withSpan("
|
|
521
|
+
yield* sql`ALTER TABLE spans ADD COLUMN run_id TEXT NOT NULL DEFAULT ''`.pipe(
|
|
522
|
+
Effect10.withSpan("add_spans_run_id")
|
|
523
523
|
);
|
|
524
|
-
yield* sql`CREATE INDEX
|
|
525
|
-
Effect10.withSpan("
|
|
524
|
+
yield* sql`CREATE INDEX idx_spans_run_id ON spans(run_id)`.pipe(
|
|
525
|
+
Effect10.withSpan("create_idx_spans_run_id")
|
|
526
526
|
);
|
|
527
527
|
});
|
|
528
528
|
|
|
@@ -594,7 +594,7 @@ var DbExternalSpan = ExternalSpan.pipe(
|
|
|
594
594
|
);
|
|
595
595
|
var DbAnySpan = Schema.Union([DbSpan, DbExternalSpan]);
|
|
596
596
|
var TraceSummary = Schema.Struct({
|
|
597
|
-
|
|
597
|
+
run_id: Schema.String,
|
|
598
598
|
trace_id: Schema.String,
|
|
599
599
|
span_count: NumberFromBigInt,
|
|
600
600
|
root_span_name: Schema.NullOr(Schema.String),
|
|
@@ -620,7 +620,7 @@ var MigrationsLoader = Migrator.fromRecord({
|
|
|
620
620
|
"0001_create_otel_tables": create_otel_tables_default,
|
|
621
621
|
"0002_create_span_exits_table": create_span_exits_table_default,
|
|
622
622
|
"0003_simplify_span_exits": simplify_span_exits_default,
|
|
623
|
-
"
|
|
623
|
+
"0004_add_run_id": add_run_id_default
|
|
624
624
|
});
|
|
625
625
|
var runMigrations = Migrator.make({})({
|
|
626
626
|
loader: MigrationsLoader
|
|
@@ -630,14 +630,14 @@ var layer5 = (config) => Layer8.effectContext(
|
|
|
630
630
|
const sql = yield* SqliteClient.SqliteClient;
|
|
631
631
|
yield* runMigrations;
|
|
632
632
|
const storage = Storage.of({
|
|
633
|
-
persistSpan: (span,
|
|
633
|
+
persistSpan: (span, runId) => Effect10.gen(function* () {
|
|
634
634
|
const changed = yield* (
|
|
635
635
|
// @ts-ignore TS28 false positive from SqlSchema service inference
|
|
636
636
|
SqlSchema.findOne({
|
|
637
637
|
Request: DbAnySpan,
|
|
638
638
|
Result: Schema.Struct({ span_id: Schema.String }),
|
|
639
639
|
execute: (db) => {
|
|
640
|
-
const row = { ...db,
|
|
640
|
+
const row = { ...db, run_id: runId };
|
|
641
641
|
return sql`
|
|
642
642
|
INSERT INTO spans ${sql.insert(row)}
|
|
643
643
|
ON CONFLICT(span_id) DO UPDATE SET
|
|
@@ -756,22 +756,22 @@ var layer5 = (config) => Layer8.effectContext(
|
|
|
756
756
|
}),
|
|
757
757
|
getTraces: (filters = {}) => SqlSchema.findAll({
|
|
758
758
|
Request: Schema.Struct({
|
|
759
|
-
executionId: Schema.optional(Schema.String),
|
|
760
759
|
limit: Schema.optional(Schema.Number),
|
|
760
|
+
runId: Schema.optional(Schema.String),
|
|
761
761
|
since: Schema.optional(Schema.BigInt),
|
|
762
762
|
status: Schema.optional(Schema.Number)
|
|
763
763
|
}),
|
|
764
764
|
Result: TraceSummary,
|
|
765
765
|
execute: (req) => sql`
|
|
766
766
|
SELECT
|
|
767
|
-
s.
|
|
767
|
+
s.run_id,
|
|
768
768
|
s.trace_id,
|
|
769
769
|
COUNT(*) as span_count,
|
|
770
770
|
(
|
|
771
771
|
SELECT name
|
|
772
772
|
FROM spans
|
|
773
773
|
WHERE trace_id = s.trace_id
|
|
774
|
-
AND
|
|
774
|
+
AND run_id = s.run_id
|
|
775
775
|
AND parent_span_id IS NULL
|
|
776
776
|
LIMIT 1
|
|
777
777
|
) as root_span_name,
|
|
@@ -786,7 +786,7 @@ var layer5 = (config) => Layer8.effectContext(
|
|
|
786
786
|
) as status
|
|
787
787
|
FROM spans s
|
|
788
788
|
WHERE ${sql.and([
|
|
789
|
-
req.
|
|
789
|
+
req.runId !== void 0 ? sql`s.run_id = ${req.runId}` : sql`1=1`,
|
|
790
790
|
req.since !== void 0 ? sql`s.start_time >= ${req.since}` : sql`1=1`,
|
|
791
791
|
req.status !== void 0 ? sql`
|
|
792
792
|
CASE
|
|
@@ -796,7 +796,7 @@ var layer5 = (config) => Layer8.effectContext(
|
|
|
796
796
|
END = ${req.status}
|
|
797
797
|
` : sql`1=1`
|
|
798
798
|
])}
|
|
799
|
-
GROUP BY s.
|
|
799
|
+
GROUP BY s.run_id, s.trace_id
|
|
800
800
|
ORDER BY start_time DESC
|
|
801
801
|
${req.limit !== void 0 ? sql`LIMIT ${req.limit}` : sql``}
|
|
802
802
|
`
|
|
@@ -807,10 +807,11 @@ var layer5 = (config) => Layer8.effectContext(
|
|
|
807
807
|
// @ts-ignore TS28 false positive from SqlSchema service inference
|
|
808
808
|
SqlSchema.findAll({
|
|
809
809
|
Request: Schema.Struct({
|
|
810
|
-
executionId: Schema.optional(Schema.String),
|
|
811
810
|
limit: Schema.optional(Schema.Number),
|
|
812
811
|
minDuration: Schema.optional(Schema.BigInt),
|
|
813
812
|
name: Schema.optional(Schema.String),
|
|
813
|
+
runId: Schema.optional(Schema.String),
|
|
814
|
+
spanId: Schema.optional(Schema.String),
|
|
814
815
|
status: Schema.optional(Schema.Number),
|
|
815
816
|
traceId: Schema.optional(Schema.String)
|
|
816
817
|
}),
|
|
@@ -819,7 +820,8 @@ var layer5 = (config) => Layer8.effectContext(
|
|
|
819
820
|
SELECT s.*
|
|
820
821
|
FROM spans s
|
|
821
822
|
WHERE ${sql.and([
|
|
822
|
-
req.
|
|
823
|
+
req.runId !== void 0 ? sql`s.run_id = ${req.runId}` : sql`1=1`,
|
|
824
|
+
req.spanId !== void 0 ? sql`s.span_id = ${req.spanId}` : sql`1=1`,
|
|
823
825
|
req.traceId !== void 0 ? sql`s.trace_id = ${req.traceId}` : sql`1=1`,
|
|
824
826
|
req.name !== void 0 ? req.name.includes("%") ? sql`s.name LIKE ${req.name}` : sql`s.name = ${req.name}` : sql`1=1`,
|
|
825
827
|
req.minDuration !== void 0 ? sql`(s.end_time - s.start_time) >= ${req.minDuration}` : sql`1=1`,
|
|
@@ -849,7 +851,7 @@ var EventCollector = class extends Context4.Service()("inspeffct/EventCollector"
|
|
|
849
851
|
var layer6 = Layer8.effect(
|
|
850
852
|
EventCollector,
|
|
851
853
|
Effect10.gen(function* () {
|
|
852
|
-
const
|
|
854
|
+
const runId = yield* RunId;
|
|
853
855
|
const storage = yield* Storage;
|
|
854
856
|
return EventCollector.of({
|
|
855
857
|
collect: (message) => Effect10.gen(function* () {
|
|
@@ -863,12 +865,10 @@ var layer6 = Layer8.effect(
|
|
|
863
865
|
case "TracerSpanNotification": {
|
|
864
866
|
const { instrumentationId, span } = message;
|
|
865
867
|
yield* Effect10.logDebug(`${message._tag} from ${instrumentationId}`);
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
);
|
|
871
|
-
}
|
|
868
|
+
yield* storage.persistSpan(span, runId);
|
|
869
|
+
yield* Effect10.logDebug(
|
|
870
|
+
`Persisted span (${span.traceId}, ${span.spanId}) to storage`
|
|
871
|
+
);
|
|
872
872
|
break;
|
|
873
873
|
}
|
|
874
874
|
case "TracerSpanEventNotification": {
|
|
@@ -1139,16 +1139,16 @@ var buildEnv = (bootloaderPath, ipcPath) => {
|
|
|
1139
1139
|
};
|
|
1140
1140
|
};
|
|
1141
1141
|
var makeServicesLayer = (dataPath) => {
|
|
1142
|
-
const
|
|
1142
|
+
const runIdLayer = layer3;
|
|
1143
1143
|
const storageLayer = layer5({ filename: dataPath });
|
|
1144
1144
|
const eventCollectorLayer = layer6.pipe(
|
|
1145
|
-
Layer8.provide(
|
|
1145
|
+
Layer8.provide(runIdLayer),
|
|
1146
1146
|
Layer8.provide(storageLayer)
|
|
1147
1147
|
);
|
|
1148
1148
|
const bootloaderPathLayer = layer.pipe(Layer8.provide(NodePath.layer));
|
|
1149
1149
|
return Layer8.mergeAll(
|
|
1150
|
-
executionIdLayer,
|
|
1151
1150
|
layer8,
|
|
1151
|
+
runIdLayer,
|
|
1152
1152
|
bootloaderPathLayer,
|
|
1153
1153
|
layer7.pipe(
|
|
1154
1154
|
Layer8.provide(layer2),
|
|
@@ -1163,12 +1163,12 @@ var makeServicesLayer = (dataPath) => {
|
|
|
1163
1163
|
var makeReadOnlyLayer = (dataPath) => layer5({ filename: dataPath });
|
|
1164
1164
|
|
|
1165
1165
|
// src/cli/connect.ts
|
|
1166
|
-
var command =
|
|
1166
|
+
var command = Command6.make(
|
|
1167
1167
|
"connect",
|
|
1168
1168
|
{
|
|
1169
1169
|
data: dataOption,
|
|
1170
|
-
url:
|
|
1171
|
-
|
|
1170
|
+
url: Argument3.string("url").pipe(
|
|
1171
|
+
Argument3.withDescription("WebSocket URL of the inspector (ws://...)")
|
|
1172
1172
|
)
|
|
1173
1173
|
},
|
|
1174
1174
|
({ data, url }) => Effect10.gen(function* () {
|
|
@@ -1182,7 +1182,7 @@ var command = Command5.make(
|
|
|
1182
1182
|
Effect10.scoped,
|
|
1183
1183
|
Effect10.provide(makeServicesLayer(data))
|
|
1184
1184
|
)
|
|
1185
|
-
).pipe(
|
|
1185
|
+
).pipe(Command6.withDescription("Connect to an existing CDP inspector endpoint"));
|
|
1186
1186
|
var NODE_INSPECTOR_REGEX = /Debugger listening on (ws:\/\/[^\s]+)/;
|
|
1187
1187
|
var BUN_INSPECTOR_REGEX = /https:\/\/debug\.bun\.sh\/#([^\s]+)/;
|
|
1188
1188
|
var parseInspectorUrl = (chunk, decoder) => {
|
|
@@ -1197,7 +1197,7 @@ var parseInspectorUrl = (chunk, decoder) => {
|
|
|
1197
1197
|
}
|
|
1198
1198
|
return void 0;
|
|
1199
1199
|
};
|
|
1200
|
-
var command2 =
|
|
1200
|
+
var command2 = Command6.make(
|
|
1201
1201
|
"run",
|
|
1202
1202
|
{
|
|
1203
1203
|
data: dataOption,
|
|
@@ -1205,17 +1205,17 @@ var command2 = Command5.make(
|
|
|
1205
1205
|
Flag3.optional,
|
|
1206
1206
|
Flag3.withHidden
|
|
1207
1207
|
),
|
|
1208
|
-
args:
|
|
1209
|
-
|
|
1210
|
-
|
|
1208
|
+
args: Argument3.string("command").pipe(
|
|
1209
|
+
Argument3.withDescription("The command to run"),
|
|
1210
|
+
Argument3.variadic({ min: 0 })
|
|
1211
1211
|
)
|
|
1212
1212
|
},
|
|
1213
1213
|
({ args, data, encodedCommand }) => Effect10.gen(function* () {
|
|
1214
1214
|
const resolvedArgs = Option3.isSome(encodedCommand) ? JSON.parse(Buffer.from(encodedCommand.value, "base64url").toString("utf8")) : args;
|
|
1215
1215
|
const [rawExecutable, ...commandArgs] = resolvedArgs;
|
|
1216
1216
|
const executable = rawExecutable === "node" ? process.execPath : rawExecutable;
|
|
1217
|
-
const
|
|
1218
|
-
yield* Console2.log(`
|
|
1217
|
+
const runId = yield* RunId;
|
|
1218
|
+
yield* Console2.log(`Run ID: ${runId}`);
|
|
1219
1219
|
yield* Effect10.logDebug(`Running: ${executable} ${commandArgs.join(" ")}`);
|
|
1220
1220
|
yield* Effect10.logDebug(`Data file: ${data}`);
|
|
1221
1221
|
const bootloaderPath = yield* getPath;
|
|
@@ -1268,7 +1268,7 @@ var command2 = Command5.make(
|
|
|
1268
1268
|
Effect10.scoped,
|
|
1269
1269
|
Effect10.provide(makeServicesLayer(data))
|
|
1270
1270
|
)
|
|
1271
|
-
).pipe(
|
|
1271
|
+
).pipe(Command6.withDescription("Run a command with Effect instrumentation"));
|
|
1272
1272
|
var getSpanId = (span) => span.spanId;
|
|
1273
1273
|
var getTraceId = (span) => span.traceId;
|
|
1274
1274
|
var getParentSpanId = (span) => span._tag === "Span" ? span.parentSpanId : null;
|
|
@@ -1393,13 +1393,121 @@ var renderSpanGraph = (graph) => {
|
|
|
1393
1393
|
return rootDocs.filter((doc) => doc.length > 0).join("\n");
|
|
1394
1394
|
};
|
|
1395
1395
|
|
|
1396
|
-
// src/cli/
|
|
1397
|
-
var
|
|
1396
|
+
// src/cli/span.ts
|
|
1397
|
+
var attributesToObject = (attributes) => Object.fromEntries(attributes);
|
|
1398
|
+
var command3 = Command6.make(
|
|
1399
|
+
"span",
|
|
1400
|
+
{
|
|
1401
|
+
data: dataOption,
|
|
1402
|
+
json: jsonOption,
|
|
1403
|
+
traceId: Argument3.string("trace-id").pipe(
|
|
1404
|
+
Argument3.withDescription("The trace ID containing the span")
|
|
1405
|
+
),
|
|
1406
|
+
spanId: Argument3.string("span-id").pipe(
|
|
1407
|
+
Argument3.withDescription("The span ID to display")
|
|
1408
|
+
)
|
|
1409
|
+
},
|
|
1410
|
+
({ data, json, spanId, traceId }) => Effect10.gen(function* () {
|
|
1411
|
+
const storage = yield* Storage;
|
|
1412
|
+
const spans = yield* storage.getSpans({ spanId, traceId });
|
|
1413
|
+
const span = spans[0];
|
|
1414
|
+
if (span === void 0) {
|
|
1415
|
+
yield* Console2.log(`No span found for trace: ${traceId}, span: ${spanId}`);
|
|
1416
|
+
return;
|
|
1417
|
+
}
|
|
1418
|
+
const events = yield* storage.getSpanEvents({ traceId, spanId });
|
|
1419
|
+
const links = yield* storage.getSpanLinks({ traceId, spanId });
|
|
1420
|
+
const startTime = getStartTime(span);
|
|
1421
|
+
const endTime = getEndTime(span);
|
|
1422
|
+
const durationNanos = endTime !== null ? endTime - startTime : null;
|
|
1423
|
+
if (json) {
|
|
1424
|
+
const output = {
|
|
1425
|
+
span: {
|
|
1426
|
+
spanId: getSpanId(span),
|
|
1427
|
+
traceId: getTraceId(span),
|
|
1428
|
+
parentSpanId: getParentSpanId(span),
|
|
1429
|
+
name: getSpanName(span),
|
|
1430
|
+
kind: getSpanKind(span),
|
|
1431
|
+
statusCode: getStatusCode(span),
|
|
1432
|
+
statusMessage: getStatusMessage(span),
|
|
1433
|
+
startTime: formatTimestamp(startTime),
|
|
1434
|
+
endTime: endTime !== null ? formatTimestamp(endTime) : null,
|
|
1435
|
+
durationMs: durationNanos !== null ? Number(durationNanos / 1000000n) : null,
|
|
1436
|
+
attributes: getAttributes(span),
|
|
1437
|
+
isExternal: isExternalSpan(span)
|
|
1438
|
+
},
|
|
1439
|
+
events: events.map((event) => ({
|
|
1440
|
+
name: event.name,
|
|
1441
|
+
time: formatTimestamp(event.time),
|
|
1442
|
+
attributes: attributesToObject(event.attributes)
|
|
1443
|
+
})),
|
|
1444
|
+
links: links.map((link) => ({
|
|
1445
|
+
linkedSpanId: link.linkedSpanId,
|
|
1446
|
+
linkedTraceId: link.linkedTraceId,
|
|
1447
|
+
attributes: attributesToObject(link.attributes)
|
|
1448
|
+
}))
|
|
1449
|
+
};
|
|
1450
|
+
yield* Console2.log(JSON.stringify(output, null, 2));
|
|
1451
|
+
} else {
|
|
1452
|
+
const fields = [
|
|
1453
|
+
field("Span", getSpanId(span)),
|
|
1454
|
+
field("Name", getSpanName(span)),
|
|
1455
|
+
field("Trace", getTraceId(span)),
|
|
1456
|
+
field("Kind", String(getSpanKind(span))),
|
|
1457
|
+
field("Status", formatStatusDoc(getStatusCode(span))),
|
|
1458
|
+
field("Started", formatTimestamp(startTime)),
|
|
1459
|
+
field("Duration", durationNanos !== null ? formatDuration(durationNanos) : "running")
|
|
1460
|
+
];
|
|
1461
|
+
const parentSpanId = getParentSpanId(span);
|
|
1462
|
+
if (parentSpanId !== null) {
|
|
1463
|
+
fields.push(field("Parent", parentSpanId));
|
|
1464
|
+
}
|
|
1465
|
+
if (endTime !== null) {
|
|
1466
|
+
fields.push(field("Ended", formatTimestamp(endTime)));
|
|
1467
|
+
}
|
|
1468
|
+
const statusMessage = getStatusMessage(span);
|
|
1469
|
+
if (statusMessage !== null) {
|
|
1470
|
+
fields.push(field("Status Message", statusMessage));
|
|
1471
|
+
}
|
|
1472
|
+
const attrs = getAttributes(span);
|
|
1473
|
+
if (Object.keys(attrs).length > 0) {
|
|
1474
|
+
fields.push(field("Attrs", JSON.stringify(attrs)));
|
|
1475
|
+
}
|
|
1476
|
+
const eventDocs = events.length === 0 ? ["Events: none"] : [
|
|
1477
|
+
`Events (${events.length}):`,
|
|
1478
|
+
...events.map((event) => {
|
|
1479
|
+
const attrs2 = attributesToObject(event.attributes);
|
|
1480
|
+
const lines = [` ${event.name} @ ${formatTimestamp(event.time)}`];
|
|
1481
|
+
if (Object.keys(attrs2).length > 0) {
|
|
1482
|
+
lines.push(` ${field("Attrs", JSON.stringify(attrs2))}`);
|
|
1483
|
+
}
|
|
1484
|
+
return lines.join("\n");
|
|
1485
|
+
})
|
|
1486
|
+
];
|
|
1487
|
+
const linkDocs = links.length === 0 ? ["Links: none"] : [
|
|
1488
|
+
`Links (${links.length}):`,
|
|
1489
|
+
...links.map((link) => {
|
|
1490
|
+
const attrs2 = attributesToObject(link.attributes);
|
|
1491
|
+
const lines = [` ${link.linkedTraceId}/${link.linkedSpanId}`];
|
|
1492
|
+
if (Object.keys(attrs2).length > 0) {
|
|
1493
|
+
lines.push(` ${field("Attrs", JSON.stringify(attrs2))}`);
|
|
1494
|
+
}
|
|
1495
|
+
return lines.join("\n");
|
|
1496
|
+
})
|
|
1497
|
+
];
|
|
1498
|
+
yield* Console2.log(renderDoc([...fields, "", ...eventDocs, "", ...linkDocs].join("\n")));
|
|
1499
|
+
}
|
|
1500
|
+
}).pipe(
|
|
1501
|
+
Effect10.scoped,
|
|
1502
|
+
Effect10.provide(makeReadOnlyLayer(data))
|
|
1503
|
+
)
|
|
1504
|
+
).pipe(Command6.withDescription("Show detailed span information"));
|
|
1505
|
+
var command4 = Command6.make(
|
|
1398
1506
|
"spans",
|
|
1399
1507
|
{
|
|
1400
1508
|
data: dataOption,
|
|
1401
|
-
|
|
1402
|
-
Flag3.withDescription("Filter by
|
|
1509
|
+
runId: Flag3.string("run-id").pipe(
|
|
1510
|
+
Flag3.withDescription("Filter by run ID"),
|
|
1403
1511
|
Flag3.optional
|
|
1404
1512
|
),
|
|
1405
1513
|
json: jsonOption,
|
|
@@ -1412,17 +1520,21 @@ var command3 = Command5.make(
|
|
|
1412
1520
|
Flag3.withDescription("Filter by span name (use % for wildcards)"),
|
|
1413
1521
|
Flag3.optional
|
|
1414
1522
|
),
|
|
1523
|
+
spanId: Flag3.string("span-id").pipe(
|
|
1524
|
+
Flag3.withDescription("Filter by span ID"),
|
|
1525
|
+
Flag3.optional
|
|
1526
|
+
),
|
|
1415
1527
|
status: Flag3.string("status").pipe(
|
|
1416
1528
|
Flag3.withDescription("Filter by status: ok, error, unset"),
|
|
1417
1529
|
Flag3.optional
|
|
1418
1530
|
),
|
|
1419
|
-
trace: Flag3.string("trace").pipe(
|
|
1531
|
+
trace: Flag3.string("trace-id").pipe(
|
|
1420
1532
|
Flag3.withAlias("t"),
|
|
1421
1533
|
Flag3.withDescription("Filter by trace ID"),
|
|
1422
1534
|
Flag3.optional
|
|
1423
1535
|
)
|
|
1424
1536
|
},
|
|
1425
|
-
({ data,
|
|
1537
|
+
({ data, json, limit, minDuration, name, runId, spanId, status, trace }) => Effect10.gen(function* () {
|
|
1426
1538
|
const storage = yield* Storage;
|
|
1427
1539
|
let statusCode;
|
|
1428
1540
|
if (Option3.isSome(status)) {
|
|
@@ -1441,7 +1553,8 @@ var command3 = Command5.make(
|
|
|
1441
1553
|
}
|
|
1442
1554
|
}
|
|
1443
1555
|
const filters = {
|
|
1444
|
-
...Option3.isSome(
|
|
1556
|
+
...Option3.isSome(runId) ? { runId: runId.value } : {},
|
|
1557
|
+
...Option3.isSome(spanId) ? { spanId: spanId.value } : {},
|
|
1445
1558
|
...Option3.isSome(trace) ? { traceId: trace.value } : {},
|
|
1446
1559
|
...Option3.isSome(name) ? { name: name.value } : {},
|
|
1447
1560
|
...statusCode !== void 0 ? { status: statusCode } : {},
|
|
@@ -1508,14 +1621,14 @@ var command3 = Command5.make(
|
|
|
1508
1621
|
Effect10.scoped,
|
|
1509
1622
|
Effect10.provide(makeReadOnlyLayer(data))
|
|
1510
1623
|
)
|
|
1511
|
-
).pipe(
|
|
1512
|
-
var
|
|
1624
|
+
).pipe(Command6.withDescription("List spans with optional filters"));
|
|
1625
|
+
var command5 = Command6.make(
|
|
1513
1626
|
"trace",
|
|
1514
1627
|
{
|
|
1515
1628
|
data: dataOption,
|
|
1516
1629
|
json: jsonOption,
|
|
1517
|
-
traceId:
|
|
1518
|
-
|
|
1630
|
+
traceId: Argument3.string("trace-id").pipe(
|
|
1631
|
+
Argument3.withDescription("The trace ID to display")
|
|
1519
1632
|
)
|
|
1520
1633
|
},
|
|
1521
1634
|
({ data, json, traceId }) => Effect10.gen(function* () {
|
|
@@ -1578,14 +1691,14 @@ var command4 = Command5.make(
|
|
|
1578
1691
|
Effect10.scoped,
|
|
1579
1692
|
Effect10.provide(makeReadOnlyLayer(data))
|
|
1580
1693
|
)
|
|
1581
|
-
).pipe(
|
|
1582
|
-
var
|
|
1694
|
+
).pipe(Command6.withDescription("Show a trace as a tree view"));
|
|
1695
|
+
var command6 = Command6.make(
|
|
1583
1696
|
"traces",
|
|
1584
1697
|
{
|
|
1585
1698
|
data: dataOption,
|
|
1586
1699
|
json: jsonOption,
|
|
1587
|
-
|
|
1588
|
-
Flag3.withDescription("Filter by
|
|
1700
|
+
runId: Flag3.string("run-id").pipe(
|
|
1701
|
+
Flag3.withDescription("Filter by run ID"),
|
|
1589
1702
|
Flag3.optional
|
|
1590
1703
|
),
|
|
1591
1704
|
limit: limitOption,
|
|
@@ -1598,7 +1711,7 @@ var command5 = Command5.make(
|
|
|
1598
1711
|
Flag3.optional
|
|
1599
1712
|
)
|
|
1600
1713
|
},
|
|
1601
|
-
({ data,
|
|
1714
|
+
({ data, json, limit, runId, since, status }) => Effect10.gen(function* () {
|
|
1602
1715
|
const storage = yield* Storage;
|
|
1603
1716
|
let statusCode;
|
|
1604
1717
|
if (Option3.isSome(status)) {
|
|
@@ -1623,7 +1736,7 @@ var command5 = Command5.make(
|
|
|
1623
1736
|
sinceNanos = nowNanos - durationNanos;
|
|
1624
1737
|
}
|
|
1625
1738
|
const filters = {
|
|
1626
|
-
...Option3.isSome(
|
|
1739
|
+
...Option3.isSome(runId) ? { runId: runId.value } : {},
|
|
1627
1740
|
...statusCode !== void 0 ? { status: statusCode } : {},
|
|
1628
1741
|
...sinceNanos !== void 0 ? { since: sinceNanos } : {},
|
|
1629
1742
|
...Option3.isSome(limit) ? { limit: limit.value } : {}
|
|
@@ -1667,14 +1780,17 @@ var command5 = Command5.make(
|
|
|
1667
1780
|
Effect10.scoped,
|
|
1668
1781
|
Effect10.provide(makeReadOnlyLayer(data))
|
|
1669
1782
|
)
|
|
1670
|
-
).pipe(
|
|
1783
|
+
).pipe(Command6.withDescription("List traces with optional filters"));
|
|
1671
1784
|
|
|
1672
1785
|
// src/cli.ts
|
|
1673
|
-
var
|
|
1674
|
-
|
|
1675
|
-
|
|
1786
|
+
var command7 = Command6.make("inspeffct").pipe(
|
|
1787
|
+
Command6.withDescription("Inspect Effect applications without code changes"),
|
|
1788
|
+
Command6.withSubcommands([
|
|
1789
|
+
{ group: "Capture", commands: [command2, command] },
|
|
1790
|
+
{ group: "Inspect", commands: [command6, command5, command4, command3] }
|
|
1791
|
+
])
|
|
1676
1792
|
);
|
|
1677
|
-
var cli =
|
|
1793
|
+
var cli = Command6.runWith(command7, {
|
|
1678
1794
|
version: "0.0.1"
|
|
1679
1795
|
});
|
|
1680
1796
|
var encodeRunSeparator = (args) => {
|