diff --git a/docs/en/api/query-protocol.md b/docs/en/api/query-protocol.md index 6194609e1c..8559dc81d3 100644 --- a/docs/en/api/query-protocol.md +++ b/docs/en/api/query-protocol.md @@ -170,6 +170,10 @@ Trace query fetches trace segment lists and spans of given trace IDs. extend type Query { getAlarmTrend(duration: Duration!): AlarmTrend! getAlarm(duration: Duration!, scope: Scope, keyword: String, paging: Pagination!, tags: [AlarmTag]): Alarms + # Read the list of searchable keys + queryAlarmTagAutocompleteKeys(duration: Duration!):[String!] + # Search the available value options of the given key. + queryAlarmTagAutocompleteValues(tagKey: String! , duration: Duration!):[String!] } ``` diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 15f2d34002..555b9a8395 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -82,6 +82,7 @@ * BanyanDB: use `TimestampRange` to improve "events" query for BanyanDB. * Optimize `network_address_alias` table to reduce the number of the index. * PromQL service: support round brackets operator. +* Support query Alarm message Tag for auto-complete. #### UI diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java index cd417b2c31..0e1b17fd89 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java @@ -23,8 +23,11 @@ import com.google.gson.Gson; import org.apache.skywalking.oap.server.core.CoreModule; import org.apache.skywalking.oap.server.core.analysis.TimeBucket; import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag; +import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType; import org.apache.skywalking.oap.server.core.analysis.worker.RecordStreamProcessor; import org.apache.skywalking.oap.server.core.config.ConfigService; +import org.apache.skywalking.oap.server.core.source.SourceReceiver; +import org.apache.skywalking.oap.server.core.source.TagAutocomplete; import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,6 +45,7 @@ public class AlarmStandardPersistence implements AlarmCallback { private static final Logger LOGGER = LoggerFactory.getLogger(AlarmStandardPersistence.class); private final Gson gson = new Gson(); private final ModuleManager manager; + private SourceReceiver receiver; public AlarmStandardPersistence(ModuleManager manager) { this.manager = manager; @@ -64,12 +68,20 @@ public class AlarmStandardPersistence implements AlarmCallback { record.setTimeBucket(TimeBucket.getRecordTimeBucket(message.getStartTime())); record.setRuleName(message.getRuleName()); Collection tags = appendSearchableTags(message.getTags()); + addAutocompleteTags(tags, TimeBucket.getMinuteTimeBucket(message.getStartTime())); record.setTagsRawData(gson.toJson(message.getTags()).getBytes(Charsets.UTF_8)); record.setTagsInString(Tag.Util.toStringList(new ArrayList<>(tags))); RecordStreamProcessor.getInstance().in(record); }); } + private SourceReceiver getReceiver() { + if (receiver == null) { + receiver = manager.find(CoreModule.NAME).provider().getService(SourceReceiver.class); + } + return receiver; + } + private Collection appendSearchableTags(List tags) { final ConfigService configService = manager.find(CoreModule.NAME) .provider() @@ -90,4 +102,15 @@ public class AlarmStandardPersistence implements AlarmCallback { }); return alarmTags; } + + private void addAutocompleteTags(Collection alarmTags, long minuteTimeBucket) { + alarmTags.forEach(tag -> { + TagAutocomplete tagAutocomplete = new TagAutocomplete(); + tagAutocomplete.setTagKey(tag.getKey()); + tagAutocomplete.setTagValue(tag.getValue()); + tagAutocomplete.setTagType(TagType.ALARM); + tagAutocomplete.setTimeBucket(minuteTimeBucket); + getReceiver().receive(tagAutocomplete); + }); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagType.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagType.java index c5c606ee4b..1eeceba8d9 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagType.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagType.java @@ -21,5 +21,6 @@ package org.apache.skywalking.oap.server.core.analysis.manual.searchtag; public enum TagType { TRACE, LOG, - ZIPKIN + ZIPKIN, + ALARM } diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java index 9108069084..ab7815d551 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java @@ -24,14 +24,17 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import org.apache.skywalking.oap.server.core.CoreModule; import org.apache.skywalking.oap.server.core.analysis.IDManager; import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag; +import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType; import org.apache.skywalking.oap.server.core.query.AlarmQueryService; import org.apache.skywalking.oap.server.core.query.EventQueryService; +import org.apache.skywalking.oap.server.core.query.TagAutoCompleteQueryService; import org.apache.skywalking.oap.server.core.query.enumeration.Scope; import org.apache.skywalking.oap.server.core.query.input.Duration; import org.apache.skywalking.oap.server.core.query.type.AlarmMessage; @@ -59,6 +62,8 @@ public class AlarmQuery implements GraphQLQueryResolver { private EventQueryService eventQueryService; + private TagAutoCompleteQueryService tagQueryService; + public AlarmQuery(ModuleManager moduleManager) { this.moduleManager = moduleManager; } @@ -77,6 +82,13 @@ public class AlarmQuery implements GraphQLQueryResolver { return eventQueryService; } + private TagAutoCompleteQueryService getTagQueryService() { + if (tagQueryService == null) { + this.tagQueryService = moduleManager.find(CoreModule.NAME).provider().getService(TagAutoCompleteQueryService.class); + } + return tagQueryService; + } + public AlarmTrend getAlarmTrend(final Duration duration) { return new AlarmTrend(); } @@ -108,6 +120,14 @@ public class AlarmQuery implements GraphQLQueryResolver { }); } + public CompletableFuture> queryAlarmTagAutocompleteKeys(final Duration queryDuration) { + return queryAsync(() -> getTagQueryService().queryTagAutocompleteKeys(TagType.ALARM, queryDuration)); + } + + public CompletableFuture> queryAlarmTagAutocompleteValues(final String tagKey, final Duration queryDuration) { + return queryAsync(() -> getTagQueryService().queryTagAutocompleteValues(TagType.ALARM, tagKey, queryDuration)); + } + private Alarms findRelevantEvents( final Alarms alarms, final EventQueryCondition.EventQueryConditionBuilder conditionPrototype diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol index 6ed9a1bb96..0fa72b147f 160000 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol @@ -1 +1 @@ -Subproject commit 6ed9a1bb96c1c753d3211e55995117c9617e4339 +Subproject commit 0fa72b147fb4d0569b7182d6753cc225a2145c82