From e61cedc9d43683985b67c8e29629f64fa6adb774 Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Wed, 5 Jan 2022 13:07:57 -0700
Subject: [PATCH] updated lib and ws-utils and refactored

---
 gradle.properties                             |  2 +-
 .../earthquake/nshmp/www/meta/Metadata.java   | 20 ----------------
 .../nshmp/www/services/HazardService.java     | 24 ++++++++++++-------
 .../nshmp/www/services/HazardService2.java    | 24 ++++++++++++-------
 .../nshmp/www/services/RateService.java       | 22 +++++++++--------
 .../nshmp/www/services/ServicesUtil.java      | 11 +++++----
 .../www/services/SourceLogicTreesService.java | 18 ++++++++++----
 .../nshmp/www/services/SourceServices.java    | 16 +++++++------
 8 files changed, 74 insertions(+), 63 deletions(-)

diff --git a/gradle.properties b/gradle.properties
index e2120f61b..a2ff82549 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -10,7 +10,7 @@ micronautRxVersion = 2.1.1
 micronautPluginVersion = 3.1.1
 nodePluginVersion = 3.0.1
 nodeVersion = 16.3.0
-nshmpLibVersion = 0.8.2
+nshmpLibVersion = 0.8.3
 nshmpWsUtilsVersion = 0.1.7
 shadowVersion = 7.1.2
 spotbugsVersion = 4.7.0
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Metadata.java b/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Metadata.java
index fd844d51d..1120be850 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Metadata.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Metadata.java
@@ -98,26 +98,6 @@ public final class Metadata {
     }
   }
 
