From 435cbbdb95f174572c7fe481dd0aad6c2da24189 Mon Sep 17 00:00:00 2001 From: reusedname <155286845+reusedname@users.noreply.github.com> Date: Tue, 17 Dec 2024 11:05:06 +0500 Subject: [PATCH] debug statistics (recording iteration lag) --- common/pom.xml | 10 +++++++++ .../recorder/SimplifiedLocalRecorder.java | 1 + .../main/java/ctbrec/recorder/Statistics.java | 21 +++++++++++++++++++ .../download/hls/AbstractHlsDownload.java | 2 ++ .../ctbrec/recorder/server/DebugServlet.java | 9 ++++++++ 5 files changed, 43 insertions(+) create mode 100644 common/src/main/java/ctbrec/recorder/Statistics.java diff --git a/common/pom.xml b/common/pom.xml index 226beee5..e7268b9b 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -88,6 +88,16 @@ ch.qos.logback logback-classic test + + + com.fasterxml.jackson.core + jackson-databind + 2.10.0.pr1 + + + commons-collections + commons-collections + 3.2.2 diff --git a/common/src/main/java/ctbrec/recorder/SimplifiedLocalRecorder.java b/common/src/main/java/ctbrec/recorder/SimplifiedLocalRecorder.java index a2b60574..d5ee142a 100644 --- a/common/src/main/java/ctbrec/recorder/SimplifiedLocalRecorder.java +++ b/common/src/main/java/ctbrec/recorder/SimplifiedLocalRecorder.java @@ -39,6 +39,7 @@ import static java.util.concurrent.TimeUnit.SECONDS; @Slf4j public class SimplifiedLocalRecorder implements Recorder { + public static final Statistics STATS = new Statistics(); public static final boolean IGNORE_CACHE = true; private final List models = Collections.synchronizedList(new ArrayList<>()); diff --git a/common/src/main/java/ctbrec/recorder/Statistics.java b/common/src/main/java/ctbrec/recorder/Statistics.java new file mode 100644 index 00000000..61583164 --- /dev/null +++ b/common/src/main/java/ctbrec/recorder/Statistics.java @@ -0,0 +1,21 @@ +package ctbrec.recorder; + +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.apache.commons.collections.buffer.CircularFifoBuffer; + + +public class Statistics { + public ReadWriteLock statsLock = new ReentrantReadWriteLock(); + public CircularFifoBuffer stats = new CircularFifoBuffer(100); + + public void add(Object val) { + statsLock.writeLock().lock(); + try { + stats.add(val); + } finally { + statsLock.writeLock().unlock(); + } + } +} diff --git a/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java b/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java index 8c161f8d..80a205da 100644 --- a/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java +++ b/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java @@ -14,6 +14,7 @@ import ctbrec.io.HttpClient; import ctbrec.io.HttpConstants; import ctbrec.io.HttpException; import ctbrec.recorder.InvalidPlaylistException; +import ctbrec.recorder.SimplifiedLocalRecorder; import ctbrec.recorder.download.AbstractDownload; import ctbrec.recorder.download.HttpHeaderFactory; import ctbrec.recorder.download.StreamSource; @@ -108,6 +109,7 @@ public abstract class AbstractHlsDownload extends AbstractDownload { @Override public AbstractHlsDownload call() throws Exception { + SimplifiedLocalRecorder.STATS.add(Duration.between(rescheduleTime, Instant.now()).toMillis()); try { if (segmentPlaylistUrl == null) { diff --git a/server/src/main/java/ctbrec/recorder/server/DebugServlet.java b/server/src/main/java/ctbrec/recorder/server/DebugServlet.java index 97eef9de..22a9cf47 100644 --- a/server/src/main/java/ctbrec/recorder/server/DebugServlet.java +++ b/server/src/main/java/ctbrec/recorder/server/DebugServlet.java @@ -2,6 +2,7 @@ package ctbrec.recorder.server; import ctbrec.Config; import ctbrec.io.HttpClient; +import ctbrec.recorder.SimplifiedLocalRecorder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.json.JSONObject; @@ -68,6 +69,14 @@ public class DebugServlet extends AbstractCtbrecServlet { HttpClient.getGLOBAL_HTTP_CONN_POOL().connectionCount(), HttpClient.getGLOBAL_HTTP_CONN_POOL().idleConnectionCount()); + var rlock = SimplifiedLocalRecorder.STATS.statsLock.readLock(); + rlock.lock(); + try { + text += String.format("Time between download iterations = %s\n", SimplifiedLocalRecorder.STATS.stats.toString()); + } finally { + rlock.unlock(); + } + log.debug("Stats Request"); resp.setContentType("text/plain"); sendResponse(resp, SC_OK, text);