@ancplua/qyl-api-schema 0.2.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/LICENSE +201 -0
- package/README.md +89 -0
- package/VERSIONING.md +74 -0
- package/api/routes.tsp +1052 -0
- package/api/streaming.tsp +335 -0
- package/common/errors.tsp +206 -0
- package/common/pagination.tsp +254 -0
- package/common/types.tsp +345 -0
- package/generated/README.md +26 -0
- package/generated/otel-keys.gen.tsp +1648 -0
- package/index.tsp +55 -0
- package/intelligence/causal-rules.tsp +34 -0
- package/intelligence/diagnostic-patterns.tsp +54 -0
- package/intelligence/investigation-strategies.tsp +37 -0
- package/intelligence/main.tsp +19 -0
- package/intelligence/seed/patterns.tsp +172 -0
- package/intelligence/seed/rules.tsp +44 -0
- package/intelligence/seed/strategies.tsp +56 -0
- package/intelligence/signals.tsp +60 -0
- package/models/agent/agent-run.tsp +154 -0
- package/models/agent/tool-call.tsp +122 -0
- package/models/agent/workflow-checkpoint.tsp +50 -0
- package/models/agent/workflow-execution.tsp +136 -0
- package/models/alerting.tsp +436 -0
- package/models/configurator.tsp +433 -0
- package/models/control-graph.tsp +197 -0
- package/models/db.tsp +810 -0
- package/models/deployment.tsp +365 -0
- package/models/error.tsp +433 -0
- package/models/genai.tsp +1368 -0
- package/models/http.tsp +600 -0
- package/models/identity.tsp +213 -0
- package/models/issues.tsp +484 -0
- package/models/log.tsp +140 -0
- package/models/messaging.tsp +304 -0
- package/models/otel-config.tsp +455 -0
- package/models/retention.tsp +240 -0
- package/models/rpc.tsp +309 -0
- package/models/search.tsp +243 -0
- package/models/session.tsp +274 -0
- package/models/system.tsp +400 -0
- package/models/test.tsp +346 -0
- package/models/triage.tsp +113 -0
- package/models/workflow.tsp +396 -0
- package/models/workspace.tsp +435 -0
- package/otel/enums.tsp +392 -0
- package/otel/logs.tsp +135 -0
- package/otel/metrics.tsp +358 -0
- package/otel/otel-conventions.tsp +14 -0
- package/otel/profiles.tsp +335 -0
- package/otel/resource.tsp +257 -0
- package/otel/span.tsp +307 -0
- package/package.json +88 -0
- package/tspconfig.yaml +49 -0
package/models/error.tsp
ADDED
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// ANcpLua v2.0 - Error Semantic Conventions (OTel v1.40)
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Error type and error handling telemetry attributes.
|
|
5
|
+
// =============================================================================
|
|
6
|
+
|
|
7
|
+
import "@typespec/openapi";
|
|
8
|
+
import "../common/types.tsp";
|
|
9
|
+
|
|
10
|
+
using TypeSpec.OpenAPI;
|
|
11
|
+
using Qyl.Api.Contracts.Common;
|
|
12
|
+
|
|
13
|
+
namespace Qyl.Api.Contracts.Domains.Observe.Error;
|
|
14
|
+
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Error Type Attribute
|
|
17
|
+
// =============================================================================
|
|
18
|
+
|
|
19
|
+
@doc("Error type attribute (OTel stable)")
|
|
20
|
+
model ErrorAttributes {
|
|
21
|
+
@doc("Error type - full exception class name or error code")
|
|
22
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Error.Type)
|
|
23
|
+
errorType: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// Error Categories
|
|
28
|
+
// =============================================================================
|
|
29
|
+
|
|
30
|
+
@doc("High-level error categories")
|
|
31
|
+
enum ErrorCategory {
|
|
32
|
+
@doc("Client error (4xx)")
|
|
33
|
+
client: "client",
|
|
34
|
+
|
|
35
|
+
@doc("Server error (5xx)")
|
|
36
|
+
server: "server",
|
|
37
|
+
|
|
38
|
+
@doc("Network error")
|
|
39
|
+
network: "network",
|
|
40
|
+
|
|
41
|
+
@doc("Timeout error")
|
|
42
|
+
timeout: "timeout",
|
|
43
|
+
|
|
44
|
+
@doc("Validation error")
|
|
45
|
+
validation: "validation",
|
|
46
|
+
|
|
47
|
+
@doc("Authentication error")
|
|
48
|
+
authentication: "authentication",
|
|
49
|
+
|
|
50
|
+
@doc("Authorization error")
|
|
51
|
+
authorization: "authorization",
|
|
52
|
+
|
|
53
|
+
@doc("Rate limit error")
|
|
54
|
+
rateLimit: "rate_limit",
|
|
55
|
+
|
|
56
|
+
@doc("Resource not found")
|
|
57
|
+
notFound: "not_found",
|
|
58
|
+
|
|
59
|
+
@doc("Conflict error")
|
|
60
|
+
conflict: "conflict",
|
|
61
|
+
|
|
62
|
+
@doc("Internal error")
|
|
63
|
+
internal: "internal",
|
|
64
|
+
|
|
65
|
+
@doc("External service error")
|
|
66
|
+
external: "external",
|
|
67
|
+
|
|
68
|
+
@doc("Database error")
|
|
69
|
+
database: "database",
|
|
70
|
+
|
|
71
|
+
@doc("Configuration error")
|
|
72
|
+
configuration: "configuration",
|
|
73
|
+
|
|
74
|
+
@doc("Unknown error")
|
|
75
|
+
`unknown`: "unknown",
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// =============================================================================
|
|
79
|
+
// Error Entity
|
|
80
|
+
// =============================================================================
|
|
81
|
+
|
|
82
|
+
@doc("Error entity for tracking and analysis")
|
|
83
|
+
@TypeSpec.OpenAPI.extension("x-csharp-type", "ErrorEntity")
|
|
84
|
+
model ErrorEntity {
|
|
85
|
+
@doc("Error ID")
|
|
86
|
+
@key
|
|
87
|
+
@visibility(Lifecycle.Read)
|
|
88
|
+
@encodedName("application/json", "error_id")
|
|
89
|
+
errorId: string;
|
|
90
|
+
|
|
91
|
+
@doc("Error type (class name or code)")
|
|
92
|
+
@visibility(Lifecycle.Read)
|
|
93
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Error.Type)
|
|
94
|
+
errorType: string;
|
|
95
|
+
|
|
96
|
+
@doc("Error message")
|
|
97
|
+
@visibility(Lifecycle.Read)
|
|
98
|
+
message: string;
|
|
99
|
+
|
|
100
|
+
@doc("Error category")
|
|
101
|
+
@visibility(Lifecycle.Read)
|
|
102
|
+
category: ErrorCategory;
|
|
103
|
+
|
|
104
|
+
@doc("Fingerprint for grouping")
|
|
105
|
+
@visibility(Lifecycle.Read)
|
|
106
|
+
fingerprint: string;
|
|
107
|
+
|
|
108
|
+
@doc("First occurrence")
|
|
109
|
+
@visibility(Lifecycle.Read)
|
|
110
|
+
@encodedName("application/json", "first_seen")
|
|
111
|
+
firstSeen: utcDateTime;
|
|
112
|
+
|
|
113
|
+
@doc("Last occurrence")
|
|
114
|
+
@visibility(Lifecycle.Read)
|
|
115
|
+
@encodedName("application/json", "last_seen")
|
|
116
|
+
lastSeen: utcDateTime;
|
|
117
|
+
|
|
118
|
+
@doc("Occurrence count")
|
|
119
|
+
@visibility(Lifecycle.Read)
|
|
120
|
+
@encodedName("application/json", "occurrence_count")
|
|
121
|
+
occurrenceCount: Count;
|
|
122
|
+
|
|
123
|
+
@doc("Affected users count")
|
|
124
|
+
@visibility(Lifecycle.Read)
|
|
125
|
+
@encodedName("application/json", "affected_users")
|
|
126
|
+
affectedUsers?: Count;
|
|
127
|
+
|
|
128
|
+
@doc("Affected services")
|
|
129
|
+
@visibility(Lifecycle.Read)
|
|
130
|
+
@encodedName("application/json", "affected_services")
|
|
131
|
+
affectedServices?: string[];
|
|
132
|
+
|
|
133
|
+
@doc("Status")
|
|
134
|
+
@visibility(Lifecycle.Read, Lifecycle.Update)
|
|
135
|
+
status: ErrorStatus;
|
|
136
|
+
|
|
137
|
+
@doc("Assigned to")
|
|
138
|
+
@visibility(Lifecycle.Read, Lifecycle.Update)
|
|
139
|
+
@encodedName("application/json", "assigned_to")
|
|
140
|
+
assignedTo?: string;
|
|
141
|
+
|
|
142
|
+
@doc("Issue tracker URL")
|
|
143
|
+
@visibility(Lifecycle.Read, Lifecycle.Update)
|
|
144
|
+
@encodedName("application/json", "issue_url")
|
|
145
|
+
issueUrl?: UrlString;
|
|
146
|
+
|
|
147
|
+
@doc("Sample trace IDs")
|
|
148
|
+
@visibility(Lifecycle.Read)
|
|
149
|
+
@encodedName("application/json", "sample_traces")
|
|
150
|
+
sampleTraces?: TraceId[];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@doc("Error tracking status")
|
|
154
|
+
enum ErrorStatus {
|
|
155
|
+
@doc("New/unreviewed")
|
|
156
|
+
new: "new",
|
|
157
|
+
|
|
158
|
+
@doc("Acknowledged")
|
|
159
|
+
acknowledged: "acknowledged",
|
|
160
|
+
|
|
161
|
+
@doc("In progress")
|
|
162
|
+
inProgress: "in_progress",
|
|
163
|
+
|
|
164
|
+
@doc("Resolved")
|
|
165
|
+
resolved: "resolved",
|
|
166
|
+
|
|
167
|
+
@doc("Ignored")
|
|
168
|
+
ignored: "ignored",
|
|
169
|
+
|
|
170
|
+
@doc("Regressed")
|
|
171
|
+
regressed: "regressed",
|
|
172
|
+
|
|
173
|
+
@doc("Won't fix")
|
|
174
|
+
wontFix: "wont_fix",
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// =============================================================================
|
|
178
|
+
// Error Budget
|
|
179
|
+
// =============================================================================
|
|
180
|
+
|
|
181
|
+
@doc("Error budget tracking for SLOs")
|
|
182
|
+
model ErrorBudget {
|
|
183
|
+
@doc("Service name")
|
|
184
|
+
@encodedName("application/json", "service_name")
|
|
185
|
+
serviceName: string;
|
|
186
|
+
|
|
187
|
+
@doc("SLO target (e.g., 99.9%)")
|
|
188
|
+
@encodedName("application/json", "slo_target")
|
|
189
|
+
sloTarget: Percentage;
|
|
190
|
+
|
|
191
|
+
@doc("Current SLI (actual success rate)")
|
|
192
|
+
@encodedName("application/json", "current_sli")
|
|
193
|
+
currentSli: Percentage;
|
|
194
|
+
|
|
195
|
+
@doc("Budget remaining")
|
|
196
|
+
@encodedName("application/json", "budget_remaining")
|
|
197
|
+
budgetRemaining: Percentage;
|
|
198
|
+
|
|
199
|
+
@doc("Budget consumed")
|
|
200
|
+
@encodedName("application/json", "budget_consumed")
|
|
201
|
+
budgetConsumed: Percentage;
|
|
202
|
+
|
|
203
|
+
@doc("Budget period start")
|
|
204
|
+
@encodedName("application/json", "period_start")
|
|
205
|
+
periodStart: utcDateTime;
|
|
206
|
+
|
|
207
|
+
@doc("Budget period end")
|
|
208
|
+
@encodedName("application/json", "period_end")
|
|
209
|
+
periodEnd: utcDateTime;
|
|
210
|
+
|
|
211
|
+
@doc("Burn rate (how fast budget is being consumed)")
|
|
212
|
+
@encodedName("application/json", "burn_rate")
|
|
213
|
+
burnRate: float64;
|
|
214
|
+
|
|
215
|
+
@doc("Budget status")
|
|
216
|
+
status: ErrorBudgetStatus;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@doc("Error budget status")
|
|
220
|
+
enum ErrorBudgetStatus {
|
|
221
|
+
@doc("Healthy - plenty of budget remaining")
|
|
222
|
+
healthy: "healthy",
|
|
223
|
+
|
|
224
|
+
@doc("Warning - budget is being consumed faster than expected")
|
|
225
|
+
warning: "warning",
|
|
226
|
+
|
|
227
|
+
@doc("Critical - budget nearly exhausted")
|
|
228
|
+
critical: "critical",
|
|
229
|
+
|
|
230
|
+
@doc("Exhausted - no budget remaining")
|
|
231
|
+
exhausted: "exhausted",
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// =============================================================================
|
|
235
|
+
// Error Rate Metrics
|
|
236
|
+
// =============================================================================
|
|
237
|
+
|
|
238
|
+
@doc("Error rate metric")
|
|
239
|
+
model ErrorRateMetric {
|
|
240
|
+
@doc("Metric name")
|
|
241
|
+
name: "error.rate";
|
|
242
|
+
|
|
243
|
+
@doc("Metric unit (ratio)")
|
|
244
|
+
unit: "1";
|
|
245
|
+
|
|
246
|
+
@doc("Service name")
|
|
247
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Service.Name)
|
|
248
|
+
serviceName: string;
|
|
249
|
+
|
|
250
|
+
@doc("Error category")
|
|
251
|
+
@encodedName("application/json", "error.category")
|
|
252
|
+
category?: ErrorCategory;
|
|
253
|
+
|
|
254
|
+
@doc("Endpoint")
|
|
255
|
+
endpoint?: string;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
@doc("Error count metric")
|
|
259
|
+
model ErrorCountMetric {
|
|
260
|
+
@doc("Metric name")
|
|
261
|
+
name: "errors";
|
|
262
|
+
|
|
263
|
+
@doc("Metric unit")
|
|
264
|
+
unit: "{error}";
|
|
265
|
+
|
|
266
|
+
@doc("Service name")
|
|
267
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Service.Name)
|
|
268
|
+
serviceName: string;
|
|
269
|
+
|
|
270
|
+
@doc("Error type")
|
|
271
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Error.Type)
|
|
272
|
+
errorType: string;
|
|
273
|
+
|
|
274
|
+
@doc("Error category")
|
|
275
|
+
@encodedName("application/json", "error.category")
|
|
276
|
+
category?: ErrorCategory;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// =============================================================================
|
|
280
|
+
// Error Analysis
|
|
281
|
+
// =============================================================================
|
|
282
|
+
|
|
283
|
+
@doc("Error correlation result")
|
|
284
|
+
model ErrorCorrelation {
|
|
285
|
+
@doc("Error ID")
|
|
286
|
+
@encodedName("application/json", "error_id")
|
|
287
|
+
errorId: string;
|
|
288
|
+
|
|
289
|
+
@doc("Correlated errors")
|
|
290
|
+
@encodedName("application/json", "correlated_errors")
|
|
291
|
+
correlatedErrors: CorrelatedError[];
|
|
292
|
+
|
|
293
|
+
@doc("Potential root cause")
|
|
294
|
+
@encodedName("application/json", "root_cause")
|
|
295
|
+
rootCause?: string;
|
|
296
|
+
|
|
297
|
+
@doc("Common attributes")
|
|
298
|
+
@encodedName("application/json", "common_attributes")
|
|
299
|
+
commonAttributes?: Attribute[];
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
@doc("Correlated error")
|
|
303
|
+
model CorrelatedError {
|
|
304
|
+
@doc("Error ID")
|
|
305
|
+
@encodedName("application/json", "error_id")
|
|
306
|
+
errorId: string;
|
|
307
|
+
|
|
308
|
+
@doc("Error type")
|
|
309
|
+
@encodedName("application/json", "error_type")
|
|
310
|
+
errorType: string;
|
|
311
|
+
|
|
312
|
+
@doc("Correlation strength")
|
|
313
|
+
@encodedName("application/json", "correlation_strength")
|
|
314
|
+
correlationStrength: Ratio;
|
|
315
|
+
|
|
316
|
+
@doc("Temporal relationship")
|
|
317
|
+
@encodedName("application/json", "temporal_relationship")
|
|
318
|
+
temporalRelationship: TemporalRelationship;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
@doc("Temporal relationship between errors")
|
|
322
|
+
enum TemporalRelationship {
|
|
323
|
+
@doc("Errors occur together")
|
|
324
|
+
concurrent: "concurrent",
|
|
325
|
+
|
|
326
|
+
@doc("This error precedes the other")
|
|
327
|
+
precedes: "precedes",
|
|
328
|
+
|
|
329
|
+
@doc("This error follows the other")
|
|
330
|
+
follows: "follows",
|
|
331
|
+
|
|
332
|
+
@doc("No clear temporal pattern")
|
|
333
|
+
unrelated: "unrelated",
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// =============================================================================
|
|
337
|
+
// Error Statistics
|
|
338
|
+
// =============================================================================
|
|
339
|
+
|
|
340
|
+
@doc("Error statistics")
|
|
341
|
+
model ErrorStats {
|
|
342
|
+
@doc("Total error count")
|
|
343
|
+
@encodedName("application/json", "total_count")
|
|
344
|
+
totalCount: Count;
|
|
345
|
+
|
|
346
|
+
@doc("Unique error types")
|
|
347
|
+
@encodedName("application/json", "unique_types")
|
|
348
|
+
uniqueTypes: int32;
|
|
349
|
+
|
|
350
|
+
@doc("Error rate")
|
|
351
|
+
@encodedName("application/json", "error_rate")
|
|
352
|
+
errorRate: Ratio;
|
|
353
|
+
|
|
354
|
+
@doc("Errors by category")
|
|
355
|
+
@encodedName("application/json", "by_category")
|
|
356
|
+
byCategory: ErrorCategoryStats[];
|
|
357
|
+
|
|
358
|
+
@doc("Errors by service")
|
|
359
|
+
@encodedName("application/json", "by_service")
|
|
360
|
+
byService?: ErrorServiceStats[];
|
|
361
|
+
|
|
362
|
+
@doc("Top errors")
|
|
363
|
+
@encodedName("application/json", "top_errors")
|
|
364
|
+
topErrors: ErrorTypeStats[];
|
|
365
|
+
|
|
366
|
+
@doc("Trend")
|
|
367
|
+
trend: ErrorTrend;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
@doc("Error stats by category")
|
|
371
|
+
model ErrorCategoryStats {
|
|
372
|
+
@doc("Category")
|
|
373
|
+
category: ErrorCategory;
|
|
374
|
+
|
|
375
|
+
@doc("Count")
|
|
376
|
+
count: Count;
|
|
377
|
+
|
|
378
|
+
@doc("Percentage of total")
|
|
379
|
+
percentage: Percentage;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
@doc("Error stats by service")
|
|
383
|
+
model ErrorServiceStats {
|
|
384
|
+
@doc("Service name")
|
|
385
|
+
@encodedName("application/json", "service_name")
|
|
386
|
+
serviceName: string;
|
|
387
|
+
|
|
388
|
+
@doc("Error count")
|
|
389
|
+
count: Count;
|
|
390
|
+
|
|
391
|
+
@doc("Error rate")
|
|
392
|
+
@encodedName("application/json", "error_rate")
|
|
393
|
+
errorRate: Ratio;
|
|
394
|
+
|
|
395
|
+
@doc("Top error type")
|
|
396
|
+
@encodedName("application/json", "top_error_type")
|
|
397
|
+
topErrorType: string;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
@doc("Error stats by type")
|
|
401
|
+
model ErrorTypeStats {
|
|
402
|
+
@doc("Error type")
|
|
403
|
+
@encodedName("application/json", "error_type")
|
|
404
|
+
errorType: string;
|
|
405
|
+
|
|
406
|
+
@doc("Count")
|
|
407
|
+
count: Count;
|
|
408
|
+
|
|
409
|
+
@doc("Percentage of total")
|
|
410
|
+
percentage: Percentage;
|
|
411
|
+
|
|
412
|
+
@doc("Affected users")
|
|
413
|
+
@encodedName("application/json", "affected_users")
|
|
414
|
+
affectedUsers?: Count;
|
|
415
|
+
|
|
416
|
+
@doc("Status")
|
|
417
|
+
status: ErrorStatus;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
@doc("Error trend")
|
|
421
|
+
enum ErrorTrend {
|
|
422
|
+
@doc("Errors increasing")
|
|
423
|
+
increasing: "increasing",
|
|
424
|
+
|
|
425
|
+
@doc("Errors decreasing")
|
|
426
|
+
decreasing: "decreasing",
|
|
427
|
+
|
|
428
|
+
@doc("Errors stable")
|
|
429
|
+
stable: "stable",
|
|
430
|
+
|
|
431
|
+
@doc("Anomalous spike")
|
|
432
|
+
spike: "spike",
|
|
433
|
+
}
|