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