duron 0.3.0-beta.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/action-job.d.ts +33 -2
  2. package/dist/action-job.d.ts.map +1 -1
  3. package/dist/action-job.js +93 -26
  4. package/dist/action-manager.d.ts +44 -2
  5. package/dist/action-manager.d.ts.map +1 -1
  6. package/dist/action-manager.js +64 -3
  7. package/dist/action.d.ts +388 -7
  8. package/dist/action.d.ts.map +1 -1
  9. package/dist/action.js +44 -23
  10. package/dist/adapters/adapter.d.ts +365 -8
  11. package/dist/adapters/adapter.d.ts.map +1 -1
  12. package/dist/adapters/adapter.js +221 -15
  13. package/dist/adapters/postgres/base.d.ts +184 -6
  14. package/dist/adapters/postgres/base.d.ts.map +1 -1
  15. package/dist/adapters/postgres/base.js +436 -75
  16. package/dist/adapters/postgres/pglite.d.ts +37 -0
  17. package/dist/adapters/postgres/pglite.d.ts.map +1 -1
  18. package/dist/adapters/postgres/pglite.js +38 -0
  19. package/dist/adapters/postgres/postgres.d.ts +35 -0
  20. package/dist/adapters/postgres/postgres.d.ts.map +1 -1
  21. package/dist/adapters/postgres/postgres.js +42 -0
  22. package/dist/adapters/postgres/schema.d.ts +150 -37
  23. package/dist/adapters/postgres/schema.d.ts.map +1 -1
  24. package/dist/adapters/postgres/schema.default.d.ts +151 -38
  25. package/dist/adapters/postgres/schema.default.d.ts.map +1 -1
  26. package/dist/adapters/postgres/schema.default.js +2 -2
  27. package/dist/adapters/postgres/schema.js +60 -23
  28. package/dist/adapters/schemas.d.ts +124 -80
  29. package/dist/adapters/schemas.d.ts.map +1 -1
  30. package/dist/adapters/schemas.js +139 -26
  31. package/dist/client.d.ts +426 -22
  32. package/dist/client.d.ts.map +1 -1
  33. package/dist/client.js +370 -20
  34. package/dist/constants.js +6 -0
  35. package/dist/errors.d.ts +166 -9
  36. package/dist/errors.d.ts.map +1 -1
  37. package/dist/errors.js +189 -19
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/server.d.ts +99 -37
  41. package/dist/server.d.ts.map +1 -1
  42. package/dist/server.js +84 -25
  43. package/dist/step-manager.d.ts +111 -4
  44. package/dist/step-manager.d.ts.map +1 -1
  45. package/dist/step-manager.js +411 -75
  46. package/dist/telemetry/index.d.ts +1 -4
  47. package/dist/telemetry/index.d.ts.map +1 -1
  48. package/dist/telemetry/index.js +2 -4
  49. package/dist/telemetry/local-span-exporter.d.ts +56 -0
  50. package/dist/telemetry/local-span-exporter.d.ts.map +1 -0
  51. package/dist/telemetry/local-span-exporter.js +118 -0
  52. package/dist/utils/p-retry.d.ts +5 -0
  53. package/dist/utils/p-retry.d.ts.map +1 -1
  54. package/dist/utils/p-retry.js +8 -0
  55. package/dist/utils/wait-for-abort.d.ts +1 -0
  56. package/dist/utils/wait-for-abort.d.ts.map +1 -1
  57. package/dist/utils/wait-for-abort.js +1 -0
  58. package/migrations/postgres/{20260119153838_flimsy_thor_girl → 20260121160012_normal_bloodstrike}/migration.sql +32 -20
  59. package/migrations/postgres/{20260119153838_flimsy_thor_girl → 20260121160012_normal_bloodstrike}/snapshot.json +241 -66
  60. package/package.json +42 -26
  61. package/src/action-job.ts +43 -32
  62. package/src/action-manager.ts +5 -5
  63. package/src/action.ts +317 -149
  64. package/src/adapters/adapter.ts +54 -54
  65. package/src/adapters/postgres/base.ts +266 -86
  66. package/src/adapters/postgres/schema.default.ts +2 -2
  67. package/src/adapters/postgres/schema.ts +52 -24
  68. package/src/adapters/schemas.ts +91 -36
  69. package/src/client.ts +322 -68
  70. package/src/errors.ts +141 -30
  71. package/src/index.ts +2 -0
  72. package/src/server.ts +39 -37
  73. package/src/step-manager.ts +254 -91
  74. package/src/telemetry/index.ts +2 -20
  75. package/src/telemetry/local-span-exporter.ts +148 -0
  76. package/dist/telemetry/adapter.d.ts +0 -107
  77. package/dist/telemetry/adapter.d.ts.map +0 -1
  78. package/dist/telemetry/adapter.js +0 -134
  79. package/dist/telemetry/local.d.ts +0 -22
  80. package/dist/telemetry/local.d.ts.map +0 -1
  81. package/dist/telemetry/local.js +0 -243
  82. package/dist/telemetry/noop.d.ts +0 -17
  83. package/dist/telemetry/noop.d.ts.map +0 -1
  84. package/dist/telemetry/noop.js +0 -66
  85. package/dist/telemetry/opentelemetry.d.ts +0 -25
  86. package/dist/telemetry/opentelemetry.d.ts.map +0 -1
  87. package/dist/telemetry/opentelemetry.js +0 -312
  88. package/src/telemetry/adapter.ts +0 -642
  89. package/src/telemetry/local.ts +0 -429
  90. package/src/telemetry/noop.ts +0 -141
  91. package/src/telemetry/opentelemetry.ts +0 -453
