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 74db8573eb Expose signal filter operator hints
74db8573eb is described below

commit 74db8573eb11c88d8c303bb195cfb3f5b3a40511
Author: Logic <[email protected]>
AuthorDate: Tue Jun 9 22:38:30 2026 +0800

    Expose signal filter operator hints
---
 web-next/app/ingestion/otlp/metrics/page.test.tsx | 2 ++
 web-next/app/trace/manage/page.test.tsx           | 6 ++++++
 web-next/app/trace/manage/trace-manage-page.tsx   | 4 ++--
 web-next/lib/i18n-runtime-messages.ts             | 8 ++++++--
 4 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/web-next/app/ingestion/otlp/metrics/page.test.tsx 
b/web-next/app/ingestion/otlp/metrics/page.test.tsx
index 9f960cc0ed..48b93ff998 100644
--- a/web-next/app/ingestion/otlp/metrics/page.test.tsx
+++ b/web-next/app/ingestion/otlp/metrics/page.test.tsx
@@ -499,6 +499,7 @@ describe('otlp metrics page', () => {
 
   it('keeps metrics on the OTLP cold Workbench owner instead of the old 
external-product explorer stack', () => {
     const source = readFileSync(resolve(process.cwd(), 
'app/ingestion/otlp/metrics/otlp-metrics-page.tsx'), 'utf8');
+    const messagesSource = readFileSync(resolve(process.cwd(), 
'lib/i18n-runtime-messages.ts'), 'utf8');
 
     
expect(source).toContain('data-otlp-metrics-route="otlp-hertzbeat-ui-metrics-workbench"');
     expect(source).toContain('HzSignalWorkbenchShell');
@@ -535,6 +536,7 @@ describe('otlp metrics page', () => {
     
expect(source).toContain('data-otlp-metrics-filter-input-owner="hertzbeat-ui-input"');
     expect(source).toContain("aria-label={t('otlp.metrics.filter.aria')}");
     
expect(source).toContain("placeholder={t('otlp.metrics.filter.placeholder')}");
+    expect(messagesSource).toContain("'otlp.metrics.filter.placeholder': 
'service.name = \"checkout\", http.route CONTAINS checkout, k8s.pod.name 
EXISTS'");
     expect(source).toContain('width="metrics-filter-expression"');
     
expect(source).toContain('data-otlp-metrics-temporal-aggregation-select="true"');
     
expect(source).toContain('data-otlp-metrics-temporal-aggregation-select-owner="hertzbeat-ui-select"');
diff --git a/web-next/app/trace/manage/page.test.tsx 
b/web-next/app/trace/manage/page.test.tsx
index 59d550d1de..fb119db068 100644
--- a/web-next/app/trace/manage/page.test.tsx
+++ b/web-next/app/trace/manage/page.test.tsx
@@ -533,6 +533,8 @@ describe('trace manage page', () => {
       .mockResolvedValueOnce({ content: [] });
 
     const html = renderTraceManagePage();
+    const source = readFileSync(resolve(process.cwd(), 
'app/trace/manage/trace-manage-page.tsx'), 'utf8');
+    const messagesSource = readFileSync(resolve(process.cwd(), 
'lib/i18n-runtime-messages.ts'), 'utf8');
     await mockState.lastLoad?.();
 
     
expect(html).toContain('data-trace-manage-route="otlp-hertzbeat-ui-trace-workbench"');
@@ -578,6 +580,10 @@ describe('trace manage page', () => {
     expect(html).toContain('data-hz-input-inset="search-icon"');
     expect(html).toContain('data-trace-manage-query-token-field="trace-id"');
     expect(html).toContain('data-trace-manage-query-token-field="span-id"');
+    
expect(source).toContain("placeholder={t('trace.manage.route.query.resource-filter.placeholder')}");
+    
expect(source).toContain("placeholder={t('trace.manage.route.query.attribute-filter.placeholder')}");
+    
expect(messagesSource).toContain("'trace.manage.route.query.resource-filter.placeholder':
 'service.version=1.2.3, host.name CONTAINS checkout, k8s.pod.name EXISTS'");
+    
expect(messagesSource).toContain("'trace.manage.route.query.attribute-filter.placeholder':
 'http.route CONTAINS checkout, db.system EXISTS, span.kind IN (\"server\", 
\"consumer\")'");
     
expect(html).toContain('data-trace-manage-query-token-field-owner="hertzbeat-ui-query-token-field"');
     expect(html).toContain('data-hz-ui="query-token-field"');
     
expect(html).toContain('data-hz-query-token-field-owner="hertzbeat-ui-query-token-field"');
diff --git a/web-next/app/trace/manage/trace-manage-page.tsx 
b/web-next/app/trace/manage/trace-manage-page.tsx
index 475768928d..26dbb2e95e 100644
--- a/web-next/app/trace/manage/trace-manage-page.tsx
+++ b/web-next/app/trace/manage/trace-manage-page.tsx
@@ -2489,7 +2489,7 @@ function TraceExplorer({
               aria-label={t('trace.manage.route.query.resource-filter')}
               value={draft.resourceFilter || ''}
               onChange={event => setDraft(updateDraftField('resourceFilter', 
event.target.value))}
-              placeholder={t('trace.manage.route.query.resource-filter')}
+              
placeholder={t('trace.manage.route.query.resource-filter.placeholder')}
               data-trace-manage-resource-filter-input="true"
               fieldProps={{
                 'data-trace-manage-query-token-field': 'resource-filter',
@@ -2502,7 +2502,7 @@ function TraceExplorer({
               aria-label={t('trace.manage.route.query.attribute-filter')}
               value={draft.attributeFilter || ''}
               onChange={event => setDraft(updateDraftField('attributeFilter', 
event.target.value))}
-              placeholder={t('trace.manage.route.query.attribute-filter')}
+              
placeholder={t('trace.manage.route.query.attribute-filter.placeholder')}
               data-trace-manage-attribute-filter-input="true"
               fieldProps={{
                 'data-trace-manage-query-token-field': 'attribute-filter',
diff --git a/web-next/lib/i18n-runtime-messages.ts 
b/web-next/lib/i18n-runtime-messages.ts
index 50da10e8ea..2731eee298 100644
--- a/web-next/lib/i18n-runtime-messages.ts
+++ b/web-next/lib/i18n-runtime-messages.ts
@@ -2577,7 +2577,9 @@ export const SUPPLEMENTAL_MESSAGES: 
Partial<Record<LocaleCode, Messages>> = {
     'trace.manage.route.action.catalog': 'Entity catalog',
     'trace.manage.route.query.service': 'Service name',
     'trace.manage.route.query.resource-filter': 'Resource filter',
+    'trace.manage.route.query.resource-filter.placeholder': 
'service.version=1.2.3, host.name CONTAINS checkout, k8s.pod.name EXISTS',
     'trace.manage.route.query.attribute-filter': 'Span attribute filter',
+    'trace.manage.route.query.attribute-filter.placeholder': 'http.route 
CONTAINS checkout, db.system EXISTS, span.kind IN ("server", "consumer")',
     'trace.manage.route.query.operation': 'Operation',
     'trace.manage.route.query.min-duration': 'Minimum duration',
     'trace.manage.route.query.min-duration.placeholder': 'Min ms',
@@ -3094,7 +3096,7 @@ export const SUPPLEMENTAL_MESSAGES: 
Partial<Record<LocaleCode, Messages>> = {
     'otlp.metrics.query.unselected': 'No metric selected',
     'otlp.metrics.filter.aria': 'Metric filter',
     'otlp.metrics.filter.short': 'Filter',
-    'otlp.metrics.filter.placeholder': 'service.name = "checkout"',
+    'otlp.metrics.filter.placeholder': 'service.name = "checkout", http.route 
CONTAINS checkout, k8s.pod.name EXISTS',
     'otlp.metrics.service.filter-action.aria': 'Filter service to {{service}}',
     'otlp.metrics.temporal.aria': 'Temporal aggregation',
     'otlp.metrics.temporal.raw': 'Raw samples',
@@ -7047,7 +7049,9 @@ export const SUPPLEMENTAL_MESSAGES: 
Partial<Record<LocaleCode, Messages>> = {
     'trace.manage.route.action.catalog': '对象目录',
     'trace.manage.route.query.service': '服务名称',
     'trace.manage.route.query.resource-filter': '资源过滤',
+    'trace.manage.route.query.resource-filter.placeholder': 
'service.version=1.2.3、host.name CONTAINS checkout、k8s.pod.name EXISTS',
     'trace.manage.route.query.attribute-filter': 'Span 属性过滤',
+    'trace.manage.route.query.attribute-filter.placeholder': 'http.route 
CONTAINS checkout、db.system EXISTS、span.kind IN ("server", "consumer")',
     'trace.manage.route.query.operation': '操作',
     'trace.manage.route.query.min-duration': '最短耗时',
     'trace.manage.route.query.min-duration.placeholder': '最小 ms',
@@ -7564,7 +7568,7 @@ export const SUPPLEMENTAL_MESSAGES: 
Partial<Record<LocaleCode, Messages>> = {
     'otlp.metrics.query.unselected': '未选择指标',
     'otlp.metrics.filter.aria': '指标过滤条件',
     'otlp.metrics.filter.short': '过滤',
-    'otlp.metrics.filter.placeholder': 'service.name = "checkout"',
+    'otlp.metrics.filter.placeholder': 'service.name = "checkout"、http.route 
CONTAINS checkout、k8s.pod.name EXISTS',
     'otlp.metrics.service.filter-action.aria': '过滤服务为 {{service}}',
     'otlp.metrics.temporal.aria': '时间聚合',
     'otlp.metrics.temporal.raw': '原始采样',


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to