This is an automated email from the ASF dual-hosted git repository.
zqr10159 pushed a commit to branch 2.0.0
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/2.0.0 by this push:
new 4283a1c29f Preserve environment context in signal handoffs
4283a1c29f is described below
commit 4283a1c29f36cb1fb111ad2340e3e72a08921504
Author: Logic <[email protected]>
AuthorDate: Tue Jun 9 19:06:51 2026 +0800
Preserve environment context in signal handoffs
---
web-next/lib/signal-dashboards.test.ts | 28 ++++++++++----
web-next/lib/signal-dashboards.ts | 70 ++++++++++++++++++++++++++++------
2 files changed, 79 insertions(+), 19 deletions(-)
diff --git a/web-next/lib/signal-dashboards.test.ts
b/web-next/lib/signal-dashboards.test.ts
index 6b85963243..24bd7d55a9 100644
--- a/web-next/lib/signal-dashboards.test.ts
+++ b/web-next/lib/signal-dashboards.test.ts
@@ -1845,6 +1845,7 @@ describe('signal dashboards API client', () => {
resource: {
'service.name': 'checkout',
'service.namespace': 'payments',
+ 'deployment.environment.name': 'prod',
'hertzbeat.entity_id': '4200',
'hertzbeat.entity_type': 'service',
'hertzbeat.entity_name': 'Checkout API',
@@ -1867,6 +1868,7 @@ describe('signal dashboards API client', () => {
resourceAttributes: {
'service.name': 'checkout',
'service.namespace': 'payments',
+ 'deployment.environment.name': 'prod',
'hertzbeat.entity_id': '4200',
'hertzbeat.entity_type': 'service',
'hertzbeat.entity_name': 'Checkout API',
@@ -1907,6 +1909,7 @@ describe('signal dashboards API client', () => {
__name__: 'signoz_db_latency_count',
'service.name': 'checkout',
'service.namespace': 'payments',
+ 'deployment.environment.name': 'prod',
'hertzbeat.entity_id': '4200',
'hertzbeat.entity_type': 'service',
'hertzbeat.entity_name': 'Checkout API',
@@ -1976,11 +1979,12 @@ describe('signal dashboards API client', () => {
breakoutAttributes: expect.arrayContaining([
expect.objectContaining({ name: 'resource:service.name', value:
'checkout' }),
expect.objectContaining({ name: 'resource:service.namespace',
value: 'payments' }),
+ expect.objectContaining({ name:
'resource:deployment.environment.name', value: 'prod' }),
expect.objectContaining({ name: 'resource:hertzbeat.entity_name',
value: 'Checkout API' }),
expect.objectContaining({ name: 'resource:hertzbeat.source',
value: 'otlp' })
]),
relatedSignal: 'traces',
- relatedHandoffHref:
'/trace/manage?traceId=trace-1&view=trace&spanId=span-log&serviceName=checkout&serviceNamespace=payments&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
+ relatedHandoffHref:
'/trace/manage?traceId=trace-1&view=trace&spanId=span-log&serviceName=checkout&serviceNamespace=payments&environment=prod&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
}),
expect.objectContaining({
panelId: 'trace-panel',
@@ -1995,11 +1999,12 @@ describe('signal dashboards API client', () => {
breakoutAttributes: expect.arrayContaining([
expect.objectContaining({ name: 'resource:service.name', value:
'checkout' }),
expect.objectContaining({ name: 'resource:service.namespace',
value: 'payments' }),
+ expect.objectContaining({ name:
'resource:deployment.environment.name', value: 'prod' }),
expect.objectContaining({ name: 'resource:hertzbeat.entity_name',
value: 'Checkout API' }),
expect.objectContaining({ name: 'resource:hertzbeat.source',
value: 'otlp' })
]),
relatedSignal: 'logs',
- relatedHandoffHref:
'/log/manage?traceId=trace-1&view=list&spanId=span-root&serviceName=checkout&serviceNamespace=payments&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
+ relatedHandoffHref:
'/log/manage?traceId=trace-1&view=list&spanId=span-root&serviceName=checkout&serviceNamespace=payments&environment=prod&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
}),
expect.objectContaining({
panelId: 'trace-panel',
@@ -2014,11 +2019,12 @@ describe('signal dashboards API client', () => {
breakoutAttributes: expect.arrayContaining([
expect.objectContaining({ name: 'resource:service.name', value:
'checkout' }),
expect.objectContaining({ name: 'resource:service.namespace',
value: 'payments' }),
+ expect.objectContaining({ name:
'resource:deployment.environment.name', value: 'prod' }),
expect.objectContaining({ name: 'resource:hertzbeat.entity_name',
value: 'Checkout API' }),
expect.objectContaining({ name: 'resource:hertzbeat.source',
value: 'otlp' })
]),
relatedSignal: 'logs',
- relatedHandoffHref:
'/log/manage?traceId=trace-1&view=list&spanId=span-root&serviceName=checkout&serviceNamespace=payments&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
+ relatedHandoffHref:
'/log/manage?traceId=trace-1&view=list&spanId=span-root&serviceName=checkout&serviceNamespace=payments&environment=prod&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
}),
expect.objectContaining({ panelId: 'metrics-panel', signal: 'metrics',
source: 'metrics-point', label: 'cpu.usage', value: '0.5' }),
expect.objectContaining({
@@ -2031,7 +2037,7 @@ describe('signal dashboards API client', () => {
serviceNamespace: 'payments',
resourceFilter: 'db.system=postgresql',
relatedSignal: 'traces',
- relatedHandoffHref:
'/trace/manage?view=list&spanScope=all&serviceName=checkout&serviceNamespace=payments&resourceFilter=db.system%3Dpostgresql&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
+ relatedHandoffHref:
'/trace/manage?view=list&spanScope=all&serviceName=checkout&serviceNamespace=payments&resourceFilter=db.system%3Dpostgresql&environment=prod&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000'
}),
expect.objectContaining({
panelId: 'external-metrics-panel',
@@ -2062,6 +2068,7 @@ describe('signal dashboards API client', () => {
expect(buildSignalDashboardRuntimeEvidenceFilters([
{ name: 'service.name', type: 'query', value: '' },
{ name: 'service.namespace', type: 'query', value: '' },
+ { name: 'deployment.environment.name', type: 'query', value: '' },
{ name: 'hertzbeat.entity_id', type: 'textbox', value: '' },
{ name: 'hertzbeat.entity_name', type: 'query', value: '' },
{ name: 'hertzbeat.source', type: 'dynamic', value: '' },
@@ -2072,6 +2079,7 @@ describe('signal dashboards API client', () => {
], syncTooltip.rows[0])).toEqual([
expect.objectContaining({ variableName: 'service.name', value:
'checkout', source: 'service' }),
expect.objectContaining({ variableName: 'service.namespace', value:
'payments', source: 'serviceNamespace' }),
+ expect.objectContaining({ variableName: 'deployment.environment.name',
value: 'prod', source: 'environment' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_id', value:
'4200', source: 'entityId' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_name', value:
'Checkout API', source: 'entityName' }),
expect.objectContaining({ variableName: 'hertzbeat.source', value:
'otlp', source: 'signalSource' }),
@@ -2089,6 +2097,7 @@ describe('signal dashboards API client', () => {
expect(buildSignalDashboardRuntimeEvidenceFilters([
{ name: 'service.name', type: 'query', value: '' },
{ name: 'service.namespace', type: 'query', value: '' },
+ { name: 'deployment.environment.name', type: 'query', value: '' },
{ name: 'hertzbeat.entity_id', type: 'textbox', value: '' },
{ name: 'hertzbeat.entity_name', type: 'query', value: '' },
{ name: 'hertzbeat.source', type: 'dynamic', value: '' },
@@ -2097,6 +2106,7 @@ describe('signal dashboards API client', () => {
], syncTooltip.rows[4])).toEqual([
expect.objectContaining({ variableName: 'service.name', value:
'checkout', source: 'service' }),
expect.objectContaining({ variableName: 'service.namespace', value:
'payments', source: 'serviceNamespace' }),
+ expect.objectContaining({ variableName: 'deployment.environment.name',
value: 'prod', source: 'environment' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_id', value:
'4200', source: 'entityId' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_name', value:
'Checkout API', source: 'entityName' }),
expect.objectContaining({ variableName: 'hertzbeat.source', value:
'otlp', source: 'signalSource' }),
@@ -2106,6 +2116,7 @@ describe('signal dashboards API client', () => {
expect(buildSignalDashboardRuntimeEvidenceFilterSuggestions([],
syncTooltip.rows[0])).toEqual([
expect.objectContaining({ variableName: 'service.name', value:
'checkout', source: 'service', variableType: 'query' }),
expect.objectContaining({ variableName: 'service.namespace', value:
'payments', source: 'serviceNamespace', variableType: 'query' }),
+ expect.objectContaining({ variableName: 'deployment.environment.name',
value: 'prod', source: 'environment', variableType: 'query' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_id', value:
'4200', source: 'entityId', variableType: 'textbox' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_name', value:
'Checkout API', source: 'entityName', variableType: 'query' }),
expect.objectContaining({ variableName: 'hertzbeat.source', value:
'otlp', source: 'signalSource', variableType: 'dynamic' }),
@@ -2117,6 +2128,7 @@ describe('signal dashboards API client', () => {
expect(buildSignalDashboardRuntimeEvidenceFilterSuggestions([
{ name: 'service.name', type: 'query', value: '' },
{ name: 'service.namespace', type: 'query', value: '' },
+ { name: 'deployment.environment.name', type: 'query', value: '' },
{ name: 'hertzbeat.entity_id', type: 'textbox', value: '' },
{ name: 'hertzbeat.entity_name', type: 'query', value: '' },
{ name: 'hertzbeat.source', type: 'dynamic', value: '' },
@@ -2129,6 +2141,7 @@ describe('signal dashboards API client', () => {
expect(buildSignalDashboardRuntimeEvidenceFilterSuggestions([],
syncTooltip.rows[4])).toEqual([
expect.objectContaining({ variableName: 'service.name', value:
'checkout', source: 'service', variableType: 'query' }),
expect.objectContaining({ variableName: 'service.namespace', value:
'payments', source: 'serviceNamespace', variableType: 'query' }),
+ expect.objectContaining({ variableName: 'deployment.environment.name',
value: 'prod', source: 'environment', variableType: 'query' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_id', value:
'4200', source: 'entityId', variableType: 'textbox' }),
expect.objectContaining({ variableName: 'hertzbeat.entity_name', value:
'Checkout API', source: 'entityName', variableType: 'query' }),
expect.objectContaining({ variableName: 'hertzbeat.source', value:
'otlp', source: 'signalSource', variableType: 'dynamic' }),
@@ -2138,6 +2151,7 @@ describe('signal dashboards API client', () => {
expect(syncTooltip.rows[4].breakoutAttributes).toEqual([
expect.objectContaining({ name: 'service.name', value: 'checkout' }),
expect.objectContaining({ name: 'service.namespace', value: 'payments'
}),
+ expect.objectContaining({ name: 'deployment.environment.name', value:
'prod' }),
expect.objectContaining({ name: 'hertzbeat.entity_id', value: '4200' }),
expect.objectContaining({ name: 'hertzbeat.entity_type', value:
'service' }),
expect.objectContaining({ name: 'hertzbeat.entity_name', value:
'Checkout API' }),
@@ -2158,15 +2172,15 @@ describe('signal dashboards API client', () => {
expect(buildSignalDashboardRuntimeEvidenceSourceHandoff('/log/manage?view=table',
syncTooltip.rows[0], {
timeRange: { start: '1000', end: '3000' },
returnTo: '/dashboard?start=1000&end=3000'
-
})).toBe('/log/manage?view=table&traceId=trace-1&spanId=span-log&serviceName=checkout&serviceNamespace=payments&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000');
+
})).toBe('/log/manage?view=table&traceId=trace-1&spanId=span-log&serviceName=checkout&serviceNamespace=payments&environment=prod&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000');
expect(buildSignalDashboardRuntimeEvidenceSourceHandoff('/trace/manage?view=list',
syncTooltip.rows[4], {
timeRange: { start: '1000', end: '3000' },
returnTo: '/dashboard?start=1000&end=3000'
-
})).toBe('/trace/manage?view=list&serviceName=checkout&serviceNamespace=payments&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000');
+
})).toBe('/trace/manage?view=list&serviceName=checkout&serviceNamespace=payments&environment=prod&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000');
expect(buildSignalDashboardRuntimeEvidenceSourceHandoff('/trace/manage?serviceName=payments',
syncTooltip.rows[2], {
timeRange: { start: '1000', end: '3000' },
returnTo: '/dashboard?start=1000&end=3000'
-
})).toBe('/trace/manage?serviceName=payments&traceId=trace-1&spanId=span-root&serviceNamespace=payments&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000');
+
})).toBe('/trace/manage?serviceName=payments&traceId=trace-1&spanId=span-root&serviceNamespace=payments&environment=prod&entityId=4200&entityType=service&entityName=Checkout+API&source=otlp&collector=collector-a&template=spring-boot&returnTo=%2Fdashboard%3Fstart%3D1000%26end%3D3000&start=1000&end=3000');
expect(buildSignalDashboardRuntimeEvidenceSourceHandoff('/ingestion/otlp/metrics?query=cpu.usage',
syncTooltip.rows[3], {
timeRange: { start: '1000', end: '3000' },
returnTo: '/dashboard?start=1000&end=3000'
diff --git a/web-next/lib/signal-dashboards.ts
b/web-next/lib/signal-dashboards.ts
index 09388d4cbe..7ccc790c06 100644
--- a/web-next/lib/signal-dashboards.ts
+++ b/web-next/lib/signal-dashboards.ts
@@ -307,6 +307,7 @@ export type SignalDashboardRuntimeMetricsTooltip = {
export type SignalDashboardRuntimeEvidenceFilterSource =
| 'service'
| 'serviceNamespace'
+ | 'environment'
| 'traceId'
| 'spanId'
| 'entityId'
@@ -3331,12 +3332,54 @@ function syncTooltipIdentifier(value: string |
undefined) {
return trimmed;
}
+function syncTooltipBreakoutValue(attributes:
SignalDashboardRuntimeBreakoutAttribute[] | undefined, names: string[]) {
+ const normalizedNames = new Set(names.flatMap(name => {
+ const normalizedName = normalizeBreakoutAttributeName(name);
+ return normalizedName
+ ? [normalizedName, `resource:${normalizedName}`,
`attribute:${normalizedName}`]
+ : [];
+ }));
+ return syncTooltipIdentifier(attributes
+ ?.find(attribute =>
normalizedNames.has(normalizeBreakoutAttributeName(attribute.name)))
+ ?.value);
+}
+
+function syncTooltipRelatedContextFromBreakoutAttributes(attributes:
SignalDashboardRuntimeBreakoutAttribute[] | undefined) {
+ return {
+ environment: syncTooltipBreakoutValue(attributes,
['deployment.environment.name', 'environment']),
+ entityId: syncTooltipBreakoutValue(attributes, ['hertzbeat.entity_id',
'hertzbeat.entity.id', 'entity.id', 'entity_id']),
+ entityType: syncTooltipBreakoutValue(attributes, ['hertzbeat.entity_type',
'hertzbeat.entity.type', 'entity.type', 'entity_type']),
+ entityName: syncTooltipBreakoutValue(attributes, ['hertzbeat.entity_name',
'hertzbeat.entity.name', 'entity.name', 'entity_name']),
+ signalSource: syncTooltipBreakoutValue(attributes, ['hertzbeat.source',
'source', 'signal.source']),
+ collector: syncTooltipBreakoutValue(attributes, ['hertzbeat.collector',
'collector']),
+ template: syncTooltipBreakoutValue(attributes, ['hertzbeat.template',
'template'])
+ };
+}
+
+function applySyncTooltipRelatedContext(params: URLSearchParams, context:
ReturnType<typeof syncTooltipRelatedContextFromBreakoutAttributes>) {
+ if (context.environment) params.set('environment', context.environment);
+ if (context.entityId) params.set('entityId', context.entityId);
+ if (context.entityType) params.set('entityType', context.entityType);
+ if (context.entityName) params.set('entityName', context.entityName);
+ if (context.signalSource) params.set('source', context.signalSource);
+ if (context.collector) params.set('collector', context.collector);
+ if (context.template) params.set('template', context.template);
+}
+
function syncTooltipRelatedHandoff(
signal: string,
traceId: string,
spanId: string,
options: SignalDashboardRuntimeSyncTooltipOptions = {},
- context: { serviceName?: string; serviceNamespace?: string } = {}
+ context: { serviceName?: string; serviceNamespace?: string } &
ReturnType<typeof syncTooltipRelatedContextFromBreakoutAttributes> = {
+ environment: '',
+ entityId: '',
+ entityType: '',
+ entityName: '',
+ signalSource: '',
+ collector: '',
+ template: ''
+ }
) {
const nextTraceId = syncTooltipIdentifier(traceId);
if (!nextTraceId) return {};
@@ -3351,6 +3394,7 @@ function syncTooltipRelatedHandoff(
if (nextSpanId) params.set('spanId', nextSpanId);
if (serviceName) params.set('serviceName', serviceName);
if (serviceNamespace) params.set('serviceNamespace', serviceNamespace);
+ applySyncTooltipRelatedContext(params, context);
return {
traceId: nextTraceId,
...(nextSpanId ? { spanId: nextSpanId } : {}),
@@ -3368,6 +3412,7 @@ function syncTooltipRelatedHandoff(
if (nextSpanId) params.set('spanId', nextSpanId);
if (serviceName) params.set('serviceName', serviceName);
if (serviceNamespace) params.set('serviceNamespace', serviceNamespace);
+ applySyncTooltipRelatedContext(params, context);
return {
traceId: nextTraceId,
...(nextSpanId ? { spanId: nextSpanId } : {}),
@@ -3499,6 +3544,7 @@ function syncTooltipMetricRelatedHandoff(
const SERVICE_VARIABLE_NAMES = new Set(['service.name', 'servicename',
'service']);
const SERVICE_NAMESPACE_VARIABLE_NAMES = new Set(['service.namespace',
'servicenamespace', 'service_namespace']);
+const ENVIRONMENT_VARIABLE_NAMES = new Set(['deployment.environment.name',
'deployment_environment_name', 'environment']);
const TRACE_ID_VARIABLE_NAMES = new Set(['traceid', 'trace.id', 'trace_id']);
const SPAN_ID_VARIABLE_NAMES = new Set(['spanid', 'span.id', 'span_id']);
const ENTITY_ID_VARIABLE_NAMES = new Set(['hertzbeat.entity_id',
'hertzbeat.entity.id', 'entityid', 'entity.id', 'entity_id']);
@@ -3512,6 +3558,7 @@ function evidenceFilterSourceForVariableName(name:
string): SignalDashboardRunti
const normalizedName =
normalizeSignalDashboardVariableName(name).toLowerCase();
if (SERVICE_VARIABLE_NAMES.has(normalizedName)) return 'service';
if (SERVICE_NAMESPACE_VARIABLE_NAMES.has(normalizedName)) return
'serviceNamespace';
+ if (ENVIRONMENT_VARIABLE_NAMES.has(normalizedName)) return 'environment';
if (TRACE_ID_VARIABLE_NAMES.has(normalizedName)) return 'traceId';
if (SPAN_ID_VARIABLE_NAMES.has(normalizedName)) return 'spanId';
if (ENTITY_ID_VARIABLE_NAMES.has(normalizedName)) return 'entityId';
@@ -3524,21 +3571,14 @@ function evidenceFilterSourceForVariableName(name:
string): SignalDashboardRunti
}
function breakoutValue(row: SignalDashboardRuntimeSyncTooltipRow, names:
string[]) {
- const normalizedNames = new Set(names.flatMap(name => {
- const normalizedName = normalizeBreakoutAttributeName(name);
- return normalizedName
- ? [normalizedName, `resource:${normalizedName}`,
`attribute:${normalizedName}`]
- : [];
- }));
- return syncTooltipIdentifier(row.breakoutAttributes
- ?.find(attribute =>
normalizedNames.has(normalizeBreakoutAttributeName(attribute.name)))
- ?.value);
+ return syncTooltipBreakoutValue(row.breakoutAttributes, names);
}
function evidenceFilterValues(row: SignalDashboardRuntimeSyncTooltipRow):
Record<SignalDashboardRuntimeEvidenceFilterSource, string> {
return {
service: row.signal === 'metrics' ? syncTooltipIdentifier(row.serviceName)
: row.signal === 'logs' || row.signal === 'traces' ?
syncTooltipIdentifier(row.label) : '',
serviceNamespace: syncTooltipIdentifier(row.serviceNamespace),
+ environment: breakoutValue(row, ['deployment.environment.name',
'environment']),
traceId: syncTooltipIdentifier(row.traceId),
spanId: syncTooltipIdentifier(row.spanId),
entityId: breakoutValue(row, ['hertzbeat.entity_id',
'hertzbeat.entity.id', 'entity.id', 'entity_id']),
@@ -3568,6 +3608,9 @@ export function
buildSignalDashboardRuntimeEvidenceSourceHandoff(
if (valuesBySource.serviceNamespace &&
!url.searchParams.get('serviceNamespace')) {
url.searchParams.set('serviceNamespace',
valuesBySource.serviceNamespace);
}
+ if (valuesBySource.environment && !url.searchParams.get('environment')) {
+ url.searchParams.set('environment', valuesBySource.environment);
+ }
if (valuesBySource.entityId && !url.searchParams.get('entityId')) {
url.searchParams.set('entityId', valuesBySource.entityId);
}
@@ -3626,6 +3669,7 @@ export function
buildSignalDashboardRuntimeEvidenceFilterSuggestions(
const suggestions: { source: SignalDashboardRuntimeEvidenceFilterSource;
variableName: string; variableType: SignalDashboardVariableType }[] = [
{ source: 'service', variableName: 'service.name', variableType: 'query' },
{ source: 'serviceNamespace', variableName: 'service.namespace',
variableType: 'query' },
+ { source: 'environment', variableName: 'deployment.environment.name',
variableType: 'query' },
{ source: 'entityId', variableName: 'hertzbeat.entity_id', variableType:
'textbox' },
{ source: 'entityName', variableName: 'hertzbeat.entity_name',
variableType: 'query' },
{ source: 'signalSource', variableName: 'hertzbeat.source', variableType:
'dynamic' },
@@ -3694,7 +3738,8 @@ export function buildSignalDashboardRuntimeSyncTooltip(
breakoutAttributes: row.breakoutAttributes,
...syncTooltipRelatedHandoff(renderer.signal, row.traceId, row.spanId,
options, {
serviceName: row.service,
- serviceNamespace: row.serviceNamespace
+ serviceNamespace: row.serviceNamespace,
+
...syncTooltipRelatedContextFromBreakoutAttributes(row.breakoutAttributes)
})
}));
const waterfallRows = renderer.traceWaterfallRows
@@ -3712,7 +3757,8 @@ export function buildSignalDashboardRuntimeSyncTooltip(
breakoutAttributes: row.breakoutAttributes,
...syncTooltipRelatedHandoff(renderer.signal, row.traceId, row.spanId,
options, {
serviceName: row.service,
- serviceNamespace: row.serviceNamespace
+ serviceNamespace: row.serviceNamespace,
+
...syncTooltipRelatedContextFromBreakoutAttributes(row.breakoutAttributes)
})
}));
return [...metricRows, ...tableRows, ...waterfallRows];
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]