@@ -47,6 +47,21 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
47
47
  identity: undefined;
48
48
  generated: undefined;
49
49
  }>;
50
+ description: import("drizzle-orm/pg-core").PgBuildColumn<"jobs", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
51
+ name: string;
52
+ tableName: "jobs";
53
+ dataType: "string";
54
+ data: string;
55
+ driverParam: string;
56
+ notNull: false;
57
+ hasDefault: false;
58
+ isPrimaryKey: false;
59
+ isAutoincrement: false;
60
+ hasRuntimeDefault: false;
61
+ enumValues: undefined;
62
+ identity: undefined;
63
+ generated: undefined;
64
+ }>;
50
65
  status: import("drizzle-orm/pg-core").PgBuildColumn<"jobs", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "created" | "active" | "completed" | "failed" | "cancelled">>>, {
51
66
  name: string;
52
67
  tableName: "jobs";
@@ -197,14 +212,29 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
197
212
  identity: undefined;
198
213
  generated: undefined;
199
214
  }>;
200
- concurrency_limit: import("drizzle-orm/pg-core").PgBuildColumn<"jobs", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>>, {
215
+ concurrency_limit: import("drizzle-orm/pg-core").PgBuildColumn<"jobs", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
201
216
  name: string;
202
217
  tableName: "jobs";
203
218
  dataType: "number int32";
204
219
  data: number;
205
220
  driverParam: string | number;
206
221
  notNull: true;
207
- hasDefault: true;
222
+ hasDefault: false;
223
+ isPrimaryKey: false;
224
+ isAutoincrement: false;
225
+ hasRuntimeDefault: false;
226
+ enumValues: undefined;
227
+ identity: undefined;
228
+ generated: undefined;
229
+ }>;
230
+ concurrency_step_limit: import("drizzle-orm/pg-core").PgBuildColumn<"jobs", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
231
+ name: string;
232
+ tableName: "jobs";
233
+ dataType: "number int32";
234
+ data: number;
235
+ driverParam: string | number;
236
+ notNull: true;
237
+ hasDefault: false;
208
238
  isPrimaryKey: false;
209
239
  isAutoincrement: false;
210
240
  hasRuntimeDefault: false;
@@ -528,18 +558,33 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
528
558
  }>;
529
559
  };
530
560
  dialect: "pg";
