diff --git a/.github/workflows/plugins-jdk17-test.0.yaml b/.github/workflows/plugins-jdk17-test.0.yaml index a4e7684c9..556214b9d 100644 --- a/.github/workflows/plugins-jdk17-test.0.yaml +++ b/.github/workflows/plugins-jdk17-test.0.yaml @@ -61,6 +61,7 @@ jobs: - jetty-thread-pool-scenario - jetty-11.x-thread-pool-scenario - grizzly-2.3.x-4.x-scenario + - grizzly-2.3.x-4.x-workthreadpool-scenario steps: - uses: actions/checkout@v2 with: diff --git a/CHANGES.md b/CHANGES.md index 9392da0b2..b87d8aa5b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,7 @@ Release Notes. * Change the classloader to locate the agent path in AgentPackagePath, from `SystemClassLoader` to AgentPackagePath's loader. * Support Grizzly Trace * Fix possible IllegalStateException when using Micrometer. +* Support Grizzly Work ThreadPool Metric Monitor #### Documentation diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/pom.xml new file mode 100644 index 000000000..c6a01c3da --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/pom.xml @@ -0,0 +1,44 @@ + + + + 4.0.0 + + org.apache.skywalking + apm-sdk-plugin + 8.16.0-SNAPSHOT + + + apm-grizzly-2.x-4.x-work-threadpool-plugin + + + UTF-8 + 2.4.0 + + + + org.glassfish.grizzly + grizzly-framework + ${grizzly.version} + provided + + + + \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/TransportInterceptor.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/TransportInterceptor.java new file mode 100644 index 000000000..5845736c1 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/TransportInterceptor.java @@ -0,0 +1,74 @@ +/* + * 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.apm.plugin.grizzly.workthreadpool; + +import org.apache.skywalking.apm.agent.core.meter.MeterFactory; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.glassfish.grizzly.threadpool.AbstractThreadPool; +import org.glassfish.grizzly.threadpool.GrizzlyExecutorService; +import org.glassfish.grizzly.threadpool.ThreadPoolConfig; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class TransportInterceptor implements InstanceMethodsAroundInterceptor { + + private static final String METER_NAME = "thread_pool"; + private static final String METRIC_POOL_NAME_TAG_NAME = "pool_name"; + private static final String THREAD_POOL_NAME = "grizzly_execute_pool"; + private static final String METRIC_TYPE_TAG_NAME = "metric_type"; + + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + GrizzlyExecutorService executorServices = (GrizzlyExecutorService) allArguments[0]; + // reflect get private field just once + Field poolField = GrizzlyExecutorService.class.getDeclaredField("pool"); + poolField.setAccessible(true); + AbstractThreadPool abstractThreadPool = (AbstractThreadPool) poolField.get(executorServices); + ThreadPoolConfig threadPoolConfig = abstractThreadPool.getConfig(); + MeterFactory.gauge(METER_NAME, () -> (double) threadPoolConfig.getCorePoolSize()) + .tag(METRIC_POOL_NAME_TAG_NAME, THREAD_POOL_NAME) + .tag(METRIC_TYPE_TAG_NAME, "core_pool_size") + .build(); + MeterFactory.gauge(METER_NAME, () -> (double) threadPoolConfig.getMaxPoolSize()) + .tag(METRIC_POOL_NAME_TAG_NAME, THREAD_POOL_NAME) + .tag(METRIC_TYPE_TAG_NAME, "max_pool_size") + .build(); + MeterFactory.gauge(METER_NAME, () -> (double) abstractThreadPool.getSize()) + .tag(METRIC_POOL_NAME_TAG_NAME, THREAD_POOL_NAME) + .tag(METRIC_TYPE_TAG_NAME, "pool_size") + .build(); + MeterFactory.gauge(METER_NAME, () -> (double) abstractThreadPool.getQueue().size()) + .tag(METRIC_POOL_NAME_TAG_NAME, THREAD_POOL_NAME) + .tag(METRIC_TYPE_TAG_NAME, "queue_size") + .build(); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { + return ret; + } + + @Override + public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Throwable t) { + + } +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/define/AbstractWitnessInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/define/AbstractWitnessInstrumentation.java new file mode 100644 index 000000000..a18ea314c --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/define/AbstractWitnessInstrumentation.java @@ -0,0 +1,37 @@ +/* + * 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.apm.plugin.grizzly.workthreadpool.define; + +import org.apache.skywalking.apm.agent.core.plugin.WitnessMethod; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; + +import java.util.Collections; +import java.util.List; + +import static net.bytebuddy.matcher.ElementMatchers.named; + +public abstract class AbstractWitnessInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + + @Override + protected List witnessMethods() { + return Collections.singletonList(new WitnessMethod( + "org.glassfish.grizzly.http.server.HttpHandler", + named("runService") + )); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/define/TransportInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/define/TransportInstrumentation.java new file mode 100644 index 000000000..a3ca30e90 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/workthreadpool/define/TransportInstrumentation.java @@ -0,0 +1,66 @@ +/* + * 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.apm.plugin.grizzly.workthreadpool.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +public class TransportInstrumentation extends AbstractWitnessInstrumentation { + private static final String ENHANCE_CLASS = "org.glassfish.grizzly.AbstractTransport"; + + private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.grizzly.workthreadpool.TransportInterceptor"; + + @Override + protected ClassMatch enhanceClass() { + return byName(ENHANCE_CLASS); + } + + @Override + public ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override + public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[]{ + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("setWorkerThreadPool0"); + } + + @Override + public String getMethodsInterceptor() { + return INTERCEPTOR_CLASS; + } + + @Override + public boolean isOverrideArgs() { + return false; + } + } + }; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/resources/skywalking-plugin.def new file mode 100644 index 000000000..3aa827470 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-work-threadpool-plugin/src/main/resources/skywalking-plugin.def @@ -0,0 +1,17 @@ +# 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. + +grizzly-2.3.x-4.x-threadpool=org.apache.skywalking.apm.plugin.grizzly.workthreadpool.define.TransportInstrumentation diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index 2f31e7280..d8673dfa6 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -130,6 +130,7 @@ jersey-2.x-plugin jersey-3.x-plugin grizzly-2.3.x-4.x-plugin + grizzly-2.3.x-4.x-work-threadpool-plugin pom diff --git a/docs/en/setup/service-agent/java-agent/Plugin-list.md b/docs/en/setup/service-agent/java-agent/Plugin-list.md index 6121cb614..92beac632 100644 --- a/docs/en/setup/service-agent/java-agent/Plugin-list.md +++ b/docs/en/setup/service-agent/java-agent/Plugin-list.md @@ -162,3 +162,4 @@ - jersey-2.x - jersey-3.x - grizzly-2.3.x-4.x +- grizzly-2.3.x-4.x-threadpool diff --git a/docs/en/setup/service-agent/java-agent/Supported-list.md b/docs/en/setup/service-agent/java-agent/Supported-list.md index 77abc6a40..d6e71f4a1 100644 --- a/docs/en/setup/service-agent/java-agent/Supported-list.md +++ b/docs/en/setup/service-agent/java-agent/Supported-list.md @@ -158,6 +158,7 @@ The meter plugin provides the advanced metrics collections, which are not a part * [Tomcat](https://github.com/apache/tomcat) 7.0.x -> 10.0.x * [Dubbo](https://github.com/apache/dubbo) 2.5.x -> 2.7.x * [Jetty](https://github.com/eclipse/jetty.project) 9.1.x -> 11.x + * [Grizzly](https://github.com/eclipse-ee4j/grizzly) 2.3.x -> 4.x ___ ¹Due to license incompatibilities/restrictions these plugins are hosted and released in 3rd part repository, go to [SkyAPM java plugin extension repository](https://github.com/SkyAPM/java-plugin-extensions) to get these. diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/bin/startup.sh b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/bin/startup.sh new file mode 100644 index 000000000..be26f8c9a --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/bin/startup.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# 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. + +home="$(cd "$(dirname $0)"; pwd)" + +java -jar ${agent_opts} ${home}/../libs/grizzly-2.3.x-4.x-workthreadpool-scenario.jar & \ No newline at end of file diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/config/expectedData.yaml b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/config/expectedData.yaml new file mode 100644 index 000000000..da0f47c6a --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/config/expectedData.yaml @@ -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. +meterItems: + - serviceName: grizzly-2.3.x-4.x-workthreadpool-scenario + meterSize: 4 + meters: + - meterId: + name: thread_pool + tags: + - {name: metric_type, value: core_pool_size} + - {name: pool_name, value: grizzly_execute_pool} + singleValue: ge 1 + - meterId: + name: thread_pool + tags: + - {name: metric_type, value: max_pool_size} + - {name: pool_name, value: grizzly_execute_pool} + singleValue: ge 1 + - meterId: + name: thread_pool + tags: + - {name: metric_type, value: pool_size} + - {name: pool_name, value: grizzly_execute_pool} + singleValue: ge 0 + - meterId: + name: thread_pool + tags: + - {name: metric_type, value: queue_size} + - {name: pool_name, value: grizzly_execute_pool} + singleValue: ge 0 diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/configuration.yml b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/configuration.yml new file mode 100644 index 000000000..6fd3dc622 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/configuration.yml @@ -0,0 +1,22 @@ +# 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. + +type: jvm +entryService: http://localhost:18181/grizzly-2.3.x-4.x-workthreadpool-scenario/case/grizzly-2.3.x-4.x-workthreadpool-scenario +healthCheck: http://localhost:18181/grizzly-2.3.x-4.x-workthreadpool-scenario/case/healthCheck +startScript: ./bin/startup.sh +environment: +dependencies: diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/pom.xml b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/pom.xml new file mode 100644 index 000000000..b6b10fef2 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/pom.xml @@ -0,0 +1,122 @@ + + + + + test.apache.skywalking.apm.testcase + grizzly-2.3.x-4.x-workthreadpool-scenario + 1.0.0 + jar + + 4.0.0 + + + UTF-8 + 1.8 + 3.8.1 + + 4.0.0 + + 2.6.2 + + + skywalking-grizzly-2.3.x-4.x-workthreadpool-scenario + + + + org.glassfish.grizzly + grizzly-http-server + ${test.framework.version} + + + com.squareup.okhttp + okhttp + 2.4.0 + + + + + + grizzly-2.3.x-4.x-workthreadpool-scenario + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + test.apache.skywalking.apm.testcase.grizzly.workthreadpool.Application + + + + + + + + + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${compiler.version} + ${compiler.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-assembly-plugin + + + assemble + package + + single + + + + src/main/assembly/assembly.xml + + ./target/ + + + + + + + diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/assembly/assembly.xml b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/assembly/assembly.xml new file mode 100644 index 000000000..f52cdfa24 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/assembly/assembly.xml @@ -0,0 +1,41 @@ + + + + + zip + + + + + ./bin + 0775 + + + + + + ${project.build.directory}/grizzly-2.3.x-4.x-workthreadpool-scenario.jar + ./libs + 0775 + + + diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/Application.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/Application.java new file mode 100644 index 000000000..95d0de9f4 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/Application.java @@ -0,0 +1,61 @@ +/* + * 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 test.apache.skywalking.apm.testcase.grizzly.workthreadpool; + +import org.glassfish.grizzly.http.server.HttpServer; +import org.glassfish.grizzly.http.server.NetworkListener; +import org.glassfish.grizzly.nio.transport.TCPNIOTransport; +import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder; +import org.glassfish.grizzly.strategies.SameThreadIOStrategy; +import org.glassfish.grizzly.threadpool.ThreadPoolConfig; +import test.apache.skywalking.apm.testcase.grizzly.workthreadpool.controller.CaseHandler; +import test.apache.skywalking.apm.testcase.grizzly.workthreadpool.controller.HealCheckHandler; +import test.apache.skywalking.apm.testcase.grizzly.workthreadpool.controller.ReceiveContextHandler; + +import java.io.IOException; + +public class Application { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpServer server = new HttpServer(); + NetworkListener networkListener = new NetworkListener("grizzly-scenariotest", + "0.0.0.0", 18181); + final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance(); + TCPNIOTransport transport = builder + .setIOStrategy(SameThreadIOStrategy.getInstance()) + .setWorkerThreadPoolConfig(ThreadPoolConfig.defaultConfig() + .setPoolName("Grizzly-worker") + .setCorePoolSize(100) + .setMaxPoolSize(100) + .setMemoryManager(builder.getMemoryManager())) + .build(); + networkListener.setTransport(transport); + server.addListener(networkListener); + server.getServerConfiguration().addHttpHandler(new CaseHandler(), + "/grizzly-2.3.x-4.x-workthreadpool-scenario/case/grizzly-2.3.x-4.x-workthreadpool-scenario"); + server.getServerConfiguration() + .addHttpHandler(new HealCheckHandler(), + "/grizzly-2.3.x-4.x-workthreadpool-scenario/case/healthCheck"); + server.getServerConfiguration().addHttpHandler(new ReceiveContextHandler(), + "/grizzly-2.3.x-4.x-workthreadpool-scenario/case/receive-context"); + server.start(); + Thread.sleep(10000); + System.in.read(); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/CaseHandler.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/CaseHandler.java new file mode 100644 index 000000000..30a78263f --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/CaseHandler.java @@ -0,0 +1,45 @@ +/* + * 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 test.apache.skywalking.apm.testcase.grizzly.workthreadpool.controller; + +import com.squareup.okhttp.OkHttpClient; +import java.io.IOException; +import org.glassfish.grizzly.http.server.HttpHandler; +import org.glassfish.grizzly.http.server.Request; +import org.glassfish.grizzly.http.server.Response; + +public class CaseHandler extends HttpHandler { + + @Override + public void service(Request request, Response response) throws Exception { + + com.squareup.okhttp.Request okhttpRequest = new com.squareup.okhttp.Request.Builder().url( + "http://127.0.0.1:18181/grizzly-2.3.x-4.x-workthreadpool-scenario/case/receive-context") + .build(); + try { + new OkHttpClient().newCall(okhttpRequest).execute(); + } catch (IOException e) { + throw new RuntimeException(e); + } + String hello = "hello"; + response.setContentType("text/plain"); + response.setContentLength(hello.length()); + response.getWriter().write(hello); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/HealCheckHandler.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/HealCheckHandler.java new file mode 100644 index 000000000..8ee3963cc --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/HealCheckHandler.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 test.apache.skywalking.apm.testcase.grizzly.workthreadpool.controller; + +import org.glassfish.grizzly.http.server.HttpHandler; +import org.glassfish.grizzly.http.server.Request; +import org.glassfish.grizzly.http.server.Response; + +public class HealCheckHandler extends HttpHandler { + + @Override + public void service(Request request, Response response) throws Exception { + String hello = "hello"; + response.setContentType("text/plain"); + response.setContentLength(hello.length()); + response.getWriter().write(hello); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/ReceiveContextHandler.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/ReceiveContextHandler.java new file mode 100644 index 000000000..c1d37c257 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/workthreadpool/controller/ReceiveContextHandler.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 test.apache.skywalking.apm.testcase.grizzly.workthreadpool.controller; + +import org.glassfish.grizzly.http.server.HttpHandler; +import org.glassfish.grizzly.http.server.Request; +import org.glassfish.grizzly.http.server.Response; + +public class ReceiveContextHandler extends HttpHandler { + + @Override + public void service(Request request, Response response) throws Exception { + String hello = "hello"; + response.setContentType("text/plain"); + response.setContentLength(hello.length()); + response.getWriter().write(hello); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/support-version.list b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/support-version.list new file mode 100644 index 000000000..c39f58f01 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-workthreadpool-scenario/support-version.list @@ -0,0 +1,20 @@ +# 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. + +2.3.35 +2.4.4 +3.0.1 +4.0.0