From 57677f33173dd6b7e7b3e4bed158e5bc3b857af9 Mon Sep 17 00:00:00 2001 From: jonathan zollinger Date: Tue, 12 May 2026 09:52:57 -0600 Subject: [PATCH 1/2] feat: add observer submodule --- build.gradle.kts | 9 ++- cli/build.gradle.kts | 8 +-- core/build.gradle.kts | 8 +-- observer/build.gradle.kts | 66 +++++++++++++++++++ .../org/justserve/devkit/Application.java | 10 +++ observer/src/main/resources/application.yml | 10 +++ observer/src/main/resources/logback.xml | 14 ++++ .../org/justserve/devkit/ObserverSpec.groovy | 20 ++++++ .../src/test/resources/Application-test.yaml | 0 .../src/test/resources/SpockConfig.groovy | 0 settings.gradle | 3 +- 11 files changed, 137 insertions(+), 11 deletions(-) create mode 100644 observer/build.gradle.kts create mode 100644 observer/src/main/java/org/justserve/devkit/Application.java create mode 100644 observer/src/main/resources/application.yml create mode 100644 observer/src/main/resources/logback.xml create mode 100644 observer/src/test/groovy/org/justserve/devkit/ObserverSpec.groovy create mode 100644 observer/src/test/resources/Application-test.yaml create mode 100644 observer/src/test/resources/SpockConfig.groovy diff --git a/build.gradle.kts b/build.gradle.kts index 3cfe025..6dd2f7c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,10 @@ plugins { id("it.nicolasfarabegoli.conventional-commits") version "3.1.3" + id("io.micronaut.application") version "4.6.2" apply false + id("io.micronaut.library") version "4.5.3" apply false + id("io.micronaut.openapi") version "4.5.3" apply false + id("io.micronaut.aot") version "4.6.2" apply false + id("com.gradleup.shadow") version "8.3.9" apply false + id("org.graalvm.buildtools.native") version "0.10.6" apply false + id("com.github.hauner.jarTest") version "1.1.0" apply false } - - diff --git a/cli/build.gradle.kts b/cli/build.gradle.kts index b6db6cd..46ba51e 100644 --- a/cli/build.gradle.kts +++ b/cli/build.gradle.kts @@ -3,9 +3,9 @@ import java.util.* plugins { id("groovy") - id("io.micronaut.application") version "4.6.2" - id("com.gradleup.shadow") version "8.3.9" - id("org.graalvm.buildtools.native") version "0.10.6" + id("io.micronaut.application") + id("com.gradleup.shadow") + id("org.graalvm.buildtools.native") } group = "org.justserve" @@ -75,4 +75,4 @@ graalvmNative.binaries { imageName.set("justserve") buildArgs.add("--color=always") } -} \ No newline at end of file +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index f0e2760..5148922 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -3,9 +3,9 @@ import java.util.* plugins { id("groovy") - id("io.micronaut.library") version "4.5.3" - id("io.micronaut.openapi") version "4.5.3" - id("com.github.hauner.jarTest") version "1.1.0" + id("io.micronaut.library") + id("io.micronaut.openapi") + id("com.github.hauner.jarTest") } version = project.properties["justserveCliVersion"]!! @@ -77,4 +77,4 @@ tasks.withType { filesMatching("**/application.yml") { filter(mapOf("tokens" to props), ReplaceTokens::class.java) } -} \ No newline at end of file +} diff --git a/observer/build.gradle.kts b/observer/build.gradle.kts new file mode 100644 index 0000000..a7cfa7f --- /dev/null +++ b/observer/build.gradle.kts @@ -0,0 +1,66 @@ +plugins { + id("groovy") + id("io.micronaut.application") + id("com.gradleup.shadow") + id("io.micronaut.aot") +} + +version = "0.1" +group = "org.justserve.devkit" + + + +repositories { + mavenCentral() +} + +dependencies { + annotationProcessor("org.projectlombok:lombok") + annotationProcessor("io.micronaut:micronaut-http-validation") + annotationProcessor("io.micronaut.micrometer:micronaut-micrometer-annotation") + annotationProcessor("io.micronaut.serde:micronaut-serde-processor") + implementation("io.micronaut:micronaut-management") + implementation("io.micronaut.micrometer:micronaut-micrometer-core") + implementation("io.micronaut.micrometer:micronaut-micrometer-observation") + implementation("io.micronaut.micrometer:micronaut-micrometer-registry-prometheus") + implementation("io.micronaut.serde:micronaut-serde-jackson") + implementation(project(":core")) + compileOnly("io.micronaut:micronaut-http-client") + compileOnly("org.projectlombok:lombok") + runtimeOnly("ch.qos.logback:logback-classic") + runtimeOnly("org.yaml:snakeyaml") + testImplementation("io.micronaut:micronaut-http-client") +} + + + +application { + mainClass = "org.justserve.devkit.Application" +} + +java { + sourceCompatibility = JavaVersion.toVersion("21") + targetCompatibility = JavaVersion.toVersion("21") +} + +micronaut { + runtime("netty") + testRuntime("spock2") + processing { + incremental(true) + annotations("org.justserve.devkit.*") + } + aot { + // Please review carefully the optimizations enabled below + // Check https://micronaut-projects.github.io/micronaut-aot/latest/guide/ for more details + optimizeServiceLoading = false + convertYamlToJava = false + precomputeOperations = true + cacheEnvironment = true + optimizeClassLoading = true + deduceEnvironment = true + optimizeNetty = true + replaceLogbackXml = true + } + +} diff --git a/observer/src/main/java/org/justserve/devkit/Application.java b/observer/src/main/java/org/justserve/devkit/Application.java new file mode 100644 index 0000000..ec3bb1d --- /dev/null +++ b/observer/src/main/java/org/justserve/devkit/Application.java @@ -0,0 +1,10 @@ +package org.justserve.devkit; + +import io.micronaut.runtime.Micronaut; + +public class Application { + + public static void main(String[] args) { + Micronaut.run(Application.class, args); + } +} \ No newline at end of file diff --git a/observer/src/main/resources/application.yml b/observer/src/main/resources/application.yml new file mode 100644 index 0000000..a970cfc --- /dev/null +++ b/observer/src/main/resources/application.yml @@ -0,0 +1,10 @@ +micronaut: + application: + name: observer + metrics: + enabled: true + export: + prometheus: + enabled: true + descriptions: true + step: PT1M diff --git a/observer/src/main/resources/logback.xml b/observer/src/main/resources/logback.xml new file mode 100644 index 0000000..2d77bda --- /dev/null +++ b/observer/src/main/resources/logback.xml @@ -0,0 +1,14 @@ + + + + + + %cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n + + + + + + + diff --git a/observer/src/test/groovy/org/justserve/devkit/ObserverSpec.groovy b/observer/src/test/groovy/org/justserve/devkit/ObserverSpec.groovy new file mode 100644 index 0000000..c6bb1fb --- /dev/null +++ b/observer/src/test/groovy/org/justserve/devkit/ObserverSpec.groovy @@ -0,0 +1,20 @@ +package org.justserve.devkit + + +import io.micronaut.runtime.EmbeddedApplication +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import spock.lang.Specification +import jakarta.inject.Inject + +@MicronautTest +class ObserverSpec extends Specification { + + @Inject + EmbeddedApplication application + + void 'test it works'() { + expect: + application.running + } + +} diff --git a/observer/src/test/resources/Application-test.yaml b/observer/src/test/resources/Application-test.yaml new file mode 100644 index 0000000..e69de29 diff --git a/observer/src/test/resources/SpockConfig.groovy b/observer/src/test/resources/SpockConfig.groovy new file mode 100644 index 0000000..e69de29 diff --git a/settings.gradle b/settings.gradle index 9025124..62e8734 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,9 +11,10 @@ rootProject.name="devkit" include "core" include "cli" +include 'observer' dependencyResolutionManagement { repositories { mavenCentral() } -} +} \ No newline at end of file From fbc4ce53761d888d1ba50a2e2ee9ba0dec694c14 Mon Sep 17 00:00:00 2001 From: jonathan zollinger Date: Wed, 13 May 2026 12:21:10 -0600 Subject: [PATCH 2/2] fix(test): bad UUID now returns 500 error --- .../groovy/org/justserve/BoundaryPermissionSpec.groovy | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/test/groovy/org/justserve/BoundaryPermissionSpec.groovy b/core/src/test/groovy/org/justserve/BoundaryPermissionSpec.groovy index 596b38b..992bf23 100644 --- a/core/src/test/groovy/org/justserve/BoundaryPermissionSpec.groovy +++ b/core/src/test/groovy/org/justserve/BoundaryPermissionSpec.groovy @@ -5,7 +5,7 @@ import io.micronaut.test.extensions.spock.annotation.MicronautTest import org.justserve.client.BoundaryPermissionClient import spock.lang.Shared -import static io.micronaut.http.HttpStatus.FORBIDDEN +import static io.micronaut.http.HttpStatus.INTERNAL_SERVER_ERROR import static io.micronaut.http.HttpStatus.UNAUTHORIZED @MicronautTest @@ -43,9 +43,9 @@ class BoundaryPermissionSpec extends JustServeSpec { exception.status == expectedError where: - client | expectedError | orgID | title - noAuthBoundaryPermissionClient | UNAUTHORIZED | createOrg() | "as an unauthorized user" - authBoundaryPermissionClient | FORBIDDEN | UUID.randomUUID() | "with a non-existent OrgID" + client | expectedError | orgID | title + noAuthBoundaryPermissionClient | UNAUTHORIZED | createOrg() | "as an unauthorized user" + authBoundaryPermissionClient | INTERNAL_SERVER_ERROR | UUID.randomUUID() | "with a non-existent OrgID" }