531
- }>, metricsTable: import("drizzle-orm/pg-core").PgTableWithColumns<{
532
- name: "metrics";
561
+ }>, spansTable: import("drizzle-orm/pg-core").PgTableWithColumns<{
562
+ name: "spans";
533
563
  schema: string;
534
564
  columns: {
535
- id: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgUUIDBuilder>>, {
565
+ id: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgBigSerial53Builder>, {
536
566
  name: string;
537
- tableName: "metrics";
538
- dataType: "string uuid";
567
+ tableName: "spans";
568
+ dataType: "number int53";
569
+ data: number;
570
+ driverParam: number;
571
+ notNull: true;
572
+ hasDefault: true;
573
+ isPrimaryKey: false;
574
+ isAutoincrement: false;
575
+ hasRuntimeDefault: false;
576
+ enumValues: undefined;
577
+ identity: undefined;
578
+ generated: undefined;
579
+ }>;
580
+ trace_id: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
581
+ name: string;
582
+ tableName: "spans";
583
+ dataType: "string";
539
584
  data: string;
540
585
  driverParam: string;
541
586
  notNull: true;
542
- hasDefault: true;
587
+ hasDefault: false;
543
588
  isPrimaryKey: false;
544
589
  isAutoincrement: false;
545
590
  hasRuntimeDefault: false;
@@ -547,10 +592,10 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
547
592
  identity: undefined;
548
593
  generated: undefined;
549
594
  }>;
550
- job_id: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgUUIDBuilder>, {
595
+ span_id: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
551
596
  name: string;
552
- tableName: "metrics";
553
- dataType: "string uuid";
597
+ tableName: "spans";
598
+ dataType: "string";
554
599
  data: string;
555
600
  driverParam: string;
556
601
  notNull: true;
@@ -562,9 +607,24 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
562
607
  identity: undefined;
563
608
  generated: undefined;
564
609
  }>;
565
- step_id: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").PgUUIDBuilder, {
610
+ parent_span_id: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
566
611
  name: string;
567
- tableName: "metrics";
612
+ tableName: "spans";
613
+ dataType: "string";
614
+ data: string;
615
+ driverParam: string;
616
+ notNull: false;
617
+ hasDefault: false;
618
+ isPrimaryKey: false;
619
+ isAutoincrement: false;
620
+ hasRuntimeDefault: false;
621
+ enumValues: undefined;
622
+ identity: undefined;
623
+ generated: undefined;
624
+ }>;
625
+ job_id: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").PgUUIDBuilder, {
626
+ name: string;
627
+ tableName: "spans";
568
628
  dataType: "string uuid";
569
629
  data: string;
570
630
  driverParam: string;
@@ -577,9 +637,24 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
577
637
  identity: undefined;
578
638
  generated: undefined;
579
639
  }>;
580
- name: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
640
+ step_id: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").PgUUIDBuilder, {
581
641
  name: string;
582
- tableName: "metrics";
642
+ tableName: "spans";
643
+ dataType: "string uuid";
644
+ data: string;
645
+ driverParam: string;
646
+ notNull: false;
647
+ hasDefault: false;
648
+ isPrimaryKey: false;
649
+ isAutoincrement: false;
650
+ hasRuntimeDefault: false;
651
+ enumValues: undefined;
652
+ identity: undefined;
653
+ generated: undefined;
654
+ }>;
655
+ name: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
656
+ name: string;
657
+ tableName: "spans";
583
658
  dataType: "string";
584
659
  data: string;
585
660
  driverParam: string;
@@ -592,13 +667,28 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
592
667
  identity: undefined;
593
668
  generated: undefined;
594
669
  }>;
