From ee2b7f0b4cb8b7f1160b6ae3a14f0dc08a0808c6 Mon Sep 17 00:00:00 2001 From: Aidan Hahn Date: Thu, 16 May 2019 14:49:47 -0700 Subject: [PATCH] implemented test server --- src/main/java/JobServ/App.java | 14 ---- src/main/java/JobServ/JobServClient.java | 0 src/main/java/JobServ/JobServServer.java | 94 ++++++++++++++++++++++++ src/main/proto/jobserv.proto | 6 +- 4 files changed, 97 insertions(+), 17 deletions(-) delete mode 100644 src/main/java/JobServ/App.java create mode 100644 src/main/java/JobServ/JobServClient.java create mode 100644 src/main/java/JobServ/JobServServer.java diff --git a/src/main/java/JobServ/App.java b/src/main/java/JobServ/App.java deleted file mode 100644 index ff0acde..0000000 --- a/src/main/java/JobServ/App.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package JobServ; - -public class App { - public String getGreeting() { - return "Hello world."; - } - - public static void main(String[] args) { - System.out.println(new App().getGreeting()); - } -} diff --git a/src/main/java/JobServ/JobServClient.java b/src/main/java/JobServ/JobServClient.java new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/JobServ/JobServServer.java b/src/main/java/JobServ/JobServServer.java new file mode 100644 index 0000000..49bd771 --- /dev/null +++ b/src/main/java/JobServ/JobServServer.java @@ -0,0 +1,94 @@ +package JobServ; + +import io.grpc.Server; +import io.grpc.ServerBuilder; +import io.grpc.stub.StreamObserver; + +import java.io.IOException; +import java.util.logging.Logger; + +public class JobServServer { + private static final Logger logger = Logger.getLogger(JobServServer.class.getName()); + + private Server server; + + // starts the GRPC API Server + private void start() throws IOException { + // TODO: this should be passed in from a configuration manager + int port = 8448; + server = ServerBUilder.forPort(port) + .addService(new JobServImpl()) + .build() + .start(); + logger.info("Server initialized without tls"); + Runtime.getRuntime().addShutdownHook(new thread() { + @Override + public void run() { + // JVM shutdown might break logger functionality + // so investigate this.... + logger.info("Shutting down server"); + JobServServer.this.stop(); + } + }); + } + + private void stop() { + if (server != null) { + server.shutdown(); + } + } + + // spinlock for main() + private void blockUntilShutdown() throws InterruptedException { + if (server != null) { + server.awaitTermination(); + } + } + + // Main funciton. starts GRPC server and spins until server is shutdown + public static void main(String[] args) throws IOException, InterruptedException { + final JobServServer server = new JobServServer(); + server.start(); + server.blockUntilShutdown(); + } + + // wrap around stub code generated by GRPC + static class JobServImpl extends JobServGrpc.JobServImplBase { + + @Override + public void getStatusDetail(RequestMessage request, + StreamObserver responder) { + // TODO: Implement job controller, check request type, do the thing + JobStatusMessage reply = JobStatusMessage.newBuilder() + .setPID(-1) + .setProcessStatus(-1) + .build(); + responder.onNext(reply); + responder.onCompleted(); + } + + @Override + public void getJobOutput(RequestMessage request, + StreamObserver responder) { + // TODO: Implement job controller, get output, do the thing + OutputMessage reply = OutputMessage.newBuilder() + .setPID(-1) + .setProcessOutput("Hello World!") + .build(); + responder.onNext(reply); + responder.onCompleted(); + } + + @Override + public void makeNewJob(NewJobMessage request, + StreamObserver responder) { + // TODO: Implement job controller, Start Job, do the thing + JobStatusMessage reply = JobStatusMessage.newBuilder() + .setPID(-1) + .setProcessStatus(-1) + .build(): + responder.onNext(reply); + responder.onCompleted(); + } + } +} diff --git a/src/main/proto/jobserv.proto b/src/main/proto/jobserv.proto index 8d6632a..2256f87 100644 --- a/src/main/proto/jobserv.proto +++ b/src/main/proto/jobserv.proto @@ -23,11 +23,11 @@ message NewJobMessage { } message JobStatusMessage { - int32 PID = 1; - string ProcessStatus = 2; + int32 PID = 1; // linux PIDs, by default, go up to 2^22 + int32 ProcessStatus = 2; // TODO: figure out smallest possible data size for this } message OutputMessage { int32 PID = 1; string ProcessOutput = 2; -} \ No newline at end of file +}