From be75d419f9b32eefcdae8f312aba965323d823cb Mon Sep 17 00:00:00 2001 From: shedfreewu Date: Thu, 10 Apr 2025 13:17:34 +0800 Subject: [PATCH 1/5] feat: support config event --- .../tencent/polaris/client/flow/BaseFlow.java | 20 ++ .../polaris/api/pojo/ServiceEventKey.java | 1 + .../polaris-configuration-api/pom.xml | 7 + .../api/core/ConfigFileMetadata.java | 2 + .../api/core/ConfigKVFileChangeEvent.java | 10 +- .../internal/AbstractConfigFileRepo.java | 5 +- .../client/internal/CompositeConfigFile.java | 5 + .../ConfigFileRepoChangeListener.java | 3 +- .../client/internal/ConfigPropertiesFile.java | 9 +- .../client/internal/DefaultConfigFile.java | 4 +- .../internal/DefaultConfigFileMetadata.java | 14 + ...ltRevisableConfigFileGroupPullService.java | 3 +- .../client/internal/RemoteConfigFileRepo.java | 6 +- .../api/plugin/configuration/ConfigFile.java | 10 + .../polaris/api/plugin/event/BaseEvent.java | 48 +++ .../polaris/api/plugin/event/ConfigEvent.java | 303 ++++++++++++++++++ ...ventConstants.java => EventConstants.java} | 16 +- .../api/plugin/event/EventReporter.java | 2 +- .../polaris/api/plugin/event/FlowEvent.java | 87 +++-- .../utils/CircuitBreakerEventUtils.java | 15 +- .../composite/utils/CircuitBreakerUtils.java | 34 +- .../polaris/PolarisConfigFileConnector.java | 1 + .../PolarisConfigFileGroupConnector.java | 1 + .../lossless/common/LosslessEventUtils.java | 7 +- .../deregister/DeregisterLosslessPolicy.java | 4 +- .../HealthCheckRegisterLosslessPolicy.java | 10 +- .../event/logger/LoggerEventReporter.java | 46 +-- .../pushgateway/PushGatewayEventReporter.java | 8 +- .../pushgateway/PushGatewayEventRequest.java | 8 +- .../PushGatewayEventRequestTest.java | 6 +- .../plugins/event/tsf/TsfEventDataUtils.java | 22 +- .../plugins/event/tsf/TsfEventReporter.java | 14 +- .../client/utils/RateLimiterEventUtils.java | 37 ++- 33 files changed, 606 insertions(+), 162 deletions(-) create mode 100644 polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/BaseEvent.java create mode 100644 polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/ConfigEvent.java rename polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/{FlowEventConstants.java => EventConstants.java} (89%) diff --git a/polaris-common/polaris-client/src/main/java/com/tencent/polaris/client/flow/BaseFlow.java b/polaris-common/polaris-client/src/main/java/com/tencent/polaris/client/flow/BaseFlow.java index fe9cc752e..1f09faa59 100644 --- a/polaris-common/polaris-client/src/main/java/com/tencent/polaris/client/flow/BaseFlow.java +++ b/polaris-common/polaris-client/src/main/java/com/tencent/polaris/client/flow/BaseFlow.java @@ -27,6 +27,7 @@ import com.tencent.polaris.api.plugin.compose.DefaultRouterChainGroup; import com.tencent.polaris.api.plugin.compose.Extensions; import com.tencent.polaris.api.plugin.compose.RouterChainGroup; +import com.tencent.polaris.api.plugin.event.ConfigEvent; import com.tencent.polaris.api.plugin.event.EventReporter; import com.tencent.polaris.api.plugin.event.FlowEvent; import com.tencent.polaris.api.plugin.loadbalance.LoadBalancer; @@ -368,4 +369,23 @@ public static void reportFlowEvent(Extensions extensions, FlowEvent flowEvent) { } } } + + public static void reportConfigEvent(Extensions extensions, ConfigEvent flowEvent) { + List eventReporterList = extensions.getEventReporterList(); + if (LOG.isDebugEnabled()) { + LOG.debug("Reporting config event: {}", flowEvent); + } + for (EventReporter eventReporter : eventReporterList) { + try { + if (!eventReporter.isEnabled()) { + continue; + } + if (!eventReporter.reportEvent(flowEvent)) { + LOG.warn("Report event by {} failed. Config event detail: {}", eventReporter.getName(), flowEvent); + } + } catch (Throwable throwable) { + LOG.warn("Report event by {} failed. Config event detail: {}", eventReporter.getName(), flowEvent, throwable); + } + } + } } diff --git a/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java b/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java index eec41f548..abe58f859 100644 --- a/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java +++ b/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java @@ -52,6 +52,7 @@ public enum EventType { NEARBY_ROUTE_RULE, LOSSLESS, BLOCK_ALLOW_RULE, + CONFIG_UPDATED, } private final ServiceKey serviceKey; diff --git a/polaris-configuration/polaris-configuration-api/pom.xml b/polaris-configuration/polaris-configuration-api/pom.xml index 95c0173f8..ebcfb060e 100644 --- a/polaris-configuration/polaris-configuration-api/pom.xml +++ b/polaris-configuration/polaris-configuration-api/pom.xml @@ -20,5 +20,12 @@ polaris-client ${project.version} + + + com.tencent.polaris + polaris-plugin-api + ${project.version} + + diff --git a/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigFileMetadata.java b/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigFileMetadata.java index 36271804d..a48854068 100644 --- a/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigFileMetadata.java +++ b/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigFileMetadata.java @@ -29,4 +29,6 @@ public interface ConfigFileMetadata { String getFileGroup(); String getFileName(); + + String getFileVersion(); } diff --git a/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigKVFileChangeEvent.java b/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigKVFileChangeEvent.java index d2765fe0d..79a80558b 100644 --- a/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigKVFileChangeEvent.java +++ b/polaris-configuration/polaris-configuration-api/src/main/java/com/tencent/polaris/configuration/api/core/ConfigKVFileChangeEvent.java @@ -20,6 +20,8 @@ import java.util.Map; import java.util.Set; +import com.tencent.polaris.api.plugin.configuration.ConfigFile; + /** * @author lepdou 2022-03-01 */ @@ -27,8 +29,11 @@ public class ConfigKVFileChangeEvent { private final Map propertyChangeInfos; - public ConfigKVFileChangeEvent(Map changeInfos) { + private final com.tencent.polaris.api.plugin.configuration.ConfigFile configFile; + + public ConfigKVFileChangeEvent(Map changeInfos, com.tencent.polaris.api.plugin.configuration.ConfigFile configFile) { this.propertyChangeInfos = changeInfos; + this.configFile = configFile; } public Set changedKeys() { @@ -67,4 +72,7 @@ public ChangeType getPropertiesChangeType(String propertyKey) { return ChangeType.NOT_CHANGED; } + public ConfigFile getConfigFile() { + return configFile; + } } diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/AbstractConfigFileRepo.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/AbstractConfigFileRepo.java index fb845f564..a5f1b8232 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/AbstractConfigFileRepo.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/AbstractConfigFileRepo.java @@ -18,6 +18,7 @@ package com.tencent.polaris.configuration.client.internal; import com.google.common.collect.Lists; +import com.tencent.polaris.api.plugin.configuration.ConfigFile; import com.tencent.polaris.client.api.SDKContext; import com.tencent.polaris.configuration.api.core.ConfigFileMetadata; import com.tencent.polaris.logging.LoggerFactory; @@ -65,10 +66,10 @@ public void removeChangeListener(ConfigFileRepoChangeListener listener) { listeners.remove(listener); } - protected void fireChangeEvent(String newContent) { + protected void fireChangeEvent(ConfigFile configFile) { for (ConfigFileRepoChangeListener listener : listeners) { try { - listener.onChange(configFileMetadata, newContent); + listener.onChange(configFileMetadata, configFile); } catch (Throwable t) { LOGGER.error("[Config] invoke config file repo change listener failed. config file = {}, listener = {}", configFileMetadata, listener.getClass(), t); diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/CompositeConfigFile.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/CompositeConfigFile.java index 308755fbb..787b72742 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/CompositeConfigFile.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/CompositeConfigFile.java @@ -193,4 +193,9 @@ public String getFileGroup() { public String getFileName() { return ""; } + + @Override + public String getFileVersion() { + return ""; + } } diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFileRepoChangeListener.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFileRepoChangeListener.java index 0787aa2f7..b7563d6b0 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFileRepoChangeListener.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFileRepoChangeListener.java @@ -17,6 +17,7 @@ package com.tencent.polaris.configuration.client.internal; +import com.tencent.polaris.api.plugin.configuration.ConfigFile; import com.tencent.polaris.configuration.api.core.ConfigFileMetadata; /** @@ -24,6 +25,6 @@ */ public interface ConfigFileRepoChangeListener { - void onChange(ConfigFileMetadata configFileMetadata, String newContent); + void onChange(ConfigFileMetadata configFileMetadata, ConfigFile configFile); } diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigPropertiesFile.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigPropertiesFile.java index 0bc474387..d2c85cf35 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigPropertiesFile.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigPropertiesFile.java @@ -23,6 +23,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.tencent.polaris.api.config.configuration.ConfigFileConfig; +import com.tencent.polaris.api.plugin.configuration.ConfigFile; import com.tencent.polaris.configuration.api.core.*; import com.tencent.polaris.configuration.client.util.ConfigFileUtils; import com.tencent.polaris.configuration.client.util.ConvertFunctions; @@ -321,9 +322,9 @@ public void removeChangeListener(ConfigKVFileChangeListener listener) { } @Override - public void onChange(ConfigFileMetadata configFileMetadata, String newContent) { - super.onChange(configFileMetadata, newContent); - + public void onChange(ConfigFileMetadata configFileMetadata, ConfigFile configFile) { + super.onChange(configFileMetadata, configFile); + String newContent = Optional.ofNullable(configFile).map(ConfigFile::getContent).orElse(null); Properties oldProperties = this.properties.get(); if (oldProperties == null) { oldProperties = new Properties(); @@ -358,7 +359,7 @@ public void onChange(ConfigFileMetadata configFileMetadata, String newContent) { clearConfigCache(); - ConfigKVFileChangeEvent event = new ConfigKVFileChangeEvent(changeInfos); + ConfigKVFileChangeEvent event = new ConfigKVFileChangeEvent(changeInfos, configFile); fireChangeEvent(event); } diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFile.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFile.java index d716cf4dd..b3f5e02e7 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFile.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFile.java @@ -33,6 +33,7 @@ import java.lang.reflect.Type; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -170,8 +171,9 @@ public void removeChangeListener(ConfigFileChangeListener listener) { } @Override - public void onChange(ConfigFileMetadata configFileMetadata, String newContent) { + public void onChange(ConfigFileMetadata configFileMetadata, com.tencent.polaris.api.plugin.configuration.ConfigFile configFile) { String oldContent = this.content; + String newContent = Optional.ofNullable(configFile).map(com.tencent.polaris.api.plugin.configuration.ConfigFile::getContent).orElse(null); this.content = newContent; ChangeType changeType = ChangeType.MODIFIED; diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFileMetadata.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFileMetadata.java index d0ad81024..3dbb0841e 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFileMetadata.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultConfigFileMetadata.java @@ -29,11 +29,20 @@ public class DefaultConfigFileMetadata implements ConfigFileMetadata { private final String namespace; private final String fileGroup; private final String fileName; + private final String fileVersion; public DefaultConfigFileMetadata(String namespace, String fileGroup, String fileName) { this.namespace = namespace; this.fileGroup = fileGroup; this.fileName = fileName; + this.fileVersion = null; + } + + public DefaultConfigFileMetadata(String namespace, String fileGroup, String fileName, String fileVersion) { + this.namespace = namespace; + this.fileGroup = fileGroup; + this.fileName = fileName; + this.fileVersion = fileVersion; } @Override @@ -51,6 +60,11 @@ public String getFileName() { return fileName; } + @Override + public String getFileVersion() { + return fileVersion; + } + @Override public int hashCode() { return Objects.hash(namespace, fileGroup, fileName); diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultRevisableConfigFileGroupPullService.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultRevisableConfigFileGroupPullService.java index 2d77bb676..1af0d8a63 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultRevisableConfigFileGroupPullService.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/DefaultRevisableConfigFileGroupPullService.java @@ -134,7 +134,8 @@ private void pullAll() { List configFileMetadataList = new ArrayList<>(); for (ConfigFile configFile : configFileList) { - ConfigFileMetadata configFileMetadata = new DefaultConfigFileMetadata(configFile.getNamespace(), configFile.getFileGroup(), configFile.getFileName()); + ConfigFileMetadata configFileMetadata = new DefaultConfigFileMetadata(configFile.getNamespace(), + configFile.getFileGroup(), configFile.getFileName(), configFile.getName()); configFileMetadataList.add(configFileMetadata); } if (configFileGroupCache.containsKey(metadata)) { diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java index 194594a31..ebee6767d 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java @@ -166,9 +166,8 @@ protected void doPull() { if (shouldUpdateLocalCache) { ConfigFile copiedConfigFile = deepCloneConfigFile(pulledConfigFile); remoteConfigFile.set(copiedConfigFile); - //配置有更新,触发回调 - fireChangeEvent(copiedConfigFile.getContent()); + fireChangeEvent(copiedConfigFile); // update local file cache this.configFilePersistHandler.asyncSaveConfigFile(pulledConfigFile); @@ -220,7 +219,7 @@ private void fallbackIfNecessary(final int retryTimes, ConfigFile configFileReq) LOGGER.info("[Config] failed to pull config file from remote,fallback to local cache success.{}.", configFileRes); remoteConfigFile.set(configFileRes); //配置有更新,触发回调 - fireChangeEvent(configFileRes.getContent()); + fireChangeEvent(configFileRes); return; } LOGGER.info("[Config] failed to pull config file from remote,fallback to local cache fail.{}.", configFileReq); @@ -277,6 +276,7 @@ private ConfigFile deepCloneConfigFile(ConfigFile sourceConfigFile) { sourceConfigFile.getFileName()); configFile.setContent(sourceConfigFile.getContent()); configFile.setVersion(sourceConfigFile.getVersion()); + configFile.setName(sourceConfigFile.getName()); configFile.setMd5(sourceConfigFile.getMd5()); return configFile; } diff --git a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/configuration/ConfigFile.java b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/configuration/ConfigFile.java index 580714381..2d06fc7db 100644 --- a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/configuration/ConfigFile.java +++ b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/configuration/ConfigFile.java @@ -36,6 +36,7 @@ public class ConfigFile extends BaseEntity { private String fileName; private String content; private long version; + private String name; private String md5; private String publicKey; private String dataKey; @@ -88,6 +89,14 @@ public void setVersion(long version) { this.version = version; } + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + public String getMd5() { return md5; } @@ -159,6 +168,7 @@ public String toString() { ", fileName='" + fileName + '\'' + ", content='" + content + '\'' + ", version=" + version + + ", name=" + name + ", md5='" + md5 + '\'' + ", releaseTime=" + releaseTime + '\'' + '}'; diff --git a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/BaseEvent.java b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/BaseEvent.java new file mode 100644 index 000000000..b8caca567 --- /dev/null +++ b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/BaseEvent.java @@ -0,0 +1,48 @@ +/* + * Tencent is pleased to support the open source community by making polaris-java available. + * + * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package com.tencent.polaris.api.plugin.event; + +import java.time.LocalDateTime; + +/** + * 事件接口类。 + */ +public interface BaseEvent { + + EventConstants.EventType getEventType(); + + EventConstants.EventName getEventName(); + + LocalDateTime getTimestamp(); + + String getClientId(); + + String getClientIp(); + + String getNamespace(); + + EventConstants.Status getCurrentStatus(); + + EventConstants.Status getPreviousStatus(); + + EventConstants.ResourceType getResourceType(); + + String getReason(); + + String convertMessage(); +} \ No newline at end of file diff --git a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/ConfigEvent.java b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/ConfigEvent.java new file mode 100644 index 000000000..0fbe2867d --- /dev/null +++ b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/ConfigEvent.java @@ -0,0 +1,303 @@ +/* + * Tencent is pleased to support the open source community by making polaris-java available. + * + * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package com.tencent.polaris.api.plugin.event; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * 配置事件。 + */ +public class ConfigEvent implements BaseEvent { + + /** + * 事件类型 + */ + @JsonProperty("event_type") + private final EventConstants.EventType eventType; + + /** + * 事件名称 + */ + @JsonProperty("event_name") + private final EventConstants.EventName eventName; + + /** + * 时间戳 + */ + @JsonProperty("event_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss:SSSS") + private final LocalDateTime timestamp; + + /** + * 客户端ID + */ + @JsonProperty("client_id") + private final String clientId; + + /** + * 客户端IP + */ + @JsonProperty("client_ip") + private final String clientIp; + + /** + * 被调命名空间 + */ + @JsonProperty("namespace") + private final String namespace; + + @JsonProperty("config_group") + private final String configGroup; + + @JsonProperty("config_file_name") + private final String configFileName; + + @JsonProperty("config_file_version") + private final String configFileVersion; + /** + * 当前事件状态 + */ + private final EventConstants.Status currentStatus; + + /** + * 上一次事件状态 + */ + private final EventConstants.Status previousStatus; + + /** + * 资源类型 + */ + private final EventConstants.ResourceType resourceType; + + /** + * 状态转换原因 + */ + @JsonProperty("reason") + private final String reason; + + private final Map additionalParams; + + private ConfigEvent(Builder builder) { + this.eventType = builder.eventType; + this.eventName = builder.eventName; + this.timestamp = builder.timestamp; + this.clientId = builder.clientId; + this.clientIp = builder.clientIp; + this.namespace = builder.namespace; + this.configGroup = builder.configGroup; + this.configFileName = builder.configFileName; + this.configFileVersion = builder.configVersion; + this.currentStatus = builder.currentStatus; + this.previousStatus = builder.previousStatus; + this.resourceType = builder.resourceType; + this.reason = builder.reason; + additionalParams = new HashMap<>(); + } + + public static class Builder { + private EventConstants.EventType eventType; + private EventConstants.EventName eventName; + private LocalDateTime timestamp; + private String clientId = ""; + private String clientIp = ""; + private String namespace = ""; + private String configGroup = ""; + private String configFileName = ""; + private String configVersion = ""; + private EventConstants.Status currentStatus; + private EventConstants.Status previousStatus; + private EventConstants.ResourceType resourceType; + private String reason = ""; + + public Builder withEventType(EventConstants.EventType eventType) { + this.eventType = eventType; + return this; + } + + public Builder withEventName(EventConstants.EventName eventName) { + this.eventName = eventName; + return this; + } + + public Builder withTimestamp(LocalDateTime timestamp) { + this.timestamp = timestamp; + return this; + } + + public Builder withClientId(String clientId) { + this.clientId = clientId; + return this; + } + + public Builder withClientIp(String clientIp) { + this.clientIp = clientIp; + return this; + } + + public Builder withNamespace(String namespace) { + this.namespace = namespace; + return this; + } + + public Builder withConfigGroup(String configGroup) { + this.configGroup = configGroup; + return this; + } + + public Builder withConfigFileName(String configFileName) { + this.configFileName = configFileName; + return this; + } + + public Builder withConfigVersion(String configVersion) { + this.configVersion = configVersion; + return this; + } + + public Builder withCurrentStatus(EventConstants.Status currentStatus) { + this.currentStatus = currentStatus; + return this; + } + + public Builder withPreviousStatus(EventConstants.Status previousStatus) { + this.previousStatus = previousStatus; + return this; + } + + public Builder withResourceType(EventConstants.ResourceType resourceType) { + this.resourceType = resourceType; + return this; + } + + public Builder withReason(String reason) { + this.reason = reason; + return this; + } + + public ConfigEvent build() { + return new ConfigEvent(this); + } + } + + public EventConstants.EventType getEventType() { + return eventType; + } + + public EventConstants.EventName getEventName() { + return eventName; + } + + public LocalDateTime getTimestamp() { + return timestamp; + } + + public String getClientId() { + return clientId; + } + + public String getClientIp() { + return clientIp; + } + + public String getNamespace() { + return namespace; + } + + public String getConfigGroup() { + return configGroup; + } + + public String getConfigFileName() { + return configFileName; + } + + public String getConfigFileVersion() { + return configFileVersion; + } + + public EventConstants.Status getCurrentStatus() { + return currentStatus; + } + + public EventConstants.Status getPreviousStatus() { + return previousStatus; + } + + public EventConstants.ResourceType getResourceType() { + return resourceType; + } + + public String getReason() { + return reason; + } + + @Override + public String convertMessage() { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") + .withZone(ZoneId.systemDefault()); + String formattedDateTime = ""; + if (this.getTimestamp() != null) { + formattedDateTime = formatter.format(this.getTimestamp()); + } + + String eventType = ""; + if (this.getEventType() != null) { + eventType = this.getEventType().name(); + } + + String eventName = ""; + if (this.getEventName() != null) { + eventName = this.getEventName().name(); + } + + return eventType + "|" + eventName + "|" + formattedDateTime + "|" + this.getClientId() + "|" + + this.getClientIp() + "|" + this.getNamespace() + "|" + this.getConfigGroup() + "|" + + this.getConfigFileName() + "|" + this.getConfigFileVersion(); + } + + public Map getAdditionalParams() { + return additionalParams; + } + + @Override + public String toString() { + return "ConfigEvent{" + + "eventType=" + eventType + + ", eventName=" + eventName + + ", timestamp=" + timestamp + + ", clientId='" + clientId + '\'' + + ", clientIp='" + clientIp + '\'' + + ", namespace='" + namespace + '\'' + + ", configGroup='" + configGroup + '\'' + + ", configFileName='" + configFileName + '\'' + + ", configFileVersion='" + configFileVersion + '\'' + + ", currentStatus=" + currentStatus + + ", previousStatus=" + previousStatus + + ", resourceType=" + resourceType + + ", reason='" + reason + '\'' + + ", additionalParams=" + additionalParams + + '}'; + } +} \ No newline at end of file diff --git a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/FlowEventConstants.java b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/EventConstants.java similarity index 89% rename from polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/FlowEventConstants.java rename to polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/EventConstants.java index 9df90c2d5..9efd6eb21 100644 --- a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/FlowEventConstants.java +++ b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/EventConstants.java @@ -20,7 +20,19 @@ /** * @author Haotian Zhang */ -public class FlowEventConstants { +public class EventConstants { + + public enum EventType { + CIRCUIT_BREAKING, + + LOSSLESS, + + RATE_LIMITING, + + INSTANCE, + + CONFIG, + } public enum EventName { LosslessOnlineStart, @@ -39,6 +51,8 @@ public enum EventName { RateLimitStart, RateLimitEnd, + ConfigUpdated, + UNKNOWN, } diff --git a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/EventReporter.java b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/EventReporter.java index 17ce2ba38..bf71832ef 100644 --- a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/EventReporter.java +++ b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/EventReporter.java @@ -28,5 +28,5 @@ public interface EventReporter extends Plugin { boolean isEnabled(); - boolean reportEvent(FlowEvent flowEvent); + boolean reportEvent(BaseEvent flowEvent); } diff --git a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/FlowEvent.java b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/FlowEvent.java index 40261c59e..189cb8176 100644 --- a/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/FlowEvent.java +++ b/polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/event/FlowEvent.java @@ -19,9 +19,10 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tencent.polaris.api.pojo.ServiceEventKey; import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; @@ -30,19 +31,19 @@ * * @author Haotian Zhang */ -public class FlowEvent { +public class FlowEvent implements BaseEvent { /** * 事件类型 */ @JsonProperty("event_type") - private final ServiceEventKey.EventType eventType; + private final EventConstants.EventType eventType; /** * 事件名称 */ @JsonProperty("event_name") - private final FlowEventConstants.EventName eventName; + private final EventConstants.EventName eventName; /** * 时间戳 @@ -126,17 +127,17 @@ public class FlowEvent { /** * 当前事件状态 */ - private final FlowEventConstants.Status currentStatus; + private final EventConstants.Status currentStatus; /** * 上一次事件状态 */ - private final FlowEventConstants.Status previousStatus; + private final EventConstants.Status previousStatus; /** * 资源类型 */ - private final FlowEventConstants.ResourceType resourceType; + private final EventConstants.ResourceType resourceType; /** * 治理规则名 @@ -180,8 +181,8 @@ private FlowEvent(Builder builder) { } public static class Builder { - private ServiceEventKey.EventType eventType; - private FlowEventConstants.EventName eventName; + private EventConstants.EventType eventType; + private EventConstants.EventName eventName; private LocalDateTime timestamp; private String clientId = ""; private String clientIp = ""; @@ -195,18 +196,18 @@ public static class Builder { private String sourceNamespace = ""; private String sourceService = ""; private String labels = ""; - private FlowEventConstants.Status currentStatus; - private FlowEventConstants.Status previousStatus; - private FlowEventConstants.ResourceType resourceType; + private EventConstants.Status currentStatus; + private EventConstants.Status previousStatus; + private EventConstants.ResourceType resourceType; private String ruleName = ""; private String reason = ""; - public Builder withEventType(ServiceEventKey.EventType eventType) { + public Builder withEventType(EventConstants.EventType eventType) { this.eventType = eventType; return this; } - public Builder withEventName(FlowEventConstants.EventName eventName) { + public Builder withEventName(EventConstants.EventName eventName) { this.eventName = eventName; return this; } @@ -276,17 +277,17 @@ public Builder withLabels(String labels) { return this; } - public Builder withCurrentStatus(FlowEventConstants.Status currentStatus) { + public Builder withCurrentStatus(EventConstants.Status currentStatus) { this.currentStatus = currentStatus; return this; } - public Builder withPreviousStatus(FlowEventConstants.Status previousStatus) { + public Builder withPreviousStatus(EventConstants.Status previousStatus) { this.previousStatus = previousStatus; return this; } - public Builder withResourceType(FlowEventConstants.ResourceType resourceType) { + public Builder withResourceType(EventConstants.ResourceType resourceType) { this.resourceType = resourceType; return this; } @@ -306,11 +307,11 @@ public FlowEvent build() { } } - public ServiceEventKey.EventType getEventType() { + public EventConstants.EventType getEventType() { return eventType; } - public FlowEventConstants.EventName getEventName() { + public EventConstants.EventName getEventName() { return eventName; } @@ -366,15 +367,15 @@ public String getLabels() { return labels; } - public FlowEventConstants.Status getCurrentStatus() { + public EventConstants.Status getCurrentStatus() { return currentStatus; } - public FlowEventConstants.Status getPreviousStatus() { + public EventConstants.Status getPreviousStatus() { return previousStatus; } - public FlowEventConstants.ResourceType getResourceType() { + public EventConstants.ResourceType getResourceType() { return resourceType; } @@ -386,6 +387,48 @@ public String getReason() { return reason; } + @Override + public String convertMessage() { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") + .withZone(ZoneId.systemDefault()); + String formattedDateTime = ""; + if (this.getTimestamp() != null) { + formattedDateTime = formatter.format(this.getTimestamp()); + } + + String eventType = ""; + if (this.getEventType() != null) { + eventType = this.getEventType().name(); + } + + String eventName = ""; + if (this.getEventName() != null) { + eventName = this.getEventName().name(); + } + + String currentStatus = ""; + if (this.getCurrentStatus() != null) { + currentStatus = this.getCurrentStatus().name(); + } + + String previousStatus = ""; + if (this.getPreviousStatus() != null) { + previousStatus = this.getPreviousStatus().name(); + } + + String resourceType = ""; + if (this.getResourceType() != null) { + resourceType = this.getResourceType().name(); + } + + return eventType + "|" + eventName + "|" + formattedDateTime + "|" + this.getClientId() + "|" + + this.getClientIp() + "|" + this.getNamespace() + "|" + this.getService() + "|" + + this.getApiProtocol() + "|" + this.getApiPath() + "|" + this.getApiMethod() + "|" + + this.getHost() + "|" + this.getPort() + "|" + this.getSourceNamespace() + "|" + + this.getSourceService() + "|" + this.getLabels() + "|" + currentStatus + "|" + + previousStatus + "|" + resourceType + "|" + this.getRuleName() + "|" + this.getReason(); + } + public Map getAdditionalParams() { return additionalParams; } diff --git a/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerEventUtils.java b/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerEventUtils.java index f0353c840..39fc3b68b 100644 --- a/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerEventUtils.java +++ b/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerEventUtils.java @@ -22,9 +22,8 @@ import com.tencent.polaris.api.plugin.circuitbreaker.entity.Resource; import com.tencent.polaris.api.plugin.compose.Extensions; import com.tencent.polaris.api.plugin.event.FlowEvent; -import com.tencent.polaris.api.plugin.event.FlowEventConstants; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.api.pojo.CircuitBreakerStatus; -import com.tencent.polaris.api.pojo.ServiceEventKey; import com.tencent.polaris.api.utils.CollectionUtils; import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.client.flow.BaseFlow; @@ -47,11 +46,11 @@ public static void reportEvent(Extensions extensions, Resource resource, return; } - FlowEventConstants.Status currentFlowEventStatus = CircuitBreakerUtils.parseFlowEventStatus(currentStatus); - FlowEventConstants.Status previousFlowEventStatus = CircuitBreakerUtils.parseFlowEventStatus(previousStatus); + EventConstants.Status currentFlowEventStatus = CircuitBreakerUtils.parseFlowEventStatus(currentStatus); + EventConstants.Status previousFlowEventStatus = CircuitBreakerUtils.parseFlowEventStatus(previousStatus); FlowEvent.Builder flowEventBuilder = new FlowEvent.Builder() - .withEventType(ServiceEventKey.EventType.CIRCUIT_BREAKING) + .withEventType(EventConstants.EventType.CIRCUIT_BREAKING) .withEventName(CircuitBreakerUtils.parseFlowEventName(currentFlowEventStatus, previousFlowEventStatus)) .withTimestamp(LocalDateTime.now()) .withClientId(extensions.getValueContext().getClientId()) @@ -69,13 +68,13 @@ public static void reportEvent(Extensions extensions, Resource resource, String isolationObject = ""; switch (resource.getLevel()) { case SERVICE: - flowEventBuilder = flowEventBuilder.withResourceType(FlowEventConstants.ResourceType.SERVICE); + flowEventBuilder = flowEventBuilder.withResourceType(EventConstants.ResourceType.SERVICE); isolationObject = CircuitBreakerUtils.getServiceCircuitBreakerName( resource.getService().getNamespace(), resource.getService().getService()); break; case METHOD: MethodResource methodResource = (MethodResource) resource; - flowEventBuilder = flowEventBuilder.withResourceType(FlowEventConstants.ResourceType.METHOD) + flowEventBuilder = flowEventBuilder.withResourceType(EventConstants.ResourceType.METHOD) .withApiProtocol(methodResource.getProtocol()) .withApiPath(methodResource.getPath()) .withApiMethod(methodResource.getMethod()); @@ -85,7 +84,7 @@ public static void reportEvent(Extensions extensions, Resource resource, break; case INSTANCE: InstanceResource instanceResource = (InstanceResource) resource; - flowEventBuilder = flowEventBuilder.withResourceType(FlowEventConstants.ResourceType.INSTANCE) + flowEventBuilder = flowEventBuilder.withResourceType(EventConstants.ResourceType.INSTANCE) .withHost(instanceResource.getHost()) .withPort(instanceResource.getPort()); isolationObject = CircuitBreakerUtils.getInstanceCircuitBreakerName( diff --git a/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerUtils.java b/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerUtils.java index d0b0c1c20..315d871eb 100644 --- a/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerUtils.java +++ b/polaris-plugins/polaris-plugins-circuitbreaker/circuitbreaker-composite/src/main/java/com/tencent/polaris/plugins/circuitbreaker/composite/utils/CircuitBreakerUtils.java @@ -22,7 +22,7 @@ import com.tencent.polaris.api.config.consumer.CircuitBreakerConfig; import com.tencent.polaris.api.plugin.circuitbreaker.ResourceStat; import com.tencent.polaris.api.plugin.circuitbreaker.entity.Resource; -import com.tencent.polaris.api.plugin.event.FlowEventConstants; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.api.pojo.CircuitBreakerStatus; import com.tencent.polaris.api.pojo.RetStatus; import com.tencent.polaris.api.pojo.ServiceRule; @@ -106,32 +106,32 @@ public static RetStatus parseRetStatus(ResourceStat resourceStat, return RetStatus.RetSuccess; } - public static FlowEventConstants.Status parseFlowEventStatus(CircuitBreakerStatus.Status status) { + public static EventConstants.Status parseFlowEventStatus(CircuitBreakerStatus.Status status) { switch (status) { case OPEN: - return FlowEventConstants.Status.OPEN; + return EventConstants.Status.OPEN; case CLOSE: - return FlowEventConstants.Status.CLOSE; + return EventConstants.Status.CLOSE; case HALF_OPEN: - return FlowEventConstants.Status.HALF_OPEN; + return EventConstants.Status.HALF_OPEN; case DESTROY: - return FlowEventConstants.Status.DESTROY; + return EventConstants.Status.DESTROY; default: - return FlowEventConstants.Status.UNKNOWN; + return EventConstants.Status.UNKNOWN; } } - public static FlowEventConstants.EventName parseFlowEventName(FlowEventConstants.Status currentStatus, FlowEventConstants.Status previousStatus) { - if (currentStatus == FlowEventConstants.Status.OPEN) { - return FlowEventConstants.EventName.CircuitBreakerOpen; - } else if (currentStatus == FlowEventConstants.Status.HALF_OPEN) { - return FlowEventConstants.EventName.CircuitBreakerHalfOpen; - } else if (currentStatus == FlowEventConstants.Status.CLOSE) { - return FlowEventConstants.EventName.CircuitBreakerClose; - } else if (currentStatus == FlowEventConstants.Status.DESTROY) { - return FlowEventConstants.EventName.CircuitBreakerDestroy; + public static EventConstants.EventName parseFlowEventName(EventConstants.Status currentStatus, EventConstants.Status previousStatus) { + if (currentStatus == EventConstants.Status.OPEN) { + return EventConstants.EventName.CircuitBreakerOpen; + } else if (currentStatus == EventConstants.Status.HALF_OPEN) { + return EventConstants.EventName.CircuitBreakerHalfOpen; + } else if (currentStatus == EventConstants.Status.CLOSE) { + return EventConstants.EventName.CircuitBreakerClose; + } else if (currentStatus == EventConstants.Status.DESTROY) { + return EventConstants.EventName.CircuitBreakerDestroy; } else { - return FlowEventConstants.EventName.UNKNOWN; + return EventConstants.EventName.UNKNOWN; } } diff --git a/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileConnector.java b/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileConnector.java index c4d1ddbae..583cbf66f 100644 --- a/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileConnector.java +++ b/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileConnector.java @@ -252,6 +252,7 @@ private ConfigFile transferFromDTO(ConfigFileProto.ClientConfigFileInfo configFi configFile.setMd5(configFileDTO.getMd5().getValue()); configFile.setVersion(configFileDTO.getVersion().getValue()); configFile.setEncrypted(configFileDTO.getEncrypted().getValue()); + configFile.setName(configFileDTO.getName().getValue()); if (configFileDTO.getEncrypted().getValue()) { configFileDTO.getTagsList().forEach(tag -> { if (tag.getKey().getValue().equals("internal-datakey")) { diff --git a/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileGroupConnector.java b/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileGroupConnector.java index eaae53fe0..acfa2ef78 100644 --- a/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileGroupConnector.java +++ b/polaris-plugins/polaris-plugins-configuration-connector/polaris-configuration-connector/src/main/java/com/tencent/polaris/plugins/configuration/connector/polaris/PolarisConfigFileGroupConnector.java @@ -120,6 +120,7 @@ private ConfigFileGroup protoToConfigFileGroup(ConfigFileResponseProto.ConfigCli ConfigFile configFile = new ConfigFile(clientConfigFileInfo.getNamespace().getValue(), clientConfigFileInfo.getGroup().getValue(), clientConfigFileInfo.getFileName().getValue()); + configFile.setName(clientConfigFileInfo.getName().getValue()); configFile.setReleaseTime(dateFormat.parse(clientConfigFileInfo.getReleaseTime().getValue())); configFileList.add(configFile); } diff --git a/polaris-plugins/polaris-plugins-lossless/lossless-common/src/main/java/com/tencent/polaris/plugin/lossless/common/LosslessEventUtils.java b/polaris-plugins/polaris-plugins-lossless/lossless-common/src/main/java/com/tencent/polaris/plugin/lossless/common/LosslessEventUtils.java index a17e329e8..f0e2e92a6 100644 --- a/polaris-plugins/polaris-plugins-lossless/lossless-common/src/main/java/com/tencent/polaris/plugin/lossless/common/LosslessEventUtils.java +++ b/polaris-plugins/polaris-plugins-lossless/lossless-common/src/main/java/com/tencent/polaris/plugin/lossless/common/LosslessEventUtils.java @@ -19,8 +19,7 @@ import com.tencent.polaris.api.plugin.compose.Extensions; import com.tencent.polaris.api.plugin.event.FlowEvent; -import com.tencent.polaris.api.plugin.event.FlowEventConstants; -import com.tencent.polaris.api.pojo.ServiceEventKey; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.client.flow.BaseFlow; import java.time.LocalDateTime; @@ -31,13 +30,13 @@ public class LosslessEventUtils { public static void reportEvent(Extensions extensions, String namespace, String service, String host, - int port, FlowEventConstants.EventName eventName) { + int port, EventConstants.EventName eventName) { if (extensions == null) { return; } FlowEvent.Builder flowEventBuilder = new FlowEvent.Builder() - .withEventType(ServiceEventKey.EventType.LOSSLESS) + .withEventType(EventConstants.EventType.LOSSLESS) .withEventName(eventName) .withTimestamp(LocalDateTime.now()) .withClientId(extensions.getValueContext().getClientId()) diff --git a/polaris-plugins/polaris-plugins-lossless/lossless-deregister/src/main/java/com/tencent/polaris/plugin/lossless/deregister/DeregisterLosslessPolicy.java b/polaris-plugins/polaris-plugins-lossless/lossless-deregister/src/main/java/com/tencent/polaris/plugin/lossless/deregister/DeregisterLosslessPolicy.java index 86c7142ae..5b4e9fc12 100644 --- a/polaris-plugins/polaris-plugins-lossless/lossless-deregister/src/main/java/com/tencent/polaris/plugin/lossless/deregister/DeregisterLosslessPolicy.java +++ b/polaris-plugins/polaris-plugins-lossless/lossless-deregister/src/main/java/com/tencent/polaris/plugin/lossless/deregister/DeregisterLosslessPolicy.java @@ -27,7 +27,7 @@ import com.tencent.polaris.api.plugin.common.PluginTypes; import com.tencent.polaris.api.plugin.common.ValueContext; import com.tencent.polaris.api.plugin.compose.Extensions; -import com.tencent.polaris.api.plugin.event.FlowEventConstants; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.api.plugin.lossless.InstanceProperties; import com.tencent.polaris.api.plugin.lossless.LosslessActionProvider; import com.tencent.polaris.api.plugin.lossless.LosslessPolicy; @@ -194,7 +194,7 @@ private void doLosslessDeregister(BaseInstance instance, LosslessActionProvider event.setEventName(EVENT_LOSSLESS_DEREGISTER); EVENT_LOG.info(event.toString()); LosslessEventUtils.reportEvent(extensions, instance.getNamespace(), instance.getService(), instance.getHost(), - instance.getPort(), FlowEventConstants.EventName.LosslessOfflineStart); + instance.getPort(), EventConstants.EventName.LosslessOfflineStart); } private boolean isLosslessOfflineEnable(BaseInstance instance) { diff --git a/polaris-plugins/polaris-plugins-lossless/lossless-register/src/main/java/com/tencent/polaris/plugin/lossless/register/HealthCheckRegisterLosslessPolicy.java b/polaris-plugins/polaris-plugins-lossless/lossless-register/src/main/java/com/tencent/polaris/plugin/lossless/register/HealthCheckRegisterLosslessPolicy.java index 1d8aed604..2d3b3a89b 100644 --- a/polaris-plugins/polaris-plugins-lossless/lossless-register/src/main/java/com/tencent/polaris/plugin/lossless/register/HealthCheckRegisterLosslessPolicy.java +++ b/polaris-plugins/polaris-plugins-lossless/lossless-register/src/main/java/com/tencent/polaris/plugin/lossless/register/HealthCheckRegisterLosslessPolicy.java @@ -27,7 +27,7 @@ import com.tencent.polaris.api.plugin.common.PluginTypes; import com.tencent.polaris.api.plugin.common.ValueContext; import com.tencent.polaris.api.plugin.compose.Extensions; -import com.tencent.polaris.api.plugin.event.FlowEventConstants; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.api.plugin.lossless.InstanceProperties; import com.tencent.polaris.api.plugin.lossless.LosslessActionProvider; import com.tencent.polaris.api.plugin.lossless.LosslessPolicy; @@ -184,7 +184,7 @@ private void doLosslessRegister( LOG.info("[HealthCheckRegisterLosslessPolicy] do losslessRegister for instance {}", instance); LosslessEventUtils.reportEvent(extensions, instance.getNamespace(), instance.getService(), instance.getHost(), - instance.getPort(), FlowEventConstants.EventName.LosslessOnlineStart); + instance.getPort(), EventConstants.EventName.LosslessOnlineStart); if (!losslessActionProvider.isEnableHealthCheck()) { long delayRegisterInterval = getDelayRegisterInterval(instance); LOG.info("[HealthCheckRegisterLosslessPolicy] health check disabled, start lossless register after {}ms, plugin {}", @@ -221,7 +221,7 @@ private void doRegister(BaseInstance instance, LosslessActionProvider losslessAc EVENT_LOG.info(new Event(clientId, instance, EVENT_DIRECT_REGISTER).toString()); } LosslessEventUtils.reportEvent(extensions, instance.getNamespace(), instance.getService(), instance.getHost(), - instance.getPort(), FlowEventConstants.EventName.LosslessOnlineEnd); + instance.getPort(), EventConstants.EventName.LosslessOnlineEnd); int warmupInterval = getWarmupInterval(instance); if (warmupInterval > 0) { @@ -233,14 +233,14 @@ private void doRegister(BaseInstance instance, LosslessActionProvider losslessAc Event warmupStartEvent = new Event(clientId, instance, EVENT_LOSSLESS_WARMUP_START); EVENT_LOG.info(warmupStartEvent.toString()); LosslessEventUtils.reportEvent(extensions, instance.getNamespace(), instance.getService(), instance.getHost(), - instance.getPort(), FlowEventConstants.EventName.LosslessWarmupStart); + instance.getPort(), EventConstants.EventName.LosslessWarmupStart); healthCheckExecutor.schedule(() -> { LOG.info("[HealthCheckRegisterLosslessPolicy] warmup for instance {} finished", instance); Event warmupEndEvent = new Event(clientId, instance, EVENT_LOSSLESS_WARMUP_END); EVENT_LOG.info(warmupEndEvent.toString()); LosslessEventUtils.reportEvent(extensions, instance.getNamespace(), instance.getService(), instance.getHost(), - instance.getPort(), FlowEventConstants.EventName.LosslessWarmupEnd); + instance.getPort(), EventConstants.EventName.LosslessWarmupEnd); }, warmupInterval, TimeUnit.MILLISECONDS); } else { LOG.info("[HealthCheckRegisterLosslessPolicy] no warmup for instance {}", instance); diff --git a/polaris-plugins/polaris-plugins-observability/event-logger/src/main/java/com/tencent/polaris/plugins/event/logger/LoggerEventReporter.java b/polaris-plugins/polaris-plugins-observability/event-logger/src/main/java/com/tencent/polaris/plugins/event/logger/LoggerEventReporter.java index 33abeddce..67a740756 100644 --- a/polaris-plugins/polaris-plugins-observability/event-logger/src/main/java/com/tencent/polaris/plugins/event/logger/LoggerEventReporter.java +++ b/polaris-plugins/polaris-plugins-observability/event-logger/src/main/java/com/tencent/polaris/plugins/event/logger/LoggerEventReporter.java @@ -23,8 +23,8 @@ import com.tencent.polaris.api.plugin.common.InitContext; import com.tencent.polaris.api.plugin.common.PluginTypes; import com.tencent.polaris.api.plugin.compose.Extensions; +import com.tencent.polaris.api.plugin.event.BaseEvent; import com.tencent.polaris.api.plugin.event.EventReporter; -import com.tencent.polaris.api.plugin.event.FlowEvent; import com.tencent.polaris.logging.LoggerFactory; import org.slf4j.Logger; @@ -47,9 +47,9 @@ public boolean isEnabled() { } @Override - public boolean reportEvent(FlowEvent flowEvent) { + public boolean reportEvent(BaseEvent flowEvent) { try { - EVENT_LOG.info(convertMessage(flowEvent)); + EVENT_LOG.info(flowEvent.convertMessage()); return true; } catch (Throwable throwable) { LOG.warn("Failed to log flow event. {}", flowEvent, throwable); @@ -81,44 +81,4 @@ public void postContextInit(Extensions ctx) throws PolarisException { public void destroy() { } - - public String convertMessage(FlowEvent event) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") - .withZone(ZoneId.systemDefault()); - String formattedDateTime = ""; - if (event.getTimestamp() != null) { - formattedDateTime = formatter.format(event.getTimestamp()); - } - - String eventType = ""; - if (event.getEventType() != null) { - eventType = event.getEventType().name(); - } - - String eventName = ""; - if (event.getEventName() != null) { - eventName = event.getEventName().name(); - } - - String currentStatus = ""; - if (event.getCurrentStatus() != null) { - currentStatus = event.getCurrentStatus().name(); - } - - String previousStatus = ""; - if (event.getPreviousStatus() != null) { - previousStatus = event.getPreviousStatus().name(); - } - - String resourceType = ""; - if (event.getResourceType() != null) { - resourceType = event.getResourceType().name(); - } - return eventType + "|" + eventName + "|" + formattedDateTime + "|" + event.getClientId() + "|" - + event.getClientIp() + "|" + event.getNamespace() + "|" + event.getService() + "|" - + event.getApiProtocol() + "|" + event.getApiPath() + "|" + event.getApiMethod() + "|" - + event.getHost() + "|" + event.getPort() + "|" + event.getSourceNamespace() + "|" - + event.getSourceService() + "|" + event.getLabels() + "|" + currentStatus + "|" - + previousStatus + "|" + resourceType + "|" + event.getRuleName() + "|" + event.getReason(); - } } diff --git a/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventReporter.java b/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventReporter.java index d302bca25..e1195ae10 100644 --- a/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventReporter.java +++ b/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventReporter.java @@ -30,8 +30,8 @@ import com.tencent.polaris.api.plugin.common.InitContext; import com.tencent.polaris.api.plugin.common.PluginTypes; import com.tencent.polaris.api.plugin.compose.Extensions; +import com.tencent.polaris.api.plugin.event.BaseEvent; import com.tencent.polaris.api.plugin.event.EventReporter; -import com.tencent.polaris.api.plugin.event.FlowEvent; import com.tencent.polaris.api.utils.CollectionUtils; import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.ThreadPoolUtils; @@ -64,7 +64,7 @@ public class PushGatewayEventReporter implements EventReporter, PluginConfigProv private final ObjectMapper mapper = new ObjectMapper(); - private BlockingQueue eventQueue; + private BlockingQueue eventQueue; private volatile boolean init = true; @@ -81,7 +81,7 @@ public boolean isEnabled() { } @Override - public boolean reportEvent(FlowEvent flowEvent) { + public boolean reportEvent(BaseEvent flowEvent) { if (eventUri == null) { LOG.warn("build event request url fail, can not sent event."); return false; @@ -184,7 +184,7 @@ public void run() { try { // 每次把eventQueue发空结束 while (CollectionUtils.isNotEmpty(eventQueue)) { - List eventDataList = new ArrayList<>(); + List eventDataList = new ArrayList<>(); PushGatewayEventRequest request = new PushGatewayEventRequest(); eventQueue.drainTo(eventDataList, config.getMaxBatchSize()); diff --git a/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequest.java b/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequest.java index 7a5a34ab1..78d425bee 100644 --- a/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequest.java +++ b/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/main/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequest.java @@ -17,7 +17,7 @@ package com.tencent.polaris.plugins.event.pushgateway; -import com.tencent.polaris.api.plugin.event.FlowEvent; +import com.tencent.polaris.api.plugin.event.BaseEvent; import java.util.ArrayList; import java.util.List; @@ -29,13 +29,13 @@ */ public class PushGatewayEventRequest { - private List batch = new ArrayList<>(); + private List batch = new ArrayList<>(); - public List getBatch() { + public List getBatch() { return batch; } - public void setBatch(List batch) { + public void setBatch(List batch) { this.batch = batch; } diff --git a/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/test/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequestTest.java b/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/test/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequestTest.java index b8cfb0500..b96c9bc07 100644 --- a/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/test/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequestTest.java +++ b/polaris-plugins/polaris-plugins-observability/event-pushgateway/src/test/java/com/tencent/polaris/plugins/event/pushgateway/PushGatewayEventRequestTest.java @@ -22,13 +22,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.api.plugin.event.FlowEvent; -import com.tencent.polaris.api.pojo.ServiceEventKey; import org.junit.Test; import java.time.LocalDateTime; -import static com.tencent.polaris.api.plugin.event.FlowEventConstants.EventName.LosslessOnlineStart; +import static com.tencent.polaris.api.plugin.event.EventConstants.EventName.LosslessOnlineStart; import static org.assertj.core.api.Assertions.assertThat; /** @@ -43,7 +43,7 @@ public class PushGatewayEventRequestTest { @Test public void test() throws JsonProcessingException { FlowEvent flowEvent = new FlowEvent.Builder() - .withEventType(ServiceEventKey.EventType.LOSSLESS) + .withEventType(EventConstants.EventType.LOSSLESS) .withEventName(LosslessOnlineStart) .withTimestamp(LocalDateTime.of(2025, 1, 13, 11, 58, 42)) .withClientId("test-client") diff --git a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventDataUtils.java b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventDataUtils.java index bcd340753..77bcbd59d 100644 --- a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventDataUtils.java +++ b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventDataUtils.java @@ -17,8 +17,8 @@ package com.tencent.polaris.plugins.event.tsf; -import com.tencent.polaris.api.plugin.event.FlowEvent; -import com.tencent.polaris.api.plugin.event.FlowEventConstants; +import com.tencent.polaris.api.plugin.event.BaseEvent; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.api.plugin.event.tsf.TsfEventDataConstants; import com.tencent.polaris.api.pojo.ServiceEventKey; @@ -29,7 +29,7 @@ */ public class TsfEventDataUtils { - public static String convertEventName(FlowEvent flowEvent) { + public static String convertEventName(BaseEvent flowEvent) { if (Objects.equals(flowEvent.getEventType(), ServiceEventKey.EventType.CIRCUIT_BREAKING)) { return TsfEventDataConstants.CIRCUIT_BREAKER_EVENT_NAME; } else if (Objects.equals(flowEvent.getEventType(), ServiceEventKey.EventType.RATE_LIMITING)) { @@ -38,17 +38,17 @@ public static String convertEventName(FlowEvent flowEvent) { return ""; } - public static Byte convertStatus(FlowEvent flowEvent) { - if (Objects.equals(flowEvent.getCurrentStatus(), FlowEventConstants.Status.OPEN) && - Objects.equals(flowEvent.getPreviousStatus(), FlowEventConstants.Status.CLOSE)) { + public static Byte convertStatus(BaseEvent flowEvent) { + if (Objects.equals(flowEvent.getCurrentStatus(), EventConstants.Status.OPEN) && + Objects.equals(flowEvent.getPreviousStatus(), EventConstants.Status.CLOSE)) { return TsfEventDataConstants.STATUS_TRIGGER; - } else if (Objects.equals(flowEvent.getCurrentStatus(), FlowEventConstants.Status.CLOSE) || - (Objects.equals(flowEvent.getCurrentStatus(), FlowEventConstants.Status.DESTROY) && - !Objects.equals(flowEvent.getPreviousStatus(), FlowEventConstants.Status.CLOSE))) { + } else if (Objects.equals(flowEvent.getCurrentStatus(), EventConstants.Status.CLOSE) || + (Objects.equals(flowEvent.getCurrentStatus(), EventConstants.Status.DESTROY) && + !Objects.equals(flowEvent.getPreviousStatus(), EventConstants.Status.CLOSE))) { return TsfEventDataConstants.STATUS_RECOVER; - } else if (Objects.equals(flowEvent.getCurrentStatus(), FlowEventConstants.Status.LIMITED)) { + } else if (Objects.equals(flowEvent.getCurrentStatus(), EventConstants.Status.LIMITED)) { return TsfEventDataConstants.STATUS_TRIGGER; - } else if (Objects.equals(flowEvent.getCurrentStatus(), FlowEventConstants.Status.UNLIMITED)) { + } else if (Objects.equals(flowEvent.getCurrentStatus(), EventConstants.Status.UNLIMITED)) { return TsfEventDataConstants.STATUS_RECOVER; } return -1; diff --git a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java index bf985c879..94384e590 100644 --- a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java +++ b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java @@ -28,6 +28,7 @@ import com.tencent.polaris.api.plugin.common.InitContext; import com.tencent.polaris.api.plugin.common.PluginTypes; import com.tencent.polaris.api.plugin.compose.Extensions; +import com.tencent.polaris.api.plugin.event.BaseEvent; import com.tencent.polaris.api.plugin.event.EventReporter; import com.tencent.polaris.api.plugin.event.FlowEvent; import com.tencent.polaris.api.pojo.ServiceEventKey; @@ -99,11 +100,14 @@ public boolean isEnabled() { } @Override - public boolean reportEvent(FlowEvent flowEvent) { - if (flowEvent.getEventType().equals(ServiceEventKey.EventType.CIRCUIT_BREAKING)) { - return reportV1Event(flowEvent); - } else if (flowEvent.getEventType().equals(ServiceEventKey.EventType.RATE_LIMITING)) { - return reportReportEvent(flowEvent); + public boolean reportEvent(BaseEvent baseEvent) { + if (baseEvent instanceof FlowEvent) { + if (baseEvent.getEventType().equals(ServiceEventKey.EventType.CIRCUIT_BREAKING)) { + return reportV1Event((FlowEvent) baseEvent); + } + else if (baseEvent.getEventType().equals(ServiceEventKey.EventType.RATE_LIMITING)) { + return reportReportEvent((FlowEvent) baseEvent); + } } return true; } diff --git a/polaris-ratelimit/polaris-ratelimit-client/src/main/java/com/tencent/polaris/ratelimit/client/utils/RateLimiterEventUtils.java b/polaris-ratelimit/polaris-ratelimit-client/src/main/java/com/tencent/polaris/ratelimit/client/utils/RateLimiterEventUtils.java index d5f12477e..fda1a74f2 100644 --- a/polaris-ratelimit/polaris-ratelimit-client/src/main/java/com/tencent/polaris/ratelimit/client/utils/RateLimiterEventUtils.java +++ b/polaris-ratelimit/polaris-ratelimit-client/src/main/java/com/tencent/polaris/ratelimit/client/utils/RateLimiterEventUtils.java @@ -19,9 +19,8 @@ import com.tencent.polaris.api.plugin.compose.Extensions; import com.tencent.polaris.api.plugin.event.FlowEvent; -import com.tencent.polaris.api.plugin.event.FlowEventConstants; +import com.tencent.polaris.api.plugin.event.EventConstants; import com.tencent.polaris.api.plugin.ratelimiter.QuotaResult; -import com.tencent.polaris.api.pojo.ServiceEventKey; import com.tencent.polaris.api.pojo.ServiceKey; import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.client.flow.BaseFlow; @@ -44,11 +43,11 @@ public static void reportEvent(Extensions extensions, ServiceKey serviceKey, Rat return; } - FlowEventConstants.Status currentFlowEventStatus = parseFlowEventStatus(currentCode); - FlowEventConstants.Status previousFlowEventStatus = parseFlowEventStatus(previousCode); + EventConstants.Status currentFlowEventStatus = parseFlowEventStatus(currentCode); + EventConstants.Status previousFlowEventStatus = parseFlowEventStatus(previousCode); FlowEvent.Builder flowEventBuilder = new FlowEvent.Builder() - .withEventType(ServiceEventKey.EventType.RATE_LIMITING) + .withEventType(EventConstants.EventType.RATE_LIMITING) .withEventName(parseFlowEventName(currentFlowEventStatus, previousFlowEventStatus)) .withTimestamp(LocalDateTime.now()) .withClientId(extensions.getValueContext().getClientId()) @@ -85,35 +84,35 @@ public static void reportEvent(Extensions extensions, ServiceKey serviceKey, Rat BaseFlow.reportFlowEvent(extensions, flowEvent); } - private static FlowEventConstants.Status parseFlowEventStatus(QuotaResult.Code code) { + private static EventConstants.Status parseFlowEventStatus(QuotaResult.Code code) { switch (code) { case QuotaResultOk: - return FlowEventConstants.Status.UNLIMITED; + return EventConstants.Status.UNLIMITED; case QuotaResultLimited: - return FlowEventConstants.Status.LIMITED; + return EventConstants.Status.LIMITED; default: - return FlowEventConstants.Status.UNKNOWN; + return EventConstants.Status.UNKNOWN; } } - private static FlowEventConstants.EventName parseFlowEventName(FlowEventConstants.Status currentStatus, FlowEventConstants.Status previousStatus) { - if (currentStatus == FlowEventConstants.Status.LIMITED && previousStatus == FlowEventConstants.Status.UNLIMITED) { - return FlowEventConstants.EventName.RateLimitStart; - } else if (currentStatus == FlowEventConstants.Status.UNLIMITED && previousStatus == FlowEventConstants.Status.LIMITED) { - return FlowEventConstants.EventName.RateLimitEnd; + private static EventConstants.EventName parseFlowEventName(EventConstants.Status currentStatus, EventConstants.Status previousStatus) { + if (currentStatus == EventConstants.Status.LIMITED && previousStatus == EventConstants.Status.UNLIMITED) { + return EventConstants.EventName.RateLimitStart; + } else if (currentStatus == EventConstants.Status.UNLIMITED && previousStatus == EventConstants.Status.LIMITED) { + return EventConstants.EventName.RateLimitEnd; } else { - return FlowEventConstants.EventName.UNKNOWN; + return EventConstants.EventName.UNKNOWN; } } - private static FlowEventConstants.ResourceType parseFlowEventResourceType(RateLimitProto.Rule.Resource resource) { + private static EventConstants.ResourceType parseFlowEventResourceType(RateLimitProto.Rule.Resource resource) { switch (resource) { case QPS: - return FlowEventConstants.ResourceType.QPS; + return EventConstants.ResourceType.QPS; case CONCURRENCY: - return FlowEventConstants.ResourceType.CONCURRENCY; + return EventConstants.ResourceType.CONCURRENCY; default: - return FlowEventConstants.ResourceType.UNKNOWN; + return EventConstants.ResourceType.UNKNOWN; } } } From c29db28023217a8d0c22a25fa00eb55bc44385ae Mon Sep 17 00:00:00 2001 From: shedfreewu Date: Mon, 14 Apr 2025 10:56:04 +0800 Subject: [PATCH 2/5] remove --- .../main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java | 1 - 1 file changed, 1 deletion(-) diff --git a/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java b/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java index abe58f859..eec41f548 100644 --- a/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java +++ b/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java @@ -52,7 +52,6 @@ public enum EventType { NEARBY_ROUTE_RULE, LOSSLESS, BLOCK_ALLOW_RULE, - CONFIG_UPDATED, } private final ServiceKey serviceKey; From 2f1f27c4d8362bd851089d1d4f5e0e5eff2903ab Mon Sep 17 00:00:00 2001 From: shedfreewu Date: Mon, 14 Apr 2025 11:12:57 +0800 Subject: [PATCH 3/5] fix ut --- .../configuration/client/ConfigFileTest.java | 22 ++++++++++++++----- .../client/ConfigPropertiesFileTest.java | 5 ++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigFileTest.java b/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigFileTest.java index 7ddf147ae..f5b2419f2 100644 --- a/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigFileTest.java +++ b/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigFileTest.java @@ -150,7 +150,9 @@ public void onChange(ConfigFileChangeEvent event) { } }); - configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), "hello2"); + com.tencent.polaris.api.plugin.configuration.ConfigFile newConfigFile = new com.tencent.polaris.api.plugin.configuration.ConfigFile("ns", "group", "file"); + newConfigFile.setContent("hello2"); + configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), newConfigFile); TimeUnit.MILLISECONDS.sleep(100); @@ -207,7 +209,10 @@ public void onChange(ConfigFileChangeEvent event) { } }); - configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), content); + com.tencent.polaris.api.plugin.configuration.ConfigFile newConfigFile = new com.tencent.polaris.api.plugin.configuration.ConfigFile("ns", "group", "file"); + newConfigFile.setContent(content); + + configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), newConfigFile); TimeUnit.MILLISECONDS.sleep(100); @@ -260,7 +265,10 @@ public void onChange(ConfigFileChangeEvent event) { } }); - configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), content); + com.tencent.polaris.api.plugin.configuration.ConfigFile newConfigFile = new com.tencent.polaris.api.plugin.configuration.ConfigFile("ns", "group", "file"); + newConfigFile.setContent(content); + + configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), newConfigFile); TimeUnit.MILLISECONDS.sleep(100); @@ -290,7 +298,9 @@ public void onChange(ConfigFileChangeEvent event) { }; configFile.addChangeListener(listener); - configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), content2); + com.tencent.polaris.api.plugin.configuration.ConfigFile newConfigFile = new com.tencent.polaris.api.plugin.configuration.ConfigFile("ns", "group", "file"); + newConfigFile.setContent(content2); + configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), newConfigFile); TimeUnit.MILLISECONDS.sleep(100); @@ -302,7 +312,9 @@ public void onChange(ConfigFileChangeEvent event) { configFile.removeChangeListener(listener); String content3 = "hello3"; - configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), content3); + newConfigFile = new com.tencent.polaris.api.plugin.configuration.ConfigFile("ns", "group", "file"); + newConfigFile.setContent(content3); + configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), newConfigFile); TimeUnit.MILLISECONDS.sleep(100); diff --git a/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigPropertiesFileTest.java b/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigPropertiesFileTest.java index 4f625494b..0472dfdcc 100644 --- a/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigPropertiesFileTest.java +++ b/polaris-configuration/polaris-configuration-client/src/test/java/com/tencent/polaris/configuration/client/ConfigPropertiesFileTest.java @@ -167,7 +167,10 @@ public void onChange(ConfigFileChangeEvent event) { } }); - configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), newContent); + com.tencent.polaris.api.plugin.configuration.ConfigFile newConfigFile = new com.tencent.polaris.api.plugin.configuration.ConfigFile("ns", "group", "file"); + newConfigFile.setContent(newContent); + + configFile.onChange(ConfigFileTestUtils.assembleDefaultConfigFileMeta(), newConfigFile); TimeUnit.MILLISECONDS.sleep(500); From 777c007686ee7c7b85f7de55800a84f91da8bc78 Mon Sep 17 00:00:00 2001 From: shedfreewu Date: Mon, 14 Apr 2025 11:27:14 +0800 Subject: [PATCH 4/5] fix review --- polaris-configuration/polaris-configuration-api/pom.xml | 7 ------- .../polaris/plugins/event/tsf/TsfEventReporter.java | 2 ++ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/polaris-configuration/polaris-configuration-api/pom.xml b/polaris-configuration/polaris-configuration-api/pom.xml index ebcfb060e..95c0173f8 100644 --- a/polaris-configuration/polaris-configuration-api/pom.xml +++ b/polaris-configuration/polaris-configuration-api/pom.xml @@ -20,12 +20,5 @@ polaris-client ${project.version} - - - com.tencent.polaris - polaris-plugin-api - ${project.version} - - diff --git a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java index 94384e590..68d6bc9e3 100644 --- a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java +++ b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java @@ -109,6 +109,8 @@ else if (baseEvent.getEventType().equals(ServiceEventKey.EventType.RATE_LIMITING return reportReportEvent((FlowEvent) baseEvent); } } + + LOG.debug("event {} is not supported for reporting, return true.", baseEvent); return true; } From 3790d832f99a280049268f5763444ac7f72901c6 Mon Sep 17 00:00:00 2001 From: shedfreewu Date: Mon, 14 Apr 2025 11:36:34 +0800 Subject: [PATCH 5/5] fix review --- .../tencent/polaris/plugins/event/tsf/TsfEventReporter.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java index 68d6bc9e3..6ad848fc5 100644 --- a/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java +++ b/polaris-plugins/polaris-plugins-observability/event-tsf/src/main/java/com/tencent/polaris/plugins/event/tsf/TsfEventReporter.java @@ -109,8 +109,9 @@ else if (baseEvent.getEventType().equals(ServiceEventKey.EventType.RATE_LIMITING return reportReportEvent((FlowEvent) baseEvent); } } - - LOG.debug("event {} is not supported for reporting, return true.", baseEvent); + if (LOG.isDebugEnabled()) { + LOG.debug("event {} is not supported for reporting, return true.", baseEvent); + } return true; }