cabloy 5.1.117 → 5.1.119

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 (119) hide show
  1. package/.cabloy-version +1 -1
  2. package/.github/workflows/vona-test-pg.yml +2 -2
  3. package/.github/workflows/vona-test-sqlite3.yml +2 -2
  4. package/CHANGELOG.md +19 -0
  5. package/cabloy-docs/backend/metrics-guide.md +75 -0
  6. package/e2e/specs/a-commerce/commerce.spec.ts +111 -0
  7. package/observability/README.md +18 -0
  8. package/observability/collector/otel-collector.yaml +34 -0
  9. package/observability/docker-compose.metrics.yml +25 -0
  10. package/observability/grafana/provisioning/datasources/prometheus.yaml +8 -0
  11. package/observability/prometheus/prometheus.yaml +7 -0
  12. package/package.json +1 -1
  13. package/scripts/upgrade.ts +1 -0
  14. package/vona/env/.env +6 -0
  15. package/vona/packages-cli/cli/package.json +1 -1
  16. package/vona/packages-cli/cli-set-api/package.json +1 -1
  17. package/vona/packages-vona/vona/package.json +1 -1
  18. package/vona/packages-vona/vona-core/package.json +1 -1
  19. package/vona/packages-vona/vona-core/src/lib/framework/processWorker.ts +1 -1
  20. package/vona/packages-vona/vona-mock/package.json +1 -1
  21. package/vona/packages-vona/vona-mock/src/index.ts +2 -0
  22. package/vona/packages-vona/vona-mock/src/lib/testLock.ts +21 -0
  23. package/vona/pnpm-lock.yaml +167 -64
  24. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/catalog.test.ts +13 -3
  25. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/product.test.ts +124 -70
  26. package/vona/src/suite/a-commerce/modules/commerce-payment/src/.metadata/index.ts +221 -0
  27. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.index.ts +12 -0
  28. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.version.ts +91 -0
  29. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/refundAttempt.tsx +37 -0
  30. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/refundAudit.tsx +47 -0
  31. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/refundRequest.tsx +43 -0
  32. package/vona/src/suite/a-commerce/modules/commerce-payment/src/model/refundAttempt.ts +10 -0
  33. package/vona/src/suite/a-commerce/modules/commerce-payment/src/model/refundAudit.ts +10 -0
  34. package/vona/src/suite/a-commerce/modules/commerce-payment/src/model/refundRequest.ts +10 -0
  35. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +36 -0
  36. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/order.ts +43 -0
  37. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderDetail.tsx +23 -2
  38. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderSelectResItem.tsx +3 -0
  39. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderSummary.tsx +23 -2
  40. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundOutcomeCreate.tsx +16 -0
  41. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundRequestCreate.tsx +15 -0
  42. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundResult.tsx +35 -0
  43. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundReview.tsx +15 -0
  44. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/orderAudit.tsx +55 -13
  45. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +459 -10
  46. package/vona/src/suite/a-commerce/modules/commerce-trade/test/cartOwnership.test.ts +2 -4
  47. package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutReservation.test.ts +2 -4
  48. package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutTransaction.test.ts +2 -4
  49. package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderSnapshot.test.ts +2 -4
  50. package/vona/src/suite/a-commerce/modules/commerce-trade/test/paymentOutcome.test.ts +2 -4
  51. package/vona/src/suite/a-commerce/modules/commerce-trade/test/refundLifecycle.test.ts +337 -0
  52. package/vona/src/suite/a-commerce/modules/commerce-trade/test/reservationExpiry.test.ts +2 -3
  53. package/vona/src/suite/a-commerce/modules/commerce-trade/test/shipment.test.ts +2 -4
  54. package/vona/src/suite/a-commerce/modules/commerce-trade/test/shipmentRefundRace.test.ts +143 -0
  55. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockBalance.test.ts +2 -4
  56. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockReservation.test.ts +2 -4
  57. package/vona/src/suite/cabloy-basic/modules/basic-metrics/package.json +54 -0
  58. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/.metadata/index.ts +189 -0
  59. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/.metadata/this.ts +1 -0
  60. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/bean/ssrMenu.metrics.ts +23 -0
  61. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/controller/metrics.ts +21 -0
  62. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/dto/metricsQueue.ts +25 -0
  63. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/dto/metricsRuntime.ts +36 -0
  64. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/dto/metricsSnapshot.ts +21 -0
  65. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/index.ts +1 -0
  66. package/vona/src/suite/cabloy-basic/modules/basic-metrics/src/service/metrics.ts +11 -0
  67. package/vona/src/suite/cabloy-basic/modules/basic-metrics/tsconfig.build.json +11 -0
  68. package/vona/src/suite/cabloy-basic/modules/basic-metrics/tsconfig.json +5 -0
  69. package/vona/src/suite/cabloy-basic/package.json +1 -0
  70. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  71. package/vona/src/suite-vendor/a-vona/modules/a-instance/package.json +1 -1
  72. package/vona/src/suite-vendor/a-vona/modules/a-instance/src/bean/middlewareSystem.app.ts +2 -0
  73. package/vona/src/suite-vendor/a-vona/modules/a-instance/src/bean/middlewareSystem.instance.ts +2 -0
  74. package/vona/src/suite-vendor/a-vona/modules/a-metrics/package.json +62 -0
  75. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/.metadata/index.ts +178 -0
  76. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/.metadata/this.ts +1 -0
  77. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/bean/bean.metrics.ts +15 -0
  78. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/bean/middlewareSystem.health.ts +24 -0
  79. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/bean/middlewareSystem.metrics.ts +51 -0
  80. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/config/config.ts +75 -0
  81. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/index.ts +2 -0
  82. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/monkey.ts +27 -0
  83. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/service/health.ts +53 -0
  84. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/service/metrics.ts +222 -0
  85. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/service/metricsRuntime.ts +69 -0
  86. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/types/context.ts +9 -0
  87. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/types/index.ts +2 -0
  88. package/vona/src/suite-vendor/a-vona/modules/a-metrics/src/types/metrics.ts +50 -0
  89. package/vona/src/suite-vendor/a-vona/modules/a-metrics/tsconfig.build.json +11 -0
  90. package/vona/src/suite-vendor/a-vona/modules/a-metrics/tsconfig.json +7 -0
  91. package/vona/src/suite-vendor/a-vona/package.json +2 -1
  92. package/zova/pnpm-lock.yaml +104 -89
  93. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +4 -0
  94. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/component/tableCellActionRefund.ts +31 -0
  95. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +35 -6
  96. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeOrder.ts +104 -0
  97. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +16 -0
  98. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +231 -2
  99. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeOrder.ts +20 -0
  100. package/zova/src/suite/a-commerce/modules/commerce-trade/src/bean/tableCell.actionRefund.tsx +40 -0
  101. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionRefund/controller.tsx +106 -0
  102. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +7 -0
  103. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +7 -0
  104. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +45 -1
  105. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/orderMine.ts +15 -0
  106. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/order/controller.tsx +41 -0
  107. package/zova/src/suite/cabloy-basic/modules/basic-metrics/package.json +53 -0
  108. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/.metadata/index.ts +151 -0
  109. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/.metadata/page/dashboard.ts +9 -0
  110. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/.metadata/this.ts +1 -0
  111. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/api/basicMetricsMetrics.ts +41 -0
  112. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/index.ts +2 -0
  113. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/model/metrics.ts +16 -0
  114. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/page/dashboard/controller.tsx +95 -0
  115. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/routes.ts +5 -0
  116. package/zova/src/suite/cabloy-basic/modules/basic-metrics/tsconfig.build.json +13 -0
  117. package/zova/src/suite/cabloy-basic/modules/basic-metrics/tsconfig.json +5 -0
  118. package/zova/src/suite/cabloy-basic/package.json +1 -0
  119. package/vona/src/suite/a-commerce/modules/commerce-trade/test/testLock.ts +0 -11
