diff --git a/quickstarts/cdi-monitoring/README.md b/quickstarts/cdi-monitoring/README.md new file mode 100644 index 0000000..488d119 --- /dev/null +++ b/quickstarts/cdi-monitoring/README.md @@ -0,0 +1,40 @@ +Sample quickstart for cdi-microservice monitoring. Keep in mind that after minute expires every recorded value, but metrics calculated from this values persist. + +First you need to build a quickstart: +``` +mvn clean package +``` + +Then run quickstart: +``` +java -jar target/cdi-monitoring-*.jar +``` + +By default there are two microservices in this example. One of them is being monitored and second one is not. + +Monitored microservice can be invoked by: +``` +curl http://localhost:8080/silverware/rest/monitoring/monitored_service +``` + +Not monitored microservice: +``` +curl http://localhost:8080/silverware/rest/monitoring/notmonitored_service +``` + +Recorded metrics: +``` +curl http://localhost:8080/silverware/rest/monitoring/show_metrics +``` + +All recorded values: +``` +curl http://localhost:8080/silverware/rest/monitoring/show_values +``` + +Number of values recorded for every microservice: +``` +curl http://localhost:8080/silverware/rest/monitoring/show_values_size +``` + +Quickstart also exposes measured metrics into JMX by default. All you have to do is connect to this process with JMX console and find method getMetrics of JMXPublisherBean. Notice that you still have to invoke monitored service in order to get some measured metrics. \ No newline at end of file diff --git a/quickstarts/cdi-monitoring/pom.xml b/quickstarts/cdi-monitoring/pom.xml new file mode 100644 index 0000000..e9c212d --- /dev/null +++ b/quickstarts/cdi-monitoring/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + io.silverware.demos.quickstarts + quickstarts-parent + 2.1-SNAPSHOT + + cdi-monitoring + jar + + + io.silverware + microservices + + + io.silverware + monitoring + 2.1-SNAPSHOT + + + io.silverware + rest-client-microservice-provider + + + io.silverware + http-server-microservice-provider + + + + + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven.dependency.plugin} + + + + \ No newline at end of file diff --git a/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/MetricsRest.java b/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/MetricsRest.java new file mode 100644 index 0000000..5fce696 --- /dev/null +++ b/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/MetricsRest.java @@ -0,0 +1,63 @@ +package io.silverware.demos.quickstarts.cdi.monitoring; + +import javax.inject.Inject; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import io.silverware.microservices.annotations.Microservice; +import io.silverware.microservices.annotations.MicroserviceReference; +import io.silverware.microservices.monitoring.MetricsAggregator; +import io.vertx.core.json.JsonObject; + +/** + * @author Tomas Borcin | tborcin@redhat.com | created: 9/25/16. + */ +@Microservice +@Path("/monitoring") +public class MetricsRest { + + @Inject + @MicroserviceReference + private MonitoredMicroservice monitoredMicroservice; + + @Inject + @MicroserviceReference + private NotMonitoredMicroservice notMonitoredMicroservice; + + @Path("monitored_service") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String callMonitoredService() { + return this.monitoredMicroservice.hello(); + } + + @Path("notmonitored_service") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String callNotMonitoredService() { + return this.notMonitoredMicroservice.hello(); + } + + @Path("show_metrics") + @GET + @Produces(MediaType.TEXT_PLAIN) + public JsonObject showMetrics() { + return new JsonObject(MetricsAggregator.getMetrics()); + } + + @Path("show_values") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String showValues() { + return MetricsAggregator.getValues(); + } + + @Path("show_values_size") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String showValuesSize() { + return MetricsAggregator.getValuesSize(); + } +} diff --git a/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/MonitoredMicroservice.java b/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/MonitoredMicroservice.java new file mode 100644 index 0000000..0f4461a --- /dev/null +++ b/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/MonitoredMicroservice.java @@ -0,0 +1,49 @@ +package io.silverware.demos.quickstarts.cdi.monitoring; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.annotation.PostConstruct; +import javax.enterprise.event.Observes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import io.silverware.microservices.annotations.Microservice; +import io.silverware.microservices.providers.cdi.MicroservicesStartedEvent; + +/** + * @author Tomas Borcin | tborcin@redhat.com | created: 9/25/16. + */ +@Microservice +@Path("/monitored_hello_service") +public class MonitoredMicroservice { + + private static final Logger log = LogManager.getLogger(MonitoredMicroservice.class); + + public MonitoredMicroservice() { + log.info("Monitored microservice constructor"); + } + + @PostConstruct + public void onInit() { + log.info("Monitored microservice PostConstruct " + this.getClass().getName()); + } + + @Path("hello") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return "Monitored microservice hello method\n"; + } + + public void eventObserver(@Observes MicroservicesStartedEvent event) { + log.info("Monitored microservice MicroservicesStartedEvent"); + } +} diff --git a/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/NotMonitoredMicroservice.java b/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/NotMonitoredMicroservice.java new file mode 100644 index 0000000..cb4cc99 --- /dev/null +++ b/quickstarts/cdi-monitoring/src/main/java/io/silverware/demos/quickstarts/cdi/monitoring/NotMonitoredMicroservice.java @@ -0,0 +1,51 @@ +package io.silverware.demos.quickstarts.cdi.monitoring; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.annotation.PostConstruct; +import javax.enterprise.event.Observes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import io.silverware.microservices.annotations.Microservice; +import io.silverware.microservices.monitoring.annotations.NotMonitored; +import io.silverware.microservices.providers.cdi.MicroservicesStartedEvent; + +/** + * @author Tomas Borcin | tborcin@redhat.com | created: 9/25/16. + */ +@Microservice +@Path("/notmonitored_hello_service") +public class NotMonitoredMicroservice { + + private static final Logger log = LogManager.getLogger(NotMonitoredMicroservice.class); + + public NotMonitoredMicroservice() { + log.info("NotMonitored microservice constructor"); + } + + @PostConstruct + public void onInit() { + log.info("NotMonitored microservice PostConstruct " + this.getClass().getName()); + } + + @Path("hello") + @GET + @Produces(MediaType.TEXT_PLAIN) + @NotMonitored + public String hello() { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return "NotMonitored microservice hello method\n"; + } + + public void eventObserver(@Observes MicroservicesStartedEvent event) { + log.info("NotMonitored microservice MicroservicesStartedEvent"); + } +} diff --git a/quickstarts/cdi-monitoring/src/main/resources/META-INF/beans.xml b/quickstarts/cdi-monitoring/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..25aab64 --- /dev/null +++ b/quickstarts/cdi-monitoring/src/main/resources/META-INF/beans.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/quickstarts/pom.xml b/quickstarts/pom.xml index 3b3f1b1..3c8fdc2 100644 --- a/quickstarts/pom.xml +++ b/quickstarts/pom.xml @@ -1,230 +1,233 @@ - 4.0.0 - io.silverware.demos.quickstarts - quickstarts-parent - 2.1-SNAPSHOT - pom - SilverWare Quickstarts Parent - Parent pom of SilverWare Quickstarts. - http://www.silverware.io - 2015 - - - Martin Večeřa - marvenec@gmail.com - - Owner - - - - - https://github.com/px3/SilverWare-Demos/issues - github - - - px3 - http://www.silverware.io - - - UTF-8 + 4.0.0 + io.silverware.demos.quickstarts + quickstarts-parent + 2.1-SNAPSHOT + pom + SilverWare Quickstarts Parent + Parent pom of SilverWare Quickstarts. + http://www.silverware.io + 2015 + + + Martin Večeřa + marvenec@gmail.com + + Owner + + + + + https://github.com/px3/SilverWare-Demos/issues + github + + + px3 + http://www.silverware.io + + + UTF-8 - 1.8 + 1.8 - 2.16.1 - 1.5.2 + 2.16.1 + 1.5.2 - 2.5 - 3.2 - 2.18.1 - 3.0.0 - 2.7 - 2.4 - 2.8 - 0.3.8 - - - cdi-helloworld - camel-helloworld - camel-helloworld-xml - deltaspike-config - camel-cdi-helloworld - camel-jetty-cdi - activemq-jms-annotation - activemq-jndi - activemq-secured - vertx-deployment-options - vertx-groovy-helloworld - vertx-helloworld - vertx-xml-helloworld - rest-client-helloworld - http-server-helloworld - hystrix-helloworld - openshift-base - - - - - io.silverware - microservices-bom - ${project.version} - pom - import - - - org.apache.camel - camel-stream - ${version.apache.camel} - - - org.apache.camel - camel-cdi - ${version.apache.camel} - - - org.apache.camel - camel-jetty - ${version.apache.camel} - - - org.apache.deltaspike.core - deltaspike-core-api - ${version.apache.deltaspike} - compile - - - org.apache.deltaspike.core - deltaspike-core-impl - ${version.apache.deltaspike} - runtime - - - - + 2.5 + 3.2 + 2.18.1 + 3.0.0 + 2.7 + 2.4 + 2.8 + 0.3.8 + + + cdi-helloworld + cdi-monitoring + camel-helloworld + camel-helloworld-xml + deltaspike-config + camel-cdi-helloworld + camel-jetty-cdi + activemq-jms-annotation + activemq-jndi + activemq-secured + vertx-deployment-options + vertx-groovy-helloworld + vertx-helloworld + vertx-xml-helloworld + rest-client-helloworld + http-server-helloworld + hystrix-helloworld + openshift-base + + + - org.apache.logging.log4j - log4j-jul + io.silverware + microservices-bom + ${project.version} + pom + import - - - - - - maven-compiler-plugin - ${version.maven.compiler} - - ${java.level} - ${java.level} - - - - org.apache.maven.plugins - maven-clean-plugin - ${version.maven.clean} - - - - ${basedir} - - logs - *.log* - dependency-reduced-pom.xml - - false - - - ${basedir}/test-output - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${version.maven.jar.plugin} - - - - true - io.silverware.microservices.Boot - lib/ - - - ${project.version} - ${project.version} - - - - - - org.apache.maven.plugins - maven-dependency-plugin - ${version.maven.dependency.plugin} - - - copy-dependencies - package - - copy-dependencies - - - ${project.build.directory}/lib - - - - - - maven-surefire-plugin - ${version.maven.surefire} - - 1 - - org.apache.logging.log4j.jul.LogManager - org.apache.logging.log4j.jcl.Log4jLog - - - - - org.codehaus.mojo - exec-maven-plugin - - - - java - - - - - io.silverware.microservices.Boot - java - - -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager - -Dorg.apache.commons.logging.Log=org.apache.logging.log4j.jcl.Log4jLog - -ea - -jar - ${project.build.directory}/${project.build.finalName}.jar - - - - - com.spotify - docker-maven-plugin - ${version.maven.docker.plugin} - - silverware-qs-${project.artifactId} - java:8 - ["java", "-Dlog4j.configurationFile=log4j2.xml", "-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager", "org.apache.commons.logging.Log=org.apache.logging.log4j.jcl.Log4jLog", "-jar", "/root/${project.build.finalName}.jar"] - - - /root/ - ${project.build.directory} - ${project.build.finalName}.jar - lib/**.* - - - - - - - + + org.apache.camel + camel-stream + ${version.apache.camel} + + + org.apache.camel + camel-cdi + ${version.apache.camel} + + + org.apache.camel + camel-jetty + ${version.apache.camel} + + + org.apache.deltaspike.core + deltaspike-core-api + ${version.apache.deltaspike} + compile + + + org.apache.deltaspike.core + deltaspike-core-impl + ${version.apache.deltaspike} + runtime + + + + + + org.apache.logging.log4j + log4j-jul + + + + + + + maven-compiler-plugin + ${version.maven.compiler} + + ${java.level} + ${java.level} + + + + org.apache.maven.plugins + maven-clean-plugin + ${version.maven.clean} + + + + ${basedir} + + logs + *.log* + dependency-reduced-pom.xml + + false + + + ${basedir}/test-output + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${version.maven.jar.plugin} + + + + true + io.silverware.microservices.Boot + lib/ + + + ${project.version} + ${project.version} + + + + + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven.dependency.plugin} + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/lib + + + + + + maven-surefire-plugin + ${version.maven.surefire} + + 1 + + org.apache.logging.log4j.jul.LogManager + org.apache.logging.log4j.jcl.Log4jLog + + + + + org.codehaus.mojo + exec-maven-plugin + + + + java + + + + + io.silverware.microservices.Boot + java + + -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager + -Dorg.apache.commons.logging.Log=org.apache.logging.log4j.jcl.Log4jLog + -ea + -jar + ${project.build.directory}/${project.build.finalName}.jar + + + + + com.spotify + docker-maven-plugin + ${version.maven.docker.plugin} + + silverware-qs-${project.artifactId} + java:8 + ["java", "-Dlog4j.configurationFile=log4j2.xml", "-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager", "org.apache.commons.logging.Log=org.apache.logging.log4j.jcl.Log4jLog", "-jar", + "/root/${project.build.finalName}.jar"] + + + + /root/ + ${project.build.directory} + ${project.build.finalName}.jar + lib/**.* + + + + + + +