@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
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// ANcpLua v2.0 - OpenTelemetry SDK Semantic Conventions (OTel v1.40)
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// OTel SDK configuration and telemetry scope attributes.
|
|
5
|
+
// =============================================================================
|
|
6
|
+
|
|
7
|
+
import "../common/types.tsp";
|
|
8
|
+
|
|
9
|
+
using Qyl.Api.Contracts.Common;
|
|
10
|
+
|
|
11
|
+
namespace Qyl.Api.Contracts.Domains.Observe.Otel;
|
|
12
|
+
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Telemetry SDK Attributes
|
|
15
|
+
// =============================================================================
|
|
16
|
+
|
|
17
|
+
@doc("Telemetry SDK resource attributes")
|
|
18
|
+
model TelemetrySdkAttributes {
|
|
19
|
+
@doc("SDK name")
|
|
20
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.SdkName)
|
|
21
|
+
name: string;
|
|
22
|
+
|
|
23
|
+
@doc("SDK language")
|
|
24
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.SdkLanguage)
|
|
25
|
+
language: TelemetrySdkLanguage;
|
|
26
|
+
|
|
27
|
+
@doc("SDK version")
|
|
28
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.SdkVersion)
|
|
29
|
+
version: SemVer;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@doc("Telemetry distro attributes")
|
|
33
|
+
model TelemetryDistroAttributes {
|
|
34
|
+
@doc("Distro name")
|
|
35
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.DistroName)
|
|
36
|
+
name?: string;
|
|
37
|
+
|
|
38
|
+
@doc("Distro version")
|
|
39
|
+
@encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.DistroVersion)
|
|
40
|
+
version?: SemVer;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// =============================================================================
|
|
44
|
+
// SDK Language Enumeration
|
|
45
|
+
// =============================================================================
|
|
46
|
+
|
|
47
|
+
@doc("Telemetry SDK languages")
|
|
48
|
+
enum TelemetrySdkLanguage {
|
|
49
|
+
@doc("C++")
|
|
50
|
+
cpp: "cpp",
|
|
51
|
+
|
|
52
|
+
@doc(".NET")
|
|
53
|
+
dotnet: "dotnet",
|
|
54
|
+
|
|
55
|
+
@doc("Erlang")
|
|
56
|
+
erlang: "erlang",
|
|
57
|
+
|
|
58
|
+
@doc("Go")
|
|
59
|
+
go: "go",
|
|
60
|
+
|
|
61
|
+
@doc("Java")
|
|
62
|
+
java: "java",
|
|
63
|
+
|
|
64
|
+
@doc("Node.js")
|
|
65
|
+
nodejs: "nodejs",
|
|
66
|
+
|
|
67
|
+
@doc("PHP")
|
|
68
|
+
php: "php",
|
|
69
|
+
|
|
70
|
+
@doc("Python")
|
|
71
|
+
python: "python",
|
|
72
|
+
|
|
73
|
+
@doc("Ruby")
|
|
74
|
+
ruby: "ruby",
|
|
75
|
+
|
|
76
|
+
@doc("Rust")
|
|
77
|
+
rust: "rust",
|
|
78
|
+
|
|
79
|
+
@doc("Swift")
|
|
80
|
+
swift: "swift",
|
|
81
|
+
|
|
82
|
+
@doc("Kotlin")
|
|
83
|
+
kotlin: "kotlin",
|
|
84
|
+
|
|
85
|
+
@doc("Scala")
|
|
86
|
+
scala: "scala",
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// =============================================================================
|
|
90
|
+
// Instrumentation Scope Attributes
|
|
91
|
+
// =============================================================================
|
|
92
|
+
|
|
93
|
+
@doc("Extended instrumentation scope with telemetry details")
|
|
94
|
+
model InstrumentationScopeDetails {
|
|
95
|
+
@doc("Scope name (library/module name)")
|
|
96
|
+
name: string;
|
|
97
|
+
|
|
98
|
+
@doc("Scope version")
|
|
99
|
+
version?: SemVer;
|
|
100
|
+
|
|
101
|
+
@doc("Schema URL")
|
|
102
|
+
@encodedName("application/json", "schema_url")
|
|
103
|
+
schemaUrl?: UrlString;
|
|
104
|
+
|
|
105
|
+
@doc("Scope attributes")
|
|
106
|
+
attributes?: Attribute[];
|
|
107
|
+
|
|
108
|
+
@doc("Dropped attributes count")
|
|
109
|
+
@encodedName("application/json", "dropped_attributes_count")
|
|
110
|
+
droppedAttributesCount?: int32;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// =============================================================================
|
|
114
|
+
// OTel Collector Configuration
|
|
115
|
+
// =============================================================================
|
|
116
|
+
|
|
117
|
+
@doc("OTel collector endpoint configuration")
|
|
118
|
+
model OtelEndpointConfig {
|
|
119
|
+
@doc("OTLP endpoint URL")
|
|
120
|
+
endpoint: UrlString;
|
|
121
|
+
|
|
122
|
+
@doc("Protocol")
|
|
123
|
+
protocol: OtlpProtocol;
|
|
124
|
+
|
|
125
|
+
@doc("Headers")
|
|
126
|
+
headers?: Record<string>;
|
|
127
|
+
|
|
128
|
+
@doc("Compression")
|
|
129
|
+
compression?: OtlpCompression;
|
|
130
|
+
|
|
131
|
+
@doc("Timeout in milliseconds")
|
|
132
|
+
@encodedName("application/json", "timeout_ms")
|
|
133
|
+
timeoutMs?: int32;
|
|
134
|
+
|
|
135
|
+
@doc("Retry configuration")
|
|
136
|
+
retry?: RetryConfig;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@doc("OTLP protocols")
|
|
140
|
+
enum OtlpProtocol {
|
|
141
|
+
@doc("gRPC protocol")
|
|
142
|
+
grpc: "grpc",
|
|
143
|
+
|
|
144
|
+
@doc("HTTP/protobuf")
|
|
145
|
+
httpProtobuf: "http/protobuf",
|
|
146
|
+
|
|
147
|
+
@doc("HTTP/JSON")
|
|
148
|
+
httpJson: "http/json",
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@doc("OTLP compression types")
|
|
152
|
+
enum OtlpCompression {
|
|
153
|
+
@doc("No compression")
|
|
154
|
+
none: "none",
|
|
155
|
+
|
|
156
|
+
@doc("Gzip compression")
|
|
157
|
+
gzip: "gzip",
|
|
158
|
+
|
|
159
|
+
@doc("Zstd compression")
|
|
160
|
+
zstd: "zstd",
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@doc("Retry configuration")
|
|
164
|
+
model RetryConfig {
|
|
165
|
+
@doc("Enable retry")
|
|
166
|
+
enabled: boolean;
|
|
167
|
+
|
|
168
|
+
@doc("Initial interval in milliseconds")
|
|
169
|
+
@encodedName("application/json", "initial_interval_ms")
|
|
170
|
+
initialIntervalMs?: int32;
|
|
171
|
+
|
|
172
|
+
@doc("Max interval in milliseconds")
|
|
173
|
+
@encodedName("application/json", "max_interval_ms")
|
|
174
|
+
maxIntervalMs?: int32;
|
|
175
|
+
|
|
176
|
+
@doc("Max elapsed time in milliseconds")
|
|
177
|
+
@encodedName("application/json", "max_elapsed_time_ms")
|
|
178
|
+
maxElapsedTimeMs?: int32;
|
|
179
|
+
|
|
180
|
+
@doc("Multiplier for exponential backoff")
|
|
181
|
+
multiplier?: float64;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// =============================================================================
|
|
185
|
+
// Batch Processor Configuration
|
|
186
|
+
// =============================================================================
|
|
187
|
+
|
|
188
|
+
@doc("Batch processor configuration")
|
|
189
|
+
model BatchProcessorConfig {
|
|
190
|
+
@doc("Max queue size")
|
|
191
|
+
@encodedName("application/json", "max_queue_size")
|
|
192
|
+
maxQueueSize?: int32;
|
|
193
|
+
|
|
194
|
+
@doc("Scheduled delay in milliseconds")
|
|
195
|
+
@encodedName("application/json", "scheduled_delay_ms")
|
|
196
|
+
scheduledDelayMs?: int32;
|
|
197
|
+
|
|
198
|
+
@doc("Export timeout in milliseconds")
|
|
199
|
+
@encodedName("application/json", "export_timeout_ms")
|
|
200
|
+
exportTimeoutMs?: int32;
|
|
201
|
+
|
|
202
|
+
@doc("Max export batch size")
|
|
203
|
+
@encodedName("application/json", "max_export_batch_size")
|
|
204
|
+
maxExportBatchSize?: int32;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// =============================================================================
|
|
208
|
+
// Sampling Configuration
|
|
209
|
+
// =============================================================================
|
|
210
|
+
|
|
211
|
+
@doc("Sampler configuration")
|
|
212
|
+
model SamplerConfig {
|
|
213
|
+
@doc("Sampler type")
|
|
214
|
+
type: SamplerType;
|
|
215
|
+
|
|
216
|
+
@doc("Sample ratio (for ratio-based samplers)")
|
|
217
|
+
ratio?: Ratio;
|
|
218
|
+
|
|
219
|
+
@doc("Parent-based root sampler")
|
|
220
|
+
@encodedName("application/json", "root_sampler")
|
|
221
|
+
rootSampler?: SamplerType;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
@doc("Sampler types")
|
|
225
|
+
enum SamplerType {
|
|
226
|
+
@doc("Always on")
|
|
227
|
+
alwaysOn: "always_on",
|
|
228
|
+
|
|
229
|
+
@doc("Always off")
|
|
230
|
+
alwaysOff: "always_off",
|
|
231
|
+
|
|
232
|
+
@doc("Trace ID ratio based")
|
|
233
|
+
traceIdRatio: "trace_id_ratio",
|
|
234
|
+
|
|
235
|
+
@doc("Parent based")
|
|
236
|
+
parentBased: "parent_based",
|
|
237
|
+
|
|
238
|
+
@doc("Jaeger remote")
|
|
239
|
+
jaegerRemote: "jaeger_remote",
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// =============================================================================
|
|
243
|
+
// Resource Detection
|
|
244
|
+
// =============================================================================
|
|
245
|
+
|
|
246
|
+
@doc("Resource detector configuration")
|
|
247
|
+
model ResourceDetectorConfig {
|
|
248
|
+
@doc("Enabled detectors")
|
|
249
|
+
detectors: ResourceDetector[];
|
|
250
|
+
|
|
251
|
+
@doc("Timeout in milliseconds")
|
|
252
|
+
@encodedName("application/json", "timeout_ms")
|
|
253
|
+
timeoutMs?: int32;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
@doc("Resource detectors")
|
|
257
|
+
enum ResourceDetector {
|
|
258
|
+
@doc("Environment variables")
|
|
259
|
+
env: "env",
|
|
260
|
+
|
|
261
|
+
@doc("Host")
|
|
262
|
+
host: "host",
|
|
263
|
+
|
|
264
|
+
@doc("OS")
|
|
265
|
+
os: "os",
|
|
266
|
+
|
|
267
|
+
@doc("Process")
|
|
268
|
+
process: "process",
|
|
269
|
+
|
|
270
|
+
@doc("Container")
|
|
271
|
+
container: "container",
|
|
272
|
+
|
|
273
|
+
@doc("Kubernetes")
|
|
274
|
+
k8s: "k8s",
|
|
275
|
+
|
|
276
|
+
@doc("AWS EC2")
|
|
277
|
+
awsEc2: "aws_ec2",
|
|
278
|
+
|
|
279
|
+
@doc("AWS ECS")
|
|
280
|
+
awsEcs: "aws_ecs",
|
|
281
|
+
|
|
282
|
+
@doc("AWS EKS")
|
|
283
|
+
awsEks: "aws_eks",
|
|
284
|
+
|
|
285
|
+
@doc("AWS Lambda")
|
|
286
|
+
awsLambda: "aws_lambda",
|
|
287
|
+
|
|
288
|
+
@doc("Azure VM")
|
|
289
|
+
azureVm: "azure_vm",
|
|
290
|
+
|
|
291
|
+
@doc("Azure App Service")
|
|
292
|
+
azureAppService: "azure_app_service",
|
|
293
|
+
|
|
294
|
+
@doc("Azure Functions")
|
|
295
|
+
azureFunctions: "azure_functions",
|
|
296
|
+
|
|
297
|
+
@doc("GCP Compute Engine")
|
|
298
|
+
gcpGce: "gcp_gce",
|
|
299
|
+
|
|
300
|
+
@doc("GCP Cloud Run")
|
|
301
|
+
gcpCloudRun: "gcp_cloud_run",
|
|
302
|
+
|
|
303
|
+
@doc("GCP Cloud Functions")
|
|
304
|
+
gcpCloudFunctions: "gcp_cloud_functions",
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// =============================================================================
|
|
308
|
+
// Propagation Configuration
|
|
309
|
+
// =============================================================================
|
|
310
|
+
|
|
311
|
+
@doc("Context propagation configuration")
|
|
312
|
+
model PropagationConfig {
|
|
313
|
+
@doc("Propagators to use")
|
|
314
|
+
propagators: Propagator[];
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
@doc("Context propagators")
|
|
318
|
+
enum Propagator {
|
|
319
|
+
@doc("W3C Trace Context")
|
|
320
|
+
tracecontext: "tracecontext",
|
|
321
|
+
|
|
322
|
+
@doc("W3C Baggage")
|
|
323
|
+
baggage: "baggage",
|
|
324
|
+
|
|
325
|
+
@doc("B3 (single header)")
|
|
326
|
+
b3: "b3",
|
|
327
|
+
|
|
328
|
+
@doc("B3 (multi header)")
|
|
329
|
+
b3multi: "b3multi",
|
|
330
|
+
|
|
331
|
+
@doc("Jaeger")
|
|
332
|
+
jaeger: "jaeger",
|
|
333
|
+
|
|
334
|
+
@doc("X-Ray")
|
|
335
|
+
xray: "xray",
|
|
336
|
+
|
|
337
|
+
@doc("OpenTracing")
|
|
338
|
+
ot: "ot",
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// =============================================================================
|
|
342
|
+
// Complete SDK Configuration
|
|
343
|
+
// =============================================================================
|
|
344
|
+
|
|
345
|
+
@doc("Complete OTel SDK configuration")
|
|
346
|
+
model OtelSdkConfig {
|
|
347
|
+
@doc("Service name")
|
|
348
|
+
@encodedName("application/json", "service_name")
|
|
349
|
+
serviceName: string;
|
|
350
|
+
|
|
351
|
+
@doc("Service version")
|
|
352
|
+
@encodedName("application/json", "service_version")
|
|
353
|
+
serviceVersion?: SemVer;
|
|
354
|
+
|
|
355
|
+
@doc("Deployment environment")
|
|
356
|
+
@encodedName("application/json", "deployment_environment")
|
|
357
|
+
deploymentEnvironment?: string;
|
|
358
|
+
|
|
359
|
+
@doc("Traces configuration")
|
|
360
|
+
traces?: TracesConfig;
|
|
361
|
+
|
|
362
|
+
@doc("Metrics configuration")
|
|
363
|
+
metrics?: MetricsConfig;
|
|
364
|
+
|
|
365
|
+
@doc("Logs configuration")
|
|
366
|
+
logs?: LogsConfig;
|
|
367
|
+
|
|
368
|
+
@doc("Resource detectors")
|
|
369
|
+
@encodedName("application/json", "resource_detectors")
|
|
370
|
+
resourceDetectors?: ResourceDetectorConfig;
|
|
371
|
+
|
|
372
|
+
@doc("Propagation configuration")
|
|
373
|
+
propagation?: PropagationConfig;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
@doc("Traces pipeline configuration")
|
|
377
|
+
model TracesConfig {
|
|
378
|
+
@doc("Enabled")
|
|
379
|
+
enabled: boolean;
|
|
380
|
+
|
|
381
|
+
@doc("Exporter endpoint")
|
|
382
|
+
exporter?: OtelEndpointConfig;
|
|
383
|
+
|
|
384
|
+
@doc("Batch processor")
|
|
385
|
+
@encodedName("application/json", "batch_processor")
|
|
386
|
+
batchProcessor?: BatchProcessorConfig;
|
|
387
|
+
|
|
388
|
+
@doc("Sampler")
|
|
389
|
+
sampler?: SamplerConfig;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@doc("Metrics pipeline configuration")
|
|
393
|
+
model MetricsConfig {
|
|
394
|
+
@doc("Enabled")
|
|
395
|
+
enabled: boolean;
|
|
396
|
+
|
|
397
|
+
@doc("Exporter endpoint")
|
|
398
|
+
exporter?: OtelEndpointConfig;
|
|
399
|
+
|
|
400
|
+
@doc("Export interval in milliseconds")
|
|
401
|
+
@encodedName("application/json", "export_interval_ms")
|
|
402
|
+
exportIntervalMs?: int32;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
@doc("Logs pipeline configuration")
|
|
406
|
+
model LogsConfig {
|
|
407
|
+
@doc("Enabled")
|
|
408
|
+
enabled: boolean;
|
|
409
|
+
|
|
410
|
+
@doc("Exporter endpoint")
|
|
411
|
+
exporter?: OtelEndpointConfig;
|
|
412
|
+
|
|
413
|
+
@doc("Batch processor")
|
|
414
|
+
@encodedName("application/json", "batch_processor")
|
|
415
|
+
batchProcessor?: BatchProcessorConfig;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// =============================================================================
|
|
419
|
+
// Telemetry Statistics
|
|
420
|
+
// =============================================================================
|
|
421
|
+
|
|
422
|
+
@doc("Telemetry pipeline statistics")
|
|
423
|
+
model TelemetryStats {
|
|
424
|
+
@doc("Spans exported")
|
|
425
|
+
@encodedName("application/json", "spans_exported")
|
|
426
|
+
spansExported: Count;
|
|
427
|
+
|
|
428
|
+
@doc("Spans dropped")
|
|
429
|
+
@encodedName("application/json", "spans_dropped")
|
|
430
|
+
spansDropped: Count;
|
|
431
|
+
|
|
432
|
+
@doc("Metrics exported")
|
|
433
|
+
@encodedName("application/json", "metrics_exported")
|
|
434
|
+
metricsExported: Count;
|
|
435
|
+
|
|
436
|
+
@doc("Metrics dropped")
|
|
437
|
+
@encodedName("application/json", "metrics_dropped")
|
|
438
|
+
metricsDropped: Count;
|
|
439
|
+
|
|
440
|
+
@doc("Logs exported")
|
|
441
|
+
@encodedName("application/json", "logs_exported")
|
|
442
|
+
logsExported: Count;
|
|
443
|
+
|
|
444
|
+
@doc("Logs dropped")
|
|
445
|
+
@encodedName("application/json", "logs_dropped")
|
|
446
|
+
logsDropped: Count;
|
|
447
|
+
|
|
448
|
+
@doc("Export errors")
|
|
449
|
+
@encodedName("application/json", "export_errors")
|
|
450
|
+
exportErrors: Count;
|
|
451
|
+
|
|
452
|
+
@doc("Queue utilization ratio")
|
|
453
|
+
@encodedName("application/json", "queue_utilization")
|
|
454
|
+
queueUtilization: Ratio;
|
|
455
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// ANcpLua v2.0 - Ops & Retention Entities
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Retention policies, compaction state, backfill jobs.
|
|
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.Ops.Retention;
|
|
14
|
+
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Retention Policy
|
|
17
|
+
// =============================================================================
|
|
18
|
+
|
|
19
|
+
@doc("Per-table data retention rule")
|
|
20
|
+
@extension("x-csharp-type", "RetentionPolicyEntity")
|
|
21
|
+
model RetentionPolicyEntity {
|
|
22
|
+
@doc("Policy ID")
|
|
23
|
+
@key
|
|
24
|
+
id: string;
|
|
25
|
+
|
|
26
|
+
@doc("Target storage table")
|
|
27
|
+
@encodedName("application/json", "target_table")
|
|
28
|
+
targetTable: string;
|
|
29
|
+
|
|
30
|
+
@doc("Retention period in days")
|
|
31
|
+
@encodedName("application/json", "retention_days")
|
|
32
|
+
retentionDays: int32;
|
|
33
|
+
|
|
34
|
+
@doc("Maximum row count (null = unlimited)")
|
|
35
|
+
@encodedName("application/json", "max_row_count")
|
|
36
|
+
maxRowCount?: int64;
|
|
37
|
+
|
|
38
|
+
@doc("Cleanup strategy")
|
|
39
|
+
@encodedName("application/json", "cleanup_strategy")
|
|
40
|
+
cleanupStrategy: CleanupStrategy;
|
|
41
|
+
|
|
42
|
+
@doc("Last cleanup timestamp")
|
|
43
|
+
@encodedName("application/json", "last_cleanup_at")
|
|
44
|
+
lastCleanupAt?: utcDateTime;
|
|
45
|
+
|
|
46
|
+
@doc("Total rows cleaned")
|
|
47
|
+
@encodedName("application/json", "rows_cleaned")
|
|
48
|
+
rowsCleaned: int64;
|
|
49
|
+
|
|
50
|
+
@doc("Whether policy is enabled")
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
|
|
53
|
+
@doc("Creation timestamp")
|
|
54
|
+
@encodedName("application/json", "created_at")
|
|
55
|
+
createdAt: utcDateTime;
|
|
56
|
+
|
|
57
|
+
@doc("Last update timestamp")
|
|
58
|
+
@encodedName("application/json", "updated_at")
|
|
59
|
+
updatedAt: utcDateTime;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@doc("Data cleanup strategies")
|
|
63
|
+
enum CleanupStrategy {
|
|
64
|
+
@doc("Delete old rows")
|
|
65
|
+
delete: "delete",
|
|
66
|
+
|
|
67
|
+
@doc("Archive to cold storage")
|
|
68
|
+
archive: "archive",
|
|
69
|
+
|
|
70
|
+
@doc("Compact/aggregate old data")
|
|
71
|
+
compact: "compact",
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// =============================================================================
|
|
75
|
+
// Compaction State
|
|
76
|
+
// =============================================================================
|
|
77
|
+
|
|
78
|
+
@doc("Storage compaction progress tracker")
|
|
79
|
+
@extension("x-csharp-type", "CompactionStateEntity")
|
|
80
|
+
model CompactionStateEntity {
|
|
81
|
+
@doc("State ID")
|
|
82
|
+
@key
|
|
83
|
+
id: string;
|
|
84
|
+
|
|
85
|
+
@doc("Target storage table")
|
|
86
|
+
@encodedName("application/json", "target_table")
|
|
87
|
+
targetTable: string;
|
|
88
|
+
|
|
89
|
+
@doc("High watermark (newest compacted row)")
|
|
90
|
+
@encodedName("application/json", "high_watermark")
|
|
91
|
+
highWatermark?: utcDateTime;
|
|
92
|
+
|
|
93
|
+
@doc("Low watermark (oldest retained row)")
|
|
94
|
+
@encodedName("application/json", "low_watermark")
|
|
95
|
+
lowWatermark?: utcDateTime;
|
|
96
|
+
|
|
97
|
+
@doc("Total rows compacted")
|
|
98
|
+
@encodedName("application/json", "rows_compacted")
|
|
99
|
+
rowsCompacted: int64;
|
|
100
|
+
|
|
101
|
+
@doc("Rows remaining")
|
|
102
|
+
@encodedName("application/json", "rows_remaining")
|
|
103
|
+
rowsRemaining: int64;
|
|
104
|
+
|
|
105
|
+
@doc("Last compaction timestamp")
|
|
106
|
+
@encodedName("application/json", "last_compaction_at")
|
|
107
|
+
lastCompactionAt?: utcDateTime;
|
|
108
|
+
|
|
109
|
+
@doc("Last compaction duration in ms")
|
|
110
|
+
@encodedName("application/json", "last_duration_ms")
|
|
111
|
+
lastDurationMs?: int32;
|
|
112
|
+
|
|
113
|
+
@doc("Next scheduled compaction")
|
|
114
|
+
@encodedName("application/json", "next_scheduled_at")
|
|
115
|
+
nextScheduledAt?: utcDateTime;
|
|
116
|
+
|
|
117
|
+
@doc("Compaction status")
|
|
118
|
+
status: CompactionStatus;
|
|
119
|
+
|
|
120
|
+
@doc("Creation timestamp")
|
|
121
|
+
@encodedName("application/json", "created_at")
|
|
122
|
+
createdAt: utcDateTime;
|
|
123
|
+
|
|
124
|
+
@doc("Last update timestamp")
|
|
125
|
+
@encodedName("application/json", "updated_at")
|
|
126
|
+
updatedAt: utcDateTime;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@doc("Compaction status")
|
|
130
|
+
enum CompactionStatus {
|
|
131
|
+
@doc("Idle/waiting")
|
|
132
|
+
idle: "idle",
|
|
133
|
+
|
|
134
|
+
@doc("Currently compacting")
|
|
135
|
+
running: "running",
|
|
136
|
+
|
|
137
|
+
@doc("Scheduled for next run")
|
|
138
|
+
scheduled: "scheduled",
|
|
139
|
+
|
|
140
|
+
@doc("Failed")
|
|
141
|
+
failed: "failed",
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// =============================================================================
|
|
145
|
+
// Backfill Job
|
|
146
|
+
// =============================================================================
|
|
147
|
+
|
|
148
|
+
@doc("Bulk data maintenance job (backfill, reindex, repair)")
|
|
149
|
+
@extension("x-csharp-type", "BackfillJobEntity")
|
|
150
|
+
model BackfillJobEntity {
|
|
151
|
+
@doc("Job ID")
|
|
152
|
+
@key
|
|
153
|
+
id: string;
|
|
154
|
+
|
|
155
|
+
@doc("Job type")
|
|
156
|
+
@encodedName("application/json", "job_type")
|
|
157
|
+
jobType: BackfillJobType;
|
|
158
|
+
|
|
159
|
+
@doc("Target table")
|
|
160
|
+
@encodedName("application/json", "target_table")
|
|
161
|
+
targetTable: string;
|
|
162
|
+
|
|
163
|
+
@doc("Job description")
|
|
164
|
+
description?: string;
|
|
165
|
+
|
|
166
|
+
@doc("Row filter")
|
|
167
|
+
@encodedName("application/json", "filter_json")
|
|
168
|
+
filterJson?: string;
|
|
169
|
+
|
|
170
|
+
@doc("Job status")
|
|
171
|
+
status: BackfillJobStatus;
|
|
172
|
+
|
|
173
|
+
@doc("Error message if failed")
|
|
174
|
+
@encodedName("application/json", "error_message")
|
|
175
|
+
errorMessage?: string;
|
|
176
|
+
|
|
177
|
+
@doc("Total rows to process")
|
|
178
|
+
@encodedName("application/json", "total_rows")
|
|
179
|
+
totalRows?: int64;
|
|
180
|
+
|
|
181
|
+
@doc("Rows processed so far")
|
|
182
|
+
@encodedName("application/json", "processed_rows")
|
|
183
|
+
processedRows: int64;
|
|
184
|
+
|
|
185
|
+
@doc("Progress percentage")
|
|
186
|
+
@encodedName("application/json", "progress_pct")
|
|
187
|
+
progressPct: float64;
|
|
188
|
+
|
|
189
|
+
@doc("Queue timestamp")
|
|
190
|
+
@encodedName("application/json", "queued_at")
|
|
191
|
+
queuedAt: utcDateTime;
|
|
192
|
+
|
|
193
|
+
@doc("Start timestamp")
|
|
194
|
+
@encodedName("application/json", "started_at")
|
|
195
|
+
startedAt?: utcDateTime;
|
|
196
|
+
|
|
197
|
+
@doc("Completion timestamp")
|
|
198
|
+
@encodedName("application/json", "completed_at")
|
|
199
|
+
completedAt?: utcDateTime;
|
|
200
|
+
|
|
201
|
+
@doc("Duration in milliseconds")
|
|
202
|
+
@encodedName("application/json", "duration_ms")
|
|
203
|
+
durationMs?: int32;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
@doc("Backfill job types")
|
|
207
|
+
enum BackfillJobType {
|
|
208
|
+
@doc("Backfill missing data")
|
|
209
|
+
backfill: "backfill",
|
|
210
|
+
|
|
211
|
+
@doc("Rebuild search index")
|
|
212
|
+
reindex: "reindex",
|
|
213
|
+
|
|
214
|
+
@doc("Repair data integrity")
|
|
215
|
+
repair: "repair",
|
|
216
|
+
|
|
217
|
+
@doc("Migrate data format")
|
|
218
|
+
migrate: "migrate",
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@doc("Backfill job status")
|
|
222
|
+
enum BackfillJobStatus {
|
|
223
|
+
@doc("Pending execution")
|
|
224
|
+
pending: "pending",
|
|
225
|
+
|
|
226
|
+
@doc("Currently running")
|
|
227
|
+
running: "running",
|
|
228
|
+
|
|
229
|
+
@doc("Paused")
|
|
230
|
+
paused: "paused",
|
|
231
|
+
|
|
232
|
+
@doc("Successfully completed")
|
|
233
|
+
completed: "completed",
|
|
234
|
+
|
|
235
|
+
@doc("Failed")
|
|
236
|
+
failed: "failed",
|
|
237
|
+
|
|
238
|
+
@doc("Cancelled")
|
|
239
|
+
cancelled: "cancelled",
|
|
240
|
+
}
|