From fb62025da832ba04a83b45a5437fe9728ecfe8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Tue, 26 Feb 2019 13:43:14 +0800 Subject: [PATCH] Improve OAP extendibility (#2288) * Make scope meta configurable. * Fix test cases in ci. * Change step 1 * Refactor step 2 * Other compile issue done. Prepare the generator changes. * Revert some wrong changes to Istio receiver. * Step 3, make compile pass. * Try to make CI passed. * Add a check. * Fix generated code style * Provide new and extendable dispatcher generator tool * Fix startup. * Can't guarantee the dispatchers are always existing. Put explicit comments at there to avoid confusion, since this is different with old version. * Fix a H2 query for endpoint search. * Fix a wrong mysql alarm query. * Provide new document and `generate-tool-grammer` module. * Add missing last section of document. * Fix typo * Relocate the @ScopeDeclaration annotation, make it more sense. Also remove the useless @SourceType annotation. And adjust document for these changes * ScopeDeclaration can be used once for each class only, now. --- docs/en/guides/How-to-build.md | 2 +- docs/en/guides/README.md | 7 +- docs/en/guides/source-extension.md | 63 +++++++ docs/others/cn/guides/How-to-build.md | 2 +- oap-server/generate-tool-grammar/pom.xml | 57 +++++++ .../skywalking/oal/tool/grammar/OALLexer.g4 | 0 .../skywalking/oal/tool/grammar/OALParser.g4 | 0 oap-server/generate-tool/pom.xml | 23 +-- .../org/apache/skywalking/oal/tool/Main.java | 17 ++ .../skywalking/oal/tool/meta/MetaReader.java | 34 ++++ .../oal/tool/meta/MetaSettings.java} | 14 +- .../skywalking/oal/tool/meta/ScopeMeta.java | 33 ++++ .../oal/tool/output/AllDispatcherContext.java | 28 +++ .../oal/tool/output/DispatcherContext.java | 19 +-- .../oal/tool/output/FileGenerator.java | 160 +++--------------- .../oal/tool/parser/AnalysisResult.java | 2 + .../oal/tool/parser/OALListener.java | 2 + .../oal/tool/parser/SourceColumn.java | 52 ++++++ .../oal/tool/parser/SourceColumnsFactory.java | 91 ++-------- .../DatabaseAccessDispatcherTemplate.ftl | 66 -------- ...herTemplate.ftl => DispatcherTemplate.ftl} | 16 +- .../EndpointDispatcherTemplate.ftl | 67 -------- .../EndpointRelationDispatcherTemplate.ftl | 66 -------- .../code-templates/IndicatorImplementor.ftl | 5 +- .../ServiceDispatcherTemplate.ftl | 66 -------- .../ServiceInstanceDispatcherTemplate.ftl | 66 -------- ...erviceInstanceJVMCPUDispatcherTemplate.ftl | 66 -------- ...ServiceInstanceJVMGCDispatcherTemplate.ftl | 66 -------- ...iceInstanceJVMMemoryDispatcherTemplate.ftl | 66 -------- ...nstanceJVMMemoryPoolDispatcherTemplate.ftl | 66 -------- ...viceInstanceRelationDispatcherTemplate.ftl | 66 -------- .../ServiceRelationDispatcherTemplate.ftl | 66 -------- .../oal/tool/meta/MetaReaderTest.java | 43 +++++ .../tool/meta/MockSourceColumnsFactory.java | 104 ++++++++++++ .../oal/tool/output/FileGeneratorTest.java | 12 +- .../oal/tool/parser/DeepAnalysisTest.java | 7 +- .../oal/tool/parser/ScriptParserTest.java | 18 +- .../IndicatorImplementorExpected.java | 5 +- .../src/test/resources/scope-meta.yml | 136 +++++++++++++++ .../main/resources/generator-scope-meta.yml | 136 +++++++++++++++ oap-server/pom.xml | 1 + .../core/alarm/provider/NotifyHandler.java | 10 +- .../core/alarm/provider/RunningRule.java | 7 +- .../provider/AlarmMessageFormatterTest.java | 12 +- .../core/alarm/provider/RunningRuleTest.java | 26 +-- .../alarm/provider/WebhookCallbackTest.java | 37 ++-- .../oap/server/core/CoreModuleProvider.java | 10 +- .../oap/server/core/alarm/AlarmEntrance.java | 16 +- .../oap/server/core/alarm/AlarmMessage.java | 3 +- .../oap/server/core/alarm/AlarmMeta.java | 10 +- .../oap/server/core/alarm/AlarmRecord.java | 7 +- .../core/alarm/AlarmStandardPersistence.java | 2 +- .../core/alarm/EndpointMetaInAlarm.java | 6 +- .../oap/server/core/alarm/MetaInAlarm.java | 5 +- .../alarm/ServiceInstanceMetaInAlarm.java | 6 +- .../server/core/alarm/ServiceMetaInAlarm.java | 6 +- .../core/analysis/DispatcherManager.java | 35 ++-- .../database/TopNDatabaseStatement.java | 5 +- .../EndpointRelationServerSideIndicator.java | 4 +- .../manual/segment/SegmentRecord.java | 4 +- .../ServiceRelationClientSideIndicator.java | 4 +- .../ServiceRelationServerSideIndicator.java | 4 +- .../core/annotation/AnnotationScan.java | 4 +- .../server/core/query/AlarmQueryService.java | 5 +- .../core/query/entity/AlarmMessage.java | 2 +- .../oap/server/core/query/entity/Scope.java | 57 +++++++ .../core/register/EndpointInventory.java | 7 +- .../register/NetworkAddressInventory.java | 7 +- .../register/ServiceInstanceInventory.java | 7 +- .../core/register/ServiceInventory.java | 7 +- .../register/worker/InventoryProcess.java | 20 +-- .../worker/RegisterPersistentWorker.java | 12 +- .../oap/server/core/source/All.java | 13 +- .../server/core/source/DatabaseAccess.java | 10 +- .../core/source/DatabaseSlowStatement.java | 9 +- .../core/source/DefaultScopeDefine.java | 100 +++++++++++ .../oap/server/core/source/Endpoint.java | 9 +- .../server/core/source/EndpointRelation.java | 7 +- .../{Scope.java => ScopeDeclaration.java} | 24 ++- .../oap/server/core/source/Segment.java | 9 +- .../oap/server/core/source/Service.java | 9 +- .../server/core/source/ServiceInstance.java | 9 +- .../core/source/ServiceInstanceJVMCPU.java | 9 +- .../core/source/ServiceInstanceJVMGC.java | 9 +- .../core/source/ServiceInstanceJVMMemory.java | 7 +- .../source/ServiceInstanceJVMMemoryPool.java | 7 +- .../core/source/ServiceInstanceRelation.java | 7 +- .../server/core/source/ServiceRelation.java | 7 +- .../oap/server/core/source/Source.java | 2 +- .../server/core/storage/IRegisterLockDAO.java | 5 +- .../annotation/StorageAnnotationListener.java | 21 +-- .../storage/annotation/StorageEntity.java | 6 +- .../StorageEntityAnnotationUtils.java | 5 +- .../oap/server/core/storage/model/Model.java | 10 +- .../core/storage/query/IAlarmQueryDAO.java | 5 +- .../query/graphql/resolver/AlarmQuery.java | 5 +- .../lock/RegisterLockDAOImpl.java | 5 +- .../lock/RegisterLockInstaller.java | 5 +- .../elasticsearch/query/AlarmQueryEsDAO.java | 11 +- .../plugin/jdbc/h2/dao/H2AlarmQueryDAO.java | 8 +- .../jdbc/h2/dao/H2MetadataQueryDAO.java | 2 +- .../plugin/jdbc/h2/dao/H2RegisterLockDAO.java | 9 +- .../jdbc/h2/dao/H2RegisterLockInstaller.java | 6 +- .../plugin/jdbc/mysql/MySQLAlarmQueryDAO.java | 11 +- .../jdbc/mysql/MySQLTableInstaller.java | 20 ++- .../PreventRedistributionMySQLDriverTest.java | 2 +- 106 files changed, 1264 insertions(+), 1282 deletions(-) create mode 100644 docs/en/guides/source-extension.md create mode 100644 oap-server/generate-tool-grammar/pom.xml rename oap-server/{generate-tool => generate-tool-grammar}/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4 (100%) rename oap-server/{generate-tool => generate-tool-grammar}/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4 (100%) create mode 100644 oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaReader.java rename oap-server/{server-core/src/main/java/org/apache/skywalking/oap/server/core/source/annotation/SourceType.java => generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaSettings.java} (79%) create mode 100644 oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/ScopeMeta.java create mode 100644 oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/AllDispatcherContext.java delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/DatabaseAccessDispatcherTemplate.ftl rename oap-server/generate-tool/src/main/resources/code-templates/{AllDispatcherTemplate.ftl => DispatcherTemplate.ftl} (87%) delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl delete mode 100644 oap-server/generate-tool/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl create mode 100644 oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MetaReaderTest.java create mode 100644 oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MockSourceColumnsFactory.java create mode 100644 oap-server/generate-tool/src/test/resources/scope-meta.yml create mode 100644 oap-server/generated-analysis/src/main/resources/generator-scope-meta.yml create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Scope.java create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java rename oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/{Scope.java => ScopeDeclaration.java} (58%) diff --git a/docs/en/guides/How-to-build.md b/docs/en/guides/How-to-build.md index 27f861293..80c8ccbfe 100644 --- a/docs/en/guides/How-to-build.md +++ b/docs/en/guides/How-to-build.md @@ -30,7 +30,7 @@ For each official Apache release, there is a complete and independent source cod * `grpc-java` and `java` folders in **apm-protocol/apm-network/target/generated-sources/protobuf** * `grpc-java` and `java` folders in **oap-server/server-core/target/generated-sources/protobuf** * `grpc-java` and `java` folders in **oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/target/generated-sources/protobuf** - * `antlr4` folder in **oap-server/generate-tool/target/generated-sources** + * `antlr4` folder in **oap-server/generate-tool-grammar/target/generated-sources** * `oal` folder in **oap-server/generated-analysis/target/generated-sources** ## Setup your Eclipse IDE diff --git a/docs/en/guides/README.md b/docs/en/guides/README.md index af3c1926e..7d406e8c6 100644 --- a/docs/en/guides/README.md +++ b/docs/en/guides/README.md @@ -27,7 +27,7 @@ All the following channels are open to the community, you could choose the way y As a develop, first step, read [Compiling Guide](How-to-build.md). It teaches developer how to build the project in local. ### Project Extensions -SkyWalking project supports many ways to extends existing features. If you are interesting in these ways, +SkyWalking project supports many ways to extend existing features. If you are interesting in these ways, read the following guides. - [Java agent plugin development guide](Java-Plugin-Development-Guide.md). @@ -37,6 +37,11 @@ and private plugin developer should read this. - [Storage extension development guide](storage-extention.md). Help potential contributors to build a new storage implementor besides the official. - [Customize analysis by oal script](write-oal.md). Guide you to use oal script to make your own metric available. +- [Source and scope extension for new metric](source-extension.md). If you want to analysis a new metric, which SkyWalking +haven't provide. You need to +add a new receiver rather than choosing [existed receiver](../setup/backend/backend-receivers.md). +At that moment, +you most likely need to add a new source and scope. This document will teach you how to do. - [Backend Inventory entity extension](inventory-extension.md). If you want to extend SkyWalking inventory entities, and want to push upstream back to our Apache OSS repo, please read these principles. diff --git a/docs/en/guides/source-extension.md b/docs/en/guides/source-extension.md new file mode 100644 index 000000000..8338b5e17 --- /dev/null +++ b/docs/en/guides/source-extension.md @@ -0,0 +1,63 @@ +# Source and Scope extension for new metric +From [OAL scope introduction](../concepts-and-designs/oal.md#scope), you should already have understood what the scope is. +At here, as you want to do more extension, you need understand deeper, which is the **Source**. + +**Source** and **Scope** are binding concepts. **Scope** declare the id(int) and name, **Source** declare the attributes. +Please follow these steps to create a new Source and Scope. + +1. In the OAP core module, it provide **SourceReceiver** internal service. +```java +public interface SourceReceiver extends Service { + void receive(Source source); +} +``` + +2. All analysis data must be a **org.apache.skywalking.oap.server.core.source.Source** sub class, +tagged by `@SourceType` annotation, and in `org.apache.skywalking` package. +Then it could be supported by OAL script and OAP core. + +Such as existed source, **Service**. +```java +@ScopeDeclaration(id = SERVICE, name = "Service") +public class Service extends Source { + @Override public int scope() { + return DefaultScopeDefine.SERVICE; + } + + @Override public String getEntityId() { + return String.valueOf(id); + } + + @Getter @Setter private int id; + @Getter @Setter private String name; + @Getter @Setter private String serviceInstanceName; + @Getter @Setter private String endpointName; + @Getter @Setter private int latency; + @Getter @Setter private boolean status; + @Getter @Setter private int responseCode; + @Getter @Setter private RequestType type; +} +``` + +3. The `scope()` method in Source, returns an ID, which is not a random number. This ID need to be declared through +`@ScopeDeclaration` annotation too. The ID in `@ScopeDeclaration` and ID in `scope()` method should be same for this Source. + +4. The `String getEntityId()` method in Source, requests the return value representing unique entity which the scope related. +Such as, +in this Service scope, the id is service id, representing a particular service, like `Order` service. +This value is used in [OAL group mechanism](../concepts-and-designs/oal.md#group). + +5. Add scope name as keyword to oal grammar definition file, `OALLexer.g4`, which is at `antlr4` folder of `generate-tool-grammar` module. + +6. Add scope name keyword as source in parser definition file, `OALParser.g4`, which is at same fold of `OALLexer.g4`. + +7. Set the default columns for new scope, at `generator-scope-meta.yml` file in `generated-analysis/src/main/resources`. +If you want to understand why need these columns, you have to understand all existing query(s). But there is an easy way, +follow other existing scopes. Such as, if you are adding metric, connection number for service instance, follow existing `ServiceInstance`. + +___ +After you done all of these, you could build a receiver, which do +1. Get the original data of the metric, +1. Build the source, send into `SourceReceiver`. +1. Write your whole OAL scripts. +1. Repackage the project. \ No newline at end of file diff --git a/docs/others/cn/guides/How-to-build.md b/docs/others/cn/guides/How-to-build.md index 65cb6e043..b501e69e0 100644 --- a/docs/others/cn/guides/How-to-build.md +++ b/docs/others/cn/guides/How-to-build.md @@ -30,7 +30,7 @@ * **apm-protocol/apm-network/target/generated-sources/protobuf** 文件夹下的`grpc-java` 和 `java` * **oap-server/server-core/target/generated-sources/protobuf** 文件夹下的`grpc-java` 和 `java` * **oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/target/generated-sources/protobuf** 文件夹下的`grpc-java` 和 `java` - * **oap-server/generate-tool/target/generated-sources** 文件夹下的 `antlr4` + * **oap-server/generate-tool-grammar/target/generated-sources** 文件夹下的 `antlr4` * **oap-server/generated-analysis/target/generated-sources** 文件夹下的 `oal` ## 设置Eclipse IDE diff --git a/oap-server/generate-tool-grammar/pom.xml b/oap-server/generate-tool-grammar/pom.xml new file mode 100644 index 000000000..72a35377b --- /dev/null +++ b/oap-server/generate-tool-grammar/pom.xml @@ -0,0 +1,57 @@ + + + + + + oap-server + org.apache.skywalking + 6.1.0-SNAPSHOT + + 4.0.0 + + generate-tool-grammar + + + + org.antlr + antlr4 + 4.7.1 + + + + + + + org.antlr + antlr4-maven-plugin + 4.7.1 + + + antlr + + antlr4 + + + + + + + \ No newline at end of file diff --git a/oap-server/generate-tool/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4 b/oap-server/generate-tool-grammar/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4 similarity index 100% rename from oap-server/generate-tool/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4 rename to oap-server/generate-tool-grammar/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4 diff --git a/oap-server/generate-tool/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4 b/oap-server/generate-tool-grammar/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4 similarity index 100% rename from oap-server/generate-tool/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4 rename to oap-server/generate-tool-grammar/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4 diff --git a/oap-server/generate-tool/pom.xml b/oap-server/generate-tool/pom.xml index e562a4117..538c296e8 100644 --- a/oap-server/generate-tool/pom.xml +++ b/oap-server/generate-tool/pom.xml @@ -33,6 +33,11 @@ server-core ${project.version} + + org.apache.skywalking + generate-tool-grammar + ${project.version} + org.antlr antlr4 @@ -54,22 +59,4 @@ 2.3.28 - - - - - org.antlr - antlr4-maven-plugin - 4.7.1 - - - antlr - - antlr4 - - - - - - \ No newline at end of file diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/Main.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/Main.java index 68d99b41f..3c960d721 100644 --- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/Main.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/Main.java @@ -22,17 +22,25 @@ import freemarker.template.TemplateException; import java.io.*; import java.util.List; import org.apache.skywalking.apm.util.StringUtil; +import org.apache.skywalking.oal.tool.meta.*; import org.apache.skywalking.oal.tool.output.FileGenerator; import org.apache.skywalking.oal.tool.parser.*; +import org.apache.skywalking.oap.server.core.annotation.AnnotationScan; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; public class Main { public static void main(String[] args) throws IOException, TemplateException { + AnnotationScan scopeScan = new AnnotationScan(); + scopeScan.registerListener(new DefaultScopeDefine.Listener()); + scopeScan.scan(null); + String modulePath = args[0]; String scriptFilePath = StringUtil.join(File.separatorChar, modulePath, "src", "main", "resources", "official_analysis.oal"); String outputPath = StringUtil.join(File.separatorChar, modulePath, "..", "generated-analysis", "target", "generated-sources", "oal", "org", "apache", "skywalking", "oap", "server", "core", "analysis"); + String metaFilePath = StringUtil.join(File.separatorChar, modulePath, "src", "main", "resources", "generator-scope-meta.yml"); Indicators.init(); @@ -41,6 +49,15 @@ public class Main { throw new IllegalArgumentException("OAL script file [" + scriptFilePath + "] doesn't exist"); } + File metaFile = new File(metaFilePath); + if (!metaFile.exists()) { + throw new IllegalArgumentException("Generator meta file [" + metaFilePath + "] doesn't exist"); + } + + MetaReader reader = new MetaReader(); + MetaSettings metaSettings = reader.read(new FileInputStream(metaFile)); + SourceColumnsFactory.setSettings(metaSettings); + ScriptParser scriptParser = ScriptParser.createFromFile(scriptFilePath); List analysisResults = scriptParser.parse(); diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaReader.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaReader.java new file mode 100644 index 000000000..8a0f9dee9 --- /dev/null +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaReader.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.apache.skywalking.oal.tool.meta; + +import java.io.InputStream; +import org.yaml.snakeyaml.Yaml; + +/** + * @author wusheng + */ +public class MetaReader { + public MetaSettings read(InputStream settingFileStream) { + Yaml yaml = new Yaml(); + MetaSettings settings = yaml.loadAs(settingFileStream, MetaSettings.class); + + return settings; + } +} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/annotation/SourceType.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaSettings.java similarity index 79% rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/annotation/SourceType.java rename to oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaSettings.java index e91854d91..7e5ea0a78 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/annotation/SourceType.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/MetaSettings.java @@ -16,14 +16,16 @@ * */ -package org.apache.skywalking.oap.server.core.source.annotation; +package org.apache.skywalking.oal.tool.meta; -import java.lang.annotation.*; +import java.util.List; +import lombok.*; /** - * @author peng-yongsheng + * @author wusheng */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.SOURCE) -public @interface SourceType { +@Setter +@Getter +public class MetaSettings { + private List scopes; } diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/ScopeMeta.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/ScopeMeta.java new file mode 100644 index 000000000..f027d4343 --- /dev/null +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/meta/ScopeMeta.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.apache.skywalking.oal.tool.meta; + +import java.util.*; +import lombok.*; +import org.apache.skywalking.oal.tool.parser.SourceColumn; + +/** + * @author wusheng + */ +@Setter +@Getter +public class ScopeMeta { + private String name; + private List columns = new ArrayList<>(); +} diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/AllDispatcherContext.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/AllDispatcherContext.java new file mode 100644 index 000000000..ac11fe750 --- /dev/null +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/AllDispatcherContext.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.apache.skywalking.oal.tool.output; + +import java.util.*; +import lombok.*; + +@Getter +@Setter +public class AllDispatcherContext { + private Map allContext = new HashMap<>(); +} diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java index 9a160f82c..8c8361006 100644 --- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java @@ -22,19 +22,10 @@ import java.util.*; import lombok.*; import org.apache.skywalking.oal.tool.parser.AnalysisResult; -@Getter(AccessLevel.PUBLIC) -@Setter(AccessLevel.PUBLIC) +@Getter +@Setter public class DispatcherContext { - private List allIndicators = new LinkedList<>(); - private List serviceIndicators = new LinkedList<>(); - private List serviceInstanceIndicators = new LinkedList<>(); - private List endpointIndicators = new LinkedList<>(); - private List serviceRelationIndicators = new LinkedList<>(); - private List serviceInstanceRelationIndicators = new LinkedList<>(); - private List endpointRelationIndicators = new LinkedList<>(); - private List serviceInstanceJVMCPUIndicators = new LinkedList<>(); - private List serviceInstanceJVMMemoryIndicators = new LinkedList<>(); - private List serviceInstanceJVMMemoryPoolIndicators = new LinkedList<>(); - private List serviceInstanceJVMGCIndicators = new LinkedList<>(); - private List databaseAccessIndicators = new LinkedList<>(); + private String source; + private String packageName; + private List indicators = new ArrayList<>(); } diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java index 19bb94179..469eb977c 100644 --- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java @@ -27,7 +27,7 @@ public class FileGenerator { private List results; private String outputPath; private Configuration configuration; - private DispatcherContext dispatcherContext; + private AllDispatcherContext allDispatcherContext; public FileGenerator(List results, String outputPath) { this.results = results; @@ -35,61 +35,19 @@ public class FileGenerator { configuration = new Configuration(new Version("2.3.28")); configuration.setEncoding(Locale.ENGLISH, "UTF-8"); configuration.setClassLoaderForTemplateLoading(FileGenerator.class.getClassLoader(), "/code-templates"); - this.toDispatchers(); + allDispatcherContext = new AllDispatcherContext(); + buildDispatcherContext(); } public void generate() throws IOException, TemplateException { for (AnalysisResult result : results) { generate(result, "Indicator.java", writer -> generateIndicatorImplementor(result, writer)); + + String scopeName = result.getSourceName(); + File file = new File(outputPath, "generated/" + scopeName.toLowerCase() + "/" + scopeName + "Dispatcher.java"); + createFile(file); + generateDispatcher(result, new FileWriter(file)); } - - File file = new File(outputPath, "generated/all/AllDispatcher.java"); - createFile(file); - this.generateAllDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/service/ServiceDispatcher.java"); - createFile(file); - this.generateServiceDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/databaseaccess/DatabaseAccessDispatcher.java"); - createFile(file); - this.generateDatabaseAccessDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/servicerelation/ServiceRelationDispatcher.java"); - createFile(file); - this.generateServiceRelationDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/endpoint/EndpointDispatcher.java"); - createFile(file); - this.generateEndpointDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/endpointrelation/EndpointRelationDispatcher.java"); - createFile(file); - this.generateEndpointRelationDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/serviceinstance/ServiceInstanceDispatcher.java"); - createFile(file); - this.generateServiceInstanceDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/serviceinstancerelation/ServiceInstanceRelationDispatcher.java"); - createFile(file); - this.generateServiceInstanceRelationDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/serviceinstancejvmcpu/ServiceInstanceJVMCPUDispatcher.java"); - createFile(file); - this.generateServiceInstanceJVMCPUDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java"); - createFile(file); - this.generateServiceInstanceJVMMemoryDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java"); - createFile(file); - this.generateServiceInstanceJVMMemoryPoolDispatcher(new FileWriter(file)); - - file = new File(outputPath, "generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java"); - createFile(file); - this.generateServiceInstanceJVMGCDispatcher(new FileWriter(file)); } private void generate(AnalysisResult result, String fileSuffix, @@ -123,98 +81,26 @@ public class FileGenerator { configuration.getTemplate("IndicatorImplementor.ftl").process(result, output); } - void generateAllDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("AllDispatcherTemplate.ftl").process(dispatcherContext, output); + void generateDispatcher(AnalysisResult result, Writer output) throws IOException, TemplateException { + String scopeName = result.getSourceName(); + DispatcherContext context = allDispatcherContext.getAllContext().get(scopeName); + if (context != null) { + configuration.getTemplate("DispatcherTemplate.ftl").process(context, output); + } } - void generateServiceDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateDatabaseAccessDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("DatabaseAccessDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateServiceRelationDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceRelationDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateEndpointDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("EndpointDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateEndpointRelationDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("EndpointRelationDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateServiceInstanceDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceInstanceDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateServiceInstanceRelationDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceInstanceRelationDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateServiceInstanceJVMCPUDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceInstanceJVMCPUDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateServiceInstanceJVMMemoryDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceInstanceJVMMemoryDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateServiceInstanceJVMMemoryPoolDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - void generateServiceInstanceJVMGCDispatcher(Writer output) throws IOException, TemplateException { - configuration.getTemplate("ServiceInstanceJVMGCDispatcherTemplate.ftl").process(dispatcherContext, output); - } - - private void toDispatchers() { - dispatcherContext = new DispatcherContext(); + private void buildDispatcherContext() { for (AnalysisResult result : results) { String sourceName = result.getSourceName(); - switch (sourceName) { - case "All": - dispatcherContext.getAllIndicators().add(result); - break; - case "Service": - dispatcherContext.getServiceIndicators().add(result); - break; - case "ServiceRelation": - dispatcherContext.getServiceRelationIndicators().add(result); - break; - case "ServiceInstance": - dispatcherContext.getServiceInstanceIndicators().add(result); - break; - case "ServiceInstanceRelation": - dispatcherContext.getServiceInstanceRelationIndicators().add(result); - break; - case "Endpoint": - dispatcherContext.getEndpointIndicators().add(result); - break; - case "EndpointRelation": - dispatcherContext.getEndpointRelationIndicators().add(result); - break; - case "ServiceInstanceJVMCPU": - dispatcherContext.getServiceInstanceJVMCPUIndicators().add(result); - break; - case "ServiceInstanceJVMMemory": - dispatcherContext.getServiceInstanceJVMMemoryIndicators().add(result); - break; - case "ServiceInstanceJVMMemoryPool": - dispatcherContext.getServiceInstanceJVMMemoryPoolIndicators().add(result); - break; - case "ServiceInstanceJVMGC": - dispatcherContext.getServiceInstanceJVMGCIndicators().add(result); - break; - case "DatabaseAccess": - dispatcherContext.getDatabaseAccessIndicators().add(result); - break; - default: - throw new RuntimeException("Unexpected dispatcher"); + + DispatcherContext context = allDispatcherContext.getAllContext().get(sourceName); + if (context == null) { + context = new DispatcherContext(); + context.setSource(sourceName); + context.setPackageName(sourceName.toLowerCase()); + allDispatcherContext.getAllContext().put(sourceName, context); } + context.getIndicators().add(result); } } } diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java index 37115134f..716594cf0 100644 --- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java @@ -34,6 +34,8 @@ public class AnalysisResult { private String sourceName; + private int sourceScopeId; + private String sourceAttribute; private String aggregationFunctionName; diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java index 590ecd651..2e585a33d 100644 --- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java @@ -21,6 +21,7 @@ package org.apache.skywalking.oal.tool.parser; import java.util.List; import org.antlr.v4.runtime.misc.NotNull; import org.apache.skywalking.oal.tool.grammar.*; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; public class OALListener extends OALParserBaseListener { private List results; @@ -46,6 +47,7 @@ public class OALListener extends OALParserBaseListener { @Override public void enterSource(OALParser.SourceContext ctx) { current.setSourceName(ctx.getText()); + current.setSourceScopeId(DefaultScopeDefine.valueOf(metricNameFormat(ctx.getText()))); } @Override diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumn.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumn.java index 095147f99..74a7706c2 100644 --- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumn.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumn.java @@ -18,6 +18,7 @@ package org.apache.skywalking.oal.tool.parser; +import java.util.Objects; import lombok.*; import org.apache.skywalking.oal.tool.util.ClassMethodUtil; @@ -32,6 +33,9 @@ public class SourceColumn { private String fieldSetter; private String fieldGetter; + public SourceColumn() { + } + public SourceColumn(String fieldName, String columnName, Class type, boolean isID) { this.fieldName = fieldName; this.columnName = columnName; @@ -43,6 +47,35 @@ public class SourceColumn { this.fieldSetter = ClassMethodUtil.toSetMethod(fieldName); } + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + this.fieldGetter = ClassMethodUtil.toGetMethod(fieldName); + this.fieldSetter = ClassMethodUtil.toSetMethod(fieldName); + } + + public void setTypeName(String typeName) { + switch (typeName) { + case "int": + this.type = int.class; + break; + case "long": + this.type = long.class; + break; + case "string": + case "String": + this.type = String.class; + typeName = "String"; + default: + try { + this.type = Class.forName(typeName); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + this.typeName = typeName; + } + @Override public String toString() { return "SourceColumn{" + "fieldName='" + fieldName + '\'' + @@ -51,4 +84,23 @@ public class SourceColumn { ", isID=" + isID + '}'; } + + @Override public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + SourceColumn column = (SourceColumn)o; + return isID == column.isID && + Objects.equals(fieldName, column.fieldName) && + Objects.equals(columnName, column.columnName) && + Objects.equals(type, column.type) && + Objects.equals(typeName, column.typeName) && + Objects.equals(fieldSetter, column.fieldSetter) && + Objects.equals(fieldGetter, column.fieldGetter); + } + + @Override public int hashCode() { + return Objects.hash(fieldName, columnName, type, typeName, isID, fieldSetter, fieldGetter); + } } diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java index 070e55412..7be457cbf 100644 --- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java +++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java @@ -19,85 +19,22 @@ package org.apache.skywalking.oal.tool.parser; import java.util.*; +import org.apache.skywalking.oal.tool.meta.*; +/** + * @author wusheng + */ public class SourceColumnsFactory { - public static List getColumns(String source) { - List columnList; - SourceColumn idColumn; - switch (source) { - case "All": - return new LinkedList<>(); - case "Service": - columnList = new LinkedList<>(); - // Service id; - idColumn = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(idColumn); - return columnList; - case "ServiceInstance": - columnList = new LinkedList<>(); - // Service instance id; - idColumn = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(idColumn); - SourceColumn serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false); - columnList.add(serviceIdColumn); - return columnList; - case "Endpoint": - columnList = new LinkedList<>(); - // Endpoint id; - idColumn = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(idColumn); - serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false); - columnList.add(serviceIdColumn); - SourceColumn serviceInstanceIdColumn = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false); - columnList.add(serviceInstanceIdColumn); - return columnList; - case "ServiceInstanceJVMCPU": - case "ServiceInstanceJVMMemory": - case "ServiceInstanceJVMMemoryPool": - case "ServiceInstanceJVMGC": - columnList = new LinkedList<>(); - // Service instance id; - idColumn = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(idColumn); - serviceInstanceIdColumn = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false); - columnList.add(serviceInstanceIdColumn); - return columnList; - case "ServiceRelation": - columnList = new LinkedList<>(); - SourceColumn sourceService = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(sourceService); - return columnList; - case "ServiceInstanceRelation": - columnList = new LinkedList<>(); - sourceService = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(sourceService); - sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, false); - columnList.add(sourceService); - SourceColumn destService = new SourceColumn("destServiceId", "destServiceId", int.class, false); - columnList.add(destService); + private static Map SETTINGS; - return columnList; - case "EndpointRelation": - columnList = new LinkedList<>(); - SourceColumn sourceEndpointColumn = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(sourceEndpointColumn); - sourceService = new SourceColumn("serviceId", "service_id", int.class, false); - columnList.add(sourceService); - destService = new SourceColumn("childServiceId", "child_service_id", int.class, false); - columnList.add(destService); - SourceColumn sourceServiceInstance = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false); - columnList.add(sourceServiceInstance); - SourceColumn destServiceInstance = new SourceColumn("childServiceInstanceId", "child_service_instance_id", int.class, false); - columnList.add(destServiceInstance); - return columnList; - case "DatabaseAccess": - columnList = new LinkedList<>(); - // Service id; - idColumn = new SourceColumn("entityId", "entity_id", String.class, true); - columnList.add(idColumn); - return columnList; - default: - throw new IllegalArgumentException("Illegal source :" + source); - } + public static void setSettings(MetaSettings settings) { + SourceColumnsFactory.SETTINGS = new HashMap<>(); + settings.getScopes().forEach(scope -> { + SourceColumnsFactory.SETTINGS.put(scope.getName(), scope); + }); + } + + public static List getColumns(String source) { + return SETTINGS.get(source).getColumns(); } } diff --git a/oap-server/generate-tool/src/main/resources/code-templates/DatabaseAccessDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/DatabaseAccessDispatcherTemplate.ftl deleted file mode 100644 index 7bfb7b35f..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/DatabaseAccessDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* 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 org.apache.skywalking.oap.server.core.analysis.generated.databaseaccess; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (databaseAccessIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list databaseAccessIndicators as indicator> - <#if indicator.filterExpressions??> - import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** -* This class is auto generated. Please don't change this class manually. -* -* @author Observability Analysis Language code generator -*/ -public class DatabaseAccessDispatcher implements SourceDispatcher { - - @Override public void dispatch(DatabaseAccess source) { - <#list databaseAccessIndicators as indicator> - do${indicator.metricName}(source); - - } - - <#list databaseAccessIndicators as indicator> - private void do${indicator.metricName}(DatabaseAccess source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/AllDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/DispatcherTemplate.ftl similarity index 87% rename from oap-server/generate-tool/src/main/resources/code-templates/AllDispatcherTemplate.ftl rename to oap-server/generate-tool/src/main/resources/code-templates/DispatcherTemplate.ftl index 95ff276c0..b6068cac4 100644 --- a/oap-server/generate-tool/src/main/resources/code-templates/AllDispatcherTemplate.ftl +++ b/oap-server/generate-tool/src/main/resources/code-templates/DispatcherTemplate.ftl @@ -16,12 +16,12 @@ * */ -package org.apache.skywalking.oap.server.core.analysis.generated.all; +package org.apache.skywalking.oap.server.core.analysis.generated.${packageName}; import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (allIndicators?size>0)> +<#if (indicators?size>0)> import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list allIndicators as indicator> + <#list indicators as indicator> <#if indicator.filterExpressions??> import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; <#break> @@ -35,16 +35,16 @@ import org.apache.skywalking.oap.server.core.source.*; * * @author Observability Analysis Language code generator */ -public class AllDispatcher implements SourceDispatcher { +public class ${source}Dispatcher implements SourceDispatcher<${source}> { - @Override public void dispatch(All source) { -<#list allIndicators as indicator> + @Override public void dispatch(${source} source) { +<#list indicators as indicator> do${indicator.metricName}(source); } -<#list allIndicators as indicator> - private void do${indicator.metricName}(All source) { +<#list indicators as indicator> + private void do${indicator.metricName}(${source} source) { ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); <#if indicator.filterExpressions??> diff --git a/oap-server/generate-tool/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl deleted file mode 100644 index 468100ada..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.endpoint; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (endpointIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list endpointIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class EndpointDispatcher implements SourceDispatcher { - - @Override public void dispatch(Endpoint source) { -<#list endpointIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list endpointIndicators as indicator> - private void do${indicator.metricName}(Endpoint source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl deleted file mode 100644 index 5b68f815b..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.endpointrelation; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (endpointRelationIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list endpointRelationIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class EndpointRelationDispatcher implements SourceDispatcher { - - @Override public void dispatch(EndpointRelation source) { -<#list endpointRelationIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list endpointRelationIndicators as indicator> - private void do${indicator.metricName}(EndpointRelation source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/IndicatorImplementor.ftl b/oap-server/generate-tool/src/main/resources/code-templates/IndicatorImplementor.ftl index 2562b22fd..8fe2b5a93 100644 --- a/oap-server/generate-tool/src/main/resources/code-templates/IndicatorImplementor.ftl +++ b/oap-server/generate-tool/src/main/resources/code-templates/IndicatorImplementor.ftl @@ -36,7 +36,6 @@ import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; -import org.apache.skywalking.oap.server.core.source.Scope; /** * This class is auto generated. Please don't change this class manually. @@ -45,7 +44,7 @@ import org.apache.skywalking.oap.server.core.source.Scope; */ @IndicatorType @StreamData -@StorageEntity(name = "${tableName}", builder = ${metricName}Indicator.Builder.class, source = Scope.${sourceName}) +@StorageEntity(name = "${tableName}", builder = ${metricName}Indicator.Builder.class, sourceScopeId = ${sourceScopeId}) public class ${metricName}Indicator extends ${indicatorClassName} implements AlarmSupported { <#list fieldsFromSource as sourceField> @@ -172,7 +171,7 @@ public class ${metricName}Indicator extends ${indicatorClassName} implements Ala } @Override public AlarmMeta getAlarmMeta() { - return new AlarmMeta("${varName}", Scope.${sourceName}<#if (fieldsFromSource?size>0) ><#list fieldsFromSource as field><#if field.isID()>, ${field.fieldName}); + return new AlarmMeta("${varName}", ${sourceScopeId}<#if (fieldsFromSource?size>0) ><#list fieldsFromSource as field><#if field.isID()>, ${field.fieldName}); } @Override diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl deleted file mode 100644 index 78b908dba..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.service; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceDispatcher implements SourceDispatcher { - - @Override public void dispatch(Service source) { -<#list serviceIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceIndicators as indicator> - private void do${indicator.metricName}(Service source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl deleted file mode 100644 index 9ea53a4a7..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.serviceinstance; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceInstanceIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceInstanceIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceInstanceDispatcher implements SourceDispatcher { - - @Override public void dispatch(ServiceInstance source) { -<#list serviceInstanceIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceInstanceIndicators as indicator> - private void do${indicator.metricName}(ServiceInstance source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl deleted file mode 100644 index d1d491363..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmcpu; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceInstanceJVMCPUIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceInstanceJVMCPUIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceInstanceJVMCPUDispatcher implements SourceDispatcher { - - @Override public void dispatch(ServiceInstanceJVMCPU source) { -<#list serviceInstanceJVMCPUIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceInstanceJVMCPUIndicators as indicator> - private void do${indicator.metricName}(ServiceInstanceJVMCPU source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl deleted file mode 100644 index 7ffb0b386..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceInstanceJVMGCIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceInstanceJVMGCIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceInstanceJVMGCDispatcher implements SourceDispatcher { - - @Override public void dispatch(ServiceInstanceJVMGC source) { -<#list serviceInstanceJVMGCIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceInstanceJVMGCIndicators as indicator> - private void do${indicator.metricName}(ServiceInstanceJVMGC source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl deleted file mode 100644 index 3df4b88e1..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceInstanceJVMMemoryIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceInstanceJVMMemoryIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceInstanceJVMMemoryDispatcher implements SourceDispatcher { - - @Override public void dispatch(ServiceInstanceJVMMemory source) { -<#list serviceInstanceJVMMemoryIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceInstanceJVMMemoryIndicators as indicator> - private void do${indicator.metricName}(ServiceInstanceJVMMemory source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl deleted file mode 100644 index 505e35e2b..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceInstanceJVMMemoryPoolIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceInstanceJVMMemoryPoolIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceInstanceJVMMemoryPoolDispatcher implements SourceDispatcher { - - @Override public void dispatch(ServiceInstanceJVMMemoryPool source) { -<#list serviceInstanceJVMMemoryPoolIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceInstanceJVMMemoryPoolIndicators as indicator> - private void do${indicator.metricName}(ServiceInstanceJVMMemoryPool source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl deleted file mode 100644 index c7a485ad2..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancerelation; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceInstanceRelationIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceInstanceRelationIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceInstanceRelationDispatcher implements SourceDispatcher { - - @Override public void dispatch(ServiceInstanceRelation source) { -<#list serviceInstanceRelationIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceInstanceRelationIndicators as indicator> - private void do${indicator.metricName}(ServiceInstanceRelation source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl deleted file mode 100644 index 42fd47e71..000000000 --- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 org.apache.skywalking.oap.server.core.analysis.generated.servicerelation; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (serviceRelationIndicators?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess; - <#list serviceRelationIndicators as indicator> - <#if indicator.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*; - <#break> - - - -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ServiceRelationDispatcher implements SourceDispatcher { - - @Override public void dispatch(ServiceRelation source) { -<#list serviceRelationIndicators as indicator> - do${indicator.metricName}(source); - - } - -<#list serviceRelationIndicators as indicator> - private void do${indicator.metricName}(ServiceRelation source) { - ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator(); - - <#if indicator.filterExpressions??> - <#list indicator.filterExpressions as filterExpression> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - - - - indicator.setTimeBucket(source.getTimeBucket()); - <#list indicator.fieldsFromSource as field> - indicator.${field.fieldSetter}(source.${field.fieldGetter}()); - - indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, ); - IndicatorProcess.INSTANCE.in(indicator); - } - -} diff --git a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MetaReaderTest.java b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MetaReaderTest.java new file mode 100644 index 000000000..bb1ac4ce6 --- /dev/null +++ b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MetaReaderTest.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.apache.skywalking.oal.tool.meta; + +import java.io.InputStream; +import java.util.List; +import org.apache.skywalking.oal.tool.parser.SourceColumn; +import org.junit.*; + +public class MetaReaderTest { + @Test + public void testFileParser() { + MetaReader reader = new MetaReader(); + InputStream stream = MetaReaderTest.class.getResourceAsStream("/scope-meta.yml"); + MetaSettings metaSettings = reader.read(stream); + Assert.assertNotEquals(0, metaSettings.getScopes().size()); + + metaSettings.getScopes().forEach(scopeMeta -> { + List sourceColumns = MockSourceColumnsFactory.getColumns(scopeMeta.getName()); + for (int i = 0; i < sourceColumns.size(); i++) { + SourceColumn column = scopeMeta.getColumns().get(i); + SourceColumn expected = sourceColumns.get(i); + Assert.assertEquals(expected, column); + } + }); + } +} diff --git a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MockSourceColumnsFactory.java b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MockSourceColumnsFactory.java new file mode 100644 index 000000000..593090791 --- /dev/null +++ b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/meta/MockSourceColumnsFactory.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.apache.skywalking.oal.tool.meta; + +import java.util.*; +import org.apache.skywalking.oal.tool.parser.SourceColumn; + +public class MockSourceColumnsFactory { + public static List getColumns(String source) { + List columnList; + SourceColumn idColumn; + switch (source) { + case "All": + return new LinkedList<>(); + case "Service": + columnList = new LinkedList<>(); + // Service id; + idColumn = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(idColumn); + return columnList; + case "ServiceInstance": + columnList = new LinkedList<>(); + // Service instance id; + idColumn = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(idColumn); + SourceColumn serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false); + columnList.add(serviceIdColumn); + return columnList; + case "Endpoint": + columnList = new LinkedList<>(); + // Endpoint id; + idColumn = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(idColumn); + serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false); + columnList.add(serviceIdColumn); + SourceColumn serviceInstanceIdColumn = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false); + columnList.add(serviceInstanceIdColumn); + return columnList; + case "ServiceInstanceJVMCPU": + case "ServiceInstanceJVMMemory": + case "ServiceInstanceJVMMemoryPool": + case "ServiceInstanceJVMGC": + columnList = new LinkedList<>(); + // Service instance id; + idColumn = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(idColumn); + serviceInstanceIdColumn = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false); + columnList.add(serviceInstanceIdColumn); + return columnList; + case "ServiceRelation": + columnList = new LinkedList<>(); + SourceColumn sourceService = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(sourceService); + return columnList; + case "ServiceInstanceRelation": + columnList = new LinkedList<>(); + sourceService = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(sourceService); + sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, false); + columnList.add(sourceService); + SourceColumn destService = new SourceColumn("destServiceId", "dest_service_id", int.class, false); + columnList.add(destService); + + return columnList; + case "EndpointRelation": + columnList = new LinkedList<>(); + SourceColumn sourceEndpointColumn = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(sourceEndpointColumn); + sourceService = new SourceColumn("serviceId", "service_id", int.class, false); + columnList.add(sourceService); + destService = new SourceColumn("childServiceId", "child_service_id", int.class, false); + columnList.add(destService); + SourceColumn sourceServiceInstance = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false); + columnList.add(sourceServiceInstance); + SourceColumn destServiceInstance = new SourceColumn("childServiceInstanceId", "child_service_instance_id", int.class, false); + columnList.add(destServiceInstance); + return columnList; + case "DatabaseAccess": + columnList = new LinkedList<>(); + // Service id; + idColumn = new SourceColumn("entityId", "entity_id", String.class, true); + columnList.add(idColumn); + return columnList; + default: + throw new IllegalArgumentException("Illegal sourceScopeId :" + source); + } + } +} diff --git a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java index 435de8201..1740a1df0 100644 --- a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java +++ b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java @@ -21,14 +21,24 @@ package org.apache.skywalking.oal.tool.output; import freemarker.template.TemplateException; import java.io.*; import java.util.*; +import org.apache.skywalking.oal.tool.meta.*; import org.apache.skywalking.oal.tool.parser.*; import org.junit.*; public class FileGeneratorTest { + @BeforeClass + public static void init() { + MetaReader reader = new MetaReader(); + InputStream stream = MetaReaderTest.class.getResourceAsStream("/scope-meta.yml"); + MetaSettings metaSettings = reader.read(stream); + SourceColumnsFactory.setSettings(metaSettings); + } + private AnalysisResult buildResult() { AnalysisResult result = new AnalysisResult(); result.setVarName("generate_indicator"); result.setSourceName("Service"); + result.setSourceScopeId(1); result.setPackageName("service.serviceavg"); result.setTableName("service_avg"); result.setSourceAttribute("latency"); @@ -83,7 +93,7 @@ public class FileGeneratorTest { FileGenerator fileGenerator = new FileGenerator(results, "."); StringWriter writer = new StringWriter(); - fileGenerator.generateServiceDispatcher(writer); + fileGenerator.generateDispatcher(result, writer); Assert.assertEquals(readExpectedFile("ServiceDispatcherExpected.java"), writer.toString()); //fileGenerator.generateServiceDispatcher(new OutputStreamWriter(System.out)); diff --git a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java index 837eec951..148261767 100644 --- a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java +++ b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java @@ -18,13 +18,18 @@ package org.apache.skywalking.oal.tool.parser; -import java.io.IOException; +import java.io.*; import java.util.List; +import org.apache.skywalking.oal.tool.meta.*; import org.junit.*; public class DeepAnalysisTest { @BeforeClass public static void init() throws IOException { + MetaReader reader = new MetaReader(); + InputStream stream = MetaReaderTest.class.getResourceAsStream("/scope-meta.yml"); + MetaSettings metaSettings = reader.read(stream); + SourceColumnsFactory.setSettings(metaSettings); Indicators.init(); } diff --git a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java index a62c79b46..58cb8384d 100644 --- a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java +++ b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java @@ -18,14 +18,30 @@ package org.apache.skywalking.oal.tool.parser; -import java.io.IOException; +import java.io.*; import java.util.List; +import org.apache.skywalking.oal.tool.meta.*; +import org.apache.skywalking.oap.server.core.annotation.AnnotationScan; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.junit.*; public class ScriptParserTest { @BeforeClass public static void init() throws IOException { + MetaReader reader = new MetaReader(); + InputStream stream = MetaReaderTest.class.getResourceAsStream("/scope-meta.yml"); + MetaSettings metaSettings = reader.read(stream); + SourceColumnsFactory.setSettings(metaSettings); Indicators.init(); + + AnnotationScan scopeScan = new AnnotationScan(); + scopeScan.registerListener(new DefaultScopeDefine.Listener()); + scopeScan.scan(null); + } + + @AfterClass + public static void clear() { + DefaultScopeDefine.reset(); } @Test diff --git a/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java b/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java index 5395803a2..461553be9 100644 --- a/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java +++ b/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java @@ -29,7 +29,6 @@ import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; -import org.apache.skywalking.oap.server.core.source.Scope; /** * This class is auto generated. Please don't change this class manually. @@ -38,7 +37,7 @@ import org.apache.skywalking.oap.server.core.source.Scope; */ @IndicatorType @StreamData -@StorageEntity(name = "service_avg", builder = ServiceAvgIndicator.Builder.class, source = Scope.Service) +@StorageEntity(name = "service_avg", builder = ServiceAvgIndicator.Builder.class, sourceScopeId = 1) public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSupported { @Setter @Getter @Column(columnName = "entity_id") @IDColumn private java.lang.String entityId; @@ -110,7 +109,7 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor } @Override public AlarmMeta getAlarmMeta() { - return new AlarmMeta("generate_indicator", Scope.Service, entityId); + return new AlarmMeta("generate_indicator", 1, entityId); } @Override diff --git a/oap-server/generate-tool/src/test/resources/scope-meta.yml b/oap-server/generate-tool/src/test/resources/scope-meta.yml new file mode 100644 index 000000000..004a400fb --- /dev/null +++ b/oap-server/generate-tool/src/test/resources/scope-meta.yml @@ -0,0 +1,136 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# 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. + +scopes: + - name: All + - name: Service + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - name: ServiceInstance + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceId + columnName: service_id + typeName: int + ID: false + - name: Endpoint + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceId + columnName: service_id + typeName: int + ID: false + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMCPU + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMMemory + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMMemoryPool + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMGC + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceRelation + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - name: ServiceInstanceRelation + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: sourceServiceId + columnName: source_service_id + typeName: int + ID: false + - fieldName: destServiceId + columnName: dest_service_id + typeName: int + ID: false + - name: EndpointRelation + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceId + columnName: service_id + typeName: int + ID: false + - fieldName: childServiceId + columnName: child_service_id + typeName: int + ID: false + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - fieldName: childServiceInstanceId + columnName: child_service_instance_id + typeName: int + ID: false + - name: DatabaseAccess + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true diff --git a/oap-server/generated-analysis/src/main/resources/generator-scope-meta.yml b/oap-server/generated-analysis/src/main/resources/generator-scope-meta.yml new file mode 100644 index 000000000..004a400fb --- /dev/null +++ b/oap-server/generated-analysis/src/main/resources/generator-scope-meta.yml @@ -0,0 +1,136 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# 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. + +scopes: + - name: All + - name: Service + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - name: ServiceInstance + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceId + columnName: service_id + typeName: int + ID: false + - name: Endpoint + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceId + columnName: service_id + typeName: int + ID: false + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMCPU + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMMemory + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMMemoryPool + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceInstanceJVMGC + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - name: ServiceRelation + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - name: ServiceInstanceRelation + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: sourceServiceId + columnName: source_service_id + typeName: int + ID: false + - fieldName: destServiceId + columnName: dest_service_id + typeName: int + ID: false + - name: EndpointRelation + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true + - fieldName: serviceId + columnName: service_id + typeName: int + ID: false + - fieldName: childServiceId + columnName: child_service_id + typeName: int + ID: false + - fieldName: serviceInstanceId + columnName: service_instance_id + typeName: int + ID: false + - fieldName: childServiceInstanceId + columnName: child_service_instance_id + typeName: int + ID: false + - name: DatabaseAccess + columns: + - fieldName: entityId + columnName: entity_id + typeName: java.lang.String + ID: true diff --git a/oap-server/pom.xml b/oap-server/pom.xml index f0869aebf..77bc8a4d8 100644 --- a/oap-server/pom.xml +++ b/oap-server/pom.xml @@ -40,6 +40,7 @@ generated-analysis generate-tool server-telemetry + generate-tool-grammar diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java index b0cb6655b..5aa649484 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java @@ -25,6 +25,8 @@ import org.apache.skywalking.oap.server.core.alarm.IndicatorNotify; import org.apache.skywalking.oap.server.core.alarm.MetaInAlarm; import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.*; + public class NotifyHandler implements IndicatorNotify { private final AlarmCore core; private final Rules rules; @@ -35,12 +37,12 @@ public class NotifyHandler implements IndicatorNotify { } @Override public void notify(MetaInAlarm meta, Indicator indicator) { - switch (meta.getScope()) { - case Service: + switch (meta.getScopeId()) { + case SERVICE: break; - case ServiceInstance: + case SERVICE_INSTANCE: break; - case Endpoint: + case ENDPOINT: break; default: return; diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java index dd0659d5b..bf8ac4752 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java @@ -30,7 +30,6 @@ import org.apache.skywalking.oap.server.core.analysis.indicator.DoubleValueHolde import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; import org.apache.skywalking.oap.server.core.analysis.indicator.IntValueHolder; import org.apache.skywalking.oap.server.core.analysis.indicator.LongValueHolder; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.library.util.CollectionUtils; import org.joda.time.LocalDateTime; import org.joda.time.Minutes; @@ -57,7 +56,7 @@ public class RunningRule { private final int silencePeriod; private Map windows; private volatile IndicatorValueType valueType; - private Scope targetScope; + private int targetScopeId; private List includeNames; private AlarmMessageFormatter formatter; @@ -111,7 +110,7 @@ public class RunningRule { } else { return; } - targetScope = meta.getScope(); + targetScopeId = meta.getScopeId(); } if (valueType != null) { @@ -147,7 +146,7 @@ public class RunningRule { Window window = entry.getValue(); AlarmMessage alarmMessage = window.checkAlarm(); if (alarmMessage != AlarmMessage.NONE) { - alarmMessage.setScope(meta.getScope()); + alarmMessage.setScopeId(meta.getScopeId()); alarmMessage.setName(meta.getName()); alarmMessage.setId0(meta.getId0()); alarmMessage.setId1(meta.getId1()); diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java index 02a3699ca..5d9660617 100644 --- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java +++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java @@ -19,9 +19,7 @@ package org.apache.skywalking.oap.server.core.alarm.provider; import org.apache.skywalking.oap.server.core.alarm.MetaInAlarm; -import org.apache.skywalking.oap.server.core.source.Scope; -import org.junit.Assert; -import org.junit.Test; +import org.junit.*; public class AlarmMessageFormatterTest { @Test @@ -29,8 +27,8 @@ public class AlarmMessageFormatterTest { AlarmMessageFormatter formatter = new AlarmMessageFormatter("abc words {sdf"); String message = formatter.format(new MetaInAlarm() { - @Override public Scope getScope() { - return null; + @Override public int getScopeId() { + return -1; } @Override public String getName() { @@ -58,8 +56,8 @@ public class AlarmMessageFormatterTest { AlarmMessageFormatter formatter = new AlarmMessageFormatter("abc} words {name} - {id} .. {"); String message = formatter.format(new MetaInAlarm() { - @Override public Scope getScope() { - return null; + @Override public int getScopeId() { + return -1; } @Override public String getName() { diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java index 336e6df70..371e6efe2 100644 --- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java +++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java @@ -18,22 +18,14 @@ package org.apache.skywalking.oap.server.core.alarm.provider; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import org.apache.skywalking.oap.server.core.alarm.AlarmCallback; -import org.apache.skywalking.oap.server.core.alarm.AlarmMessage; -import org.apache.skywalking.oap.server.core.alarm.MetaInAlarm; -import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; -import org.apache.skywalking.oap.server.core.analysis.indicator.IntValueHolder; +import java.util.*; +import org.apache.skywalking.oap.server.core.alarm.*; +import org.apache.skywalking.oap.server.core.analysis.indicator.*; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.junit.Assert; -import org.junit.Test; +import org.joda.time.format.*; +import org.junit.*; import org.powermock.reflect.Whitebox; /** @@ -177,7 +169,7 @@ public class RunningRuleTest { Assert.assertEquals(0, runningRule.check().size()); //check matches, no alarm runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441")); // check at 201808301441 - Assert.assertEquals(0, runningRule.check().size()); //check matches, no alarm + Assert.assertEquals(0, runningRule.check().size()); //check matches, no alarm runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301442")); // check at 201808301442 Assert.assertNotEquals(0, runningRule.check().size()); //alarm @@ -191,8 +183,8 @@ public class RunningRuleTest { private MetaInAlarm getMetaInAlarm(int id) { return new MetaInAlarm() { - @Override public Scope getScope() { - return Scope.Service; + @Override public int getScopeId() { + return DefaultScopeDefine.SERVICE; } @Override public String getName() { diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java index e3ef8b5fe..097a77fe2 100644 --- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java +++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java @@ -18,30 +18,17 @@ package org.apache.skywalking.oap.server.core.alarm.provider; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; +import com.google.gson.*; +import java.io.*; import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.List; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import java.util.*; +import javax.servlet.*; +import javax.servlet.http.*; import org.apache.skywalking.oap.server.core.alarm.AlarmMessage; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.eclipse.jetty.servlet.*; +import org.junit.*; public class WebhookCallbackTest implements Servlet { private Server server; @@ -74,12 +61,12 @@ public class WebhookCallbackTest implements Servlet { WebhookCallback webhookCallback = new WebhookCallback(remoteEndpoints); List alarmMessages = new ArrayList<>(2); AlarmMessage alarmMessage = new AlarmMessage(); - alarmMessage.setScope(Scope.All); - alarmMessage.setAlarmMessage("alarmMessage with [Scope.All]"); + alarmMessage.setScopeId(DefaultScopeDefine.ALL); + alarmMessage.setAlarmMessage("alarmMessage with [DefaultScopeDefine.All]"); alarmMessages.add(alarmMessage); AlarmMessage anotherAlarmMessage = new AlarmMessage(); - anotherAlarmMessage.setScope(Scope.Endpoint); - anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [Scope.Endpoint]"); + anotherAlarmMessage.setScopeId(DefaultScopeDefine.ENDPOINT); + anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]"); alarmMessages.add(anotherAlarmMessage); webhookCallback.doAlarm(alarmMessages); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java index f6db6329b..cb4160b2b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java @@ -85,7 +85,15 @@ public class CoreModuleProvider extends ModuleProvider { return moduleConfig; } - @Override public void prepare() throws ServiceNotProvidedException { + @Override public void prepare() throws ServiceNotProvidedException, ModuleStartException { + AnnotationScan scopeScan = new AnnotationScan(); + scopeScan.registerListener(new DefaultScopeDefine.Listener()); + try { + scopeScan.scan(null); + } catch (IOException e) { + throw new ModuleStartException(e.getMessage(), e); + } + grpcServer = new GRPCServer(moduleConfig.getGRPCHost(), moduleConfig.getGRPCPort()); if (moduleConfig.getMaxConcurrentCallsPerConnection() > 0) { grpcServer.setMaxConcurrentCallsPerConnection(moduleConfig.getMaxConcurrentCallsPerConnection()); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmEntrance.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmEntrance.java index 207ec3e0e..d673e46e5 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmEntrance.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmEntrance.java @@ -21,14 +21,12 @@ package org.apache.skywalking.oap.server.core.alarm; import java.util.concurrent.locks.ReentrantLock; import org.apache.skywalking.oap.server.core.CoreModule; import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; -import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache; -import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache; -import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache; -import org.apache.skywalking.oap.server.core.register.EndpointInventory; -import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory; -import org.apache.skywalking.oap.server.core.register.ServiceInventory; +import org.apache.skywalking.oap.server.core.cache.*; +import org.apache.skywalking.oap.server.core.register.*; import org.apache.skywalking.oap.server.library.module.ModuleManager; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.*; + /** * @author wusheng */ @@ -56,7 +54,7 @@ public class AlarmEntrance { MetaInAlarm metaInAlarm; switch (alarmMeta.getScope()) { - case Service: + case SERVICE: int serviceId = Integer.parseInt(alarmMeta.getId()); ServiceInventory serviceInventory = serviceInventoryCache.get(serviceId); ServiceMetaInAlarm serviceMetaInAlarm = new ServiceMetaInAlarm(); @@ -65,7 +63,7 @@ public class AlarmEntrance { serviceMetaInAlarm.setName(serviceInventory.getName()); metaInAlarm = serviceMetaInAlarm; break; - case ServiceInstance: + case SERVICE_INSTANCE: int serviceInstanceId = Integer.parseInt(alarmMeta.getId()); ServiceInstanceInventory serviceInstanceInventory = serviceInstanceInventoryCache.get(serviceInstanceId); ServiceInstanceMetaInAlarm instanceMetaInAlarm = new ServiceInstanceMetaInAlarm(); @@ -74,7 +72,7 @@ public class AlarmEntrance { instanceMetaInAlarm.setName(serviceInstanceInventory.getName()); metaInAlarm = instanceMetaInAlarm; break; - case Endpoint: + case ENDPOINT: int endpointId = Integer.parseInt(alarmMeta.getId()); EndpointInventory endpointInventory = endpointInventoryCache.get(endpointId); EndpointMetaInAlarm endpointMetaInAlarm = new EndpointMetaInAlarm(); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java index 051e76120..4eb1dd782 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java @@ -19,7 +19,6 @@ package org.apache.skywalking.oap.server.core.alarm; import lombok.*; -import org.apache.skywalking.oap.server.core.source.Scope; /** * Alarm message represents the details of each alarm. @@ -32,7 +31,7 @@ public class AlarmMessage { public static AlarmMessage NONE = new NoAlarm(); - private Scope scope; + private int scopeId; private String name; private int id0; private int id1; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMeta.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMeta.java index 82cc939f4..c751df0b4 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMeta.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMeta.java @@ -18,26 +18,24 @@ package org.apache.skywalking.oap.server.core.alarm; -import lombok.Getter; -import lombok.Setter; +import lombok.*; import org.apache.skywalking.oap.server.core.Const; -import org.apache.skywalking.oap.server.core.source.Scope; /** * @author wusheng */ public class AlarmMeta { @Setter @Getter private String indicatorName; - @Setter @Getter private Scope scope; + @Setter @Getter private int scope; @Setter @Getter private String id; - public AlarmMeta(String indicatorName, Scope scope) { + public AlarmMeta(String indicatorName, int scope) { this.indicatorName = indicatorName; this.scope = scope; this.id = Const.EMPTY_STRING; } - public AlarmMeta(String indicatorName, Scope scope, String id) { + public AlarmMeta(String indicatorName, int scope, String id) { this.indicatorName = indicatorName; this.scope = scope; this.id = id; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java index 9257829a2..f7abbff9c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java @@ -23,17 +23,20 @@ import lombok.*; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.analysis.record.Record; import org.apache.skywalking.oap.server.core.analysis.record.annotation.RecordType; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.*; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ALARM; + /** * @author peng-yongsheng */ @Getter @Setter @RecordType -@StorageEntity(name = AlarmRecord.INDEX_NAME, builder = AlarmRecord.Builder.class, source = Scope.Alarm) +@ScopeDeclaration(id = ALARM, name = "Alarm") +@StorageEntity(name = AlarmRecord.INDEX_NAME, builder = AlarmRecord.Builder.class, sourceScopeId = DefaultScopeDefine.ALARM) public class AlarmRecord extends Record { public static final String INDEX_NAME = "alarm_record"; 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 2fec9ae23..326affc25 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 @@ -39,7 +39,7 @@ public class AlarmStandardPersistence implements AlarmCallback { } AlarmRecord record = new AlarmRecord(); - record.setScope(message.getScope().ordinal()); + record.setScope(message.getScopeId()); record.setId0(message.getId0()); record.setId1(message.getId1()); record.setName(message.getName()); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/EndpointMetaInAlarm.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/EndpointMetaInAlarm.java index 10b859fdc..6438c68e7 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/EndpointMetaInAlarm.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/EndpointMetaInAlarm.java @@ -21,7 +21,7 @@ package org.apache.skywalking.oap.server.core.alarm; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; @Getter(AccessLevel.PUBLIC) @Setter(AccessLevel.PUBLIC) @@ -33,8 +33,8 @@ public class EndpointMetaInAlarm extends MetaInAlarm { private String[] tags; private String[] properties; - @Override public Scope getScope() { - return Scope.Endpoint; + @Override public int getScopeId() { + return DefaultScopeDefine.ENDPOINT; } @Override public int getId0() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/MetaInAlarm.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/MetaInAlarm.java index 7fe9ea2d1..0d55f07b6 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/MetaInAlarm.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/MetaInAlarm.java @@ -19,10 +19,9 @@ package org.apache.skywalking.oap.server.core.alarm; import java.util.Objects; -import org.apache.skywalking.oap.server.core.source.Scope; public abstract class MetaInAlarm { - public abstract Scope getScope(); + public abstract int getScopeId(); public abstract String getName(); @@ -30,7 +29,7 @@ public abstract class MetaInAlarm { /** * In most scopes, there is only id0, as primary id. Such as Service, Endpoint. But in relation, the ID includes - * two, actually. Such as ServiceRelation, id0 represents the source service id + * two, actually. Such as ServiceRelation, id0 represents the sourceScopeId service id * * @return the primary id. */ diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceInstanceMetaInAlarm.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceInstanceMetaInAlarm.java index 4c8862ae0..09fca3195 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceInstanceMetaInAlarm.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceInstanceMetaInAlarm.java @@ -21,7 +21,7 @@ package org.apache.skywalking.oap.server.core.alarm; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; @Getter(AccessLevel.PUBLIC) @Setter(AccessLevel.PUBLIC) @@ -33,8 +33,8 @@ public class ServiceInstanceMetaInAlarm extends MetaInAlarm { private String[] tags; private String[] properties; - @Override public Scope getScope() { - return Scope.ServiceInstance; + @Override public int getScopeId() { + return DefaultScopeDefine.SERVICE_INSTANCE; } @Override public int getId0() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceMetaInAlarm.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceMetaInAlarm.java index e8359ed77..192b118fa 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceMetaInAlarm.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/ServiceMetaInAlarm.java @@ -21,7 +21,7 @@ package org.apache.skywalking.oap.server.core.alarm; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; @Getter(AccessLevel.PUBLIC) @Setter(AccessLevel.PUBLIC) @@ -33,8 +33,8 @@ public class ServiceMetaInAlarm extends MetaInAlarm { private String[] tags; private String[] properties; - @Override public Scope getScope() { - return Scope.Service; + @Override public int getScopeId() { + return DefaultScopeDefine.SERVICE; } @Override public int getId0() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java index 61602a6aa..f84ee9db1 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java @@ -21,17 +21,11 @@ package org.apache.skywalking.oap.server.core.analysis; import com.google.common.collect.ImmutableSet; import com.google.common.reflect.ClassPath; import java.io.IOException; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.lang.reflect.*; +import java.util.*; import org.apache.skywalking.oap.server.core.UnexpectedException; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.source.Source; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.slf4j.*; /** * @author peng-yongsheng, wusheng @@ -40,7 +34,7 @@ public class DispatcherManager { private static final Logger logger = LoggerFactory.getLogger(DispatcherManager.class); - private Map> dispatcherMap; + private Map> dispatcherMap; public DispatcherManager() { this.dispatcherMap = new HashMap<>(); @@ -51,8 +45,17 @@ public class DispatcherManager { return; } - for (SourceDispatcher dispatcher : dispatcherMap.get(source.scope())) { - dispatcher.dispatch(source); + List dispatchers = dispatcherMap.get(source.scope()); + + /** + * Dispatcher is only generated by oal script analysis result. + * So these will/could be possible, the given source doesn't have the dispatcher, + * when the receiver is open, and oal script doesn't ask for analysis. + */ + if (dispatchers != null) { + for (SourceDispatcher dispatcher : dispatchers) { + dispatcher.dispatch(source); + } } } @@ -93,17 +96,17 @@ public class DispatcherManager { Source dispatcherSource = (Source)source; SourceDispatcher dispatcher = (SourceDispatcher)aClass.newInstance(); - Scope scope = dispatcherSource.scope(); + int scopeId = dispatcherSource.scope(); - List dispatchers = this.dispatcherMap.get(scope); + List dispatchers = this.dispatcherMap.get(scopeId); if (dispatchers == null) { dispatchers = new ArrayList<>(); - this.dispatcherMap.put(scope, dispatchers); + this.dispatcherMap.put(scopeId, dispatchers); } dispatchers.add(dispatcher); - logger.info("Dispatcher {} is added into Scope {}.", dispatcher.getClass().getName(), scope); + logger.info("Dispatcher {} is added into DefaultScopeDefine {}.", dispatcher.getClass().getName(), scopeId); } } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java index 245648642..7ea0ca47c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java @@ -20,10 +20,9 @@ package org.apache.skywalking.oap.server.core.analysis.manual.database; import java.util.*; import lombok.*; -import org.apache.skywalking.oap.server.core.*; import org.apache.skywalking.oap.server.core.analysis.topn.TopN; import org.apache.skywalking.oap.server.core.analysis.topn.annotation.TopNType; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; @@ -33,7 +32,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.*; * @author wusheng */ @TopNType -@StorageEntity(name = TopNDatabaseStatement.INDEX_NAME, builder = TopNDatabaseStatement.Builder.class, source = Scope.DatabaseSlowStatement) +@StorageEntity(name = TopNDatabaseStatement.INDEX_NAME, builder = TopNDatabaseStatement.Builder.class, sourceScopeId = DefaultScopeDefine.DATABASE_SLOW_STATEMENT) public class TopNDatabaseStatement extends TopN { public static final String INDEX_NAME = "top_n_database_statement"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideIndicator.java index 78d613928..3e6a1e3ac 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideIndicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideIndicator.java @@ -25,13 +25,13 @@ import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; @IndicatorType @StreamData -@StorageEntity(name = EndpointRelationServerSideIndicator.INDEX_NAME, builder = EndpointRelationServerSideIndicator.Builder.class, source = Scope.EndpointRelation) +@StorageEntity(name = EndpointRelationServerSideIndicator.INDEX_NAME, builder = EndpointRelationServerSideIndicator.Builder.class, sourceScopeId = DefaultScopeDefine.ENDPOINT_RELATION) public class EndpointRelationServerSideIndicator extends Indicator { public static final String INDEX_NAME = "endpoint_relation_server_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java index b98e774e6..ae1b56c9d 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java @@ -24,7 +24,7 @@ import org.apache.skywalking.apm.util.StringUtil; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.analysis.record.Record; import org.apache.skywalking.oap.server.core.analysis.record.annotation.RecordType; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.apache.skywalking.oap.server.library.util.CollectionUtils; @@ -33,7 +33,7 @@ import org.apache.skywalking.oap.server.library.util.CollectionUtils; * @author peng-yongsheng */ @RecordType -@StorageEntity(name = SegmentRecord.INDEX_NAME, builder = SegmentRecord.Builder.class, source = Scope.Segment) +@StorageEntity(name = SegmentRecord.INDEX_NAME, builder = SegmentRecord.Builder.class, sourceScopeId = DefaultScopeDefine.SEGMENT) public class SegmentRecord extends Record { public static final String INDEX_NAME = "segment"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationClientSideIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationClientSideIndicator.java index b0f1855d2..7e740dae3 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationClientSideIndicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationClientSideIndicator.java @@ -25,13 +25,13 @@ import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; @IndicatorType @StreamData -@StorageEntity(name = ServiceRelationClientSideIndicator.INDEX_NAME, builder = ServiceRelationClientSideIndicator.Builder.class, source = Scope.ServiceRelation) +@StorageEntity(name = ServiceRelationClientSideIndicator.INDEX_NAME, builder = ServiceRelationClientSideIndicator.Builder.class, sourceScopeId = DefaultScopeDefine.SERVICE_RELATION) public class ServiceRelationClientSideIndicator extends Indicator { public static final String INDEX_NAME = "service_relation_client_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationServerSideIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationServerSideIndicator.java index e24cc61db..3dea78023 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationServerSideIndicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/servicerelation/ServiceRelationServerSideIndicator.java @@ -25,14 +25,14 @@ import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; @IndicatorType @StreamData @StorageEntity(name = ServiceRelationServerSideIndicator.INDEX_NAME, builder = ServiceRelationServerSideIndicator.Builder.class, - source = Scope.ServiceRelation) + sourceScopeId = DefaultScopeDefine.SERVICE_RELATION) public class ServiceRelationServerSideIndicator extends Indicator { public static final String INDEX_NAME = "service_relation_server_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/annotation/AnnotationScan.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/annotation/AnnotationScan.java index 7d9cd8af8..3d70fd438 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/annotation/AnnotationScan.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/annotation/AnnotationScan.java @@ -56,7 +56,9 @@ public class AnnotationScan { listener.complete() ); - callBack.run(); + if (callBack != null) { + callBack.run(); + } } public class AnnotationListenerCache { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java index 9533cbee4..30a30aa7a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java @@ -20,7 +20,6 @@ package org.apache.skywalking.oap.server.core.query; import java.io.IOException; import org.apache.skywalking.oap.server.core.query.entity.*; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO; import org.apache.skywalking.oap.server.library.module.*; @@ -48,9 +47,9 @@ public class AlarmQueryService implements Service { return alarmQueryDAO; } - public Alarms getAlarm(final Scope scope, final String keyword, final Pagination paging, final long startTB, + public Alarms getAlarm(final Integer scopeId, final String keyword, final Pagination paging, final long startTB, final long endTB) throws IOException { PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging); - return getAlarmQueryDAO().getAlarm(scope, keyword, page.getLimit(), page.getFrom(), startTB, endTB); + return getAlarmQueryDAO().getAlarm(scopeId, keyword, page.getLimit(), page.getFrom(), startTB, endTB); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmMessage.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmMessage.java index 99bf23414..b179378a0 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmMessage.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmMessage.java @@ -19,7 +19,6 @@ package org.apache.skywalking.oap.server.core.query.entity; import lombok.*; -import org.apache.skywalking.oap.server.core.source.Scope; /** * @author peng-yongsheng @@ -28,6 +27,7 @@ import org.apache.skywalking.oap.server.core.source.Scope; @Setter public class AlarmMessage { private Scope scope; + private int scopeId; private String id; private String message; private Long startTime; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Scope.java new file mode 100644 index 000000000..be8b79335 --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Scope.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.apache.skywalking.oap.server.core.query.entity; + +import java.util.HashMap; +import lombok.Getter; +import org.apache.skywalking.oap.server.core.UnexpectedException; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; + +/** + * @author wusheng + */ +public enum Scope { + Service(DefaultScopeDefine.SERVICE), + ServiceInstance(DefaultScopeDefine.SERVICE_INSTANCE), + Endpoint(DefaultScopeDefine.ENDPOINT), + ServiceRelation(DefaultScopeDefine.SERVICE_RELATION), + ServiceInstanceRelation(DefaultScopeDefine.SERVICE_INSTANCE_RELATION), + EndpointRelation(DefaultScopeDefine.ENDPOINT_RELATION); + + @Getter + private int scopeId; + + Scope(int scopeId) { + this.scopeId = scopeId; + Finder.ALL_QUERY_SCOPES.put(scopeId, this); + } + + public static class Finder { + private static HashMap ALL_QUERY_SCOPES = new HashMap<>(); + + public static Scope valueOf(int scopeId) { + Scope scope = ALL_QUERY_SCOPES.get(scopeId); + if (scope == null) { + throw new UnexpectedException("Can't find scope id =" + scopeId); + } + return scope; + } + } + +} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java index a643623db..89e8b0b90 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java @@ -24,17 +24,20 @@ import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.register.annotation.InventoryType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.*; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.elasticsearch.common.Strings; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_INVENTORY; + /** * @author peng-yongsheng */ @InventoryType @StreamData -@StorageEntity(name = EndpointInventory.MODEL_NAME, builder = EndpointInventory.Builder.class, deleteHistory = false, source = Scope.EndpointInventory) +@ScopeDeclaration(id = ENDPOINT_INVENTORY, name = "EndpointInventory") +@StorageEntity(name = EndpointInventory.MODEL_NAME, builder = EndpointInventory.Builder.class, deleteHistory = false, sourceScopeId = DefaultScopeDefine.ENDPOINT_INVENTORY) public class EndpointInventory extends RegisterSource { public static final String MODEL_NAME = "endpoint_inventory"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java index 4572e3d71..1510c2988 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java @@ -24,17 +24,20 @@ import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.register.annotation.InventoryType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.*; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.elasticsearch.common.Strings; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.NETWORK_ADDRESS; + /** * @author peng-yongsheng */ @InventoryType @StreamData -@StorageEntity(name = NetworkAddressInventory.MODEL_NAME, builder = NetworkAddressInventory.Builder.class, deleteHistory = false, source = Scope.NetworkAddress) +@ScopeDeclaration(id = NETWORK_ADDRESS, name = "NetworkAddress") +@StorageEntity(name = NetworkAddressInventory.MODEL_NAME, builder = NetworkAddressInventory.Builder.class, deleteHistory = false, sourceScopeId = DefaultScopeDefine.NETWORK_ADDRESS) public class NetworkAddressInventory extends RegisterSource { public static final String MODEL_NAME = "network_address_inventory"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java index 196a67452..ca494397e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java @@ -26,18 +26,21 @@ import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.register.annotation.InventoryType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.*; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.apache.skywalking.oap.server.library.util.BooleanUtils; import org.elasticsearch.common.Strings; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE_INVENTORY; + /** * @author peng-yongsheng */ @InventoryType @StreamData -@StorageEntity(name = ServiceInstanceInventory.MODEL_NAME, builder = ServiceInstanceInventory.Builder.class, deleteHistory = false, source = Scope.ServiceInstanceInventory) +@ScopeDeclaration(id = SERVICE_INSTANCE_INVENTORY, name = "ServiceInstanceInventory") +@StorageEntity(name = ServiceInstanceInventory.MODEL_NAME, builder = ServiceInstanceInventory.Builder.class, deleteHistory = false, sourceScopeId = DefaultScopeDefine.SERVICE_INSTANCE_INVENTORY) public class ServiceInstanceInventory extends RegisterSource { public static final String MODEL_NAME = "service_instance_inventory"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java index f8b3546ba..bcdee423c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java @@ -25,18 +25,21 @@ import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.register.annotation.InventoryType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.*; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.apache.skywalking.oap.server.library.util.BooleanUtils; import org.elasticsearch.common.Strings; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INVENTORY; + /** * @author peng-yongsheng */ @InventoryType @StreamData -@StorageEntity(name = ServiceInventory.MODEL_NAME, builder = ServiceInventory.Builder.class, deleteHistory = false, source = Scope.ServiceInventory) +@ScopeDeclaration(id = SERVICE_INVENTORY, name = "ServiceInventory") +@StorageEntity(name = ServiceInventory.MODEL_NAME, builder = ServiceInventory.Builder.class, deleteHistory = false, sourceScopeId = DefaultScopeDefine.SERVICE_INVENTORY) public class ServiceInventory extends RegisterSource { public static final String MODEL_NAME = "service_inventory"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/InventoryProcess.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/InventoryProcess.java index cd6f35ff5..ab7e83b1f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/InventoryProcess.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/InventoryProcess.java @@ -18,20 +18,12 @@ package org.apache.skywalking.oap.server.core.register.worker; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import org.apache.skywalking.oap.server.core.UnexpectedException; import org.apache.skywalking.oap.server.core.register.RegisterSource; -import org.apache.skywalking.oap.server.core.source.Scope; -import org.apache.skywalking.oap.server.core.storage.IRegisterDAO; -import org.apache.skywalking.oap.server.core.storage.StorageBuilder; -import org.apache.skywalking.oap.server.core.storage.StorageDAO; -import org.apache.skywalking.oap.server.core.storage.StorageModule; +import org.apache.skywalking.oap.server.core.storage.*; import org.apache.skywalking.oap.server.core.storage.annotation.StorageEntityAnnotationUtils; -import org.apache.skywalking.oap.server.core.worker.WorkerIdGenerator; -import org.apache.skywalking.oap.server.core.worker.WorkerInstances; +import org.apache.skywalking.oap.server.core.worker.*; import org.apache.skywalking.oap.server.library.module.ModuleManager; /** @@ -48,7 +40,7 @@ public enum InventoryProcess { public void create(ModuleManager moduleManager, Class inventoryClass) { String modelName = StorageEntityAnnotationUtils.getModelName(inventoryClass); - Scope scope = StorageEntityAnnotationUtils.getSourceScope(inventoryClass); + int scopeId = StorageEntityAnnotationUtils.getSourceScope(inventoryClass); Class builderClass = StorageEntityAnnotationUtils.getBuilder(inventoryClass); @@ -60,7 +52,7 @@ public enum InventoryProcess { throw new UnexpectedException(""); } - RegisterPersistentWorker persistentWorker = new RegisterPersistentWorker(WorkerIdGenerator.INSTANCES.generate(), modelName, moduleManager, registerDAO, scope); + RegisterPersistentWorker persistentWorker = new RegisterPersistentWorker(WorkerIdGenerator.INSTANCES.generate(), modelName, moduleManager, registerDAO, scopeId); WorkerInstances.INSTANCES.put(persistentWorker.getWorkerId(), persistentWorker); RegisterRemoteWorker remoteWorker = new RegisterRemoteWorker(WorkerIdGenerator.INSTANCES.generate(), moduleManager, persistentWorker); @@ -73,7 +65,7 @@ public enum InventoryProcess { } /** - * @return all register source class types + * @return all register sourceScopeId class types */ public List getAllRegisterSources() { List allSources = new ArrayList<>(); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java index 2bd11e559..3cbfc93ff 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java @@ -24,7 +24,7 @@ import org.apache.skywalking.apm.commons.datacarrier.consumer.*; import org.apache.skywalking.oap.server.core.*; import org.apache.skywalking.oap.server.core.analysis.data.EndOfBatchContext; import org.apache.skywalking.oap.server.core.register.RegisterSource; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.*; import org.apache.skywalking.oap.server.core.worker.AbstractWorker; import org.apache.skywalking.oap.server.library.module.ModuleManager; @@ -37,7 +37,7 @@ public class RegisterPersistentWorker extends AbstractWorker { private static final Logger logger = LoggerFactory.getLogger(RegisterPersistentWorker.class); - private final Scope scope; + private final int scopeId; private final String modelName; private final Map sources; private final IRegisterLockDAO registerLockDAO; @@ -45,13 +45,13 @@ public class RegisterPersistentWorker extends AbstractWorker { private final DataCarrier dataCarrier; RegisterPersistentWorker(int workerId, String modelName, ModuleManager moduleManager, - IRegisterDAO registerDAO, Scope scope) { + IRegisterDAO registerDAO, int scopeId) { super(workerId); this.modelName = modelName; this.sources = new HashMap<>(); this.registerDAO = registerDAO; this.registerLockDAO = moduleManager.find(StorageModule.NAME).provider().getService(IRegisterLockDAO.class); - this.scope = scope; + this.scopeId = scopeId; this.dataCarrier = new DataCarrier<>("IndicatorPersistentWorker." + modelName, 1, 1000); String name = "REGISTER_L2"; @@ -91,7 +91,7 @@ public class RegisterPersistentWorker extends AbstractWorker { } } else { int sequence; - if ((sequence = registerLockDAO.getId(scope, registerSource)) != Const.NONE) { + if ((sequence = registerLockDAO.getId(scopeId, registerSource)) != Const.NONE) { try { dbSource = registerDAO.get(modelName, source.id()); if (Objects.nonNull(dbSource)) { @@ -106,7 +106,7 @@ public class RegisterPersistentWorker extends AbstractWorker { logger.error(t.getMessage(), t); } } else { - logger.info("{} inventory register try lock and increment sequence failure.", scope.name()); + logger.info("{} inventory register try lock and increment sequence failure.", DefaultScopeDefine.nameOf(scopeId)); } } } catch (Throwable t) { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/All.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/All.java index 0be432440..ea2830bd2 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/All.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/All.java @@ -18,17 +18,16 @@ package org.apache.skywalking.oap.server.core.source; -import lombok.Getter; -import lombok.Setter; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; +import lombok.*; -@SourceType +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ALL; + +@ScopeDeclaration(id = ALL, name = "All") public class All extends Source { - @Override public Scope scope() { - return Scope.All; + @Override public int scope() { + return DefaultScopeDefine.ALL; } - @Override public String getEntityId() { return ""; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseAccess.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseAccess.java index 0bb1e9df2..67a17fbbe 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseAccess.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseAccess.java @@ -18,17 +18,19 @@ package org.apache.skywalking.oap.server.core.source; -import lombok.Getter; -import lombok.Setter; +import lombok.*; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.DATABASE_ACCESS; /** * @author: liuhaoyang */ +@ScopeDeclaration(id = DATABASE_ACCESS, name = "DatabaseAccess") public class DatabaseAccess extends Source { @Override - public Scope scope() { - return Scope.DatabaseAccess; + public int scope() { + return DefaultScopeDefine.DATABASE_ACCESS; } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseSlowStatement.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseSlowStatement.java index 254a5e7c6..667d413bc 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseSlowStatement.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DatabaseSlowStatement.java @@ -20,12 +20,13 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; import org.apache.skywalking.oap.server.core.Const; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.DATABASE_SLOW_STATEMENT; /** * @author wusheng */ -@SourceType +@ScopeDeclaration(id = DATABASE_SLOW_STATEMENT, name = "DatabaseSlowStatement") public class DatabaseSlowStatement extends Source { @Getter @Setter private String id; @Getter @Setter private int databaseServiceId; @@ -33,8 +34,8 @@ public class DatabaseSlowStatement extends Source { @Getter @Setter private long latency; @Getter @Setter private String traceId; - @Override public Scope scope() { - return Scope.DatabaseSlowStatement; + @Override public int scope() { + return DefaultScopeDefine.DATABASE_SLOW_STATEMENT; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java new file mode 100644 index 000000000..4bf9b6d58 --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.apache.skywalking.oap.server.core.source; + +import java.lang.annotation.Annotation; +import java.util.*; +import org.apache.skywalking.oap.server.core.UnexpectedException; +import org.apache.skywalking.oap.server.core.annotation.AnnotationListener; + +/** + * @author peng-yongsheng, wusheng + */ + +public class DefaultScopeDefine { + private static final Map NAME_2_ID = new HashMap<>(); + private static final Map ID_2_NAME = new HashMap<>(); + + public static final int ALL = 0; + public static final int SERVICE = 1; + public static final int SERVICE_INSTANCE = 2; + public static final int ENDPOINT = 3; + public static final int SERVICE_RELATION = 4; + public static final int SERVICE_INSTANCE_RELATION = 5; + public static final int ENDPOINT_RELATION = 6; + public static final int NETWORK_ADDRESS = 7; + public static final int SERVICE_INSTANCE_JVM_CPU = 8; + public static final int SERVICE_INSTANCE_JVM_MEMORY = 9; + public static final int SERVICE_INSTANCE_JVM_MEMORY_POOL = 10; + public static final int SERVICE_INSTANCE_JVM_GC = 11; + public static final int SEGMENT = 12; + public static final int ALARM = 13; + public static final int SERVICE_INVENTORY = 14; + public static final int SERVICE_INSTANCE_INVENTORY = 15; + public static final int ENDPOINT_INVENTORY = 16; + public static final int DATABASE_ACCESS = 17; + public static final int DATABASE_SLOW_STATEMENT = 18; + + public static class Listener implements AnnotationListener { + @Override public Class annotation() { + return ScopeDeclaration.class; + } + + @Override public void notify(Class originalClass) { + ScopeDeclaration declaration = (ScopeDeclaration)originalClass.getAnnotation(ScopeDeclaration.class); + if (declaration != null) { + addNewScope(declaration, originalClass); + } + } + } + + public static final void addNewScope(ScopeDeclaration declaration, Class originalClass) { + int id = declaration.id(); + if (ID_2_NAME.containsKey(id)) { + throw new UnexpectedException("ScopeDeclaration id=" + id + " at " + originalClass.getName() + " has conflict with another named " + ID_2_NAME.get(id)); + } + String name = declaration.name(); + if (NAME_2_ID.containsKey(name)) { + throw new UnexpectedException("ScopeDeclaration name=" + name + " at " + originalClass.getName() + " has conflict with another id= " + NAME_2_ID.get(name)); + } + ID_2_NAME.put(id, name); + NAME_2_ID.put(name, id); + } + + public static String nameOf(int id) { + String name = ID_2_NAME.get(id); + if (name == null) { + throw new UnexpectedException("ScopeDefine id = " + id + " not found."); + } + return name; + } + + public static int valueOf(String name) { + Integer id = NAME_2_ID.get(name); + if (id == null) { + throw new UnexpectedException("ScopeDefine name = " + name + " not found."); + } + return id; + } + + public static void reset() { + NAME_2_ID.clear(); + ID_2_NAME.clear(); + } +} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java index 17e2ed78c..7879c79b6 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java @@ -19,15 +19,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT; /** * @author peng-yongsheng */ -@SourceType +@ScopeDeclaration(id = ENDPOINT, name = "Endpoint") public class Endpoint extends Source { - @Override public Scope scope() { - return Scope.Endpoint; + @Override public int scope() { + return DefaultScopeDefine.ENDPOINT; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java index 534309f07..648daec96 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java @@ -21,13 +21,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; import org.apache.skywalking.oap.server.core.Const; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_RELATION; + /** * @author peng-yongsheng */ +@ScopeDeclaration(id = ENDPOINT_RELATION, name = "EndpointRelation") public class EndpointRelation extends Source { - @Override public Scope scope() { - return Scope.EndpointRelation; + @Override public int scope() { + return DefaultScopeDefine.ENDPOINT_RELATION; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ScopeDeclaration.java similarity index 58% rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ScopeDeclaration.java index fd6629994..0f5f062d1 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ScopeDeclaration.java @@ -18,18 +18,16 @@ package org.apache.skywalking.oap.server.core.source; -/** - * @author peng-yongsheng, wusheng - */ -public enum Scope { - All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress, - ServiceInstanceJVMCPU, ServiceInstanceJVMMemory, ServiceInstanceJVMMemoryPool, ServiceInstanceJVMGC, - Segment, Alarm, ServiceInventory, ServiceInstanceInventory, EndpointInventory, DatabaseAccess, DatabaseSlowStatement; +import java.lang.annotation.*; - public static Scope valueOf(int ordinal) { - if (ordinal < 0 || ordinal >= values().length) { - throw new IndexOutOfBoundsException("Invalid ordinal"); - } - return values()[ordinal]; - } +/** + * DefaultScopeDefine id declaration. + * + * @author wusheng + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ScopeDeclaration { + int id(); + String name(); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java index 5959aeda3..041cbf6db 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java @@ -19,16 +19,17 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SEGMENT; /** * @author peng-yongsheng */ -@SourceType +@ScopeDeclaration(id = SEGMENT, name = "Segment") public class Segment extends Source { - @Override public Scope scope() { - return Scope.Segment; + @Override public int scope() { + return DefaultScopeDefine.SEGMENT; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java index f59be7a72..974596f3d 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java @@ -19,15 +19,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE; /** * @author wusheng, peng-yongsheng */ -@SourceType +@ScopeDeclaration(id = SERVICE, name = "Service") public class Service extends Source { - @Override public Scope scope() { - return Scope.Service; + @Override public int scope() { + return DefaultScopeDefine.SERVICE; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java index 4a9672704..63d71a9a7 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java @@ -19,15 +19,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE; /** * @author peng-yongsheng */ -@SourceType +@ScopeDeclaration(id = SERVICE_INSTANCE, name = "ServiceInstance") public class ServiceInstance extends Source { - @Override public Scope scope() { - return Scope.ServiceInstance; + @Override public int scope() { + return DefaultScopeDefine.SERVICE_INSTANCE; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMCPU.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMCPU.java index 4decea0a2..bbf0b49cc 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMCPU.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMCPU.java @@ -19,15 +19,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE_JVM_CPU; /** * @author peng-yongsheng */ -@SourceType +@ScopeDeclaration(id = SERVICE_INSTANCE_JVM_CPU, name = "ServiceInstanceJVMCPU") public class ServiceInstanceJVMCPU extends Source { - @Override public Scope scope() { - return Scope.ServiceInstanceJVMCPU; + @Override public int scope() { + return DefaultScopeDefine.SERVICE_INSTANCE_JVM_CPU; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMGC.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMGC.java index 865589d99..0c005bcac 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMGC.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMGC.java @@ -19,15 +19,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; -import org.apache.skywalking.oap.server.core.source.annotation.SourceType; + +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE_JVM_GC; /** * @author peng-yongsheng */ -@SourceType +@ScopeDeclaration(id = SERVICE_INSTANCE_JVM_GC, name = "ServiceInstanceJVMGC") public class ServiceInstanceJVMGC extends Source { - @Override public Scope scope() { - return Scope.ServiceInstanceJVMGC; + @Override public int scope() { + return DefaultScopeDefine.SERVICE_INSTANCE_JVM_GC; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemory.java index 37e4b984f..9688f56bf 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemory.java @@ -20,12 +20,15 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE_JVM_MEMORY; + /** * @author peng-yongsheng */ +@ScopeDeclaration(id = SERVICE_INSTANCE_JVM_MEMORY, name = "ServiceInstanceJVMMemory") public class ServiceInstanceJVMMemory extends Source { - @Override public Scope scope() { - return Scope.ServiceInstanceJVMMemory; + @Override public int scope() { + return DefaultScopeDefine.SERVICE_INSTANCE_JVM_MEMORY; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemoryPool.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemoryPool.java index b7864a835..2e009323a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemoryPool.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemoryPool.java @@ -20,12 +20,15 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE_JVM_MEMORY_POOL; + /** * @author peng-yongsheng */ +@ScopeDeclaration(id = SERVICE_INSTANCE_JVM_MEMORY_POOL, name = "ServiceInstanceJVMMemoryPool") public class ServiceInstanceJVMMemoryPool extends Source { - @Override public Scope scope() { - return Scope.ServiceInstanceJVMMemoryPool; + @Override public int scope() { + return DefaultScopeDefine.SERVICE_INSTANCE_JVM_MEMORY_POOL; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java index 07f34cb92..27d4b658b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java @@ -21,13 +21,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; import org.apache.skywalking.oap.server.core.Const; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE_RELATION; + /** * @author peng-yongsheng */ +@ScopeDeclaration(id = SERVICE_INSTANCE_RELATION, name = "ServiceInstanceRelation") public class ServiceInstanceRelation extends Source { - @Override public Scope scope() { - return Scope.ServiceInstanceRelation; + @Override public int scope() { + return DefaultScopeDefine.SERVICE_INSTANCE_RELATION; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java index f4a3a182d..1f0d62b78 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java @@ -21,13 +21,16 @@ package org.apache.skywalking.oap.server.core.source; import lombok.*; import org.apache.skywalking.oap.server.core.Const; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_RELATION; + /** * @author peng-yongsheng */ +@ScopeDeclaration(id = SERVICE_RELATION, name = "ServiceRelation") public class ServiceRelation extends Source { - @Override public Scope scope() { - return Scope.ServiceRelation; + @Override public int scope() { + return DefaultScopeDefine.SERVICE_RELATION; } @Override public String getEntityId() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Source.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Source.java index 5e6ab35c5..11e4e2268 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Source.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Source.java @@ -24,7 +24,7 @@ import lombok.*; * @author peng-yongsheng */ public abstract class Source { - public abstract Scope scope(); + public abstract int scope(); @Getter @Setter private long timeBucket; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterLockDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterLockDAO.java index 2edaa8f81..034e4da1f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterLockDAO.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterLockDAO.java @@ -19,7 +19,6 @@ package org.apache.skywalking.oap.server.core.storage; import org.apache.skywalking.oap.server.core.register.RegisterSource; -import org.apache.skywalking.oap.server.core.source.Scope; /** * Entity register and ID generator. @@ -32,8 +31,8 @@ public interface IRegisterLockDAO extends DAO { * in concurrent way, so no `sync` in method level, but the implementation must make sure the return id is unique no * matter the cluster size. * - * @param scope for the id. IDs at different scopes could be same, but unique in same scope. + * @param scopeId for the id. IDs at different scopes could be same, but unique in same scope. * @return Unique ID. */ - int getId(Scope scope, RegisterSource registerSource); + int getId(int scopeId, RegisterSource registerSource); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageAnnotationListener.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageAnnotationListener.java index e31f34721..5fd5533d3 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageAnnotationListener.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageAnnotationListener.java @@ -20,20 +20,13 @@ package org.apache.skywalking.oap.server.core.storage.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Field; -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; +import java.util.*; import lombok.Getter; import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorAnnotationUtils; import org.apache.skywalking.oap.server.core.annotation.AnnotationListener; -import org.apache.skywalking.oap.server.core.source.Scope; -import org.apache.skywalking.oap.server.core.storage.model.ColumnName; -import org.apache.skywalking.oap.server.core.storage.model.IModelGetter; -import org.apache.skywalking.oap.server.core.storage.model.IModelOverride; -import org.apache.skywalking.oap.server.core.storage.model.Model; -import org.apache.skywalking.oap.server.core.storage.model.ModelColumn; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; +import org.apache.skywalking.oap.server.core.storage.model.*; +import org.slf4j.*; /** * @author peng-yongsheng @@ -57,12 +50,14 @@ public class StorageAnnotationListener implements AnnotationListener, IModelGett String modelName = StorageEntityAnnotationUtils.getModelName(aClass); boolean deleteHistory = StorageEntityAnnotationUtils.getDeleteHistory(aClass); - Scope sourceScope = StorageEntityAnnotationUtils.getSourceScope(aClass); + int sourceScopeId = StorageEntityAnnotationUtils.getSourceScope(aClass); + // Check this scope id is valid. + DefaultScopeDefine.nameOf(sourceScopeId); List modelColumns = new LinkedList<>(); boolean isIndicator = IndicatorAnnotationUtils.isIndicator(aClass); retrieval(aClass, modelName, modelColumns); - models.add(new Model(modelName, modelColumns, isIndicator, deleteHistory, sourceScope)); + models.add(new Model(modelName, modelColumns, isIndicator, deleteHistory, sourceScopeId)); } private void retrieval(Class clazz, String modelName, List modelColumns) { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntity.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntity.java index bbbc38fc4..1b53fdd0a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntity.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntity.java @@ -19,7 +19,6 @@ package org.apache.skywalking.oap.server.core.storage.annotation; import java.lang.annotation.*; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; /** @@ -32,7 +31,10 @@ public @interface StorageEntity { Class builder(); - Scope source(); + /** + * @return scope id. + */ + int sourceScopeId(); boolean deleteHistory() default true; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntityAnnotationUtils.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntityAnnotationUtils.java index b351f20df..ecfebe4cf 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntityAnnotationUtils.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/StorageEntityAnnotationUtils.java @@ -19,7 +19,6 @@ package org.apache.skywalking.oap.server.core.storage.annotation; import org.apache.skywalking.oap.server.core.UnexpectedException; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; /** @@ -54,10 +53,10 @@ public class StorageEntityAnnotationUtils { } } - public static Scope getSourceScope(Class aClass) { + public static int getSourceScope(Class aClass) { if (aClass.isAnnotationPresent(StorageEntity.class)) { StorageEntity annotation = (StorageEntity)aClass.getAnnotation(StorageEntity.class); - return annotation.source(); + return annotation.sourceScopeId(); } else { throw new UnexpectedException(""); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/Model.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/Model.java index 07dc1c530..f847db73e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/Model.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/Model.java @@ -20,7 +20,6 @@ package org.apache.skywalking.oap.server.core.storage.model; import java.util.List; import lombok.Getter; -import org.apache.skywalking.oap.server.core.source.Scope; /** * @author peng-yongsheng @@ -31,17 +30,18 @@ public class Model { private final boolean isIndicator; private final boolean deleteHistory; private final List columns; - private final Scope source; + private final int sourceScopeId; - public Model(String name, List columns, boolean isIndicator, boolean deleteHistory, Scope source) { + public Model(String name, List columns, boolean isIndicator, boolean deleteHistory, + int sourceScopeId) { this.name = name; this.columns = columns; this.isIndicator = isIndicator; this.deleteHistory = deleteHistory; - this.source = source; + this.sourceScopeId = sourceScopeId; } public Model copy(String name) { - return new Model(name, columns, isIndicator, deleteHistory, source); + return new Model(name, columns, isIndicator, deleteHistory, sourceScopeId); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java index 0f6d4cb21..a4dcb942f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java @@ -19,8 +19,7 @@ package org.apache.skywalking.oap.server.core.storage.query; import java.io.IOException; -import org.apache.skywalking.oap.server.core.query.entity.*; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.query.entity.Alarms; import org.apache.skywalking.oap.server.core.storage.DAO; /** @@ -28,6 +27,6 @@ import org.apache.skywalking.oap.server.core.storage.DAO; */ public interface IAlarmQueryDAO extends DAO { - Alarms getAlarm(final Scope scope, final String keyword, final int limit, final int from, final long startTB, + Alarms getAlarm(final Integer scopeId, final String keyword, final int limit, final int from, final long startTB, final long endTB) throws IOException; } 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 c69b162c6..0fc3fc650 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 @@ -20,11 +20,10 @@ package org.apache.skywalking.oap.query.graphql.resolver; import com.coxautodev.graphql.tools.GraphQLQueryResolver; import java.io.IOException; -import org.apache.skywalking.oap.query.graphql.type.Duration; +import org.apache.skywalking.oap.query.graphql.type.*; import org.apache.skywalking.oap.server.core.CoreModule; import org.apache.skywalking.oap.server.core.query.*; import org.apache.skywalking.oap.server.core.query.entity.*; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.library.module.ModuleManager; /** @@ -55,6 +54,6 @@ public class AlarmQuery implements GraphQLQueryResolver { long startTimeBucket = DurationUtils.INSTANCE.startTimeDurationToSecondTimeBucket(duration.getStep(), duration.getStart()); long endTimeBucket = DurationUtils.INSTANCE.endTimeDurationToSecondTimeBucket(duration.getStep(), duration.getEnd()); - return getQueryService().getAlarm(scope, keyword, paging, startTimeBucket, endTimeBucket); + return getQueryService().getAlarm(scope.getScopeId(), keyword, paging, startTimeBucket, endTimeBucket); } } diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockDAOImpl.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockDAOImpl.java index 3f7fdd066..a7b383073 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockDAOImpl.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockDAOImpl.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.util.Map; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.register.RegisterSource; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.IRegisterLockDAO; import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient; import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.EsDAO; @@ -41,8 +40,8 @@ public class RegisterLockDAOImpl extends EsDAO implements IRegisterLockDAO { super(client); } - @Override public int getId(Scope scope, RegisterSource registerSource) { - String id = String.valueOf(scope.ordinal()); + @Override public int getId(int scopeId, RegisterSource registerSource) { + String id = scopeId + ""; int sequence = Const.NONE; try { diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockInstaller.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockInstaller.java index cf6d253b0..72ff4f0d7 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockInstaller.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/lock/RegisterLockInstaller.java @@ -20,7 +20,6 @@ package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.lock; import java.io.IOException; import org.apache.skywalking.oap.server.core.register.worker.InventoryProcess; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageException; import org.apache.skywalking.oap.server.core.storage.annotation.StorageEntityAnnotationUtils; import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient; @@ -56,8 +55,8 @@ public class RegisterLockInstaller { } for (Class registerSource : InventoryProcess.INSTANCE.getAllRegisterSources()) { - Scope sourceScope = StorageEntityAnnotationUtils.getSourceScope(registerSource); - putIfAbsent(sourceScope.ordinal()); + int sourceScopeId = StorageEntityAnnotationUtils.getSourceScope(registerSource); + putIfAbsent(sourceScopeId); } } catch (IOException e) { throw new StorageException(e.getMessage()); diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java index 24272ecff..5db788d28 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java @@ -23,7 +23,6 @@ import java.io.IOException; import java.util.Objects; import org.apache.skywalking.oap.server.core.alarm.AlarmRecord; import org.apache.skywalking.oap.server.core.query.entity.*; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO; import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient; import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.*; @@ -41,15 +40,16 @@ public class AlarmQueryEsDAO extends EsDAO implements IAlarmQueryDAO { super(client); } - public Alarms getAlarm(final Scope scope, final String keyword, final int limit, final int from, final long startTB, + public Alarms getAlarm(final Integer scopeId, final String keyword, final int limit, final int from, + final long startTB, final long endTB) throws IOException { SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must().add(QueryBuilders.rangeQuery(AlarmRecord.TIME_BUCKET).gte(startTB).lte(endTB)); - if (Objects.nonNull(scope)) { - boolQueryBuilder.must().add(QueryBuilders.termQuery(AlarmRecord.SCOPE, scope.ordinal())); + if (Objects.nonNull(scopeId)) { + boolQueryBuilder.must().add(QueryBuilders.termQuery(AlarmRecord.SCOPE, scopeId.intValue())); } if (!Strings.isNullOrEmpty(keyword)) { @@ -74,7 +74,8 @@ public class AlarmQueryEsDAO extends EsDAO implements IAlarmQueryDAO { message.setId(String.valueOf(alarmRecord.getId0())); message.setMessage(alarmRecord.getAlarmMessage()); message.setStartTime(alarmRecord.getStartTime()); - message.setScope(Scope.valueOf(alarmRecord.getScope())); + message.setScope(Scope.Finder.valueOf(alarmRecord.getScope())); + message.setScopeId(alarmRecord.getScope()); alarms.getMsgs().add(message); } return alarms; diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AlarmQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AlarmQueryDAO.java index 1fa18f9ba..dc8a4011d 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AlarmQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AlarmQueryDAO.java @@ -23,7 +23,6 @@ import java.sql.*; import java.util.*; import org.apache.skywalking.oap.server.core.alarm.AlarmRecord; import org.apache.skywalking.oap.server.core.query.entity.*; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO; import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient; import org.elasticsearch.common.Strings; @@ -39,13 +38,15 @@ public class H2AlarmQueryDAO implements IAlarmQueryDAO { } @Override - public Alarms getAlarm(Scope scope, String keyword, int limit, int from, long startTB, + public Alarms getAlarm(Integer scopeId, String keyword, int limit, int from, long startTB, long endTB) throws IOException { StringBuilder sql = new StringBuilder(); List parameters = new ArrayList<>(10); sql.append("from ").append(AlarmRecord.INDEX_NAME).append(" where "); sql.append(" 1=1 "); + sql.append(" and ").append(AlarmRecord.SCOPE).append(" = ?"); + parameters.add(scopeId.intValue()); if (startTB != 0 && endTB != 0) { sql.append(" and ").append(AlarmRecord.TIME_BUCKET).append(" >= ?"); parameters.add(startTB); @@ -75,7 +76,8 @@ public class H2AlarmQueryDAO implements IAlarmQueryDAO { message.setId(resultSet.getString(AlarmRecord.ID0)); message.setMessage(resultSet.getString(AlarmRecord.ALARM_MESSAGE)); message.setStartTime(resultSet.getLong(AlarmRecord.START_TIME)); - message.setScope(Scope.valueOf(resultSet.getInt(AlarmRecord.SCOPE))); + message.setScope(Scope.Finder.valueOf(resultSet.getInt(AlarmRecord.SCOPE))); + message.setScopeId(resultSet.getInt(AlarmRecord.SCOPE)); alarms.getMsgs().add(message); } diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java index 12aabeb4b..1f235a7cd 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java @@ -217,7 +217,7 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO { sql.append(EndpointInventory.SERVICE_ID).append("=?"); condition.add(serviceId); if (!Strings.isNullOrEmpty(keyword)) { - sql.append(" and ").append(EndpointInventory.NAME).append(" like \"%").append(keyword).append("%\" "); + sql.append(" and ").append(EndpointInventory.NAME).append(" like '%").append(keyword).append("%' "); } sql.append(" and ").append(EndpointInventory.DETECT_POINT).append(" = ?"); condition.add(DetectPoint.SERVER.ordinal()); diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockDAO.java index 1e3f20483..91b63dacd 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockDAO.java @@ -21,7 +21,6 @@ package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao; import java.sql.*; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.register.RegisterSource; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.IRegisterLockDAO; import org.apache.skywalking.oap.server.library.client.jdbc.JDBCClientException; import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient; @@ -42,18 +41,18 @@ public class H2RegisterLockDAO implements IRegisterLockDAO { this.h2Client = h2Client; } - @Override public int getId(Scope scope, RegisterSource registerSource) { + @Override public int getId(int scopeId, RegisterSource registerSource) { try (Connection connection = h2Client.getTransactionConnection()) { - ResultSet resultSet = h2Client.executeQuery(connection, "select sequence from " + H2RegisterLockInstaller.LOCK_TABLE_NAME + " where id = " + scope.ordinal() + " for update"); + ResultSet resultSet = h2Client.executeQuery(connection, "select sequence from " + H2RegisterLockInstaller.LOCK_TABLE_NAME + " where id = " + scopeId + " for update"); while (resultSet.next()) { int sequence = resultSet.getInt("sequence"); sequence++; - h2Client.execute(connection, "update " + H2RegisterLockInstaller.LOCK_TABLE_NAME + " set sequence = " + sequence + " where id = " + scope.ordinal()); + h2Client.execute(connection, "update " + H2RegisterLockInstaller.LOCK_TABLE_NAME + " set sequence = " + sequence + " where id = " + scopeId); connection.commit(); return sequence; } } catch (JDBCClientException | SQLException e) { - logger.error("try inventory register lock for scope id={} name={} failure.", scope.ordinal(), scope.name()); + logger.error("try inventory register lock for scope id={} name={} failure.", scopeId, scopeId); logger.error("tryLock error", e); return Const.NONE; } diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockInstaller.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockInstaller.java index 572ba0c04..21c5cf8b6 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockInstaller.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockInstaller.java @@ -20,7 +20,7 @@ package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao; import java.sql.*; import org.apache.skywalking.oap.server.core.register.worker.InventoryProcess; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.StorageException; import org.apache.skywalking.oap.server.core.storage.annotation.StorageEntityAnnotationUtils; import org.apache.skywalking.oap.server.library.client.Client; @@ -60,8 +60,8 @@ public class H2RegisterLockInstaller { h2Client.execute(connection, tableCreateSQL.toString()); for (Class registerSource : InventoryProcess.INSTANCE.getAllRegisterSources()) { - Scope sourceScope = StorageEntityAnnotationUtils.getSourceScope(registerSource); - putIfAbsent(h2Client, connection, sourceScope.ordinal(), sourceScope.name()); + int scopeId = StorageEntityAnnotationUtils.getSourceScope(registerSource); + putIfAbsent(h2Client, connection, scopeId, DefaultScopeDefine.nameOf(scopeId)); } } catch (JDBCClientException | SQLException e) { throw new StorageException(e.getMessage(), e); diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLAlarmQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLAlarmQueryDAO.java index 582a01e9e..3c6719643 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLAlarmQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLAlarmQueryDAO.java @@ -23,7 +23,6 @@ import java.sql.*; import java.util.*; import org.apache.skywalking.oap.server.core.alarm.AlarmRecord; import org.apache.skywalking.oap.server.core.query.entity.*; -import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO; import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient; import org.elasticsearch.common.Strings; @@ -39,14 +38,15 @@ public class MySQLAlarmQueryDAO implements IAlarmQueryDAO { } @Override - public Alarms getAlarm(Scope scope, String keyword, int limit, int from, long startTB, + public Alarms getAlarm(Integer scopeId, String keyword, int limit, int from, long startTB, long endTB) throws IOException { StringBuilder sql = new StringBuilder(); List parameters = new ArrayList<>(10); sql.append("from ").append(AlarmRecord.INDEX_NAME).append(" where "); - sql.append(" scope = ?"); - parameters.add(scope.ordinal()); + sql.append(" 1=1 "); + sql.append(" and ").append(AlarmRecord.SCOPE).append(" = ?"); + parameters.add(scopeId.intValue()); if (startTB != 0 && endTB != 0) { sql.append(" and ").append(AlarmRecord.TIME_BUCKET).append(" >= ?"); parameters.add(startTB); @@ -76,7 +76,8 @@ public class MySQLAlarmQueryDAO implements IAlarmQueryDAO { message.setId(resultSet.getString(AlarmRecord.ID0)); message.setMessage(resultSet.getString(AlarmRecord.ALARM_MESSAGE)); message.setStartTime(resultSet.getLong(AlarmRecord.START_TIME)); - message.setScope(Scope.valueOf(resultSet.getInt(AlarmRecord.SCOPE))); + message.setScope(Scope.Finder.valueOf(resultSet.getInt(AlarmRecord.SCOPE))); + message.setScopeId(resultSet.getInt(AlarmRecord.SCOPE)); alarms.getMsgs().add(message); } diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java index eeced149f..a54216eac 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java @@ -23,7 +23,7 @@ import java.sql.SQLException; import org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray; import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord; import org.apache.skywalking.oap.server.core.register.RegisterSource; -import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.core.storage.StorageException; import org.apache.skywalking.oap.server.core.storage.model.ColumnName; import org.apache.skywalking.oap.server.core.storage.model.Model; @@ -36,6 +36,8 @@ import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2TableInstal import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.*; + /** * Extend H2TableInstaller but match MySQL SQL syntax. * @@ -77,7 +79,7 @@ public class MySQLTableInstaller extends H2TableInstaller { } else if (Double.class.equals(type) || double.class.equals(type)) { return "DOUBLE"; } else if (String.class.equals(type)) { - if (Scope.Segment.equals(model.getSource())) { + if (DefaultScopeDefine.SEGMENT == model.getSourceScopeId()) { if (name.getName().equals(SegmentRecord.TRACE_ID) || name.getName().equals(SegmentRecord.SEGMENT_ID)) return "VARCHAR(300)"; } @@ -92,17 +94,17 @@ public class MySQLTableInstaller extends H2TableInstaller { } protected void createIndexes(JDBCHikariCPClient client, Model model) throws StorageException { - switch (model.getSource()) { - case ServiceInventory: - case ServiceInstanceInventory: - case NetworkAddress: - case EndpointInventory: + switch (model.getSourceScopeId()) { + case SERVICE_INVENTORY: + case SERVICE_INSTANCE_INVENTORY: + case NETWORK_ADDRESS: + case ENDPOINT_INVENTORY: createInventoryIndexes(client, model); return; - case Segment: + case SEGMENT: createSegmentIndexes(client, model); return; - case Alarm: + case ALARM: createAlarmIndexes(client, model); return; default: diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/PreventRedistributionMySQLDriverTest.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/PreventRedistributionMySQLDriverTest.java index 77db0fe6b..dbc13db58 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/PreventRedistributionMySQLDriverTest.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/PreventRedistributionMySQLDriverTest.java @@ -23,7 +23,7 @@ import org.junit.Test; /** * This is a very special test case. It isn't for feature testing. * - * In Apache, we can't redistribute MySQL Driver, because of GPL license, but we deliver MySQL solution source codes and + * In Apache, we can't redistribute MySQL Driver, because of GPL license, but we deliver MySQL solution sourceScopeId codes and * distribution by using JDBC. * * @author wusheng