-  public static String busyMessage(String url, long hits, long misses) {
-    Busy busy = new Busy(url, hits, misses);
-    return ServletUtil.GSON.toJson(busy);
-  }
-
-  static final String BUSY_MESSAGE = "Server busy. Please try again later. " +
-      "We apologize for any inconvenience while we increase capacity.";
-
-  private static class Busy {
-
-    final String status = Status.BUSY.toString();
-    final String request;
-    final String message;
-
-    private Busy(String request, long hits, long misses) {
-      this.request = request;
-      this.message = BUSY_MESSAGE + String.format(" (%s,%s)", hits, misses);
-    }
-  }
-
   public static String errorMessage(String url, Throwable e, boolean trace) {
     Error error = new Error(url, e, trace);
     return ServletUtil.GSON.toJson(error);
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
index 32468d638..8872903e3 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
@@ -24,16 +24,14 @@ import gov.usgs.earthquake.nshmp.gmm.Imt;
 import gov.usgs.earthquake.nshmp.model.HazardModel;
 import gov.usgs.earthquake.nshmp.model.SourceType;
 import gov.usgs.earthquake.nshmp.www.HazardController;
-import gov.usgs.earthquake.nshmp.www.Response;
+import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.WsUtils;
 import gov.usgs.earthquake.nshmp.www.meta.DoubleParameter;
 import gov.usgs.earthquake.nshmp.www.meta.Metadata;
 import gov.usgs.earthquake.nshmp.www.meta.Parameter;
-import gov.usgs.earthquake.nshmp.www.meta.Status;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceQueryData;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceRequestData;
 import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel;
-
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
 import jakarta.inject.Singleton;
@@ -53,8 +51,13 @@ public final class HazardService {
   public static HttpResponse<String> handleDoGetMetadata(HttpRequest<?> request) {
     var url = request.getUri().getPath();
     try {
-      var usage = new RequestMetadata(ServletUtil.model());// SourceServices.ResponseData();
-      var response = new Response<>(Status.USAGE, NAME, url, usage, url);
+      var usage = new RequestMetadata(ServletUtil.model());
+      var response = ResponseBody.usage()
+          .name(NAME)
+          .url(url)
+          .request(url)
+          .response(usage)
+          .build();
       var svcResponse = ServletUtil.GSON.toJson(response);
       return HttpResponse.ok(svcResponse);
     } catch (Exception e) {
@@ -82,7 +85,7 @@ public final class HazardService {
     }
   }
 
-  static Response<RequestData, ResponseData> process(
+  static ResponseBody<RequestData, ResponseData> process(
       HttpRequest<?> request,
       RequestData data)
       throws InterruptedException, ExecutionException {
@@ -322,7 +325,7 @@ public final class HazardService {
       return this;
     }
 
-    Response<RequestData, ResponseData> build() {
+    ResponseBody<RequestData, ResponseData> build() {
       var hazards = new ArrayList<HazardResponse>();
 
       for (Imt imt : totalMap.keySet()) {
@@ -347,7 +350,12 @@ public final class HazardService {
       Object server = Metadata.serverData(ServletUtil.THREAD_COUNT, timer);
       var response = new ResponseData(new ResponseMetadata(server), List.copyOf(hazards));
 
-      return new Response<>(Status.SUCCESS, NAME, request, response, url);
+      return ResponseBody.<RequestData, ResponseData> success()
+          .name(NAME)
+          .url(url)
+          .request(request)
+          .response(response)
+          .build();
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java
index 3e58e39dd..9dddf3208 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java
@@ -24,15 +24,13 @@ import gov.usgs.earthquake.nshmp.gmm.Imt;
 import gov.usgs.earthquake.nshmp.model.HazardModel;
 import gov.usgs.earthquake.nshmp.model.SourceType;
 import gov.usgs.earthquake.nshmp.www.HazardController;
-import gov.usgs.earthquake.nshmp.www.Response;
+import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.WsUtils;
 import gov.usgs.earthquake.nshmp.www.meta.DoubleParameter;
 import gov.usgs.earthquake.nshmp.www.meta.Metadata;
 import gov.usgs.earthquake.nshmp.www.meta.Parameter;
-import gov.usgs.earthquake.nshmp.www.meta.Status;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceQueryData;
 import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel;
-
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
 import jakarta.inject.Singleton;
@@ -53,7 +51,12 @@ public final class HazardService2 {
     var url = request.getUri().getPath();
     try {
       var usage = new RequestMetadata(ServletUtil.model());// SourceServices.ResponseData();
-      var response = new Response(Status.USAGE, NAME, url, usage, url);
+      var response = ResponseBody.usage()
+          .name(NAME)
+          .url(url)
+          .request(url)
+          .response(usage)
+          .build();
       var svcResponse = ServletUtil.GSON.toJson(response);
       return HttpResponse.ok(svcResponse);
     } catch (Exception e) {
@@ -75,7 +78,7 @@ public final class HazardService2 {
 
       // var data = new RequestData(query);
 
-      Response<RequestData, ResponseData> response = process(request, args);
+      ResponseBody<RequestData, ResponseData> response = process(request, args);
       String svcResponse = ServletUtil.GSON.toJson(response);
       return HttpResponse.ok(svcResponse);
 
@@ -84,7 +87,7 @@ public final class HazardService2 {
     }
   }
 
-  static Response<RequestData, ResponseData> process(
+  static ResponseBody<RequestData, ResponseData> process(
       HttpRequest<?> request,
       RequestData data) throws InterruptedException, ExecutionException {
 
@@ -323,7 +326,7 @@ public final class HazardService2 {
       return this;
     }
 
-    Response<RequestData, ResponseData> build() {
+    ResponseBody<RequestData, ResponseData> build() {
       var hazards = new ArrayList<HazardResponse>();
 
       for (Imt imt : totalMap.keySet()) {
@@ -348,7 +351,12 @@ public final class HazardService2 {
       Object server = Metadata.serverData(ServletUtil.THREAD_COUNT, timer);
       var response = new ResponseData(new ResponseMetadata(server), List.copyOf(hazards));
 
-      return new Response<>(Status.SUCCESS, NAME, request, response, url);
+      return ResponseBody.<RequestData, ResponseData> success()
+          .name(NAME)
+          .url(url)
+          .request(request)
+          .response(response)
+          .build();
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java
index e0772386a..84024d73e 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java
@@ -16,16 +16,14 @@ import gov.usgs.earthquake.nshmp.calc.Site;
 import gov.usgs.earthquake.nshmp.geo.Location;
 import gov.usgs.earthquake.nshmp.model.HazardModel;
 import gov.usgs.earthquake.nshmp.www.RateController;
-import gov.usgs.earthquake.nshmp.www.Response;
+import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.WsUtils;
 import gov.usgs.earthquake.nshmp.www.meta.DoubleParameter;
 import gov.usgs.earthquake.nshmp.www.meta.Metadata;
 import gov.usgs.earthquake.nshmp.www.meta.Metadata.DefaultParameters;
-import gov.usgs.earthquake.nshmp.www.meta.Status;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.Key;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceQueryData;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceRequestData;
-
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
 import jakarta.inject.Singleton;
@@ -60,8 +58,8 @@ public final class RateService {
   public static HttpResponse<String> handleDoGetUsage(HttpRequest<?> request, Service service) {
     try {
       var response = metadata(request, service);
-      var svcResponse = ServletUtil.GSON.toJson(response);
-      return HttpResponse.ok(svcResponse);
+      var json = ServletUtil.GSON.toJson(response);
+      return HttpResponse.ok(json);
     } catch (Exception e) {
       return ServicesUtil.handleError(e, service.name, request.getUri().getPath());
     }
@@ -96,22 +94,26 @@ public final class RateService {
     }
   }
 
-  static Response<String, Usage> metadata(HttpRequest<?> request, Service service) {
+  static ResponseBody<String, Usage> metadata(HttpRequest<?> request, Service service) {
     var parameters = service == Service.RATE ? new RateParameters() : new ProbabilityParameters();
     var usage = new Usage(service, parameters);
     var url = request.getUri().getPath();
-    return new Response<>(Status.USAGE, service.name, url, usage, url);
+    return ResponseBody.<String, Usage> usage()
+        .name(service.name)
+        .url(url)
+        .request(url)
+        .response(usage)
+        .build();
   }
 
-  static Response<RequestData, ResponseData> processRequest(
+  static ResponseBody<RequestData, ResponseData> processRequest(
       HttpRequest<?> request,
       Service service,
       RequestData data) throws InterruptedException, ExecutionException {
     var timer = Stopwatch.createStarted();
     var rates = calc(service, data);
     var responseData = new ResponseData(new ResponseMetadata(service, data), rates, timer);
-    return Response.<RequestData, ResponseData> builder()
-        .success()
+    return ResponseBody.<RequestData, ResponseData> success()
         .name(service.name)
         .request(data)
         .response(responseData)
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServicesUtil.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServicesUtil.java
index a3e6d6a37..583b7528d 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServicesUtil.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServicesUtil.java
@@ -11,10 +11,8 @@ import gov.usgs.earthquake.nshmp.calc.Hazard;
 import gov.usgs.earthquake.nshmp.calc.HazardCalcs;
 import gov.usgs.earthquake.nshmp.calc.Site;
 import gov.usgs.earthquake.nshmp.model.HazardModel;
-import gov.usgs.earthquake.nshmp.www.Response;
+import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.WsUtils;
-import gov.usgs.earthquake.nshmp.www.meta.Status;
-
 import io.micronaut.http.HttpResponse;
 
 public class ServicesUtil {
@@ -24,7 +22,12 @@ public class ServicesUtil {
       String name,
       String url) {
     var msg = e.getMessage() + " (see logs)";
-    var svcResponse = new Response<>(Status.ERROR, name, url, msg, url);
+    var svcResponse = ResponseBody.error()
+        .name(name)
+        .url(url)
+        .request(url)
+        .response(msg)
+        .build();
     var gson = new GsonBuilder().setPrettyPrinting().create();
     var response = gson.toJson(svcResponse);
     e.printStackTrace();
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java
index 823445be9..638850fcf 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java
@@ -1,10 +1,8 @@
 package gov.usgs.earthquake.nshmp.www.services;
 
 import gov.usgs.earthquake.nshmp.model.Models;
-import gov.usgs.earthquake.nshmp.www.Response;
+import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.SourceLogicTreesController;
-import gov.usgs.earthquake.nshmp.www.meta.Status;
-
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
 import jakarta.inject.Singleton;
@@ -25,7 +23,12 @@ public class SourceLogicTreesService {
 
     try {
       var trees = Models.trees(ServletUtil.model());
-      var response = new Response<>(Status.SUCCESS, NAME, url, trees, url);
+      var response = ResponseBody.success()
+          .name(NAME)
+          .url(url)
+          .request(url)
+          .response(trees)
+          .build();
       return HttpResponse.ok(ServletUtil.GSON.toJson(response));
     } catch (Exception e) {
       return ServicesUtil.handleError(e, NAME, url);
@@ -39,7 +42,12 @@ public class SourceLogicTreesService {
     try {
       var tree = Models.tree(ServletUtil.model(), id);
       var requestData = new RequestData(id);
-      var response = new Response<>(Status.SUCCESS, NAME, requestData, tree, url);
+      var response = ResponseBody.success()
+          .name(NAME)
+          .url(url)
+          .request(requestData)
+          .response(tree)
+          .build();
       return HttpResponse.ok(ServletUtil.GSON.toJson(response));
     } catch (Exception e) {
       return ServicesUtil.handleError(e, NAME, url);
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java
index 7db7d76b5..bc692eb6c 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java
@@ -11,11 +11,9 @@ import gov.usgs.earthquake.nshmp.gmm.Gmm;
 import gov.usgs.earthquake.nshmp.gmm.Imt;
 import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
 import gov.usgs.earthquake.nshmp.model.HazardModel;
-import gov.usgs.earthquake.nshmp.www.Response;
+import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.WsUtils;
 import gov.usgs.earthquake.nshmp.www.meta.Metadata;
-import gov.usgs.earthquake.nshmp.www.meta.Status;
-
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
 import jakarta.inject.Singleton;
@@ -48,10 +46,14 @@ public class SourceServices {
   public static HttpResponse<String> handleDoGetUsage(HttpRequest<?> request) {
     var url = request.getUri().getPath();
     try {
-      var response = new Response<>(
-          Status.USAGE, NAME, url, new ResponseData(), url);
-      var jsonString = GSON.toJson(response);
-      return HttpResponse.ok(jsonString);
+      var response = ResponseBody.usage()
+          .name(NAME)
+          .url(url)
+          .request(url)
+          .response(new ResponseData())
+          .build();
+      var json = GSON.toJson(response);
+      return HttpResponse.ok(json);
     } catch (Exception e) {
       return ServicesUtil.handleError(e, NAME, url);
     }
-- 
GitLab