@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.
Files changed (54) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +89 -0
  3. package/VERSIONING.md +74 -0
  4. package/api/routes.tsp +1052 -0
  5. package/api/streaming.tsp +335 -0
  6. package/common/errors.tsp +206 -0
  7. package/common/pagination.tsp +254 -0
  8. package/common/types.tsp +345 -0
  9. package/generated/README.md +26 -0
  10. package/generated/otel-keys.gen.tsp +1648 -0
  11. package/index.tsp +55 -0
  12. package/intelligence/causal-rules.tsp +34 -0
  13. package/intelligence/diagnostic-patterns.tsp +54 -0
  14. package/intelligence/investigation-strategies.tsp +37 -0
  15. package/intelligence/main.tsp +19 -0
  16. package/intelligence/seed/patterns.tsp +172 -0
  17. package/intelligence/seed/rules.tsp +44 -0
  18. package/intelligence/seed/strategies.tsp +56 -0
  19. package/intelligence/signals.tsp +60 -0
  20. package/models/agent/agent-run.tsp +154 -0
  21. package/models/agent/tool-call.tsp +122 -0
  22. package/models/agent/workflow-checkpoint.tsp +50 -0
  23. package/models/agent/workflow-execution.tsp +136 -0
  24. package/models/alerting.tsp +436 -0
  25. package/models/configurator.tsp +433 -0
  26. package/models/control-graph.tsp +197 -0
  27. package/models/db.tsp +810 -0
  28. package/models/deployment.tsp +365 -0
  29. package/models/error.tsp +433 -0
  30. package/models/genai.tsp +1368 -0
  31. package/models/http.tsp +600 -0
  32. package/models/identity.tsp +213 -0
  33. package/models/issues.tsp +484 -0
  34. package/models/log.tsp +140 -0
  35. package/models/messaging.tsp +304 -0
  36. package/models/otel-config.tsp +455 -0
  37. package/models/retention.tsp +240 -0
  38. package/models/rpc.tsp +309 -0
  39. package/models/search.tsp +243 -0
  40. package/models/session.tsp +274 -0
  41. package/models/system.tsp +400 -0
  42. package/models/test.tsp +346 -0
  43. package/models/triage.tsp +113 -0
  44. package/models/workflow.tsp +396 -0
  45. package/models/workspace.tsp +435 -0
  46. package/otel/enums.tsp +392 -0
  47. package/otel/logs.tsp +135 -0
  48. package/otel/metrics.tsp +358 -0
  49. package/otel/otel-conventions.tsp +14 -0
  50. package/otel/profiles.tsp +335 -0
  51. package/otel/resource.tsp +257 -0
  52. package/otel/span.tsp +307 -0
  53. package/package.json +88 -0
  54. package/tspconfig.yaml +49 -0