@@ -0,0 +1,189 @@
1
+ // eslint-disable
2
+ import type { TypeSymbolKeyFieldsMore } from 'vona-module-a-orm';
3
+ import type { TypeEntityOptionsFields,TypeControllerOptionsActions } from 'vona-module-a-openapi';
4
+ /** service: begin */
5
+ export * from '../service/metrics.ts';
6
+
7
+ import 'vona-module-a-bean';
8
+ declare module 'vona-module-a-bean' {
9
+
10
+ export interface IServiceRecord {
11
+ 'basic-metrics:metrics': never;
12
+ }
13
+
14
+
15
+ }
16
+ declare module 'vona-module-basic-metrics' {
17
+
18
+ export interface ServiceMetrics {
19
+ /** @internal */
20
+ get scope(): ScopeModuleBasicMetrics;
21
+ }
22
+
23
+ export interface ServiceMetrics {
24
+ get $beanFullName(): 'basic-metrics.service.metrics';
25
+ get $onionName(): 'basic-metrics:metrics';
26
+
27
+ }
28
+ }
29
+ /** service: end */
30
+ /** service: begin */
31
+ import type { ServiceMetrics } from '../service/metrics.ts';
32
+ export interface IModuleService {
33
+ 'metrics': ServiceMetrics;
34
+ }
35
+ /** service: end */
36
+ /** service: begin */
37
+
38
+ import 'vona';
39
+ declare module 'vona' {
40
+ export interface IBeanRecordGeneral {
41
+ 'basic-metrics.service.metrics': ServiceMetrics;
42
+ }
43
+ }
44
+ /** service: end */
45
+ /** dto: begin */
46
+ export * from '../dto/metricsQueue.ts';
47
+ export * from '../dto/metricsRuntime.ts';
48
+ export * from '../dto/metricsSnapshot.ts';
49
+ import type { IDtoOptionsMetricsQueue } from '../dto/metricsQueue.ts';
50
+ import type { IDtoOptionsMetricsRuntime } from '../dto/metricsRuntime.ts';
51
+ import type { IDtoOptionsMetricsSnapshot } from '../dto/metricsSnapshot.ts';
52
+ import 'vona-module-a-web';
53
+ declare module 'vona-module-a-web' {
54
+
55
+ export interface IDtoRecord {
56
+ 'basic-metrics:metricsQueue': IDtoOptionsMetricsQueue;
57
+ 'basic-metrics:metricsRuntime': IDtoOptionsMetricsRuntime;
58
+ 'basic-metrics:metricsSnapshot': IDtoOptionsMetricsSnapshot;
59
+ }
60
+
61
+
62
+ }
63
+ declare module 'vona-module-basic-metrics' {
64
+
65
+ }
66
+ /** dto: end */
67
+ /** dto: begin */
68
+ import type { DtoMetricsQueue } from '../dto/metricsQueue.ts';
69
+ import type { DtoMetricsRuntime } from '../dto/metricsRuntime.ts';
70
+ import type { DtoMetricsSnapshot } from '../dto/metricsSnapshot.ts';
71
+ declare module 'vona-module-basic-metrics' {
72
+
73
+ export interface IDtoOptionsMetricsQueue {
74
+ fields?: TypeEntityOptionsFields<DtoMetricsQueue, IDtoOptionsMetricsQueue[TypeSymbolKeyFieldsMore]>;
75
+ }
76
+
77
+ export interface IDtoOptionsMetricsRuntime {
78
+ fields?: TypeEntityOptionsFields<DtoMetricsRuntime, IDtoOptionsMetricsRuntime[TypeSymbolKeyFieldsMore]>;
79
+ }
80
+
81
+ export interface IDtoOptionsMetricsSnapshot {
82
+ fields?: TypeEntityOptionsFields<DtoMetricsSnapshot, IDtoOptionsMetricsSnapshot[TypeSymbolKeyFieldsMore]>;
83
+ }
84
+ }
85
+ /** dto: end */
86
+ /** controller: begin */
87
+ export * from '../controller/metrics.ts';
88
+ import type { IControllerOptionsMetrics } from '../controller/metrics.ts';
89
+ import 'vona-module-a-web';
90
+ declare module 'vona-module-a-web' {
91
+
92
+ export interface IControllerRecord {
93
+ 'basic-metrics:metrics': IControllerOptionsMetrics;
94
+ }
95
+
96
+
97
+ }
98
+ declare module 'vona-module-basic-metrics' {
99
+
100
+ export interface ControllerMetrics {
101
+ /** @internal */
102
+ get scope(): ScopeModuleBasicMetrics;
103
+ }
104
+
105
+ export interface ControllerMetrics {
106
+ get $beanFullName(): 'basic-metrics.controller.metrics';
107
+ get $onionName(): 'basic-metrics:metrics';
108
+ get $onionOptions(): IControllerOptionsMetrics;
109
+ }
110
+ }
111
+ /** controller: end */
112
+ /** controller: begin */
113
+ // @ts-ignore ignore
114
+ import type { ControllerMetrics } from '../controller/metrics.ts';
115
+ declare module 'vona-module-basic-metrics' {
116
+
117
+ export interface IControllerOptionsMetrics {
118
+ actions?: TypeControllerOptionsActions<ControllerMetrics>;
119
+ }
120
+ }
121
+ declare module 'vona-module-a-web' {
122
+ export interface IApiPathGetRecord{
123
+ '/basic/metrics/snapshot': undefined;
124
+ }
125
+
126
+ }
127
+ import 'vona-module-a-openapi';
128
+ declare module 'vona-module-a-openapi' {
129
+ export interface IResourceRecord {
130
+ 'basic-metrics:metrics': never;
131
+ }
132
+ }
133
+
134
+ /** controller: end */
135
+ /** ssrMenu: begin */
136
+ export * from '../bean/ssrMenu.metrics.ts';
137
+ import type { ISsrMenuOptionsMetrics } from '../bean/ssrMenu.metrics.ts';
138
+ import 'vona-module-a-ssr';
139
+ declare module 'vona-module-a-ssr' {
140
+
141
+ export interface ISsrMenuRecord {
142
+ 'basic-metrics:metrics': ISsrMenuOptionsMetrics;
143
+ }
144
+
145
+
146
+ }
147
+ declare module 'vona-module-basic-metrics' {
148
+
149
+ export interface SsrMenuMetrics {
150
+ /** @internal */
151
+ get scope(): ScopeModuleBasicMetrics;
152
+ }
153
+
154
+ export interface SsrMenuMetrics {
155
+ get $beanFullName(): 'basic-metrics.ssrMenu.metrics';
156
+ get $onionName(): 'basic-metrics:metrics';
157
+ get $onionOptions(): ISsrMenuOptionsMetrics;
158
+ }
159
+ }
160
+ /** ssrMenu: end */
161
+ /** scope: begin */
162
+ import { BeanScopeBase, type BeanScopeUtil } from 'vona';
163
+ import { Scope } from 'vona-module-a-bean';
164
+
165
+ @Scope()
166
+ export class ScopeModuleBasicMetrics extends BeanScopeBase {}
167
+
168
+ export interface ScopeModuleBasicMetrics {
169
+ util: BeanScopeUtil;
170
+ service: IModuleService;
171
+ }
172
+
173
+ import 'vona';
174
+ declare module 'vona' {
175
+ export interface IBeanScopeRecord {
176
+ 'basic-metrics': ScopeModuleBasicMetrics;
177
+ }
178
+
179
+ export interface IBeanScopeContainer {
180
+ basicMetrics: ScopeModuleBasicMetrics;
181
+ }
182
+
183
+
184
+
185
+
186
+
187
+
188
+ }
189
+ /** scope: end */
@@ -0,0 +1 @@
1
+ export const __ThisModule__ = 'basic-metrics';
@@ -0,0 +1,23 @@
1
+ import type { IDecoratorSsrMenuOptions } from 'vona-module-a-ssr';
2
+ import type { ISsrSiteOptionsAdmin } from 'vona-module-basic-siteadmin';
3
+
4
+ import { BeanBase } from 'vona';
5
+ import { $order } from 'vona-module-a-openapiutils';
6
+ import { SsrMenu } from 'vona-module-a-ssr';
7
+
8
+ export interface ISsrMenuOptionsMetrics extends IDecoratorSsrMenuOptions<ISsrSiteOptionsAdmin> {}
9
+
10
+ @SsrMenu<ISsrMenuOptionsMetrics>({
11
+ items: {
12
+ metrics: {
13
+ title: 'Metrics',
14
+ order: $order(90),
15
+ icon: undefined,
16
+ link: '/basic/metrics/dashboard',
17
+ group: 'basic-siteadmin:management',
18
+ roles: ['systemAdmin'],
19
+ },
20
+ },
21
+ site: ['basic-siteadmin:admin'],
22
+ })
23
+ export class SsrMenuMetrics extends BeanBase {}
@@ -0,0 +1,21 @@
1
+ import type { IDecoratorControllerOptions } from 'vona-module-a-web';
2
+
3
+ import { BeanBase } from 'vona';
4
+ import { Api, Resource, v } from 'vona-module-a-openapiutils';
5
+ import { Passport } from 'vona-module-a-user';
6
+ import { Controller, Web } from 'vona-module-a-web';
7
+
8
+ import { DtoMetricsSnapshot } from '../dto/metricsSnapshot.ts';
9
+
10
+ export interface IControllerOptionsMetrics extends IDecoratorControllerOptions {}
11
+
12
+ @Controller<IControllerOptionsMetrics>('metrics')
13
+ @Resource()
14
+ export class ControllerMetrics extends BeanBase {
15
+ @Web.get('snapshot')
16
+ @Api.body(v.object(DtoMetricsSnapshot))
17
+ @Passport.systemAdmin()
18
+ async snapshot(): Promise<DtoMetricsSnapshot> {
19
+ return this.scope.service.metrics.snapshot();
20
+ }
21
+ }
@@ -0,0 +1,25 @@
1
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
+
3
+ import { Api, v } from 'vona-module-a-openapiutils';
4
+ import { Dto } from 'vona-module-a-web';
5
+ import z from 'zod';
6
+
7
+ export interface IDtoOptionsMetricsQueue extends IDecoratorDtoOptions {}
8
+
9
+ @Dto<IDtoOptionsMetricsQueue>()
10
+ export class DtoMetricsQueue {
11
+ @Api.field()
12
+ name: string;
13
+
14
+ @Api.field()
15
+ state: string;
16
+
17
+ @Api.field(v.optional())
18
+ observedAt?: string;
19
+
20
+ @Api.field(v.optional(), z.record(z.string(), z.number()))
21
+ jobs?: Record<string, number>;
22
+
23
+ @Api.field(v.optional())
24
+ schedulers?: number;
25
+ }
@@ -0,0 +1,36 @@
1
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
+
3
+ import { Api, v } from 'vona-module-a-openapiutils';
4
+ import { Dto } from 'vona-module-a-web';
5
+
6
+ export interface IDtoOptionsMetricsRuntime extends IDecoratorDtoOptions {}
7
+
8
+ @Dto<IDtoOptionsMetricsRuntime>()
9
+ export class DtoMetricsRuntime {
10
+ @Api.field()
11
+ state: string;
12
+
13
+ @Api.field(v.optional())
14
+ observedAt?: string;
15
+
16
+ @Api.field(v.optional())
17
+ uptimeSeconds?: number;
18
+
19
+ @Api.field(v.optional())
20
+ rssBytes?: number;
21
+
22
+ @Api.field(v.optional())
23
+ heapUsedBytes?: number;
24
+
25
+ @Api.field(v.optional())
26
+ heapTotalBytes?: number;
27
+
28
+ @Api.field(v.optional())
29
+ externalBytes?: number;
30
+
31
+ @Api.field(v.optional())
32
+ eventLoopDelayMaxSeconds?: number;
33
+
34
+ @Api.field(v.optional())
35
+ activeContexts?: number;
36
+ }
@@ -0,0 +1,21 @@
1
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
+
3
+ import { Api, v } from 'vona-module-a-openapiutils';
4
+ import { Dto } from 'vona-module-a-web';
5
+
6
+ import { DtoMetricsQueue } from './metricsQueue.ts';
7
+ import { DtoMetricsRuntime } from './metricsRuntime.ts';
8
+
9
+ export interface IDtoOptionsMetricsSnapshot extends IDecoratorDtoOptions {}
10
+
11
+ @Dto<IDtoOptionsMetricsSnapshot>()
12
+ export class DtoMetricsSnapshot {
13
+ @Api.field()
14
+ enabled: boolean;
15
+
16
+ @Api.field()
17
+ runtime: DtoMetricsRuntime;
18
+
19
+ @Api.field(v.array(DtoMetricsQueue))
20
+ queues: DtoMetricsQueue[];
21
+ }
@@ -0,0 +1 @@
1
+ export * from './.metadata/index.ts';
@@ -0,0 +1,11 @@
1
+ import { BeanBase } from 'vona';
2
+ import { Service } from 'vona-module-a-bean';
3
+
4
+ import type { DtoMetricsSnapshot } from '../dto/metricsSnapshot.ts';
5
+
6
+ @Service()
7
+ export class ServiceMetrics extends BeanBase {
8
+ snapshot(): DtoMetricsSnapshot {
9
+ return this.bean.metrics.snapshot();
10
+ }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig.base",
3
+ "compilerOptions": {
4
+ "rootDir": "src",
5
+ "declaration": true,
6
+ "declarationMap": true,
7
+ "emitDeclarationOnly": true,
8
+ "outDir": "dist"
9
+ },
10
+ "include": ["src", "src/.metadata/*.ts", "src/**/*.json"]
11
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "../../tsconfig.base",
3
+ "compilerOptions": { "noEmit": true },
4
+ "include": ["src", "src/.metadata/*.ts", "src/**/*.json", "test"]
5
+ }
@@ -7,6 +7,7 @@
7
7
  "files": [],
