From 7bbe0693b4621e34273844766897a2281f120abf Mon Sep 17 00:00:00 2001 From: wu-sheng Date: Tue, 31 Oct 2017 09:41:40 +0800 Subject: [PATCH] Make service instrument works --- .../collector/core/module/ModuleManager.java | 2 +- .../module/instrument/MetricCollector.java | 28 +++++++++++++++++++ .../instrument/ServiceInstrumentation.java | 5 +++- .../core/module/ModuleABusiness1Impl.java | 28 +++++++++++++++++++ .../core/module/ModuleABusiness2Impl.java | 26 +++++++++++++++++ .../core/module/ModuleAProvider.java | 14 ++-------- .../core/module/ModuleBBusiness1Impl.java | 25 +++++++++++++++++ .../core/module/ModuleBBusiness2Impl.java | 25 +++++++++++++++++ .../core/module/ModuleBProvider.java | 12 ++------ .../core/module/ModuleManagerTest.java | 15 +++++----- 10 files changed, 148 insertions(+), 32 deletions(-) create mode 100644 apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/MetricCollector.java create mode 100644 apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness1Impl.java create mode 100644 apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness2Impl.java create mode 100644 apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness1Impl.java create mode 100644 apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness2Impl.java diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java index 838b564e52..fc78ce3c2d 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java @@ -31,7 +31,7 @@ import java.util.ServiceLoader; */ public class ModuleManager { private Map loadedModules = new HashMap<>(); - private boolean isServiceInstrument = false; + private boolean isServiceInstrument = true; /** * Init the given modules diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/MetricCollector.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/MetricCollector.java new file mode 100644 index 0000000000..f0053ee270 --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/MetricCollector.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.module.instrument; + +/** + * The MetricCollector collects the service metrics by Module/Provider/Service structure. + */ +public enum MetricCollector { + INSTANCE; + + +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/ServiceInstrumentation.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/ServiceInstrumentation.java index 1b85a8b6c6..a33b1b6956 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/ServiceInstrumentation.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/instrument/ServiceInstrumentation.java @@ -31,6 +31,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; /** + * The ServiceInstrumentation create the dynamic service implementations based on the provider + * implementation. So the new implementation will report performance metric to {@link MetricCollector}. + * * @author wu-sheng */ public enum ServiceInstrumentation { @@ -40,7 +43,7 @@ public enum ServiceInstrumentation { private ElementMatcher excludeObjectMethodsMatcher; public Service buildServiceUnderMonitor(Service implementation) { - if (TracedService.class.isInstance(implementation)) { + if (implementation instanceof TracedService) { // Duplicate service instrument, ignore. return implementation; } diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness1Impl.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness1Impl.java new file mode 100644 index 0000000000..407bc31c62 --- /dev/null +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness1Impl.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.module; + +/** + * @author wu-sheng + */ +public class ModuleABusiness1Impl implements BaseModuleA.ServiceABusiness1 { + + @Override public void print() { + } +} diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness2Impl.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness2Impl.java new file mode 100644 index 0000000000..36565861be --- /dev/null +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleABusiness2Impl.java @@ -0,0 +1,26 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.module; + +/** + * @author wu-sheng + */ +public class ModuleABusiness2Impl implements BaseModuleA.ServiceABusiness2 { + +} diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java index 4fcf782797..332af247c6 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java @@ -33,11 +33,11 @@ public class ModuleAProvider extends ModuleProvider { } @Override public void prepare(Properties config) throws ServiceNotProvidedException { - this.registerServiceImplementation(BaseModuleA.ServiceABusiness1.class, new Business1()); + this.registerServiceImplementation(BaseModuleA.ServiceABusiness1.class, new ModuleABusiness1Impl()); } @Override public void start(Properties config) throws ServiceNotProvidedException { - this.registerServiceImplementation(BaseModuleA.ServiceABusiness2.class, new Business2()); + this.registerServiceImplementation(BaseModuleA.ServiceABusiness2.class, new ModuleABusiness2Impl()); } @Override public void notifyAfterCompleted() throws ServiceNotProvidedException { @@ -47,14 +47,4 @@ public class ModuleAProvider extends ModuleProvider { @Override public String[] requiredModules() { return new String[0]; } - - public class Business1 implements BaseModuleA.ServiceABusiness1 { - - @Override public void print() { - } - } - - public class Business2 implements BaseModuleA.ServiceABusiness2 { - - } } diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness1Impl.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness1Impl.java new file mode 100644 index 0000000000..f5e017da45 --- /dev/null +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness1Impl.java @@ -0,0 +1,25 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.module; + +/** + * @author wu-sheng + */ +public class ModuleBBusiness1Impl implements BaseModuleB.ServiceBBusiness1 { +} diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness2Impl.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness2Impl.java new file mode 100644 index 0000000000..a0af96a89f --- /dev/null +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBBusiness2Impl.java @@ -0,0 +1,25 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.module; + +/** + * @author wu-sheng + */ +public class ModuleBBusiness2Impl implements BaseModuleB.ServiceBBusiness2 { +} diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBProvider.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBProvider.java index d846028573..3b5066340e 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBProvider.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleBProvider.java @@ -33,11 +33,11 @@ public class ModuleBProvider extends ModuleProvider { } @Override public void prepare(Properties config) throws ServiceNotProvidedException { - this.registerServiceImplementation(BaseModuleB.ServiceBBusiness1.class, new Business1()); + this.registerServiceImplementation(BaseModuleB.ServiceBBusiness1.class, new ModuleBBusiness1Impl()); } @Override public void start(Properties config) throws ServiceNotProvidedException { - this.registerServiceImplementation(BaseModuleB.ServiceBBusiness2.class, new Business2()); + this.registerServiceImplementation(BaseModuleB.ServiceBBusiness2.class, new ModuleBBusiness2Impl()); } @Override public void notifyAfterCompleted() throws ServiceNotProvidedException { @@ -47,12 +47,4 @@ public class ModuleBProvider extends ModuleProvider { @Override public String[] requiredModules() { return new String[0]; } - - public class Business1 implements BaseModuleB.ServiceBBusiness1 { - - } - - public class Business2 implements BaseModuleB.ServiceBBusiness2 { - - } } diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java index 0874c9569a..d31164d865 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java @@ -30,29 +30,28 @@ public class ModuleManagerTest { public void testInit() throws ServiceNotProvidedException, ModuleNotFoundException, ProviderNotFoundException, DuplicateProviderException { ApplicationConfiguration configuration = new ApplicationConfiguration(); configuration.addModule("Test").addProviderConfiguration("TestModule-Provider", null); - configuration.addModule("BaseA").addProviderConfiguration("P-A",null); - configuration.addModule("BaseB").addProviderConfiguration("P-B",null); + configuration.addModule("BaseA").addProviderConfiguration("P-A", null); + configuration.addModule("BaseB").addProviderConfiguration("P-B", null); ModuleManager manager = new ModuleManager(); manager.init(configuration); BaseModuleA.ServiceABusiness1 serviceABusiness1 = manager.find("BaseA").provider().getService(BaseModuleA.ServiceABusiness1.class); - serviceABusiness1.print(); + Assert.assertTrue(serviceABusiness1 != null); } - //@Test + @Test public void testInstrument() throws ServiceNotProvidedException, ModuleNotFoundException, ProviderNotFoundException, DuplicateProviderException { ApplicationConfiguration configuration = new ApplicationConfiguration(); configuration.addModule("Test").addProviderConfiguration("TestModule-Provider", null); - configuration.addModule("BaseA").addProviderConfiguration("P-A",null); - configuration.addModule("BaseB").addProviderConfiguration("P-B",null); + configuration.addModule("BaseA").addProviderConfiguration("P-A", null); + configuration.addModule("BaseB").addProviderConfiguration("P-B", null); ModuleManager manager = new ModuleManager(); manager.setServiceInstrument(true); manager.init(configuration); - BaseModuleA.ServiceABusiness1 serviceABusiness1 = manager.find("BaseA").provider().getService(BaseModuleA.ServiceABusiness1.class); - serviceABusiness1.print(); + BaseModuleA.ServiceABusiness1 serviceABusiness1 = manager.find("BaseA").getService(BaseModuleA.ServiceABusiness1.class); Assert.assertTrue(serviceABusiness1 instanceof TracedService); } -- GitLab