Skip to content

Commit 9910ea6

Browse files
Merge branch 'main' into fix-explorer-sizing
2 parents a9b1426 + 586da92 commit 9910ea6

File tree

3 files changed

+142
-8
lines changed

3 files changed

+142
-8
lines changed

projects/observability/src/shared/graphql/request/builders/selections/observability-specification-builder.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ export class ObservabilitySpecificationBuilder extends SpecificationBuilder {
3737
idKey: string,
3838
nameKey: string,
3939
entityType?: EntityType,
40-
additionalAttributes?: string[]
40+
additionalAttributes?: string[],
41+
additionalSpecifications: Specification[] = []
4142
): EntitySpecification {
42-
return this.entitySpecBuilder.build(idKey, nameKey, entityType, additionalAttributes);
43+
return this.entitySpecBuilder.build(idKey, nameKey, entityType, additionalAttributes, additionalSpecifications);
4344
}
4445

4546
public neighborAttributeSpecificationForKey(

projects/observability/src/shared/graphql/request/builders/specification/entity/entity-specification-builder.test.ts

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { entityIdKey, entityTypeKey, ObservabilityEntityType } from '../../../../model/schema/entity';
2+
import { TraceStatusType } from '../../../../model/schema/trace';
3+
import { TraceStatusSpecificationBuilder } from './../trace/trace-status/trace-status-specification-builder';
24
import { EntitySpecificationBuilder } from './entity-specification-builder';
35

46
describe('Entity Specification Builder', () => {
@@ -69,6 +71,115 @@ describe('Entity Specification Builder', () => {
6971
});
7072
});
7173

74+
test('correctly builds entity specification with explicit entity type and additional specification', () => {
75+
const traceSpec = new TraceStatusSpecificationBuilder().build();
76+
77+
const entitySpec = entitySpecificationBuilder.build(
78+
'id',
79+
'name',
80+
ObservabilityEntityType.Api,
81+
['attribute1', 'attribute2'],
82+
83+
[traceSpec]
84+
);
85+
86+
expect(entitySpec.asGraphQlSelections()).toEqual([
87+
{
88+
path: 'attribute',
89+
alias: 'id',
90+
arguments: [
91+
{
92+
name: 'key',
93+
value: 'id'
94+
}
95+
]
96+
},
97+
{
98+
path: 'attribute',
99+
alias: 'name',
100+
arguments: [
101+
{
102+
name: 'key',
103+
value: 'name'
104+
}
105+
]
106+
},
107+
{
108+
path: 'attribute',
109+
alias: 'attribute1',
110+
arguments: [
111+
{
112+
name: 'key',
113+
value: 'attribute1'
114+
}
115+
]
116+
},
117+
{
118+
path: 'attribute',
119+
alias: 'attribute2',
120+
arguments: [
121+
{
122+
name: 'key',
123+
value: 'attribute2'
124+
}
125+
]
126+
},
127+
{
128+
path: 'attribute',
129+
alias: 'status',
130+
arguments: [
131+
{
132+
name: 'key',
133+
value: 'status'
134+
}
135+
]
136+
},
137+
{
138+
path: 'attribute',
139+
alias: 'statusCode',
140+
arguments: [
141+
{
142+
name: 'key',
143+
value: 'statusCode'
144+
}
145+
]
146+
},
147+
{
148+
path: 'attribute',
149+
alias: 'statusMessage',
150+
arguments: [
151+
{
152+
name: 'key',
153+
value: 'statusMessage'
154+
}
155+
]
156+
}
157+
]);
158+
159+
expect(
160+
entitySpec.extractFromServerData({
161+
id: 'test-id',
162+
name: 'test-name',
163+
attribute1: 'test-value-attrib1',
164+
attribute2: 'test-value-attrib2',
165+
status: TraceStatusType.FAIL,
166+
statusCode: '404',
167+
statusMessage: 'Not Found'
168+
})
169+
).toEqual({
170+
[entityIdKey]: 'test-id',
171+
[entityTypeKey]: ObservabilityEntityType.Api,
172+
name: 'test-name',
173+
attribute1: 'test-value-attrib1',
174+
attribute2: 'test-value-attrib2',
175+
[traceSpec.name]: {
176+
status: TraceStatusType.FAIL,
177+
statusCode: '404',
178+
statusMessage: 'Not Found'
179+
}
180+
});
181+
});
182+
72183
test('correctly builds entity specification without entity type', () => {
73184
const entitySpec = entitySpecificationBuilder.build('id', 'name');
74185

projects/observability/src/shared/graphql/request/builders/specification/entity/entity-specification-builder.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from '../../../../model/schema/entity';
1010
import { EntitySpecification } from '../../../../model/schema/specifications/entity-specification';
1111
import { GraphQlArgumentBuilder } from '../../argument/graphql-argument-builder';
12+
import { Specification } from './../../../../model/schema/specifier/specification';
1213

1314
export class EntitySpecificationBuilder {
1415
private static readonly DEFAULT_TYPE_FIELD: string = 'type';
@@ -19,15 +20,29 @@ export class EntitySpecificationBuilder {
1920
idKey: string,
2021
nameKey: string,
2122
entityType?: EntityType,
22-
additionalAttributes: string[] = []
23+
additionalAttributes: string[] = [],
24+
additionalSpecifications: Specification[] = []
2325
): EntitySpecification {
2426
return {
2527
resultAlias: () => this.buildResultAlias(idKey, nameKey, entityType),
2628
name: idKey,
2729
asGraphQlSelections: () =>
28-
this.buildGraphQlSelections(idKey, nameKey, entityType === undefined, additionalAttributes),
30+
this.buildGraphQlSelections(
31+
idKey,
32+
nameKey,
33+
entityType === undefined,
34+
additionalAttributes,
35+
additionalSpecifications
36+
),
2937
extractFromServerData: serverData =>
30-
this.extractFromServerData(serverData, idKey, nameKey, entityType, additionalAttributes),
38+
this.extractFromServerData(
39+
serverData,
40+
idKey,
41+
nameKey,
42+
entityType,
43+
additionalAttributes,
44+
additionalSpecifications
45+
),
3146
asGraphQlOrderByFragment: () => ({
3247
key: nameKey
3348
})
@@ -42,7 +57,8 @@ export class EntitySpecificationBuilder {
4257
idKey: string,
4358
nameKey: string,
4459
withEntityType: boolean,
45-
additionalAttributes: string[] = []
60+
additionalAttributes: string[] = [],
61+
additionalSpecifications: Specification[] = []
4662
): GraphQlSelection[] {
4763
const graphqlSelections: GraphQlSelection[] = [
4864
{
@@ -59,7 +75,8 @@ export class EntitySpecificationBuilder {
5975
path: 'attribute',
6076
alias: attribute,
6177
arguments: [this.argBuilder.forAttributeKey(attribute)]
62-
}))
78+
})),
79+
...additionalSpecifications.map(specification => specification.asGraphQlSelections()).flat()
6380
];
6481

6582
if (withEntityType) {
@@ -74,7 +91,8 @@ export class EntitySpecificationBuilder {
7491
idKey: string,
7592
nameKey: string,
7693
entityType?: EntityType,
77-
additionalAttributes: string[] = []
94+
additionalAttributes: string[] = [],
95+
additionalSpecifications: Specification[] = []
7896
): Entity {
7997
let entity = {
8098
[entityIdKey]: serverData[idKey] as string,
@@ -85,6 +103,10 @@ export class EntitySpecificationBuilder {
85103
entity = { ...entity, [attribute]: serverData[attribute] };
86104
});
87105

106+
additionalSpecifications.forEach(specification => {
107+
entity = { ...entity, [specification.name]: specification.extractFromServerData(serverData) };
108+
});
109+
88110
return entity;
89111
}
90112

0 commit comments

Comments
 (0)