595
- value: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgDoublePrecisionBuilder>, {
670
+ kind: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>>, {
596
671
  name: string;
597
- tableName: "metrics";
598
- dataType: "number double";
672
+ tableName: "spans";
673
+ dataType: "number int32";
599
674
  data: number;
600
675
  driverParam: string | number;
601
676
  notNull: true;
677
+ hasDefault: true;
678
+ isPrimaryKey: false;
679
+ isAutoincrement: false;
680
+ hasRuntimeDefault: false;
681
+ enumValues: undefined;
682
+ identity: undefined;
683
+ generated: undefined;
684
+ }>;
685
+ start_time_unix_nano: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgBigInt64Builder>, {
686
+ name: string;
687
+ tableName: "spans";
688
+ dataType: "bigint int64";
689
+ data: bigint;
690
+ driverParam: string;
691
+ notNull: true;
602
692
  hasDefault: false;
603
693
  isPrimaryKey: false;
604
694
  isAutoincrement: false;
@@ -607,12 +697,27 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
607
697
  identity: undefined;
608
698
  generated: undefined;
609
699
  }>;
610
- attributes: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgJsonbBuilder, Record<string, any>>>>, {
700
+ end_time_unix_nano: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").PgBigInt64Builder, {
611
701
  name: string;
612
- tableName: "metrics";
613
- dataType: "object json";
614
- data: Record<string, any>;
615
- driverParam: unknown;
702
+ tableName: "spans";
703
+ dataType: "bigint int64";
704
+ data: bigint;
705
+ driverParam: string;
706
+ notNull: false;
707
+ hasDefault: false;
708
+ isPrimaryKey: false;
709
+ isAutoincrement: false;
710
+ hasRuntimeDefault: false;
711
+ enumValues: undefined;
712
+ identity: undefined;
713
+ generated: undefined;
714
+ }>;
715
+ status_code: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>>, {
716
+ name: string;
717
+ tableName: "spans";
718
+ dataType: "number int32";
719
+ data: number;
720
+ driverParam: string | number;
616
721
  notNull: true;
617
722
  hasDefault: true;
618
723
  isPrimaryKey: false;
@@ -622,13 +727,13 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
622
727
  identity: undefined;
623
728
  generated: undefined;
624
729
  }>;
625
- type: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "metric" | "span_event" | "span_attribute">>, {
730
+ status_message: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
626
731
  name: string;
627
- tableName: "metrics";
732
+ tableName: "spans";
628
733
  dataType: "string";
629
- data: "metric" | "span_event" | "span_attribute";
734
+ data: string;
630
735
  driverParam: string;
631
- notNull: true;
736
+ notNull: false;
632
737
  hasDefault: false;
633
738
  isPrimaryKey: false;
634
739
  isAutoincrement: false;
@@ -637,12 +742,12 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
637
742
  identity: undefined;
638
743
  generated: undefined;
639
744
  }>;
640
- timestamp: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
745
+ attributes: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgJsonbBuilder, Record<string, any>>>>, {
641
746
  name: string;
642
- tableName: "metrics";
643
- dataType: "object date";
644
- data: Date;
645
- driverParam: string;
747
+ tableName: "spans";
748
+ dataType: "object json";
749
+ data: Record<string, any>;
750
+ driverParam: unknown;
646
751
  notNull: true;
647
752
  hasDefault: true;
648
753
  isPrimaryKey: false;
@@ -652,12 +757,20 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
652
757
  identity: undefined;
653
758
  generated: undefined;
654
759
  }>;
655
- created_at: import("drizzle-orm/pg-core").PgBuildColumn<"metrics", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
760
+ events: import("drizzle-orm/pg-core").PgBuildColumn<"spans", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgJsonbBuilder, {
656
761
  name: string;
657
- tableName: "metrics";
658
- dataType: "object date";
659
- data: Date;
660
- driverParam: string;
762
+ timeUnixNano: string;
763
+ attributes?: Record<string, any>;
764
+ }[]>>>, {
765
+ name: string;
766
+ tableName: "spans";
767
+ dataType: "object json";
768
+ data: {
769
+ name: string;
770
+ timeUnixNano: string;
771
+ attributes?: Record<string, any>;
772
+ }[];
773
+ driverParam: unknown;
661
774
  notNull: true;
662
775
  hasDefault: true;
663
776
  isPrimaryKey: false;
@@ -670,5 +783,5 @@ declare const schema: import("drizzle-orm/pg-core").PgSchema<string>, jobsTable:
670
783
  };
671
784
  dialect: "pg";
672
785
  }>;
673
- export { schema, jobsTable, jobStepsTable, metricsTable };
786
+ export { schema, jobsTable, jobStepsTable, spansTable };
674
787
  //# sourceMappingURL=schema.default.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.default.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.default.ts"],"names":[],"mappings":"AAEA,QAAA,MAAQ,MAAM,kDAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA0B,CAAA;AAEhF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"schema.default.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.default.ts"],"names":[],"mappings":"AAEA,QAAA,MAAQ,MAAM,kDAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA0B,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import createSchema from './schema.js';
2
- const { schema, jobsTable, jobStepsTable, metricsTable } = createSchema('duron');
3
- export { schema, jobsTable, jobStepsTable, metricsTable };
2
+ const { schema, jobsTable, jobStepsTable, spansTable } = createSchema('duron');
3
+ export { schema, jobsTable, jobStepsTable, spansTable };
@@ -1,5 +1,5 @@
1
1
  import { sql } from 'drizzle-orm';
2
- import { boolean, check, doublePrecision, index, integer, jsonb, pgSchema, text, timestamp, unique, uuid, } from 'drizzle-orm/pg-core';
2
+ import { bigint, bigserial, boolean, check, index, integer, jsonb, pgSchema, text, timestamp, unique, uuid, } from 'drizzle-orm/pg-core';
3
3
  import { JOB_STATUSES, STEP_STATUS_ACTIVE, STEP_STATUSES } from '../../constants.js';
