From 8de13326d2feb1f4b80396ea8b3269912b82ce1c Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Wed, 29 Jan 2025 21:54:01 +0100 Subject: [PATCH] feat: record timestamp and duration on sensor measure --- .../java/net/laprun/sustainability/power/SensorMeasure.java | 4 ++-- .../power/sensors/linux/rapl/IntelRAPLSensor.java | 4 +++- .../sensors/macos/powermetrics/MacOSPowermetricsSensor.java | 4 +++- .../sustainability/power/sensors/test/TestPowerSensor.java | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/metadata/src/main/java/net/laprun/sustainability/power/SensorMeasure.java b/metadata/src/main/java/net/laprun/sustainability/power/SensorMeasure.java index e97352a..c1a01e7 100644 --- a/metadata/src/main/java/net/laprun/sustainability/power/SensorMeasure.java +++ b/metadata/src/main/java/net/laprun/sustainability/power/SensorMeasure.java @@ -8,9 +8,9 @@ * @param components an array recording the power consumption reported by each component of this sensor * @param tick the ordinal tick associated with this measure */ -public record SensorMeasure(double[] components, long tick) { +public record SensorMeasure(double[] components, long tick, long timestamp, long duration) { /** * Represents an invalid or somehow missed measure. */ - public static final SensorMeasure missing = new SensorMeasure(new double[] { -1.0 }, -1); + public static final SensorMeasure missing = new SensorMeasure(new double[] { -1.0 }, -1, -1, -1); } diff --git a/server/src/main/java/net/laprun/sustainability/power/sensors/linux/rapl/IntelRAPLSensor.java b/server/src/main/java/net/laprun/sustainability/power/sensors/linux/rapl/IntelRAPLSensor.java index fe2656f..3d61cd7 100644 --- a/server/src/main/java/net/laprun/sustainability/power/sensors/linux/rapl/IntelRAPLSensor.java +++ b/server/src/main/java/net/laprun/sustainability/power/sensors/linux/rapl/IntelRAPLSensor.java @@ -133,6 +133,7 @@ public boolean isStarted() { @Override public Measures update(Long tick) { + final long start = System.currentTimeMillis(); final var measure = new double[raplFiles.length]; for (int i = 0; i < raplFiles.length; i++) { final var value = raplFiles[i].extractEnergyInMicroJoules(); @@ -140,7 +141,8 @@ public Measures update(Long tick) { measure[i] = newComponentValue; lastMeasuredSensorValues[i] = newComponentValue; } - measures.singleMeasure(new SensorMeasure(measure, tick)); + final long timestamp = System.currentTimeMillis(); + measures.singleMeasure(new SensorMeasure(measure, tick, timestamp, timestamp - start)); return measures; } } diff --git a/server/src/main/java/net/laprun/sustainability/power/sensors/macos/powermetrics/MacOSPowermetricsSensor.java b/server/src/main/java/net/laprun/sustainability/power/sensors/macos/powermetrics/MacOSPowermetricsSensor.java index 464cdc5..d938030 100644 --- a/server/src/main/java/net/laprun/sustainability/power/sensors/macos/powermetrics/MacOSPowermetricsSensor.java +++ b/server/src/main/java/net/laprun/sustainability/power/sensors/macos/powermetrics/MacOSPowermetricsSensor.java @@ -118,6 +118,7 @@ public ProcessRecord(String line) throws IllegalArgumentException { } Measures extractPowerMeasure(InputStream powerMeasureInput, Long tick) { + final long start = System.currentTimeMillis(); try { // Should not be closed since it closes the process BufferedReader input = new BufferedReader(new InputStreamReader(powerMeasureInput)); @@ -196,7 +197,8 @@ Measures extractPowerMeasure(InputStream powerMeasureInput, Long tick) { } }); - measures.record(pid, new SensorMeasure(measure, tick)); + final long timestamp = System.currentTimeMillis(); + measures.record(pid, new SensorMeasure(measure, tick, timestamp, timestamp - start)); }); } catch (Exception exception) { throw new RuntimeException(exception); diff --git a/server/src/main/java/net/laprun/sustainability/power/sensors/test/TestPowerSensor.java b/server/src/main/java/net/laprun/sustainability/power/sensors/test/TestPowerSensor.java index 8d7a191..8219f1a 100644 --- a/server/src/main/java/net/laprun/sustainability/power/sensors/test/TestPowerSensor.java +++ b/server/src/main/java/net/laprun/sustainability/power/sensors/test/TestPowerSensor.java @@ -47,7 +47,8 @@ public void start(long samplingFrequencyInMillis) { @Override public Measures update(Long tick) { - measures.trackedPIDs().forEach(pid -> measures.record(pid, new SensorMeasure(new double[] { Math.random() }, tick))); + measures.trackedPIDs().forEach(pid -> measures.record(pid, + new SensorMeasure(new double[] { Math.random() }, tick, System.currentTimeMillis(), 0))); return measures; } }