From 0f929178d9864d002ac301f42fd0c9d9cc0290e0 Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Wed, 8 Oct 2025 10:28:38 +0200 Subject: [PATCH] feat: extract persistence module --- backend/pom.xml | 11 +---- persistence/pom.xml | 49 +++++++++++++++++++ .../power/persistence/Measure.java | 0 .../power/persistence/Persistence.java | 0 .../persistence/SQLiteFilePersister.java | 2 +- .../src/main/resources/META-INF/beans.xml | 0 pom.xml | 1 + server/pom.xml | 5 ++ .../sustainability/power/PowerMeasurer.java | 17 ------- .../sustainability/power/PowerResource.java | 6 ++- 10 files changed, 62 insertions(+), 29 deletions(-) create mode 100644 persistence/pom.xml rename {backend => persistence}/src/main/java/net/laprun/sustainability/power/persistence/Measure.java (100%) rename {backend => persistence}/src/main/java/net/laprun/sustainability/power/persistence/Persistence.java (100%) rename {backend => persistence}/src/main/java/net/laprun/sustainability/power/persistence/SQLiteFilePersister.java (96%) create mode 100644 persistence/src/main/resources/META-INF/beans.xml diff --git a/backend/pom.xml b/backend/pom.xml index 1a01f33..ce8dd20 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -21,16 +21,7 @@ io.quarkus - quarkus-hibernate-orm-panache - - - io.quarkus - quarkus-scheduler - - - io.quarkiverse.jdbc - quarkus-jdbc-sqlite4j - ${sqlite4j.version} + quarkus-arc io.quarkus diff --git a/persistence/pom.xml b/persistence/pom.xml new file mode 100644 index 0000000..d67db43 --- /dev/null +++ b/persistence/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + net.laprun.sustainability + power-server-parent + 0.3.0-SNAPSHOT + + + power-server-persistence + power-server : persistence + Output measures to a database + + + + net.laprun.sustainability + power-server-metadata + ${project.version} + + + io.quarkus + quarkus-hibernate-orm-panache + + + io.quarkus + quarkus-scheduler + + + io.quarkiverse.jdbc + quarkus-jdbc-sqlite4j + ${sqlite4j.version} + + + + + + + net.revelc.code.formatter + formatter-maven-plugin + + ../contributing/eclipse-format.xml + + + + + + diff --git a/backend/src/main/java/net/laprun/sustainability/power/persistence/Measure.java b/persistence/src/main/java/net/laprun/sustainability/power/persistence/Measure.java similarity index 100% rename from backend/src/main/java/net/laprun/sustainability/power/persistence/Measure.java rename to persistence/src/main/java/net/laprun/sustainability/power/persistence/Measure.java diff --git a/backend/src/main/java/net/laprun/sustainability/power/persistence/Persistence.java b/persistence/src/main/java/net/laprun/sustainability/power/persistence/Persistence.java similarity index 100% rename from backend/src/main/java/net/laprun/sustainability/power/persistence/Persistence.java rename to persistence/src/main/java/net/laprun/sustainability/power/persistence/Persistence.java diff --git a/backend/src/main/java/net/laprun/sustainability/power/persistence/SQLiteFilePersister.java b/persistence/src/main/java/net/laprun/sustainability/power/persistence/SQLiteFilePersister.java similarity index 96% rename from backend/src/main/java/net/laprun/sustainability/power/persistence/SQLiteFilePersister.java rename to persistence/src/main/java/net/laprun/sustainability/power/persistence/SQLiteFilePersister.java index 7e6e26d..c0e48ad 100644 --- a/backend/src/main/java/net/laprun/sustainability/power/persistence/SQLiteFilePersister.java +++ b/persistence/src/main/java/net/laprun/sustainability/power/persistence/SQLiteFilePersister.java @@ -25,7 +25,7 @@ @Singleton public class SQLiteFilePersister { private final AtomicBoolean executing = new AtomicBoolean(false); - @ConfigProperty(name = "power-server.db.backup.location") + @ConfigProperty(name = "power-server.db.backup.location", defaultValue = "power-server-db.sqlite") String dbFilelocation; @Inject DataSource dataSource; diff --git a/persistence/src/main/resources/META-INF/beans.xml b/persistence/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml index c53cb3b..84bea56 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,7 @@ server cli if-manifest-export + persistence diff --git a/server/pom.xml b/server/pom.xml index da6e094..c62a04a 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -19,6 +19,11 @@ power-server-backend ${project.version} + + net.laprun.sustainability + power-server-persistence + ${project.version} + io.quarkus quarkus-rest-jackson diff --git a/server/src/main/java/net/laprun/sustainability/power/PowerMeasurer.java b/server/src/main/java/net/laprun/sustainability/power/PowerMeasurer.java index 649325b..9bc5834 100644 --- a/server/src/main/java/net/laprun/sustainability/power/PowerMeasurer.java +++ b/server/src/main/java/net/laprun/sustainability/power/PowerMeasurer.java @@ -9,8 +9,6 @@ import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.infrastructure.Infrastructure; -import io.smallrye.mutiny.subscription.Cancellable; -import net.laprun.sustainability.power.persistence.Persistence; import net.laprun.sustainability.power.sensors.Measures; import net.laprun.sustainability.power.sensors.PowerSensor; import net.laprun.sustainability.power.sensors.RegisteredPID; @@ -22,9 +20,6 @@ public class PowerMeasurer { @Inject PowerSensor sensor; - @Inject - Persistence persistence; - @ConfigProperty(name = "net.laprun.sustainability.power.sampling-period", defaultValue = DEFAULT_SAMPLING_PERIOD) Duration samplingPeriod; @@ -40,14 +35,6 @@ public Multi uncheckedStream(long pid) throws Exception { return periodicSensorCheck.map(measures -> measures.getOrDefault(registeredPID)); } - public Cancellable startTrackingApp(String appName, long pid) throws Exception { - return uncheckedStream(pid).subscribe().with(m -> persistence.save(m, appName)); - } - - public Cancellable startTrackingProcess(Process process) throws Exception { - return startTrackingApp(process.info().commandLine().orElseThrow(), process.pid()); - } - private RegisteredPID track(long pid) throws Exception { if (!sensor.isStarted()) { sensor.start(samplingPeriod.toMillis()); @@ -79,8 +66,4 @@ public SensorMetadata metadata() { public Duration getSamplingPeriod() { return samplingPeriod; } - - public Persistence persistence() { - return persistence; - } } diff --git a/server/src/main/java/net/laprun/sustainability/power/PowerResource.java b/server/src/main/java/net/laprun/sustainability/power/PowerResource.java index 37dd641..3dc1bf6 100644 --- a/server/src/main/java/net/laprun/sustainability/power/PowerResource.java +++ b/server/src/main/java/net/laprun/sustainability/power/PowerResource.java @@ -18,12 +18,16 @@ import io.quarkus.runtime.StartupEvent; import io.smallrye.mutiny.Multi; import net.laprun.sustainability.power.persistence.Measure; +import net.laprun.sustainability.power.persistence.Persistence; @Path("/power") public class PowerResource { @Inject PowerMeasurer measurer; + @Inject + Persistence persistence; + public void onStartup(@Observes StartupEvent event) { Log.info("\nConfigured sampling period: " + samplingPeriod() + "\nDetected metadata:\n" + metadata()); @@ -44,7 +48,7 @@ public Multi streamMeasuresFor(@PathParam("pid") String pid) thro @Path("start/{appName}/{pid}") public void startMeasure(@PathParam("appName") String appName, @PathParam("pid") String pid) throws Exception { try { - measurer.startTrackingApp(appName, measurer.validPIDOrFail(pid)); + measurer.uncheckedStream(measurer.validPIDOrFail(pid)).subscribe().with(m -> persistence.save(m, appName)); } catch (IllegalArgumentException e) { throw new NotFoundException("Unknown process: " + pid); }