#!/bin/sh


. /usr/lib/libmodcgi.sh

. /mod/etc/conf/syslogd.cfg

script() {
	cat << \EOF
<script type="text/javascript">
	var log, fi;
	function add_option(value) {
		var option = document.createElement("option");
		option.value = value;
		option.appendChild(document.createTextNode(value));
		fi.select.appendChild(option);
	}
	function add_presets() {
		var ident = /^(\S+\s+){5}([^\s:[]+)/;
		var collect = new Array();
		var line = log.firstChild;
		while (line != null) {
			var text = line.firstChild.nodeValue;
			var result = ident.exec(text);
			if (result) {
				collect[result[2]] = 1;
			}
			line = line.nextSibling;
		}
		var options = new Array();
		for (var c in collect) {
			options.push(c);
		}
		options.sort();
		add_option("");
		for (var i in options) {
			add_option(options[i]);
		}
	}
	function filter(pattern) {
		var regexp = new RegExp(pattern, "i");
		var line = log.firstChild;
		while (line != null) {
			var style = line.style;
			style.display = regexp.test(line.firstChild.nodeValue) ? 'inline' : 'none';
			line = line.nextSibling;
		}
	}
	function grep(pattern) {
		fi.regexp.value = pattern;
		fi.onsubmit();
	}
	window.onload = function() {
		log = document.getElementById("log");
		fi = document.getElementById("filter");
		add_presets();
		fi.style.display = 'block';
		fi.onsubmit();
	}
</script>
EOF
}
filter_form() {
	cat << \EOF
<form id="filter" onsubmit="filter(this.regexp.value); return false;"
style="display: none">
	Filter:
	<select name="select" onchange="grep(this.value)" onkeyup="grep(this.value)"></select>
	<input type="text" name="regexp">
</form>
EOF
}

log_stream() {
	local title=$1
	echo "<h1>$title</h1>"
	filter_form
	echo -n '<pre id="log" class="log full"><span>'
	html | sed -r '2,$s#^#</span><span>#'
	echo '</span></pre>'
}
log_file() {
	log_stream "$1" < "$1"
}

if [ "$SYSLOGD_LOCAL" = "yes" ]; then
	script
	if [ "$SYSLOGD_LOGGING" = "circular_buffer" ]; then
		logread | log_stream '$(lang de:"Ringpuffer" en:"Memory buffer")'
	elif [ "$SYSLOGD_LOGGING" = "log_to_file" ]; then
		if [ -e "$SYSLOGD_ALTERNATIVE_LOGFILE" ]; then
			log_file "$SYSLOGD_ALTERNATIVE_LOGFILE"
		elif [ -e "/var/log/messages" ]; then
			log_file "/var/log/messages"
		fi
	fi
else
	echo '<h1>$(lang de:"Kein lokales Loggen aktiviert" en:"No local logging enabled")!</h1>'
fi