4
4
  export default function createSchema(schemaName) {
5
5
  const schema = pgSchema(schemaName);
@@ -7,6 +7,7 @@ export default function createSchema(schemaName) {
7
7
  id: uuid('id').primaryKey().defaultRandom(),
8
8
  action_name: text('action_name').notNull(),
9
9
  group_key: text('group_key').notNull(),
10
+ description: text('description'),
10
11
  status: text('status').$type().notNull().default('created'),
11
12
  checksum: text('checksum').notNull(),
12
13
  input: jsonb('input').notNull().default({}),
@@ -17,7 +18,8 @@ export default function createSchema(schemaName) {
17
18
  started_at: timestamp('started_at', { withTimezone: true }),
18
19
  finished_at: timestamp('finished_at', { withTimezone: true }),
19
20
  client_id: text('client_id'),
20
- concurrency_limit: integer('concurrency_limit').notNull().default(10),
21
+ concurrency_limit: integer('concurrency_limit').notNull(),
22
+ concurrency_step_limit: integer('concurrency_step_limit').notNull(),
21
23
  created_at: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
22
24
  updated_at: timestamp('updated_at', { withTimezone: true })
23
25
  .notNull()
@@ -26,17 +28,22 @@ export default function createSchema(schemaName) {
26
28
  toISOString: () => sql `now()`,
27
29
  })),
28
30
  }, (table) => [
31
+ // Single column indexes
29
32
  index('idx_jobs_action_name').on(table.action_name),
30
33
  index('idx_jobs_status').on(table.status),
31
34
  index('idx_jobs_group_key').on(table.group_key),
35
+ index('idx_jobs_description').on(table.description),
32
36
  index('idx_jobs_started_at').on(table.started_at),
33
37
  index('idx_jobs_finished_at').on(table.finished_at),
34
38
  index('idx_jobs_expires_at').on(table.expires_at),
35
39
  index('idx_jobs_client_id').on(table.client_id),
36
40
  index('idx_jobs_checksum').on(table.checksum),
37
41
  index('idx_jobs_concurrency_limit').on(table.concurrency_limit),
42
+ index('idx_jobs_concurrency_step_limit').on(table.concurrency_step_limit),
43
+ // Composite indexes
38
44
  index('idx_jobs_action_status').on(table.action_name, table.status),
39
45
  index('idx_jobs_action_group').on(table.action_name, table.group_key),
46
+ // GIN indexes for full-text search
40
47
  index('idx_jobs_input_fts').using('gin', sql `to_tsvector('english', ${table.input}::text)`),
41
48
  index('idx_jobs_output_fts').using('gin', sql `to_tsvector('english', ${table.output}::text)`),
42
49
  check('jobs_status_check', sql `${table.status} IN ${sql.raw(`(${JOB_STATUSES.map((s) => `'${s}'`).join(',')})`)}`),
@@ -47,7 +54,7 @@ export default function createSchema(schemaName) {
47
54
  .notNull()
48
55
  .references(() => jobsTable.id, { onDelete: 'cascade' }),
49
56
  parent_step_id: uuid('parent_step_id'),
50
- parallel: boolean('branch').notNull().default(false),
57
+ parallel: boolean('branch').notNull().default(false), // DB column is 'branch', TypeScript uses 'parallel'
51
58
  name: text('name').notNull(),
52
59
  status: text('status').$type().notNull().default(STEP_STATUS_ACTIVE),
53
60
  output: jsonb('output'),
@@ -71,47 +78,77 @@ export default function createSchema(schemaName) {
71
78
  toISOString: () => sql `now()`,
72
79
  })),
73
80
  }, (table) => [
81
+ // Single column indexes
74
82
  index('idx_job_steps_job_id').on(table.job_id),
75
83
  index('idx_job_steps_status').on(table.status),
76
84
  index('idx_job_steps_name').on(table.name),
77
85
  index('idx_job_steps_expires_at').on(table.expires_at),
78
86
  index('idx_job_steps_parent_step_id').on(table.parent_step_id),
87
+ // Composite indexes
79
88
  index('idx_job_steps_job_status').on(table.job_id, table.status),
80
89
  index('idx_job_steps_job_name').on(table.job_id, table.name),
81
90
  index('idx_job_steps_output_fts').using('gin', sql `to_tsvector('english', ${table.output}::text)`),
91
+ // Unique constraint - step name is unique within a parent (name + parentStepId)
92
+ // nullsNotDistinct ensures NULL parent_step_id values are treated as equal for uniqueness
82
93
  unique('unique_job_step_name_parent')
83
94
  .on(table.job_id, table.name, table.parent_step_id)
84
95
  .nullsNotDistinct(),
85
96
  check('job_steps_status_check', sql `${table.status} IN ${sql.raw(`(${STEP_STATUSES.map((s) => `'${s}'`).join(',')})`)}`),
86
97
  ]);
