@scoutflo/topology-contracts 0.7.14 → 0.7.16
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/dist/src/correlation/claimProjection.d.ts +14 -0
- package/dist/src/correlation/claimProjection.js +326 -0
- package/dist/src/correlation/claimProjection.js.map +1 -0
- package/dist/src/correlation/connectionContractV1.d.ts +88 -32
- package/dist/src/correlation/connectionContractV1.js +44 -2
- package/dist/src/correlation/connectionContractV1.js.map +1 -1
- package/dist/src/correlation/contracts/families/index.d.ts +16 -16
- package/dist/src/correlation/contracts/families/integrations/index.d.ts +16 -16
- package/dist/src/correlation/contracts/families/integrations/index.js +16 -16
- package/dist/src/correlation/contracts/families/integrations/index.js.map +1 -1
- package/dist/src/correlation/contracts/registry.d.ts +16 -16
- package/dist/src/correlation/contracts/types.d.ts +3 -3
- package/dist/src/correlation/index.d.ts +1 -0
- package/dist/src/correlation/index.js +1 -0
- package/dist/src/correlation/index.js.map +1 -1
- package/dist/src/topology/relationTypes.d.ts +3 -2
- package/dist/src/topology/relationTypes.js +2 -0
- package/dist/src/topology/relationTypes.js.map +1 -1
- package/dist/test/contracts.test.js +85 -25
- package/dist/test/contracts.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type SupportedCorrelationSignalCategory } from './connectionContractV1';
|
|
2
|
+
export type CorrelationClaimLayer = 'identity' | 'scope' | 'diagnostic';
|
|
3
|
+
export type CorrelationIdentityScope = 'universal' | 'contract_scoped';
|
|
4
|
+
export type DiagnosticCorrelationClaimCategory = 'release' | 'version' | 'deployment_revision' | 'commit_sha';
|
|
5
|
+
export type CorrelationClaimCategory = SupportedCorrelationSignalCategory | DiagnosticCorrelationClaimCategory;
|
|
6
|
+
export interface CorrelationClaimProjection {
|
|
7
|
+
category: CorrelationClaimCategory;
|
|
8
|
+
layer: CorrelationClaimLayer;
|
|
9
|
+
scoring: boolean;
|
|
10
|
+
identity_scope?: CorrelationIdentityScope;
|
|
11
|
+
}
|
|
12
|
+
export declare function claimProjectionForPath(path: string[]): CorrelationClaimProjection | undefined;
|
|
13
|
+
export declare function scoringCorrelationCategoryForPath(path: string[]): SupportedCorrelationSignalCategory | undefined;
|
|
14
|
+
export declare function scoringCorrelationCategoriesForKey(key: string): SupportedCorrelationSignalCategory[];
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.claimProjectionForPath = claimProjectionForPath;
|
|
4
|
+
exports.scoringCorrelationCategoryForPath = scoringCorrelationCategoryForPath;
|
|
5
|
+
exports.scoringCorrelationCategoriesForKey = scoringCorrelationCategoriesForKey;
|
|
6
|
+
const connectionContractV1_1 = require("./connectionContractV1");
|
|
7
|
+
const SCORING_CATEGORY_SET = new Set(connectionContractV1_1.SUPPORTED_CORRELATION_SIGNAL_CATEGORIES);
|
|
8
|
+
const UNIVERSAL_IDENTITY_CATEGORIES = new Set([
|
|
9
|
+
'service',
|
|
10
|
+
'namespace',
|
|
11
|
+
'workload',
|
|
12
|
+
'cluster',
|
|
13
|
+
'pod',
|
|
14
|
+
'container',
|
|
15
|
+
'app',
|
|
16
|
+
]);
|
|
17
|
+
const CONTRACT_SCOPED_IDENTITY_CATEGORIES = new Set(['project', 'repository', 'space']);
|
|
18
|
+
const SCOPE_CATEGORIES = new Set(['environment', 'team']);
|
|
19
|
+
function normalizePathToken(value) {
|
|
20
|
+
return value
|
|
21
|
+
.trim()
|
|
22
|
+
.replace(/\[(\w+)\]/g, '.$1')
|
|
23
|
+
.replace(/^labels[._:-]/i, 'labels.')
|
|
24
|
+
.replace(/^tags[._:-]/i, 'tags.')
|
|
25
|
+
.toLowerCase();
|
|
26
|
+
}
|
|
27
|
+
function normalizedPath(path) {
|
|
28
|
+
return path.map(normalizePathToken).join('.');
|
|
29
|
+
}
|
|
30
|
+
function compactPath(value) {
|
|
31
|
+
return value.replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');
|
|
32
|
+
}
|
|
33
|
+
function normalizedKey(key) {
|
|
34
|
+
return key
|
|
35
|
+
.trim()
|
|
36
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
37
|
+
.replace(/\[(\w+)\]/g, '.$1')
|
|
38
|
+
.replace(/^\$+/, '')
|
|
39
|
+
.replace(/^labels[._:-]/i, '')
|
|
40
|
+
.replace(/^tags[._:-]/i, '')
|
|
41
|
+
.replace(/^metric[._:-]/i, '')
|
|
42
|
+
.replace(/^attributes[._:-]/i, '')
|
|
43
|
+
.replace(/^resource[_\s-]?attributes[._:-]/i, '')
|
|
44
|
+
.replace(/^resource[_\s-]?attr[._:-]/i, 'resource_attr:')
|
|
45
|
+
.toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
function projectionForScoringCategory(category) {
|
|
48
|
+
if (UNIVERSAL_IDENTITY_CATEGORIES.has(category)) {
|
|
49
|
+
return {
|
|
50
|
+
category,
|
|
51
|
+
layer: 'identity',
|
|
52
|
+
identity_scope: 'universal',
|
|
53
|
+
scoring: true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (CONTRACT_SCOPED_IDENTITY_CATEGORIES.has(category)) {
|
|
57
|
+
return {
|
|
58
|
+
category,
|
|
59
|
+
layer: 'identity',
|
|
60
|
+
identity_scope: 'contract_scoped',
|
|
61
|
+
scoring: true,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
if (SCOPE_CATEGORIES.has(category)) {
|
|
65
|
+
return {
|
|
66
|
+
category,
|
|
67
|
+
layer: 'scope',
|
|
68
|
+
scoring: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
category,
|
|
73
|
+
layer: 'diagnostic',
|
|
74
|
+
scoring: true,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function scoringCategoryForNormalizedPath(dotPath, compactLast, compact) {
|
|
78
|
+
if ([
|
|
79
|
+
'service',
|
|
80
|
+
'service_name',
|
|
81
|
+
'job',
|
|
82
|
+
'labels.service',
|
|
83
|
+
'service.name',
|
|
84
|
+
'otel.service.name',
|
|
85
|
+
'resource.service.name',
|
|
86
|
+
'resource_attr:service.name',
|
|
87
|
+
].includes(dotPath) ||
|
|
88
|
+
['service', 'service_name'].includes(compactLast)) {
|
|
89
|
+
return 'service';
|
|
90
|
+
}
|
|
91
|
+
if ([
|
|
92
|
+
'app',
|
|
93
|
+
'application',
|
|
94
|
+
'application_name',
|
|
95
|
+
'labels.app',
|
|
96
|
+
'labels.app.kubernetes.io/name',
|
|
97
|
+
'labels.app.kubernetes.io.name',
|
|
98
|
+
'labels.app_kubernetes_io_name',
|
|
99
|
+
'app.kubernetes.io/name',
|
|
100
|
+
'app.kubernetes.io.name',
|
|
101
|
+
'app_kubernetes_io_name',
|
|
102
|
+
].includes(dotPath) ||
|
|
103
|
+
['app', 'application', 'application_name'].includes(compactLast)) {
|
|
104
|
+
return 'app';
|
|
105
|
+
}
|
|
106
|
+
if (compact.includes('namespace') || dotPath === 'k8s.namespace.name' || dotPath === 'resource_attr:k8s.namespace.name') {
|
|
107
|
+
return 'namespace';
|
|
108
|
+
}
|
|
109
|
+
if (compactLast === 'pod' ||
|
|
110
|
+
compactLast === 'pods' ||
|
|
111
|
+
compactLast === 'pod_name' ||
|
|
112
|
+
compactLast === 'pod_names' ||
|
|
113
|
+
dotPath === 'k8s.pod.name' ||
|
|
114
|
+
dotPath === 'resource_attr:k8s.pod.name') {
|
|
115
|
+
return 'pod';
|
|
116
|
+
}
|
|
117
|
+
if (compactLast.includes('container')) {
|
|
118
|
+
return 'container';
|
|
119
|
+
}
|
|
120
|
+
if (compactLast === 'cluster' ||
|
|
121
|
+
compactLast === 'cluster_name' ||
|
|
122
|
+
compactLast === 'cluster_id' ||
|
|
123
|
+
compactLast === 'kubernetes_cluster' ||
|
|
124
|
+
compactLast === 'kubernetes_cluster_name' ||
|
|
125
|
+
compactLast === 'k8s_cluster' ||
|
|
126
|
+
dotPath === 'k8s.cluster.name' ||
|
|
127
|
+
dotPath === 'resource_attr:k8s.cluster.name') {
|
|
128
|
+
return 'cluster';
|
|
129
|
+
}
|
|
130
|
+
if ([
|
|
131
|
+
'deployment',
|
|
132
|
+
'deployment_name',
|
|
133
|
+
'deployments',
|
|
134
|
+
'workload',
|
|
135
|
+
'workload_name',
|
|
136
|
+
'workloads',
|
|
137
|
+
'statefulset',
|
|
138
|
+
'statefulset_name',
|
|
139
|
+
'daemonset',
|
|
140
|
+
'daemonset_name',
|
|
141
|
+
].includes(compactLast) ||
|
|
142
|
+
dotPath === 'k8s.deployment.name' ||
|
|
143
|
+
dotPath === 'resource_attr:k8s.deployment.name') {
|
|
144
|
+
return 'workload';
|
|
145
|
+
}
|
|
146
|
+
if (['env', 'environment', 'environment_name', 'stage'].includes(compactLast) ||
|
|
147
|
+
dotPath === 'deployment.environment' ||
|
|
148
|
+
dotPath === 'resource_attr:deployment.environment') {
|
|
149
|
+
return 'environment';
|
|
150
|
+
}
|
|
151
|
+
if (['team', 'team_name', 'owner_team', 'owner'].includes(compactLast) || dotPath === 'owner.team') {
|
|
152
|
+
return 'team';
|
|
153
|
+
}
|
|
154
|
+
if (['project', 'project_key', 'project_slug', 'project_name'].includes(compactLast)) {
|
|
155
|
+
return 'project';
|
|
156
|
+
}
|
|
157
|
+
if (['repo', 'repository', 'repo_slug', 'repository_slug', 'repository_name', 'scm_repository'].includes(compactLast)) {
|
|
158
|
+
return 'repository';
|
|
159
|
+
}
|
|
160
|
+
if (['space', 'space_key', 'space_slug'].includes(compactLast)) {
|
|
161
|
+
return 'space';
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
function diagnosticCategoryForNormalizedPath(dotPath, compactLast) {
|
|
166
|
+
if (['release', 'release_name'].includes(compactLast)) {
|
|
167
|
+
return 'release';
|
|
168
|
+
}
|
|
169
|
+
if (['version', 'app_version', 'image_tag'].includes(compactLast) || dotPath === 'release.version') {
|
|
170
|
+
return 'version';
|
|
171
|
+
}
|
|
172
|
+
if (['deployment_revision', 'revision', 'rollout_revision'].includes(compactLast)) {
|
|
173
|
+
return 'deployment_revision';
|
|
174
|
+
}
|
|
175
|
+
if (['commit', 'commit_sha', 'git_sha', 'sha'].includes(compactLast)) {
|
|
176
|
+
return 'commit_sha';
|
|
177
|
+
}
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
function claimProjectionForPath(path) {
|
|
181
|
+
if (path.length === 0) {
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
const dotPath = normalizedPath(path);
|
|
185
|
+
const last = normalizePathToken(path[path.length - 1] || '');
|
|
186
|
+
const compact = compactPath(dotPath);
|
|
187
|
+
const compactLast = compactPath(last);
|
|
188
|
+
const scoringCategory = scoringCategoryForNormalizedPath(dotPath, compactLast, compact);
|
|
189
|
+
if (scoringCategory) {
|
|
190
|
+
return projectionForScoringCategory(scoringCategory);
|
|
191
|
+
}
|
|
192
|
+
const diagnosticCategory = diagnosticCategoryForNormalizedPath(dotPath, compactLast);
|
|
193
|
+
if (diagnosticCategory) {
|
|
194
|
+
return {
|
|
195
|
+
category: diagnosticCategory,
|
|
196
|
+
layer: 'diagnostic',
|
|
197
|
+
scoring: false,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
function scoringCorrelationCategoryForPath(path) {
|
|
203
|
+
const projection = claimProjectionForPath(path);
|
|
204
|
+
return projection?.scoring && SCORING_CATEGORY_SET.has(projection.category)
|
|
205
|
+
? projection.category
|
|
206
|
+
: undefined;
|
|
207
|
+
}
|
|
208
|
+
function scoringCorrelationCategoriesForKey(key) {
|
|
209
|
+
const normalized = normalizedKey(key);
|
|
210
|
+
const compact = compactPath(normalized);
|
|
211
|
+
const categories = new Set();
|
|
212
|
+
const add = (category) => categories.add(category);
|
|
213
|
+
const isPresenceKey = compact.includes('labelpresent') || compact.includes('annotationpresent');
|
|
214
|
+
const isAnnotationKey = compact.includes('_annotation_') || compact.includes('_annotations_');
|
|
215
|
+
if (compact.includes('namespace') ||
|
|
216
|
+
normalized === 'k8s.namespace.name' ||
|
|
217
|
+
normalized === 'resource_attr:k8s.namespace.name' ||
|
|
218
|
+
normalized === 'destination.namespace' ||
|
|
219
|
+
normalized === 'destination_namespace') {
|
|
220
|
+
add('namespace');
|
|
221
|
+
}
|
|
222
|
+
if (!isPresenceKey &&
|
|
223
|
+
(compact === 'container' ||
|
|
224
|
+
compact === 'container_name' ||
|
|
225
|
+
compact.endsWith('_container_name') ||
|
|
226
|
+
normalized === 'k8s.container.name' ||
|
|
227
|
+
normalized === 'resource_attr:k8s.container.name')) {
|
|
228
|
+
add('container');
|
|
229
|
+
}
|
|
230
|
+
if (compact.includes('cluster') || normalized === 'k8s.cluster.name' || normalized === 'resource_attr:k8s.cluster.name') {
|
|
231
|
+
add('cluster');
|
|
232
|
+
}
|
|
233
|
+
const isKubernetesAppLabel = compact.endsWith('_label_app') ||
|
|
234
|
+
compact.endsWith('_label_app_kubernetes_io_name') ||
|
|
235
|
+
compact.includes('_label_app_kubernetes_io_name') ||
|
|
236
|
+
normalized === 'app.kubernetes.io/name' ||
|
|
237
|
+
normalized === 'app_kubernetes_io_name' ||
|
|
238
|
+
normalized === 'labels.app' ||
|
|
239
|
+
normalized === 'labels.app.kubernetes.io/name' ||
|
|
240
|
+
normalized === 'labels.app_kubernetes_io_name' ||
|
|
241
|
+
normalized === 'app';
|
|
242
|
+
if (!isPresenceKey &&
|
|
243
|
+
!isAnnotationKey &&
|
|
244
|
+
(compact.includes('deployment') ||
|
|
245
|
+
compact.includes('workload') ||
|
|
246
|
+
compact.includes('pod_controller_name') ||
|
|
247
|
+
(compact.includes('statefulset') && !compact.includes('pod_name')) ||
|
|
248
|
+
compact.includes('daemonset') ||
|
|
249
|
+
normalized === 'k8s.deployment.name' ||
|
|
250
|
+
normalized === 'resource_attr:k8s.deployment.name' ||
|
|
251
|
+
isKubernetesAppLabel)) {
|
|
252
|
+
add('workload');
|
|
253
|
+
}
|
|
254
|
+
if (!isPresenceKey && !isAnnotationKey && isKubernetesAppLabel) {
|
|
255
|
+
add('app');
|
|
256
|
+
}
|
|
257
|
+
if (!isPresenceKey &&
|
|
258
|
+
!isAnnotationKey &&
|
|
259
|
+
!compact.includes('_label_') &&
|
|
260
|
+
!compact.includes('container') &&
|
|
261
|
+
!compact.includes('controller') &&
|
|
262
|
+
(compact === 'pod' ||
|
|
263
|
+
compact === 'pod_name' ||
|
|
264
|
+
compact.endsWith('_pod_name') ||
|
|
265
|
+
normalized === 'k8s.pod.name' ||
|
|
266
|
+
normalized === 'resource_attr:k8s.pod.name')) {
|
|
267
|
+
add('pod');
|
|
268
|
+
}
|
|
269
|
+
if (!isPresenceKey &&
|
|
270
|
+
!isAnnotationKey &&
|
|
271
|
+
(compact === 'service' ||
|
|
272
|
+
compact === 'service_name' ||
|
|
273
|
+
compact.endsWith('_service_name') ||
|
|
274
|
+
compact.endsWith('_service_summary') ||
|
|
275
|
+
normalized === 'service.name' ||
|
|
276
|
+
normalized === 'otel.service.name' ||
|
|
277
|
+
normalized === 'service.summary' ||
|
|
278
|
+
normalized === 'service_object.name' ||
|
|
279
|
+
normalized === 'service_object.summary' ||
|
|
280
|
+
normalized === 'resource.service.name' ||
|
|
281
|
+
normalized === 'resource_attr:service.name' ||
|
|
282
|
+
normalized === 'app.kubernetes.io/name' ||
|
|
283
|
+
normalized === 'app_kubernetes_io_name' ||
|
|
284
|
+
normalized === 'app' ||
|
|
285
|
+
normalized === 'application' ||
|
|
286
|
+
normalized === 'application_name' ||
|
|
287
|
+
normalized === 'job')) {
|
|
288
|
+
add('service');
|
|
289
|
+
}
|
|
290
|
+
if (normalized === 'env' ||
|
|
291
|
+
compact.includes('environment') ||
|
|
292
|
+
normalized === 'deployment.environment' ||
|
|
293
|
+
normalized === 'resource_attr:deployment.environment') {
|
|
294
|
+
add('environment');
|
|
295
|
+
}
|
|
296
|
+
if (compact === 'team' ||
|
|
297
|
+
compact === 'team_name' ||
|
|
298
|
+
compact.endsWith('_team_name') ||
|
|
299
|
+
normalized === 'team.name' ||
|
|
300
|
+
normalized === 'team.summary' ||
|
|
301
|
+
normalized === 'service_object.team_name' ||
|
|
302
|
+
compact.includes('owner_team')) {
|
|
303
|
+
add('team');
|
|
304
|
+
}
|
|
305
|
+
if (compact === 'project' ||
|
|
306
|
+
compact === 'project_key' ||
|
|
307
|
+
compact === 'project_slug' ||
|
|
308
|
+
compact.endsWith('_project_key') ||
|
|
309
|
+
compact.endsWith('_project_slug') ||
|
|
310
|
+
normalized === 'project.key' ||
|
|
311
|
+
normalized === 'project.slug') {
|
|
312
|
+
add('project');
|
|
313
|
+
}
|
|
314
|
+
if (compact === 'repo' ||
|
|
315
|
+
compact === 'repository' ||
|
|
316
|
+
compact === 'repo_slug' ||
|
|
317
|
+
compact === 'repository_slug' ||
|
|
318
|
+
normalized === 'repository.slug') {
|
|
319
|
+
add('repository');
|
|
320
|
+
}
|
|
321
|
+
if (compact === 'space' || compact === 'space_key') {
|
|
322
|
+
add('space');
|
|
323
|
+
}
|
|
324
|
+
return Array.from(categories);
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=claimProjection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimProjection.js","sourceRoot":"","sources":["../../../src/correlation/claimProjection.ts"],"names":[],"mappings":"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"}
|