From 9678fb79dd591fc4a0554c2005a820ad01997872 Mon Sep 17 00:00:00 2001 From: jjvilleg Date: Wed, 24 Oct 2018 16:09:43 -0500 Subject: [PATCH] MP Metrics, FaultTolerance, FallBack, and Open Tracing Configured --- .gitignore | 1 + room-app/build.gradle | 2 +- .../java/net/wasdev/gameon/room/RoomWS.java | 72 +++++++++++++++++++ room-wlpcfg/Dockerfile | 1 + room-wlpcfg/build.gradle | 23 +++++- room-wlpcfg/servers/gameon-room/server.xml | 7 +- 6 files changed, 101 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index d61062a..b96d1f4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,6 @@ /bin /build /local.properties +/room-wlpcfg/lib/ *~ diff --git a/room-app/build.gradle b/room-app/build.gradle index 5388d74..cd0f09c 100644 --- a/room-app/build.gradle +++ b/room-app/build.gradle @@ -13,7 +13,7 @@ dependencies { providedCompile 'javax.enterprise:cdi-api:1.2' providedCompile 'javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0' compile 'org.mongodb:mongo-java-driver:2.12.3' - + compile group: 'org.eclipse.microprofile', name: 'microprofile', version: '1.3' compile 'com.github.gameontext:signed:v1.0.3' // kafka client =) diff --git a/room-app/src/main/java/net/wasdev/gameon/room/RoomWS.java b/room-app/src/main/java/net/wasdev/gameon/room/RoomWS.java index 4d18fa4..9efdd2e 100644 --- a/room-app/src/main/java/net/wasdev/gameon/room/RoomWS.java +++ b/room-app/src/main/java/net/wasdev/gameon/room/RoomWS.java @@ -31,12 +31,18 @@ import javax.websocket.MessageHandler; import javax.websocket.Session; +import org.eclipse.microprofile.opentracing.Traced; +import org.eclipse.microprofile.metrics.annotation.Metered; +import org.eclipse.microprofile.metrics.annotation.Timed; +import org.eclipse.microprofile.metrics.annotation.Counted; + import net.wasdev.gameon.room.engine.Room; /** * WebSocket endpoint for player's interacting with the room */ public class RoomWS extends Endpoint { + private final Room room; private final LifecycleManager.SessionRoomResponseProcessor srrp; private Map> handlersBySession = new ConcurrentHashMap>(); @@ -66,6 +72,17 @@ public void onMessage(String message) { } @Override + @Traced + @Timed(name = "websocket_onOpen_timer", + reusable = true, + tags = "label=websocket") + @Counted(name = "websocket_onOpen_count", + monotonic = true, + reusable = true, + tags = "label=websocket") + @Metered(name = "websocket_onOpen_meter", + reusable = true, + tags = "label=websocket") public void onOpen(final Session session, EndpointConfig ec) { Log.log(Level.FINE,this, "onOpen called against room " + this.room.getRoomId()); @@ -123,6 +140,17 @@ private void debugDumpSessionInfo() { } @Override + @Traced + @Timed(name = "websocket_onClose_timer", + reusable = true, + tags = "label=websocket") + @Counted(name = "websocket_onClose_count", + monotonic = true, + reusable = true, + tags = "label=websocket") + @Metered(name = "websocket_onClose_meter", + reusable = true, + tags = "label=websocket") public void onClose(Session session, CloseReason reason) { // (lifecycle) Called when the connection is closed, treat this as the // player has left the room @@ -150,6 +178,17 @@ public void onClose(Session session, CloseReason reason) { } } + @Traced + @Timed(name = "receiveMessage_timer", + reusable = true, + tags = "label=websocket") + @Counted(name = "receiveMessage_count", + monotonic = true, + reusable = true, + tags = "label=websocket") + @Metered(name = "receiveMessage_meter", + reusable = true, + tags = "label=websocket") public void receiveMessage(String message, Session session) throws IOException { Log.log(Level.FINE, this, "ROOMX: [{0}:{1}] sess[{2}:{3}] : {4}", this.hashCode(),this.room.getRoomId(),session.hashCode(),session.getId(),message); String[] contents = Message.splitRouting(message); @@ -190,6 +229,17 @@ private void processCommand(String json) throws IOException { } // add a new player to the room + @Traced + @Timed(name = "addNewPlayer_timer", + reusable = true, + tags = "label=websocket") + @Counted(name = "addNewPlayer_count", + monotonic = true, + reusable = true, + tags = "label=websocket") + @Metered(name = "addNewPlayer_meter", + reusable = true, + tags = "label=websocket") private void addNewPlayer(Session session, String json) throws IOException { JsonObject msg = Json.createReader(new StringReader(json)).readObject(); @@ -202,6 +252,17 @@ private void addNewPlayer(Session session, String json) throws IOException { room.command(userid, "look"); } + @Traced + @Timed(name = "removePlayer_timer", + reusable = true, + tags = "label=websocket") + @Counted(name = "removePlayer_count", + monotonic = true, + reusable = true, + tags = "label=websocket") + @Metered(name = "removePlayer_meter", + reusable = true, + tags = "label=websocket") private void removePlayer(Session session, String json) throws IOException { JsonObject msg = Json.createReader(new StringReader(json)).readObject(); String userid = Message.getValue(msg.get(Constants.USERID)); @@ -210,6 +271,17 @@ private void removePlayer(Session session, String json) throws IOException { } @Override + @Traced + @Timed(name = "websocket_onError_timer", + reusable = true, + tags = "label=websocket") + @Counted(name = "websocket_onError_count", + monotonic = true, + reusable = true, + tags = "label=websocket") + @Metered(name = "websocket_onError_meter", + reusable = true, + tags = "label=websocket") public void onError(Session session, Throwable thr) { // (lifecycle) Called if/when an error occurs and the connection is // disrupted diff --git a/room-wlpcfg/Dockerfile b/room-wlpcfg/Dockerfile index 655bedc..041e875 100644 --- a/room-wlpcfg/Dockerfile +++ b/room-wlpcfg/Dockerfile @@ -4,6 +4,7 @@ ENV SERVERDIRNAME room COPY ./startup.sh /opt/startup.sh ADD ./servers/gameon-room /opt/ol/wlp/usr/servers/defaultServer/ +COPY ./lib/features/ /opt/ol/wlp/usr/ CMD ["/opt/startup.sh"] diff --git a/room-wlpcfg/build.gradle b/room-wlpcfg/build.gradle index a966463..168f948 100644 --- a/room-wlpcfg/build.gradle +++ b/room-wlpcfg/build.gradle @@ -1,18 +1,35 @@ -apply plugin: 'eclipse' - buildscript { repositories { mavenCentral() } } +plugins { + id "de.undercouch.download" version "3.4.3" +} + +apply plugin: 'eclipse' + task copyWAR(type: Copy) { from '../room-app/build/libs/room-app-1.0.war' into 'servers/gameon-room/apps/' rename("room-app-1.0.war", "room-app.war") } -task build(dependsOn: ['copyWAR']){ +task downloadFile(type: Download) { + src 'https://github.com/WASdev/sample.opentracing.zipkintracer/releases/download/1.1/liberty-opentracing-zipkintracer-1.1-sample.zip' + dest "lib/features/liberty-opentracing-zipkintracer-1.1-sample.zip" +} + +task unzipFile(type: Copy) { + dependsOn 'downloadFile' + def zipFile = file("lib/features/liberty-opentracing-zipkintracer-1.1-sample.zip") + def outputDir = file("lib/features/") + from zipTree(zipFile) + into outputDir +} + +task build(dependsOn: ['copyWAR', 'unzipFile']){ } task clean { diff --git a/room-wlpcfg/servers/gameon-room/server.xml b/room-wlpcfg/servers/gameon-room/server.xml index ba7c99a..00a4437 100644 --- a/room-wlpcfg/servers/gameon-room/server.xml +++ b/room-wlpcfg/servers/gameon-room/server.xml @@ -10,8 +10,11 @@ ssl-1.0 concurrent-1.0 appSecurity-2.0 + microprofile-1.3 + usr:opentracingZipkin-0.30 + @@ -51,7 +54,9 @@ - + + +