8
8
  "type": "module",
9
9
  "dependencies": {
10
+ "vona-module-basic-metrics": "workspace:^",
10
11
  "vona-module-basic-siteadmin": "workspace:^",
11
12
  "vona-module-basic-siteweb": "^5.0.0",
12
13
  "vona-suite-a-cabloy": "^5.1.25"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-core",
3
- "version": "5.1.46",
3
+ "version": "5.1.47",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-instance",
3
- "version": "5.1.12",
3
+ "version": "5.1.13",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "author": "zhennann",
@@ -14,6 +14,8 @@ export interface IMiddlewareSystemOptionsApp extends IDecoratorMiddlewareSystemO
14
14
  })
15
15
  export class MiddlewareSystemApp extends BeanBase implements IMiddlewareSystemExecute {
16
16
  async execute(_options: IMiddlewareSystemOptionsApp, next: Next) {
17
+ // health probes must stay outside instance readiness and tenant resolution
18
+ if (this.ctx.path.startsWith('/health/')) return next();
17
19
  // check appReady
18
20
  if (!this.ctx.innerAccess) {
19
21
  if (this.app.meta.appClose) this.app.throw(423);
@@ -12,6 +12,8 @@ export interface IMiddlewareSystemOptionsInstance extends IDecoratorMiddlewareSy
12
12
  @MiddlewareSystem<IMiddlewareSystemOptionsInstance>({ dependencies: 'a-instance:app' })
13
13
  export class MiddlewareSystemInstance extends BeanBase implements IMiddlewareSystemExecute {
14
14
  async execute(_options: IMiddlewareSystemOptionsInstance, next: Next) {
15
+ // health probes must not select or initialize a tenant instance
16
+ if (this.ctx.path.startsWith('/health/')) return next();
15
17
  // init instance
16
18
  await this.scope.service.instance.initInstance();
17
19
  // next
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "vona-module-a-metrics",
3
+ "version": "5.0.1",
4
+ "description": "",
5
+ "keywords": [
6
+ "Vona Module"
7
+ ],
8
+ "author": "",
9
+ "files": [
10
+ "assets",
11
+ "dist",
12
+ "src"
13
+ ],
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "types": [
18
+ "./src/index.ts",
19
+ "./dist/index.d.ts"
20
+ ],
21
+ "import": "./src/index.ts",
22
+ "default": "./dist/index.js"
23
+ },
24
+ "./package.json": "./package.json"
25
+ },
26
+ "scripts": {
27
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
28
+ "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/vona.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
29
+ "prepublishOnly": "npm run tsc:publish",
30
+ "prepack": "clean-package",
31
+ "postpack": "clean-package restore"
32
+ },
33
+ "dependencies": {
34
+ "@opentelemetry/api": "^1.9.1",
35
+ "@opentelemetry/exporter-metrics-otlp-proto": "^0.221.0",
36
+ "@opentelemetry/resources": "^2.10.0",
37
+ "@opentelemetry/sdk-metrics": "^2.10.0"
38
+ },
39
+ "devDependencies": {
40
+ "clean-package": "^2.2.0",
41
+ "rimraf": "^6.1.3"
42
+ },
43
+ "clean-package": {
44
+ "indent": 2,
45
+ "remove": [
46
+ "clean-package",
47
+ "devDependencies",
48
+ "exports.\\..import"
49
+ ]
50
+ },
51
+ "title": "a-metrics",
52
+ "vonaModule": {
53
+ "dependencies": {
54
+ "a-aspect": "5.0.0",
55
+ "a-election": "5.0.0",
56
+ "a-orm": "5.0.0",
57
+ "a-queue": "5.0.0",
58
+ "a-redis": "5.0.0",
59
+ "a-worker": "5.0.0"
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,178 @@
1
+ // eslint-disable
2
+ /** middlewareSystem: begin */
3
+ export * from '../bean/middlewareSystem.health.ts';
4
+ export * from '../bean/middlewareSystem.metrics.ts';
5
+ import type { IMiddlewareSystemOptionsHealth } from '../bean/middlewareSystem.health.ts';
6
+ import type { IMiddlewareSystemOptionsMetrics } from '../bean/middlewareSystem.metrics.ts';
7
+ import 'vona-module-a-aspect';
8
+ declare module 'vona-module-a-aspect' {
9
+
10
+ export interface IMiddlewareSystemRecord {
11
+ 'a-metrics:health': IMiddlewareSystemOptionsHealth;
12
+ 'a-metrics:metrics': IMiddlewareSystemOptionsMetrics;
13
+ }
14
+
15
+
16
+ }
17
+ declare module 'vona-module-a-metrics' {
18
+
19
+ export interface MiddlewareSystemHealth {
20
+ /** @internal */
21
+ get scope(): ScopeModuleAMetrics;
22
+ }
23
+
24
+ export interface MiddlewareSystemHealth {
25
+ get $beanFullName(): 'a-metrics.middlewareSystem.health';
26
+ get $onionName(): 'a-metrics:health';
27
+ get $onionOptions(): IMiddlewareSystemOptionsHealth;
28
+ }
29
+
30
+ export interface MiddlewareSystemMetrics {
31
+ /** @internal */
32
+ get scope(): ScopeModuleAMetrics;
33
+ }
34
+
35
+ export interface MiddlewareSystemMetrics {
36
+ get $beanFullName(): 'a-metrics.middlewareSystem.metrics';
37
+ get $onionName(): 'a-metrics:metrics';
38
+ get $onionOptions(): IMiddlewareSystemOptionsMetrics;
39
+ }
40
+ }
41
+ /** middlewareSystem: end */
42
+ /** bean: begin */
43
+ export * from '../bean/bean.metrics.ts';
44
+
45
+ import 'vona';
46
+ declare module 'vona' {
47
+
48
+
49
+ }
50
+ declare module 'vona-module-a-metrics' {
51
+
52
+ export interface BeanMetrics {
53
+ /** @internal */
54
+ get scope(): ScopeModuleAMetrics;
55
+ }
56
+ }
57
+ /** bean: end */
58
+ /** bean: begin */
59
+ import type { BeanMetrics } from '../bean/bean.metrics.ts';
60
+ import 'vona';
61
+ declare module 'vona' {
62
+ export interface IBeanRecordGlobal {
63
+ 'metrics': BeanMetrics;
64
+ }
65
+ }
66
+ /** bean: end */
67
+ /** service: begin */
68
+ export * from '../service/health.ts';
69
+ export * from '../service/metrics.ts';
70
+ export * from '../service/metricsRuntime.ts';
71
+
72
+ import 'vona-module-a-bean';
73
+ declare module 'vona-module-a-bean' {
74
+
75
+ export interface IServiceRecord {
76
+ 'a-metrics:health': never;
77
+ 'a-metrics:metrics': never;
78
+ 'a-metrics:metricsRuntime': never;
79
+ }
80
+
81
+
82
+ }
83
+ declare module 'vona-module-a-metrics' {
84
+
85
+ export interface ServiceHealth {
86
+ /** @internal */
87
+ get scope(): ScopeModuleAMetrics;
88
+ }
89
+
90
+ export interface ServiceHealth {
91
+ get $beanFullName(): 'a-metrics.service.health';
92
+ get $onionName(): 'a-metrics:health';
93
+
94
+ }
95
+
96
+ export interface ServiceMetrics {
97
+ /** @internal */
98
+ get scope(): ScopeModuleAMetrics;
99
+ }
100
+
101
+ export interface ServiceMetrics {
102
+ get $beanFullName(): 'a-metrics.service.metrics';
103
+ get $onionName(): 'a-metrics:metrics';
104
+
105
+ }
106
+
107
+ export interface ServiceMetricsRuntime {
108
+ /** @internal */
109
+ get scope(): ScopeModuleAMetrics;
110
+ }
111
+
112
+ export interface ServiceMetricsRuntime {
113
+ get $beanFullName(): 'a-metrics.service.metricsRuntime';
114
+ get $onionName(): 'a-metrics:metricsRuntime';
115
+
116
+ }
117
+ }
118
+ /** service: end */
119
+ /** service: begin */
120
+ import type { ServiceHealth } from '../service/health.ts';
121
+ import type { ServiceMetrics } from '../service/metrics.ts';
122
+ import type { ServiceMetricsRuntime } from '../service/metricsRuntime.ts';
123
+ export interface IModuleService {
124
+ 'health': ServiceHealth;
125
+ 'metrics': ServiceMetrics;
126
+ 'metricsRuntime': ServiceMetricsRuntime;
127
+ }
128
+ /** service: end */
129
+ /** service: begin */
130
+
131
+ import 'vona';
132
+ declare module 'vona' {
133
+ export interface IBeanRecordGeneral {
134
+ 'a-metrics.service.health': ServiceHealth;
135
+ 'a-metrics.service.metrics': ServiceMetrics;
136
+ 'a-metrics.service.metricsRuntime': ServiceMetricsRuntime;
137
+ }
138
+ }
139
+ /** service: end */
140
+ /** config: begin */
141
+ export * from '../config/config.ts';
142
+ import type { config } from '../config/config.ts';
143
+ /** config: end */
144
+ /** monkey: begin */
145
+ export * from '../monkey.ts';
146
+ /** monkey: end */
147
+ /** scope: begin */
148
+ import { BeanScopeBase, type BeanScopeUtil, type TypeModuleConfig } from 'vona';
149
+ import { Scope } from 'vona-module-a-bean';
150
+
151
+ @Scope()
152
+ export class ScopeModuleAMetrics extends BeanScopeBase {}
153
+
154
+ export interface ScopeModuleAMetrics {
155
+ util: BeanScopeUtil;
156
+ config: TypeModuleConfig<typeof config>;
157
+ service: IModuleService;
158
+ }
159
+
160
+ import 'vona';
161
+ declare module 'vona' {
162
+ export interface IBeanScopeRecord {
163
+ 'a-metrics': ScopeModuleAMetrics;
164
+ }
165
+
166
+ export interface IBeanScopeContainer {
167
+ metrics: ScopeModuleAMetrics;
168
+ }
169
+
170
+ export interface IBeanScopeConfig {
171
+ 'a-metrics': ReturnType<typeof config>;
172
+ }
173
+
174
+
175
+
176
+
177
+ }
178
+ /** scope: end */
@@ -0,0 +1 @@
1
+ export const __ThisModule__ = 'a-metrics';
@@ -0,0 +1,15 @@
1
+ import { BeanBase } from 'vona';
2
+ import { Bean } from 'vona-module-a-bean';
3
+
4
+ import type { IMetricsSnapshot } from '../types/metrics.ts';
5
+
6
+ @Bean()
7
+ export class BeanMetrics extends BeanBase {
8
+ get enabled() {
9
+ return this.scope.service.metrics.enabled;
10
+ }
11
+
12
+ snapshot(): IMetricsSnapshot {
13
+ return this.scope.service.metricsRuntime.snapshot();
14
+ }
15
+ }