87
- const metricsTable = schema.table('metrics', {
88
- id: uuid('id').primaryKey().defaultRandom(),
89
- job_id: uuid('job_id')
90
- .notNull()
91
- .references(() => jobsTable.id, { onDelete: 'cascade' }),
98
+ /**
99
+ * OpenTelemetry spans table.
100
+ * Stores span data exported by PostgresSpanExporter.
101
+ *
102
+ * SpanKind values: 0=INTERNAL, 1=SERVER, 2=CLIENT, 3=PRODUCER, 4=CONSUMER
103
+ * StatusCode values: 0=UNSET, 1=OK, 2=ERROR
104
+ */
105
+ const spansTable = schema.table('spans', {
106
+ id: bigserial('id', { mode: 'number' }).primaryKey(),
107
+ // OpenTelemetry span identifiers
108
+ trace_id: text('trace_id').notNull(), // 32-char hex
109
+ span_id: text('span_id').notNull(), // 16-char hex
110
+ parent_span_id: text('parent_span_id'), // 16-char hex, null for root spans
111
+ // Duron-specific references (extracted from span attributes)
112
+ job_id: uuid('job_id').references(() => jobsTable.id, { onDelete: 'cascade' }),
92
113
  step_id: uuid('step_id').references(() => jobStepsTable.id, { onDelete: 'cascade' }),
114
+ // Span metadata
93
115
  name: text('name').notNull(),
94
- value: doublePrecision('value').notNull(),
116
+ kind: integer('kind').notNull().default(0), // SpanKind enum
117
+ // Timing (stored as nanoseconds since epoch for precision)
118
+ start_time_unix_nano: bigint('start_time_unix_nano', { mode: 'bigint' }).notNull(),
119
+ end_time_unix_nano: bigint('end_time_unix_nano', { mode: 'bigint' }),
120
+ // Status
121
+ status_code: integer('status_code').notNull().default(0), // SpanStatusCode enum
122
+ status_message: text('status_message'),
123
+ // Span data
95
124
  attributes: jsonb('attributes').$type().notNull().default({}),
96
- type: text('type').$type().notNull(),
97
- timestamp: timestamp('timestamp', { withTimezone: true }).notNull().defaultNow(),
98
- created_at: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
125
+ events: jsonb('events')
126
+ .$type()
127
+ .notNull()
128
+ .default([]),
99
129
  }, (table) => [
100
- index('idx_metrics_job_id').on(table.job_id),
101
- index('idx_metrics_step_id').on(table.step_id),
102
- index('idx_metrics_name').on(table.name),
103
- index('idx_metrics_type').on(table.type),
104
- index('idx_metrics_timestamp').on(table.timestamp),
105
- index('idx_metrics_job_step').on(table.job_id, table.step_id),
106
- index('idx_metrics_job_name').on(table.job_id, table.name),
107
- index('idx_metrics_job_type').on(table.job_id, table.type),
108
- index('idx_metrics_attributes').using('gin', table.attributes),
109
- check('metrics_type_check', sql `${table.type} IN ('metric', 'span_event', 'span_attribute')`),
130
+ // Single column indexes
131
+ index('idx_spans_trace_id').on(table.trace_id),
132
+ index('idx_spans_span_id').on(table.span_id),
133
+ index('idx_spans_job_id').on(table.job_id),
134
+ index('idx_spans_step_id').on(table.step_id),
135
+ index('idx_spans_name').on(table.name),
136
+ index('idx_spans_kind').on(table.kind),
137
+ index('idx_spans_status_code').on(table.status_code),
138
+ // Composite indexes
139
+ index('idx_spans_job_step').on(table.job_id, table.step_id),
140
+ index('idx_spans_trace_parent').on(table.trace_id, table.parent_span_id),
141
+ // GIN indexes for JSONB querying
142
+ index('idx_spans_attributes').using('gin', table.attributes),
143
+ index('idx_spans_events').using('gin', table.events),
144
+ // Constraints
145
+ check('spans_kind_check', sql `${table.kind} IN (0, 1, 2, 3, 4)`),
146
+ check('spans_status_code_check', sql `${table.status_code} IN (0, 1, 2)`),
110
147
  ]);
111
148
  return {
112
149
  schema,
113
150
  jobsTable,
114
151
  jobStepsTable,
115
- metricsTable,
152
+ spansTable,
116
153
  };
117
154
  }