Skip to content
This repository was archived by the owner on Dec 23, 2023. It is now read-only.

Commit fb5c811

Browse files
authored
http jetty example. (#1675)
* http jetty example. * add license. * Fix review comments. * fix import-control and javadoc errors.
1 parent c0f3a4c commit fb5c811

File tree

6 files changed

+403
-2
lines changed

6 files changed

+403
-2
lines changed

buildscripts/import-control.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,10 @@ General guidelines on imports:
301301
<allow pkg="io.opencensus.tags"/>
302302
<allow pkg="io.opencensus.testing.export"/>
303303
<allow pkg="io.opencensus.trace"/>
304-
<allow pkg="io.prometheus"/>
305304
<allow pkg="io.opencensus.metrics"/>
305+
<allow pkg="io.prometheus"/>
306+
<allow pkg="org.apache.log4j"/>
307+
<allow pkg="org.eclipse.jetty"/>
308+
<allow pkg="javax.servlet"/>
306309
</subpackage>
307310
</import-control>

examples/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ java_library(
2323
name = "opencensus_examples",
2424
srcs = glob(
2525
["src/main/java/**/*.java"],
26+
exclude = ["**/http/jetty/**"]
2627
),
2728
deps = [
2829
":helloworld_java_grpc",

examples/build.gradle

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ version = "0.19.0-SNAPSHOT" // CURRENT_OPENCENSUS_VERSION
2828
def opencensusVersion = "0.18.0" // LATEST_OPENCENSUS_RELEASE_VERSION
2929
def grpcVersion = "1.15.0" // CURRENT_GRPC_VERSION
3030
def prometheusVersion = "0.5.0"
31+
def jettyVersion = "9.4.12.v20180830"
3132

3233
tasks.withType(JavaCompile) {
3334
sourceCompatibility = '1.8'
@@ -39,14 +40,25 @@ dependencies {
3940
"io.opencensus:opencensus-api:${opencensusVersion}",
4041
"io.opencensus:opencensus-contrib-zpages:${opencensusVersion}",
4142
"io.opencensus:opencensus-contrib-grpc-metrics:${opencensusVersion}",
43+
44+
// [TODO:rghetia] uncomment when 0.19.0 is released.
45+
// "io.opencensus:opencensus-contrib-http-util:${opencensusVersion}",
46+
// "io.opencensus:opencensus-contrib-http-servlet:${opencensusVersion}",
47+
// "io.opencensus:opencensus-contrib-http-jetty-client:${opencensusVersion}",
4248
"io.opencensus:opencensus-exporter-stats-prometheus:${opencensusVersion}",
4349
"io.opencensus:opencensus-exporter-stats-stackdriver:${opencensusVersion}",
50+
"io.opencensus:opencensus-exporter-trace-jaeger:${opencensusVersion}",
4451
"io.opencensus:opencensus-exporter-trace-stackdriver:${opencensusVersion}",
4552
"io.opencensus:opencensus-exporter-trace-logging:${opencensusVersion}",
4653
"io.grpc:grpc-protobuf:${grpcVersion}",
4754
"io.grpc:grpc-stub:${grpcVersion}",
4855
"io.grpc:grpc-netty:${grpcVersion}",
49-
"io.prometheus:simpleclient_httpserver:${prometheusVersion}"
56+
"io.prometheus:simpleclient_httpserver:${prometheusVersion}",
57+
"javax.servlet:javax.servlet-api:3.1.0",
58+
"org.eclipse.jetty:jetty-server:${jettyVersion}",
59+
"org.eclipse.jetty:jetty-client:${jettyVersion}",
60+
"org.eclipse.jetty:jetty-servlet:${jettyVersion}",
61+
"org.slf4j:slf4j-log4j12:1.7.25"
5062

5163
runtime "io.opencensus:opencensus-impl:${opencensusVersion}",
5264
"io.netty:netty-tcnative-boringssl-static:2.0.8.Final"
@@ -74,6 +86,8 @@ sourceSets {
7486
main {
7587
java {
7688
srcDir 'src'
89+
// [TODO:rghetia] remove the exclusion after 0.19.0 is released.
90+
exclude { FileTreeElement e -> e.path.contains('http/jetty/') }
7791
srcDirs 'build/generated/source/proto/main/grpc'
7892
srcDirs 'build/generated/source/proto/main/java'
7993
}
@@ -183,6 +197,21 @@ task longGaugeQuickstart(type: CreateStartScripts) {
183197
classpath = jar.outputs.files + project.configurations.runtime
184198
}
185199

200+
// [TODO:rghetia] uncomment when 0.19.0 is released.
201+
//task httpJettyServer(type: CreateStartScripts) {
202+
// mainClassName = 'io.opencensus.examples.http.jetty.server.HelloWorldServer'
203+
// applicationName = 'HttpJettyServer'
204+
// outputDir = new File(project.buildDir, 'tmp')
205+
// classpath = jar.outputs.files + project.configurations.runtime
206+
//}
207+
//
208+
//task httpJettyClient(type: CreateStartScripts) {
209+
// mainClassName = 'io.opencensus.examples.http.jetty.client.HelloWorldClient'
210+
// applicationName = 'HttpJettyClient'
211+
// outputDir = new File(project.buildDir, 'tmp')
212+
// classpath = jar.outputs.files + project.configurations.runtime
213+
//}
214+
186215
applicationDistribution.into('bin') {
187216
from(multiSpansTracing)
188217
from(multiSpansScopedTracing)
@@ -198,5 +227,8 @@ applicationDistribution.into('bin') {
198227
from(derivedLongGaugeQuickstart)
199228
from(doubleGaugeQuickstart)
200229
from(longGaugeQuickstart)
230+
// [TODO:rghetia] uncomment when 0.19.0 is released.
231+
// from(httpJettyServer)
232+
// from(httpJettyClient)
201233
fileMode = 0755
202234
}

examples/pom.xml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<properties>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1212
<!-- change to the version you want to use. -->
13+
<jetty.version>9.4.12.v20180830</jetty.version>
1314
<opencensus.version>0.18.0</opencensus.version><!-- LATEST_OPENCENSUS_RELEASE_VERSION -->
1415
<grpc.version>1.15.0</grpc.version><!-- CURRENT_GRPC_VERSION -->
1516
</properties>
@@ -24,6 +25,23 @@
2425
<artifactId>opencensus-contrib-grpc-metrics</artifactId>
2526
<version>${opencensus.version}</version>
2627
</dependency>
28+
<!-- [TODO:rghetia] uncomment after 0.19.0 is released.
29+
<dependency>
30+
<groupId>io.opencensus</groupId>
31+
<artifactId>opencensus-contrib-http-util</artifactId>
32+
<version>${opencensus.version}</version>
33+
</dependency>
34+
<dependency>
35+
<groupId>io.opencensus</groupId>
36+
<artifactId>opencensus-contrib-http-jetty-client</artifactId>
37+
<version>${opencensus.version}</version>
38+
</dependency>
39+
<dependency>
40+
<groupId>io.opencensus</groupId>
41+
<artifactId>opencensus-contrib-http-servlet</artifactId>
42+
<version>${opencensus.version}</version>
43+
</dependency>
44+
-->
2745
<dependency>
2846
<groupId>io.opencensus</groupId>
2947
<artifactId>opencensus-contrib-zpages</artifactId>
@@ -39,6 +57,11 @@
3957
<artifactId>opencensus-exporter-stats-prometheus</artifactId>
4058
<version>${opencensus.version}</version>
4159
</dependency>
60+
<dependency>
61+
<groupId>io.opencensus</groupId>
62+
<artifactId>opencensus-exporter-trace-jaeger</artifactId>
63+
<version>${opencensus.version}</version>
64+
</dependency>
4265
<dependency>
4366
<groupId>io.opencensus</groupId>
4467
<artifactId>opencensus-exporter-trace-stackdriver</artifactId>
@@ -81,6 +104,31 @@
81104
<version>2.0.8.Final</version>
82105
<scope>runtime</scope>
83106
</dependency>
107+
<dependency>
108+
<groupId>javax.servlet</groupId>
109+
<artifactId>javax.servlet-api</artifactId>
110+
<version>3.1.0</version>
111+
</dependency>
112+
<dependency>
113+
<groupId>org.eclipse.jetty</groupId>
114+
<artifactId>jetty-client</artifactId>
115+
<version>${jetty.version}</version>
116+
</dependency>
117+
<dependency>
118+
<groupId>org.eclipse.jetty</groupId>
119+
<artifactId>jetty-server</artifactId>
120+
<version>${jetty.version}</version>
121+
</dependency>
122+
<dependency>
123+
<groupId>org.eclipse.jetty</groupId>
124+
<artifactId>jetty-servlet</artifactId>
125+
<version>${jetty.version}</version>
126+
</dependency>
127+
<dependency>
128+
<groupId>org.slf4j</groupId>
129+
<artifactId>slf4j-log4j12</artifactId>
130+
<version>1.7.25</version>
131+
</dependency>
84132
</dependencies>
85133
<build>
86134
<extensions>
@@ -166,6 +214,16 @@
166214
<id>LongGaugeQuickstart</id>
167215
<mainClass>io.opencensus.examples.gauges.LongGaugeQuickstart</mainClass>
168216
</program>
217+
<!-- [TODO:rghetia] uncomment after 0.19.0 is released.
218+
<program>
219+
<id>HttpJettyClient</id>
220+
<mainClass>io.opencensus.examples.http.jetty.client.HelloWorldClient</mainClass>
221+
</program>
222+
<program>
223+
<id>HttpJettyServer</id>
224+
<mainClass>io.opencensus.examples.http.jetty.server.HelloWorldServer</mainClass>
225+
</program>
226+
-->
169227
</programs>
170228
</configuration>
171229
</plugin>
@@ -187,6 +245,18 @@
187245
</execution>
188246
</executions>
189247
</plugin>
248+
<!--
249+
[TODO:rghetia] remove the exclusion from build after 0.19.0 is released.
250+
-->
251+
<plugin>
252+
<groupId>org.apache.maven.plugins</groupId>
253+
<artifactId>maven-compiler-plugin</artifactId>
254+
<configuration>
255+
<excludes>
256+
<exclude>**/http/jetty/**/*.java</exclude>
257+
</excludes>
258+
</configuration>
259+
</plugin>
190260
</plugins>
191261
</build>
192262
</project>
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Copyright 2019, OpenCensus Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.opencensus.examples.http.jetty.client;
18+
19+
import io.opencensus.contrib.http.jetty.client.OcJettyHttpClient;
20+
import io.opencensus.contrib.http.util.HttpViews;
21+
import io.opencensus.exporter.stats.prometheus.PrometheusStatsCollector;
22+
import io.opencensus.exporter.trace.jaeger.JaegerTraceExporter;
23+
import io.opencensus.exporter.trace.logging.LoggingTraceExporter;
24+
import io.opencensus.trace.Tracing;
25+
import io.opencensus.trace.config.TraceConfig;
26+
import io.opencensus.trace.samplers.Samplers;
27+
import io.prometheus.client.exporter.HTTPServer;
28+
import java.io.IOException;
29+
import org.apache.log4j.BasicConfigurator;
30+
import org.apache.log4j.Level;
31+
import org.apache.log4j.Logger;
32+
import org.eclipse.jetty.client.HttpRequest;
33+
import org.eclipse.jetty.client.util.StringContentProvider;
34+
import org.eclipse.jetty.http.HttpMethod;
35+
36+
/** Sample application that shows how to instrument jetty client. */
37+
public class HelloWorldClient {
38+
private static final Logger logger = Logger.getLogger(HelloWorldClient.class.getName());
39+
40+
private static void initTracing() {
41+
TraceConfig traceConfig = Tracing.getTraceConfig();
42+
Logger.getRootLogger().setLevel(Level.INFO);
43+
traceConfig.updateActiveTraceParams(
44+
traceConfig.getActiveTraceParams().toBuilder().setSampler(Samplers.alwaysSample()).build());
45+
46+
LoggingTraceExporter.register();
47+
// Register Jaeger Tracing. Refer to https://www.jaegertracing.io/docs/1.8/getting-started/ to
48+
// run Jaeger
49+
JaegerTraceExporter.createAndRegister("http://localhost:14268/api/traces", "helloworldclient");
50+
}
51+
52+
private static void initStatsExporter() throws IOException {
53+
HttpViews.registerAllClientViews();
54+
55+
// Register Prometheus exporters and export metrics to a Prometheus HTTPServer.
56+
// Refer to https://prometheus.io/ to run Prometheus Server.
57+
PrometheusStatsCollector.createAndRegister();
58+
HTTPServer prometheusServer = new HTTPServer(9091, true);
59+
}
60+
61+
/**
62+
* HelloWorldClient sends http request periodically to {@link HelloWorldServer}. These requests
63+
* are instrumented using opencensus jetty client library to enable tracing and monitoring stats.
64+
*/
65+
public static void main(String[] args) throws Exception {
66+
BasicConfigurator.configure();
67+
68+
initTracing();
69+
initStatsExporter();
70+
71+
OcJettyHttpClient httpClient = new OcJettyHttpClient();
72+
73+
httpClient.start();
74+
75+
do {
76+
HttpRequest request =
77+
(HttpRequest) httpClient.newRequest("http://localhost:8080/").method(HttpMethod.GET);
78+
HttpRequest asyncRequest =
79+
(HttpRequest) httpClient.newRequest("http://localhost:8080/async").method(HttpMethod.GET);
80+
HttpRequest postRequest =
81+
(HttpRequest) httpClient.newRequest("http://localhost:8080/").method(HttpMethod.POST);
82+
postRequest.content(new StringContentProvider("{\"hello\": \"world\"}"), "application/json");
83+
84+
if (request == null) {
85+
logger.info("Request is null");
86+
break;
87+
}
88+
89+
request.send();
90+
asyncRequest.send();
91+
postRequest.send();
92+
try {
93+
Thread.sleep(15000);
94+
} catch (Exception e) {
95+
logger.error("Error while sleeping");
96+
}
97+
} while (true);
98+
}
99+
}

0 commit comments

Comments
 (0)