From 1872900adf2df32858625955c5bf904d51823e57 Mon Sep 17 00:00:00 2001
From: Holger Levsen
Date: Tue, 2 May 2017 16:52:27 +0200
Subject: reproducible Debian: use Apache's NPH cgi mechanism to display
growing logfiles. Thanks to Axel Beckert for telling me about NPH…
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Holger Levsen
---
bin/cgi-bin/nph-logwatch | 70 ++++++++++++++++++++++
bin/reproducible_build_service.sh | 4 +-
bin/reproducible_html_live_status.py | 2 +-
.../sites-available/jenkins.debian.net.conf | 8 +++
4 files changed, 81 insertions(+), 3 deletions(-)
create mode 100755 bin/cgi-bin/nph-logwatch
diff --git a/bin/cgi-bin/nph-logwatch b/bin/cgi-bin/nph-logwatch
new file mode 100755
index 00000000..e3e230e2
--- /dev/null
+++ b/bin/cgi-bin/nph-logwatch
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# Copyright © 2017 Holger Levsen (holger@layer-acht.org)
+# released under the GPLv=2
+
+set -e
+
+echo "HTTP/1.0 200 OK"
+echo "Connection: close"
+echo 'Content-type: text/plain; charset="utf-8"'
+echo ""
+
+TARGET=${QUERY_STRING}
+
+#
+# sanitize input
+#
+WORKER=$(basename $(dirname $TARGET))
+BUILD=$(basename $TARGET)
+
+#
+# we only work on known files…
+#
+DIR=/var/lib/jenkins/userContent/reproducible/debian/build_service/$WORKER
+FILE=$DIR/$BUILD/console.log
+
+# keep commented code for debugging…
+if [ ! -d $DIR ] ; then
+ echo "$DIR does not exist."
+ #echo "Wanted $TARGET but $DIR does not exist."
+ exit 0
+elif [ ! -f $FILE ] ; then
+ echo "$FILE does not exist."
+ #echo "Wanted $TARGET but $FILE does not exist."
+ exit 0
+fi
+
+#
+# this build exists, what about this one:
+#
+let NEW_BUILD=$BUILD+1
+
+#
+# if this ain't the latest build, just cat it's logfile
+#
+if [ -e $DIR/$NEW_BUILD/console.log ] ; then
+ cat $FILE
+#
+# if the worker ain't running, just cat the logfile
+#
+elif [ ! -z "$(ps fax|grep -v grep|grep 'reproducible_worker $WORKER.sh ')" ] ; then
+ cat $FILE
+#
+# FIXME: we should really just convert 'latest' into a number here and use the tail below…
+#
+elif [ "$BUILD" = "latest" ] ; then
+ cat $FILE
+else
+ #
+ # else, we tail the logfile and kill the tail process, once the next build
+ # has been started
+ #
+ tail -c +0 -f $FILE &
+ TAILPID=$!
+ while ! test -f $DIR/$NEW_BUILD/console.log ; do
+ sleep 1
+ done
+ kill -9 $TAILPID
+fi
+echo
diff --git a/bin/reproducible_build_service.sh b/bin/reproducible_build_service.sh
index 9d0539e3..7d457c5f 100755
--- a/bin/reproducible_build_service.sh
+++ b/bin/reproducible_build_service.sh
@@ -257,8 +257,8 @@ while true ; do
done
# FIXME: TODO left for _service.sh:
-# * logs should auto display in browser like with jenkins… (long-polling, meta-refresh, something)
-# - there's an NPH solution pointed out by Xtaran
+# * logs should auto display in browser like with jenkins…
+# - mostly done, except one needs to manually scroll down… (could probably be fixed with javascript…)
# * enabling the service in update_jdn
# * maintenance job might want to:
# - check for running builds using systemctl show & ps fax
diff --git a/bin/reproducible_html_live_status.py b/bin/reproducible_html_live_status.py
index ac91e767..65c25cff 100755
--- a/bin/reproducible_html_live_status.py
+++ b/bin/reproducible_html_live_status.py
@@ -149,7 +149,7 @@ def generate_live_status_table(arch):
html += '' + link_package(pkg, suite, arch) + ' | '
html += '' + str(row[4]) + ' | ' + str(row[5]) + ' | '
html += '' + convert_into_status_html(str(row[6])) + ' | ' + duration + ' | ' + avg_duration + ' | '
- html += '' + str(row[9]) + ' | '
+ html += '' + str(row[9]) + ' | '
html += '\n'
html += '
\n'
return html
diff --git a/hosts/jenkins/etc/apache2/sites-available/jenkins.debian.net.conf b/hosts/jenkins/etc/apache2/sites-available/jenkins.debian.net.conf
index 9310e203..80fd7ce3 100644
--- a/hosts/jenkins/etc/apache2/sites-available/jenkins.debian.net.conf
+++ b/hosts/jenkins/etc/apache2/sites-available/jenkins.debian.net.conf
@@ -330,6 +330,14 @@ Use common-debian-service-https-redirect www.reproducible-builds.org
RewriteCond %{REQUEST_URI} ^/debian(/|)$
RewriteRule ^/?(.*) /debian/reproducible.html [R,L]
+ # for watching service logfiles
+ ScriptAlias /cgi-bin /srv/jenkins/bin/cgi-bin
+
+ AllowOverride None
+ Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
+ Require all granted
+
+
Require all granted
--
cgit v1.2.3-70-g09d2