Skip to content

Commit b200041

Browse files
github-actions[bot]Adam Tackett
and
Adam Tackett
committed
combine service map queries (#2367)
Signed-off-by: Adam Tackett <[email protected]> Co-authored-by: Adam Tackett <[email protected]> (cherry picked from commit 5cfe888) Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 6ef9e2d commit b200041

File tree

2 files changed

+82
-122
lines changed

2 files changed

+82
-122
lines changed

public/components/trace_analytics/requests/queries/services_queries.ts

+30-71
Original file line numberDiff line numberDiff line change
@@ -90,46 +90,7 @@ export const getServicesQuery = (
9090
return query;
9191
};
9292

93-
export const getRelatedServicesQuery = (serviceName: string) => {
94-
const query = {
95-
size: 0,
96-
query: {
97-
bool: {
98-
must: [],
99-
filter: [],
100-
should: [],
101-
must_not: [],
102-
},
103-
},
104-
aggs: {
105-
traces: {
106-
terms: {
107-
field: 'traceId',
108-
size: 10000,
109-
},
110-
aggs: {
111-
service: {
112-
filter: {
113-
bool: {
114-
must: [
115-
{
116-
term: {
117-
serviceName,
118-
},
119-
},
120-
],
121-
must_not: [],
122-
},
123-
},
124-
},
125-
},
126-
},
127-
},
128-
};
129-
return query;
130-
};
131-
132-
export const getServiceNodesQuery = (mode: TraceAnalyticsMode) => {
93+
export const getServiceMapQuery = (mode: TraceAnalyticsMode) => {
13394
return {
13495
index: getServiceIndices(mode),
13596
size: 0,
@@ -154,43 +115,41 @@ export const getServiceNodesQuery = (mode: TraceAnalyticsMode) => {
154115
size: SERVICE_MAP_MAX_EDGES,
155116
},
156117
},
157-
},
158-
},
159-
},
160-
};
161-
};
162-
163-
export const getServiceEdgesQuery = (
164-
source: 'destination' | 'target',
165-
mode: TraceAnalyticsMode
166-
) => {
167-
return {
168-
index: getServiceIndices(mode),
169-
size: 0,
170-
query: {
171-
bool: {
172-
must: [],
173-
filter: [],
174-
should: [],
175-
must_not: [],
176-
},
177-
},
178-
aggs: {
179-
service_name: {
180-
terms: {
181-
field: 'serviceName',
182-
size: SERVICE_MAP_MAX_EDGES,
183-
},
184-
aggs: {
185-
resource: {
118+
target_edges: {
119+
terms: {
120+
field: 'target.resource',
121+
size: SERVICE_MAP_MAX_EDGES,
122+
},
123+
aggs: {
124+
service: {
125+
terms: {
126+
field: 'target.serviceName',
127+
size: SERVICE_MAP_MAX_EDGES,
128+
},
129+
},
130+
domain: {
131+
terms: {
132+
field: 'target.domain',
133+
size: SERVICE_MAP_MAX_EDGES,
134+
},
135+
},
136+
},
137+
},
138+
destination_edges: {
186139
terms: {
187-
field: `${source}.resource`,
140+
field: 'destination.resource',
188141
size: SERVICE_MAP_MAX_EDGES,
189142
},
190143
aggs: {
144+
service: {
145+
terms: {
146+
field: 'destination.serviceName',
147+
size: SERVICE_MAP_MAX_EDGES,
148+
},
149+
},
191150
domain: {
192151
terms: {
193-
field: `${source}.domain`,
152+
field: 'destination.domain',
194153
size: SERVICE_MAP_MAX_EDGES,
195154
},
196155
},

public/components/trace_analytics/requests/services_request_handler.ts

+52-51
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ import { coreRefs } from '../../../../public/framework/core_refs';
1515
import { fixedIntervalToMilli } from '../components/common/helper_functions';
1616
import { ServiceObject } from '../components/common/plots/service_map';
1717
import {
18-
getServiceEdgesQuery,
18+
getServiceMapQuery,
1919
getServiceMetricsQuery,
20-
getServiceNodesQuery,
2120
getServicesQuery,
2221
getServiceTrendsQuery,
2322
} from './queries/services_queries';
@@ -103,10 +102,10 @@ export const handleServiceMapRequest = async (
103102
}
104103
const map: ServiceObject = {};
105104
let id = 1;
106-
const serviceNodesResponse = await handleDslRequest(
105+
const serviceMapResponse = await handleDslRequest(
107106
http,
108107
null,
109-
getServiceNodesQuery(mode),
108+
getServiceMapQuery(mode),
110109
mode,
111110
dataSourceMDSId
112111
).catch((error) => {
@@ -119,70 +118,72 @@ export const handleServiceMapRequest = async (
119118
});
120119

121120
if (
122-
!serviceNodesResponse ||
123-
!serviceNodesResponse.aggregations ||
124-
!serviceNodesResponse.aggregations.service_name ||
125-
!serviceNodesResponse.aggregations.service_name.buckets ||
126-
serviceNodesResponse.aggregations.service_name.buckets.length === 0
121+
!serviceMapResponse ||
122+
!serviceMapResponse.aggregations ||
123+
!serviceMapResponse.aggregations.service_name ||
124+
!serviceMapResponse.aggregations.service_name.buckets ||
125+
serviceMapResponse.aggregations.service_name.buckets.length === 0
127126
) {
128127
if (setItems) {
129128
setItems(map);
130129
}
131130
return map;
132131
}
133132

134-
serviceNodesResponse.aggregations.service_name.buckets.forEach((bucket: any) => {
135-
map[bucket.key] = {
136-
serviceName: bucket.key,
133+
const targets: Record<string, string> = {};
134+
135+
serviceMapResponse.aggregations.service_name.buckets.forEach((bucket: any) => {
136+
const serviceName = bucket.key;
137+
map[serviceName] = {
138+
serviceName,
137139
id: id++,
138140
targetResources: bucket.target_resource.buckets.map((res: any) => res.key),
139141
targetServices: [],
140142
destServices: [],
141143
};
142144
});
143145

144-
const targets: Record<string, string> = {};
145-
await handleDslRequest(http, null, getServiceEdgesQuery('target', mode), mode, dataSourceMDSId)
146-
.then((response) =>
147-
response.aggregations.service_name.buckets.map((bucket: any) => {
148-
bucket.resource.buckets.map((resource: any) => {
149-
resource.domain.buckets.map((domain: any) => {
150-
targets[resource.key + ':' + domain.key] = bucket.key;
151-
});
152-
});
153-
})
154-
)
155-
.catch((error) => {
156-
console.error('Error retrieving target edges:', error);
146+
serviceMapResponse.aggregations.service_name.buckets.forEach((bucket: any) => {
147+
const serviceName = bucket.key;
148+
149+
bucket.target_edges?.buckets.forEach((resource: any) => {
150+
resource.domain?.buckets.forEach((domain: any) => {
151+
const key = `${resource.key}:${domain.key}`;
152+
targets[key] = serviceName;
153+
});
157154
});
155+
});
158156

159-
await handleDslRequest(
160-
http,
161-
null,
162-
getServiceEdgesQuery('destination', mode),
163-
mode,
164-
dataSourceMDSId
165-
)
166-
.then((response) =>
167-
Promise.all(
168-
response.aggregations.service_name.buckets.map((bucket: any) => {
169-
bucket.resource.buckets.map((resource: any) => {
170-
resource.domain.buckets.map((domain: any) => {
171-
const targetService = targets[resource.key + ':' + domain.key];
172-
if (targetService) {
173-
if (map[bucket.key].targetServices.indexOf(targetService) === -1)
174-
map[bucket.key].targetServices.push(targetService);
175-
if (map[targetService].destServices.indexOf(bucket.key) === -1)
176-
map[targetService].destServices.push(bucket.key);
177-
}
178-
});
179-
});
180-
})
181-
)
182-
)
183-
.catch((error) => {
184-
console.error('Error retrieving destination edges:', error);
157+
serviceMapResponse.aggregations.service_name.buckets.forEach((bucket: any) => {
158+
const serviceName = bucket.key;
159+
160+
bucket.destination_edges?.buckets.forEach((resource: any) => {
161+
resource.domain?.buckets.forEach((domain: any) => {
162+
const key = `${resource.key}:${domain.key}`;
163+
const targetService = targets[key];
164+
165+
if (targetService) {
166+
if (!map[targetService]) {
167+
map[targetService] = {
168+
serviceName: targetService,
169+
id: id++,
170+
targetResources: [],
171+
targetServices: [],
172+
destServices: [],
173+
};
174+
}
175+
176+
if (!map[serviceName].targetServices.includes(targetService)) {
177+
map[serviceName].targetServices.push(targetService);
178+
}
179+
180+
if (!map[targetService].destServices.includes(serviceName)) {
181+
map[targetService].destServices.push(serviceName);
182+
}
183+
}
184+
});
185185
});
186+
});
186187

187188
if (includeMetrics) {
188189
try {

0 commit comments

Comments
 (0)