package/models/db.tsp ADDED
@@ -0,0 +1,810 @@
1
+ // =============================================================================
2
+ // ANcpLua v2.0 - Database Semantic Conventions (OTel v1.40)
3
+ // =============================================================================
4
+ // Database telemetry attributes with 45+ DBMS types.
5
+ // =============================================================================
6
+
7
+ import "@typespec/versioning";
8
+ import "../common/types.tsp";
9
+
10
+ using TypeSpec.Versioning;
11
+ using Qyl.Api.Contracts.Common;
12
+
13
+ @versioned(DbVersions)
14
+ namespace Qyl.Api.Contracts.Domains.Data.Db;
15
+
16
+ // =============================================================================
17
+ // Version History
18
+ // =============================================================================
19
+
20
+ @doc("Database semantic convention versions")
21
+ enum DbVersions {
22
+ @doc("Legacy DB semconv")
23
+ v1_20: "1.20.0",
24
+
25
+ @doc("Stable DB semconv with namespace")
26
+ v1_24: "1.24.0",
27
+
28
+ @doc("DB semconv v1.38")
29
+ v1_38: "1.38.0",
30
+
31
+ @doc("Current DB semconv")
32
+ v1_39: "1.39.0",
33
+ }
34
+
35
+ // =============================================================================
36
+ // Database Span Attributes (Complete OTel v1.40)
37
+ // =============================================================================
38
+
39
+ @doc("Database span attributes following OTel Semantic Conventions v1.40")
40
+ model DbAttributes {
41
+ // ---------------------------------------------------------------------------
42
+ // System & Connection
43
+ // ---------------------------------------------------------------------------
44
+
45
+ @doc("Database management system identifier")
46
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
47
+ systemName: DbSystem;
48
+
49
+ @doc("Database namespace (database name, schema, etc.)")
50
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.Namespace)
51
+ `namespace`?: string;
52
+
53
+ @doc("Database operation name (query, insert, delete, etc.)")
54
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.OperationName)
55
+ operationName?: DbOperationName;
56
+
57
+ @doc("Batch size (number of statements in batch)")
58
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.OperationBatchSize)
59
+ batchSize?: int32;
60
+
61
+ // ---------------------------------------------------------------------------
62
+ // Query Details
63
+ // ---------------------------------------------------------------------------
64
+
65
+ @doc("Database statement (query text, may be sanitized)")
66
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.QueryText)
67
+ queryText?: string;
68
+
69
+ @doc("Parameterized query template")
70
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.QuerySummary)
71
+ querySummary?: string;
72
+
73
+ @doc("Query parameters (for prepared statements). Keys map to db.query.parameter.<key>")
74
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.QueryParameter)
75
+ queryParameters?: Record<string>;
76
+
77
+ // ---------------------------------------------------------------------------
78
+ // Collection/Table Information
79
+ // ---------------------------------------------------------------------------
80
+
81
+ @doc("Table name")
82
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.CollectionName)
83
+ collectionName?: string;
84
+
85
+ // ---------------------------------------------------------------------------
86
+ // Response Metrics
87
+ // ---------------------------------------------------------------------------
88
+
89
+ @doc("Number of rows affected/returned")
90
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ResponseReturnedRows)
91
+ returnedRows?: int64;
92
+
93
+ @doc("Status code from database")
94
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ResponseStatusCode)
95
+ responseStatusCode?: string;
96
+
97
+ // ---------------------------------------------------------------------------
98
+ // Server Information
99
+ // ---------------------------------------------------------------------------
100
+
101
+ @doc("Database server address")
102
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Server.Address)
103
+ serverAddress?: string;
104
+
105
+ @doc("Database server port")
106
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Server.Port)
107
+ serverPort?: Port;
108
+
109
+ // ---------------------------------------------------------------------------
110
+ // Connection Pool
111
+ // ---------------------------------------------------------------------------
112
+
113
+ @doc("Connection pool name")
114
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionPoolName)
115
+ connectionPoolName?: string;
116
+
117
+ @doc("Connection state")
118
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionState)
119
+ connectionState?: DbConnectionState;
120
+
121
+ // ---------------------------------------------------------------------------
122
+ // Deprecated Attributes (for migration)
123
+ // ---------------------------------------------------------------------------
124
+
125
+ @doc("Database name (deprecated - use db.namespace)")
126
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.Name)
127
+ @removed(DbVersions.v1_24)
128
+ dbName?: string;
129
+
130
+ @doc("Database statement (deprecated - use db.query.text)")
131
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.Statement)
132
+ @removed(DbVersions.v1_24)
133
+ statement?: string;
134
+
135
+ @doc("Database operation (deprecated - use db.operation.name)")
136
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.Operation)
137
+ @removed(DbVersions.v1_24)
138
+ operation?: string;
139
+
140
+ @doc("Database user (deprecated)")
141
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.User)
142
+ @removed(DbVersions.v1_24)
143
+ user?: string;
144
+ }
145
+
146
+ // =============================================================================
147
+ // Database System Enumeration (45+ DBMS Types)
148
+ // =============================================================================
149
+
150
+ @doc("Database management system identifiers")
151
+ enum DbSystem {
152
+ // ---------------------------------------------------------------------------
153
+ // Relational Databases
154
+ // ---------------------------------------------------------------------------
155
+
156
+ @doc("PostgreSQL")
157
+ postgresql: "postgresql",
158
+
159
+ @doc("MySQL / MariaDB")
160
+ mysql: "mysql",
161
+
162
+ @doc("MariaDB")
163
+ mariadb: "mariadb",
164
+
165
+ @doc("Microsoft SQL Server")
166
+ mssql: "mssql",
167
+
168
+ @doc("Oracle Database")
169
+ oracle: "oracle",
170
+
171
+ @doc("IBM DB2")
172
+ db2: "db2",
173
+
174
+ @doc("SQLite")
175
+ sqlite: "sqlite",
176
+
177
+ @doc("SAP HANA")
178
+ hana: "hana",
179
+
180
+ @doc("SAP MaxDB")
181
+ maxdb: "maxdb",
182
+
183
+ @doc("SAP SQL Anywhere")
184
+ sqlanywhere: "sqlanywhere",
185
+
186
+ @doc("Teradata")
187
+ teradata: "teradata",
188
+
189
+ @doc("Sybase")
190
+ sybase: "sybase",
191
+
192
+ @doc("Informix")
193
+ informix: "informix",
194
+
195
+ @doc("Firebird")
196
+ firebird: "firebird",
197
+
198
+ @doc("Interbase")
199
+ interbase: "interbase",
200
+
201
+ @doc("H2 Database")
202
+ h2: "h2",
203
+
204
+ @doc("HSQLDB")
205
+ hsqldb: "hsqldb",
206
+
207
+ @doc("Apache Derby")
208
+ derby: "derby",
209
+
210
+ @doc("CockroachDB")
211
+ cockroachdb: "cockroachdb",
212
+
213
+ @doc("TiDB")
214
+ tidb: "tidb",
215
+
216
+ @doc("YugabyteDB")
217
+ yugabyte: "yugabyte",
218
+
219
+ @doc("Vitess")
220
+ vitess: "vitess",
221
+
222
+ @doc("ClickHouse")
223
+ clickhouse: "clickhouse",
224
+
225
+ @doc("Snowflake")
226
+ snowflake: "snowflake",
227
+
228
+ @doc("Amazon Redshift")
229
+ redshift: "redshift",
230
+
231
+ @doc("Google BigQuery")
232
+ bigquery: "bigquery",
233
+
234
+ @doc("Azure Synapse")
235
+ synapse: "synapse",
236
+
237
+ @doc("Databricks")
238
+ databricks: "databricks",
239
+
240
+ @doc("Presto")
241
+ presto: "presto",
242
+
243
+ @doc("Trino")
244
+ trino: "trino",
245
+
246
+ @doc("Apache Hive")
247
+ hive: "hive",
248
+
249
+ @doc("Apache Spark SQL")
250
+ sparksql: "sparksql",
251
+
252
+ @doc("Apache Impala")
253
+ impala: "impala",
254
+
255
+ @doc("Apache Drill")
256
+ drill: "drill",
257
+
258
+ @doc("DuckDB")
259
+ duckdb: "duckdb",
260
+
261
+ @doc("Vertica")
262
+ vertica: "vertica",
263
+
264
+ @doc("Greenplum")
265
+ greenplum: "greenplum",
266
+
267
+ @doc("Netezza")
268
+ netezza: "netezza",
269
+
270
+ // ---------------------------------------------------------------------------
271
+ // NoSQL Document Databases
272
+ // ---------------------------------------------------------------------------
273
+
274
+ @doc("MongoDB")
275
+ mongodb: "mongodb",
276
+
277
+ @doc("Couchbase")
278
+ couchbase: "couchbase",
279
+
280
+ @doc("CouchDB")
281
+ couchdb: "couchdb",
282
+
283
+ @doc("Amazon DocumentDB")
284
+ documentdb: "documentdb",
285
+
286
+ @doc("Azure Cosmos DB")
287
+ cosmosdb: "cosmosdb",
288
+
289
+ @doc("Google Cloud Firestore")
290
+ firestore: "firestore",
291
+
292
+ @doc("RavenDB")
293
+ ravendb: "ravendb",
294
+
295
+ @doc("ArangoDB")
296
+ arangodb: "arangodb",
297
+
298
+ // ---------------------------------------------------------------------------
299
+ // Key-Value Stores
300
+ // ---------------------------------------------------------------------------
301
+
302
+ @doc("Redis")
303
+ redis: "redis",
304
+
305
+ @doc("Valkey")
306
+ valkey: "valkey",
307
+
308
+ @doc("KeyDB")
309
+ keydb: "keydb",
310
+
311
+ @doc("Memcached")
312
+ memcached: "memcached",
313
+
314
+ @doc("Amazon DynamoDB")
315
+ dynamodb: "dynamodb",
316
+
317
+ @doc("Azure Table Storage")
318
+ azuretable: "azuretable",
319
+
320
+ @doc("Hazelcast")
321
+ hazelcast: "hazelcast",
322
+
323
+ @doc("etcd")
324
+ etcd: "etcd",
325
+
326
+ @doc("Apache Ignite")
327
+ ignite: "ignite",
328
+
329
+ @doc("RocksDB")
330
+ rocksdb: "rocksdb",
331
+
332
+ @doc("LevelDB")
333
+ leveldb: "leveldb",
334
+
335
+ @doc("Berkeley DB")
336
+ berkeleydb: "berkeleydb",
337
+
338
+ // ---------------------------------------------------------------------------
339
+ // Wide-Column Stores
340
+ // ---------------------------------------------------------------------------
341
+
342
+ @doc("Apache Cassandra")
343
+ cassandra: "cassandra",
344
+
345
+ @doc("ScyllaDB")
346
+ scylla: "scylla",
347
+
348
+ @doc("Apache HBase")
349
+ hbase: "hbase",
350
+
351
+ @doc("Google Cloud Bigtable")
352
+ bigtable: "bigtable",
353
+
354
+ // ---------------------------------------------------------------------------
355
+ // Graph Databases
356
+ // ---------------------------------------------------------------------------
357
+
358
+ @doc("Neo4j")
359
+ neo4j: "neo4j",
360
+
361
+ @doc("Amazon Neptune")
362
+ neptune: "neptune",
363
+
364
+ @doc("ArangoDB (graph mode)")
365
+ arangodbGraph: "arangodb_graph",
366
+
367
+ @doc("JanusGraph")
368
+ janusgraph: "janusgraph",
369
+
370
+ @doc("TigerGraph")
371
+ tigergraph: "tigergraph",
372
+
373
+ @doc("Dgraph")
374
+ dgraph: "dgraph",
375
+
376
+ // ---------------------------------------------------------------------------
377
+ // Time-Series Databases
378
+ // ---------------------------------------------------------------------------
379
+
380
+ @doc("InfluxDB")
381
+ influxdb: "influxdb",
382
+
383
+ @doc("TimescaleDB")
384
+ timescaledb: "timescaledb",
385
+
386
+ @doc("Prometheus")
387
+ prometheus: "prometheus",
388
+
389
+ @doc("QuestDB")
390
+ questdb: "questdb",
391
+
392
+ @doc("Amazon Timestream")
393
+ timestream: "timestream",
394
+
395
+ @doc("Apache Druid")
396
+ druid: "druid",
397
+
398
+ @doc("VictoriaMetrics")
399
+ victoriametrics: "victoriametrics",
400
+
401
+ // ---------------------------------------------------------------------------
402
+ // Search Engines
403
+ // ---------------------------------------------------------------------------
404
+
405
+ @doc("Elasticsearch")
406
+ elasticsearch: "elasticsearch",
407
+
408
+ @doc("OpenSearch")
409
+ opensearch: "opensearch",
410
+
411
+ @doc("Apache Solr")
412
+ solr: "solr",
413
+
414
+ @doc("Splunk")
415
+ splunk: "splunk",
416
+
417
+ @doc("Meilisearch")
418
+ meilisearch: "meilisearch",
419
+
420
+ @doc("Typesense")
421
+ typesense: "typesense",
422
+
423
+ @doc("Algolia")
424
+ algolia: "algolia",
425
+
426
+ // ---------------------------------------------------------------------------
427
+ // Vector Databases
428
+ // ---------------------------------------------------------------------------
429
+
430
+ @doc("Pinecone")
431
+ pinecone: "pinecone",
432
+
433
+ @doc("Milvus")
434
+ milvus: "milvus",
435
+
436
+ @doc("Weaviate")
437
+ weaviate: "weaviate",
438
+
439
+ @doc("Qdrant")
440
+ qdrant: "qdrant",
441
+
442
+ @doc("Chroma")
443
+ chroma: "chroma",
444
+
445
+ @doc("pgvector (PostgreSQL extension)")
446
+ pgvector: "pgvector",
447
+
448
+ // ---------------------------------------------------------------------------
449
+ // Embedded & File-Based
450
+ // ---------------------------------------------------------------------------
451
+
452
+ @doc("Microsoft Access")
453
+ msaccess: "msaccess",
454
+
455
+ @doc("FileMaker")
456
+ filemaker: "filemaker",
457
+
458
+ @doc("FoxPro")
459
+ foxpro: "foxpro",
460
+
461
+ @doc("dBase")
462
+ dbase: "dbase",
463
+
464
+ // ---------------------------------------------------------------------------
465
+ // Other
466
+ // ---------------------------------------------------------------------------
467
+
468
+ @doc("ODBC (generic)")
469
+ odbc: "odbc",
470
+
471
+ @doc("JDBC (generic)")
472
+ jdbc: "jdbc",
473
+
474
+ @doc("Other/unknown database system")
475
+ other: "other",
476
+ }
477
+
478
+ // =============================================================================
479
+ // Database Operation Names
480
+ // =============================================================================
481
+
482
+ @doc("Database operation names")
483
+ enum DbOperationName {
484
+ @doc("SELECT query")
485
+ select: "SELECT",
486
+
487
+ @doc("INSERT query")
488
+ insert: "INSERT",
489
+
490
+ @doc("UPDATE query")
491
+ update: "UPDATE",
492
+
493
+ @doc("DELETE query")
494
+ delete: "DELETE",
495
+
496
+ @doc("CREATE operation")
497
+ create: "CREATE",
498
+
499
+ @doc("DROP operation")
500
+ drop: "DROP",
501
+
502
+ @doc("ALTER operation")
503
+ alter: "ALTER",
504
+
505
+ @doc("TRUNCATE operation")
506
+ truncate: "TRUNCATE",
507
+
508
+ @doc("EXECUTE stored procedure")
509
+ execute: "EXECUTE",
510
+
511
+ @doc("CALL stored procedure")
512
+ call: "CALL",
513
+
514
+ @doc("BEGIN transaction")
515
+ begin: "BEGIN",
516
+
517
+ @doc("COMMIT transaction")
518
+ commit: "COMMIT",
519
+
520
+ @doc("ROLLBACK transaction")
521
+ rollback: "ROLLBACK",
522
+
523
+ @doc("SAVEPOINT in transaction")
524
+ savepoint: "SAVEPOINT",
525
+
526
+ // NoSQL Operations
527
+ @doc("Find/query operation")
528
+ find: "find",
529
+
530
+ @doc("Find one operation")
531
+ findOne: "findOne",
532
+
533
+ @doc("Insert one operation")
534
+ insertOne: "insertOne",
535
+
536
+ @doc("Insert many operation")
537
+ insertMany: "insertMany",
538
+
539
+ @doc("Update one operation")
540
+ updateOne: "updateOne",
541
+
542
+ @doc("Update many operation")
543
+ updateMany: "updateMany",
544
+
545
+ @doc("Delete one operation")
546
+ deleteOne: "deleteOne",
547
+
548
+ @doc("Delete many operation")
549
+ deleteMany: "deleteMany",
550
+
551
+ @doc("Aggregate operation")
552
+ aggregate: "aggregate",
553
+
554
+ @doc("Count operation")
555
+ count: "count",
556
+
557
+ @doc("Get operation")
558
+ get: "GET",
559
+
560
+ @doc("Set operation")
561
+ set: "SET",
562
+
563
+ @doc("Delete operation")
564
+ del: "DEL",
565
+
566
+ @doc("Ping operation")
567
+ ping: "PING",
568
+ }
569
+
570
+ // =============================================================================
571
+ // Database Connection States
572
+ // =============================================================================
573
+
574
+ @doc("Database connection states")
575
+ enum DbConnectionState {
576
+ @doc("Connection is idle in pool")
577
+ idle: "idle",
578
+
579
+ @doc("Connection is in use")
580
+ used: "used",
581
+ }
582
+
583
+ // =============================================================================
584
+ // Database Metrics
585
+ // =============================================================================
586
+
587
+ @doc("Database client operation duration metric")
588
+ model DbClientOperationDurationMetric {
589
+ @doc("Metric name")
590
+ name: "db.client.operation.duration";
591
+
592
+ @doc("Metric unit (seconds)")
593
+ unit: "s";
594
+
595
+ @doc("Database system")
596
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
597
+ systemName: DbSystem;
598
+
599
+ @doc("Database namespace")
600
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.Namespace)
601
+ `namespace`?: string;
602
+
603
+ @doc("Operation name")
604
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.OperationName)
605
+ operationName: DbOperationName;
606
+
607
+ @doc("Collection/table name")
608
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.CollectionName)
609
+ collectionName?: string;
610
+
611
+ @doc("Error type if failed")
612
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Error.Type)
613
+ errorType?: string;
614
+ }
615
+
616
+ @doc("Database connection pool size metric")
617
+ model DbConnectionPoolSizeMetric {
618
+ @doc("Metric name")
619
+ name: "db.client.connection.count";
620
+
621
+ @doc("Metric unit")
622
+ unit: "{connection}";
623
+
624
+ @doc("Database system")
625
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
626
+ systemName: DbSystem;
627
+
628
+ @doc("Pool name")
629
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionPoolName)
630
+ poolName: string;
631
+
632
+ @doc("Connection state")
633
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionState)
634
+ state: DbConnectionState;
635
+ }
636
+
637
+ @doc("Database connection create time metric")
638
+ model DbConnectionCreateTimeMetric {
639
+ @doc("Metric name")
640
+ name: "db.client.connection.create_time";
641
+
642
+ @doc("Metric unit (seconds)")
643
+ unit: "s";
644
+
645
+ @doc("Database system")
646
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
647
+ systemName: DbSystem;
648
+
649
+ @doc("Pool name")
650
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionPoolName)
651
+ poolName: string;
652
+ }
653
+
654
+ @doc("Database connection wait time metric")
655
+ model DbConnectionWaitTimeMetric {
656
+ @doc("Metric name")
657
+ name: "db.client.connection.wait_time";
658
+
659
+ @doc("Metric unit (seconds)")
660
+ unit: "s";
661
+
662
+ @doc("Database system")
663
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
664
+ systemName: DbSystem;
665
+
666
+ @doc("Pool name")
667
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionPoolName)
668
+ poolName: string;
669
+ }
670
+
671
+ @doc("Database connection use time metric")
672
+ model DbConnectionUseTimeMetric {
673
+ @doc("Metric name")
674
+ name: "db.client.connection.use_time";
675
+
676
+ @doc("Metric unit (seconds)")
677
+ unit: "s";
678
+
679
+ @doc("Database system")
680
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
681
+ systemName: DbSystem;
682
+
683
+ @doc("Pool name")
684
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionPoolName)
685
+ poolName: string;
686
+ }
687
+
688
+ @doc("Database connection pending requests metric")
689
+ model DbConnectionPendingRequestsMetric {
690
+ @doc("Metric name")
691
+ name: "db.client.connection.pending_requests";
692
+
693
+ @doc("Metric unit")
694
+ unit: "{request}";
695
+
696
+ @doc("Database system")
697
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
698
+ systemName: DbSystem;
699
+
700
+ @doc("Pool name")
701
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionPoolName)
702
+ poolName: string;
703
+ }
704
+
705
+ @doc("Database connection timeouts metric")
706
+ model DbConnectionTimeoutsMetric {
707
+ @doc("Metric name")
708
+ name: "db.client.connection.timeouts";
709
+
710
+ @doc("Metric unit")
711
+ unit: "{timeout}";
712
+
713
+ @doc("Database system")
714
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.SystemName)
715
+ systemName: DbSystem;
716
+
717
+ @doc("Pool name")
718
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Db.ClientConnectionPoolName)
719
+ poolName: string;
720
+ }
721
+
722
+ // =============================================================================
723
+ // Database Statistics
724
+ // =============================================================================
725
+
726
+ @doc("Aggregated database statistics")
727
+ model DbStats {
728
+ @doc("Total queries")
729
+ @encodedName("application/json", "total_queries")
730
+ totalQueries: Count;
731
+
732
+ @doc("Total query duration in seconds")
733
+ @encodedName("application/json", "total_duration_s")
734
+ totalDurationS: float64;
735
+
736
+ @doc("Average query duration in milliseconds")
737
+ @encodedName("application/json", "avg_duration_ms")
738
+ avgDurationMs: float64;
739
+
740
+ @doc("Query error rate")
741
+ @encodedName("application/json", "error_rate")
742
+ errorRate: Ratio;
743
+
744
+ @doc("Stats by database system")
745
+ @encodedName("application/json", "by_system")
746
+ bySystem?: DbSystemStats[];
747
+
748
+ @doc("Stats by operation")
749
+ @encodedName("application/json", "by_operation")
750
+ byOperation?: DbOperationStats[];
751
+
752
+ @doc("Slowest queries")
753
+ @encodedName("application/json", "slowest_queries")
754
+ slowestQueries?: DbSlowQuery[];
755
+ }
756
+
757
+ @doc("Statistics by database system")
758
+ model DbSystemStats {
759
+ @doc("Database system")
760
+ system: DbSystem;
761
+
762
+ @doc("Query count")
763
+ @encodedName("application/json", "query_count")
764
+ queryCount: Count;
765
+
766
+ @doc("Average duration in milliseconds")
767
+ @encodedName("application/json", "avg_duration_ms")
768
+ avgDurationMs: float64;
769
+
770
+ @doc("Error rate")
771
+ @encodedName("application/json", "error_rate")
772
+ errorRate: Ratio;
773
+ }
774
+
775
+ @doc("Statistics by operation type")
776
+ model DbOperationStats {
777
+ @doc("Operation name")
778
+ operation: DbOperationName;
779
+
780
+ @doc("Query count")
781
+ @encodedName("application/json", "query_count")
782
+ queryCount: Count;
783
+
784
+ @doc("Average duration in milliseconds")
785
+ @encodedName("application/json", "avg_duration_ms")
786
+ avgDurationMs: float64;
787
+ }
788
+
789
+ @doc("Slow query record")
790
+ model DbSlowQuery {
791
+ @doc("Query text (sanitized)")
792
+ @encodedName("application/json", "query_text")
793
+ queryText: string;
794
+
795
+ @doc("Duration in milliseconds")
796
+ @encodedName("application/json", "duration_ms")
797
+ durationMs: DurationMs;
798
+
799
+ @doc("Database system")
800
+ system: DbSystem;
801
+
802
+ @doc("Database namespace")
803
+ `namespace`?: string;
804
+
805
+ @doc("Operation name")
806
+ operation: DbOperationName;
807
+
808
+ @doc("Timestamp")
809
+ timestamp: utcDateTime;
810
+ }