From 20e5802972b82be6c1d3bbbf401f0a0220a8d333 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Fri, 10 Jan 2025 15:22:28 -0700
Subject: [PATCH] test

---
 gradle/dependencies.gradle                    |  2 +-
 .../nshmp/www/SwaggerController.java          |  2 +-
 .../nshmp/www/hazard/DisaggController.java    | 12 +++++
 .../nshmp/www/hazard/HazardController.java    | 33 +++++++++++--
 .../nshmp/www/hazard/HazardService.java       | 48 ++++++++++++++++--
 src/main/resources/application.yml            |  2 +-
 .../www/hazard/HazardControllerTests.java     | 49 +++++++++++++++++++
 7 files changed, 138 insertions(+), 10 deletions(-)
 create mode 100644 src/test/java/gov/usgs/earthquake/nshmp/www/hazard/HazardControllerTests.java

diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 5c0b8b38..c35b1c2e 100644
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -14,7 +14,7 @@ dependencies {
   // Micronaut
   annotationProcessor("io.micronaut:micronaut-http-validation")
   implementation("io.micronaut:micronaut-jackson-databind")
-  implementation("io.micronaut.aws:micronaut-aws-apigateway")
+  // implementation("io.micronaut.aws:micronaut-aws-apigateway")
   implementation("io.micronaut.crac:micronaut-crac")
   implementation("jakarta.annotation:jakarta.annotation-api")
   implementation("io.micronaut.aws:micronaut-function-aws-api-proxy")
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
index f629ac32..b9e0e029 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
@@ -55,7 +55,7 @@ public class SwaggerController {
     Logger log = Logger.getAnonymousLogger();
     var openApi = new OpenAPIV3Parser().read("META-INF/swagger/nshmp-haz.yml");
     var bounds = model.bounds();
-    log.info("a");
+    log.info("Swagger endpoint");
     // SwaggerUtils.addLocationBounds(openApi, bounds.min, bounds.max);
     log.info("b");
     var components = openApi.getComponents();
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
index 96749dde..962b5ad5 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
@@ -2,8 +2,10 @@ package gov.usgs.earthquake.nshmp.www.hazard;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
+import java.util.Arrays;
 import java.util.Map;
 import java.util.Set;
+import java.util.logging.Logger;
 
 import gov.usgs.earthquake.nshmp.calc.DataType;
 import gov.usgs.earthquake.nshmp.gmm.Imt;
@@ -63,7 +65,9 @@ public class DisaggController {
           schema = @Schema(implementation = MetadataResponse.class)))
   @Get(produces = MediaType.APPLICATION_JSON)
   public HttpResponse<String> doGetMetadata(HttpRequest<?> http) {
+    Logger log = Logger.getAnonymousLogger();
     try {
+      log.info("Disagg usage");
       return DisaggService.getMetadata(http);
     } catch (Exception e) {
       return ServletUtil.error(
@@ -108,13 +112,21 @@ public class DisaggController {
           maximum = "10000") @PathVariable double returnPeriod,
       @QueryValue @Nullable Set<Imt> imt,
       @QueryValue @Nullable Set<DisaggDataType> out) {
+    Logger log = Logger.getAnonymousLogger();
     try {
+      log.info("Disagg calla sda");
       Set<Imt> imts = HazardService.readImts(http);
       Set<DataType> dataTypes = HazardService.readDataTypes(http);
       DisaggService.RequestRp request = new DisaggService.RequestRp(
           http, longitude, latitude, vs30, imts, returnPeriod, dataTypes);
       return DisaggService.getDisaggRp(request);
     } catch (Exception e) {
+      log.info("Error asdasd:");
+      log.info(e.getMessage());
+
+      log.info("Disagg stack trace: ");
+      log.info(Arrays.toString(e.getStackTrace()));
+
       return ServletUtil.error(
           DisaggService.LOG, e,
           DisaggService.NAME,
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
index 7a326367..07da292b 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
@@ -3,7 +3,10 @@ package gov.usgs.earthquake.nshmp.www.hazard;
 import java.util.Set;
 import java.util.logging.Logger;
 
+import gov.usgs.earthquake.nshmp.gmm.Gmm;
 import gov.usgs.earthquake.nshmp.gmm.Imt;
+import gov.usgs.earthquake.nshmp.model.SourceType;
+import gov.usgs.earthquake.nshmp.model.TectonicSetting;
 import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet;
 import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.ServletUtil;
@@ -47,6 +50,20 @@ public class HazardController {
   @Inject
   private NshmpMicronautServlet servlet;
 
+  @Get(produces = MediaType.APPLICATION_JSON, uri = "/config")
+  public HttpResponse<String> doGetConfig(HttpRequest<?> http) {
+    var config = ServletUtil.model().config();
+
+    return HttpResponse.ok(config.toString());
+  }
+
+  @Get(produces = MediaType.APPLICATION_JSON, uri = "/imts")
+  public HttpResponse<String> doGetImts(HttpRequest<?> http) {
+    var config = Gmm.supportedImts(ServletUtil.model().gmms());
+
+    return HttpResponse.ok(ServletUtil.GSON2.toJson(config));
+  }
+
   @Operation(
       summary = "Hazard calculation model and service metadata",
       description = "Returns details of the installed model and service request parameters",
@@ -58,9 +75,15 @@ public class HazardController {
           schema = @Schema(implementation = MetadataResponse.class)))
   @Get(produces = MediaType.APPLICATION_JSON)
   public HttpResponse<String> doGetMetadata(HttpRequest<?> http) {
+    var log = Logger.getAnonymousLogger();
     try {
-      return HazardService.getMetadata(http);
+      log.info("Do get metadata");
+      log.info("HazardService.getMetadata");
+      var response = HazardService.getMetadata(http);
+      log.info("asdasdsddsasad");
+      return response;
     } catch (Exception e) {
+      log.info(e.getMessage());
       return ServletUtil.error(
           HazardService.LOG, e,
           HazardService.NAME,
@@ -88,7 +111,7 @@ public class HazardController {
       content = @Content(
           schema = @Schema(implementation = HazardResponse.class)))
   @Get(
-      uri = "/{longitude}/{latitude}/{vs30}{?truncate,maxdir,imt}",
+      uri = "/{longitude}/{latitude}/{vs30}{?truncate,maxdir,imt,sourceType,tectonicSetting}",
       produces = MediaType.APPLICATION_JSON)
   public HttpResponse<String> doGetHazard(
       HttpRequest<?> http,
@@ -101,14 +124,16 @@ public class HazardController {
           defaultValue = "false") @Nullable Boolean truncate,
       @QueryValue(
           defaultValue = "false") @Nullable Boolean maxdir,
-      @QueryValue @Nullable Set<Imt> imt) {
+      @QueryValue @Nullable Set<Imt> imt,
+      @QueryValue @Nullable SourceType sourceType,
+      @QueryValue @Nullable TectonicSetting tectonicSetting) {
     try {
       Logger log = Logger.getAnonymousLogger();
       log.info("Hazard call");
       log.info("Thread count: " + ServletUtil.THREAD_COUNT);
       Set<Imt> imts = HazardService.readImts(http);
       HazardService.Request request = new HazardService.Request(
-          http, longitude, latitude, vs30, imts, truncate, maxdir);
+          http, longitude, latitude, vs30, imts, truncate, maxdir, sourceType, tectonicSetting);
       return HazardService.getHazard(request);
     } catch (Exception e) {
       return ServletUtil.error(
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java
index 8cedf4fd..88e8a9c6 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java
@@ -35,6 +35,7 @@ import gov.usgs.earthquake.nshmp.gmm.Gmm;
 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.model.TectonicSetting;
 import gov.usgs.earthquake.nshmp.www.HazVersion;
 import gov.usgs.earthquake.nshmp.www.ResponseBody;
 import gov.usgs.earthquake.nshmp.www.ResponseMetadata;
@@ -63,8 +64,14 @@ public final class HazardService {
   private static final String TOTAL_KEY = "Total";
 
   public static HttpResponse<String> getMetadata(HttpRequest<?> request) {
-    var url = request.getUri().getPath();
-    var usage = new Metadata(ServletUtil.model());
+    var log = java.util.logging.Logger.getAnonymousLogger();
+    var url = "test"; // request.getUri().getPath();
+    log.info("A");
+    var model = ServletUtil.model();
+    log.info("B");
+    log.info(model.name());
+    var usage = new Metadata(model);
+    log.info("C");
     var body = ResponseBody.usage()
         .name(NAME)
         .url(url)
@@ -72,7 +79,9 @@ public final class HazardService {
         .request(url)
         .response(usage)
         .build();
+    log.info("D");
     var json = ServletUtil.GSON2.toJson(body);
+    log.info("E");
     return HttpResponse.ok(json);
   }
 
@@ -115,6 +124,28 @@ public final class HazardService {
         .imts(request.imts)
         .build();
 
+    if (request.sourceType != null) {
+      config.hazard.sourceTypes.clear();
+      // config.hazard.sourceTypes.addAll(
+      // Stream.of(SourceType.values())
+      // .filter(sourceType -> sourceType != request.sourceType)
+      // .collect(Collectors.toSet())
+      // );
+      config.hazard.sourceTypes.add(request.sourceType);
+    }
+
+    // if (request.tectonicSetting != null) {
+    // config.hazard.tectonicSettings.clear();
+    // // config.hazard.tectonicSettings.add(request.tectonicSetting);
+    // config.hazard.tectonicSettings.addAll(
+    // Stream.of(TectonicSetting.values())
+    // .filter(tectonicSetting -> tectonicSetting != request.tectonicSetting)
+    // .collect(Collectors.toSet())
+    // );
+    // }
+
+    System.out.println(config.toString());
+
     Location loc = Location.create(request.longitude, request.latitude);
     Site site = Sites.locationToSite(loc, model.siteData(), OptionalDouble.of(request.vs30));
 
@@ -135,19 +166,24 @@ public final class HazardService {
     final DoubleParameter vs30;
 
     Metadata(HazardModel model) {
+      var log = java.util.logging.Logger.getAnonymousLogger();
+      log.info("Model: A");
       this.model = new SourceModel(model);
+      log.info("Model: B");
       longitude = new DoubleParameter(
           "Longitude",
           "°",
           model.bounds().min.longitude,
           model.bounds().max.longitude);
 
+      log.info("Model: C");
       latitude = new DoubleParameter(
           "Latitude",
           "°",
           model.bounds().min.latitude,
           model.bounds().max.latitude);
 
+      log.info("Model: D");
       vs30 = new DoubleParameter(
           "Vs30",
           "m/s",
@@ -207,6 +243,8 @@ public final class HazardService {
     final boolean truncate;
     final boolean maxdir;
     final Set<Imt> imts;
+    final SourceType sourceType;
+    final TectonicSetting tectonicSetting;
 
     public Request(
         HttpRequest<?> http,
@@ -215,10 +253,14 @@ public final class HazardService {
         double vs30,
         Set<Imt> imts,
         boolean truncate,
-        boolean maxdir) {
+        boolean maxdir,
+        SourceType sourceType,
+        TectonicSetting tectonicSetting) {
       super(http, longitude, latitude, vs30);
       this.truncate = truncate;
       this.maxdir = maxdir;
+      this.sourceType = sourceType;
+      this.tectonicSetting = tectonicSetting;
       this.imts = imts.isEmpty()
           ? Gmm.supportedImts(ServletUtil.model().gmms())
           : imts;
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 5d7de4be..bda22c4f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -21,5 +21,5 @@ nshmp-haz:
   # To specify the model to use:
   #     java -jar build/libs/nshmp-haz.jar --model=<path/to/model>
   #
-  model-path: ${MODEL:nshms/nshm-alaska-2007}
+  model-path: ${MODEL:nshms/nshm-conus-2018}
   context-path: ${CONTEXT_PATH:}
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/www/hazard/HazardControllerTests.java b/src/test/java/gov/usgs/earthquake/nshmp/www/hazard/HazardControllerTests.java
new file mode 100644
index 00000000..24bcc98f
--- /dev/null
+++ b/src/test/java/gov/usgs/earthquake/nshmp/www/hazard/HazardControllerTests.java
@@ -0,0 +1,49 @@
+package gov.usgs.earthquake.nshmp.www.hazard;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import com.amazonaws.serverless.exceptions.ContainerInitializationException;
+import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext;
+import com.amazonaws.serverless.proxy.model.AwsProxyRequest;
+import com.amazonaws.serverless.proxy.model.AwsProxyResponse;
+import com.amazonaws.services.lambda.runtime.Context;
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import gov.usgs.earthquake.nshmp.www.ServletUtil;
+
+import io.micronaut.function.aws.proxy.MicronautLambdaHandler;
+
+public class HazardControllerTests {
+
+  private static MicronautLambdaHandler handler;
+  private static Context lambdaContext = new MockLambdaContext();
+
+  @BeforeAll
+  public static void setupSpec() {
+    try {
+      handler = new MicronautLambdaHandler();
+    } catch (ContainerInitializationException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @AfterAll
+  public static void cleanupSpec() {
+    handler.getApplicationContext().close();
+  }
+
+  @Test
+  void testHandler() throws JsonProcessingException {
+    AwsProxyRequest request = new AwsProxyRequest();
+    request.setHttpMethod("GET");
+    request.setPath("/hazard/imts");
+    System.out.println(ServletUtil.GSON2.toJson(request));
+    AwsProxyResponse response = handler.handleRequest(request, lambdaContext);
+    System.out.println(response.getBody());
+    assertEquals(200, response.getStatusCode());
+  }
+}
-- 
GitLab