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);