padding: 1ex;
background: #eee;
border: solid thin black;
- overflow-y: auto;
+ overflow: auto;
+ }
+
+ pre.logdump { max-height: 120ex; }
+
+ .hide { display: none; }
+ a.expand-button {
+ float: right;
+ font-size: medium;
+ font-weight: initial;
+ padding-top: 1ex;
}
div.logdump-info {
border: solid thin black;
}
--></style>
+ <script type='text/javascript'><!--
+ var LAST_EXPAND = null;
+ function elt(id) { return document.getElementById(id); }
+ function elt_class_p(elt, cls) {
+ return elt.className.match('\\\\b' + cls + '\\\\b');
+ }
+ function add_elt_class(elt, cls) {
+ if (!elt_class_p(elt, cls)) elt.className += ' ' + cls;
+ }
+ function rm_elt_class(elt, cls) {
+ elt.className = elt.className.replace(
+ new RegExp('\\\\s*\\\\b' + cls + '\\\\b\\\\s*'), ' ');
+ }
+ function toggle_expand(ev, tag) {
+ var d = elt('logdump-' + tag);
+ var b = elt('expand-' + tag);
+ if (elt_class_p(d, 'hide')) do_show(d, b);
+ else do_hide(d, b);
+ ev.preventDefault();
+ }
+ function do_show(d, b) {
+ rm_elt_class(d, 'hide');
+ b.textContent = '[hide]';
+ }
+ function do_hide(d, b) {
+ add_elt_class(d, 'hide');
+ b.textContent = '[show]';
+ if (LAST_EXPAND !== null && d === LAST_EXPAND[0])
+ LAST_EXPAND = null;
+ }
+ function expand_log(tag) {
+ if (LAST_EXPAND !== null) do_hide(LAST_EXPAND[0], LAST_EXPAND[1]);
+ var d = elt('logdump-' + tag);
+ var b = elt('expand-' + tag);
+ LAST_EXPAND = [d, b];
+ do_show(d, b);
+ }
+ function make_toggle_button(tag) {
+ document.write(
+ "<a class=expand-button id='expand-" + tag + "' href='#' " +
+ "onclick='toggle_expand(event, \"" + tag + "\")'>" +
+ "[show]" +
+ "</a>");
+ }
+ function hide_logdump(tag) {
+ add_elt_class(elt('logdump-' + tag), 'hide');
+ }
+ --></script>
</head>
<body>
-<h1><tt>rsync-backup</tt> report: $now</tt></h1>
+<h1><tt>rsync-backup</tt> report: $now_dow $now</tt></h1>
EOF
}
html_hosttbl_fs () {
case $3 in
winning) link="" knil="" ;;
- *) link="<a href='#log-$host:$fs'>" knil="</a>";;
+ *)
+ link="<a href='#log-$host:$fs' onclick='expand_log(\"$host:$fs\")'>"
+ knil="</a>"
+ ;;
esac
cat <<EOF
<tr class=fs>
html_logdump_begin () {
cat <<EOF
-<h2><a name='log-$1:$2'>Log tail for <tt>$1:$2</tt></a></h2>
+<h2 id='log-$1:$2'><a name='log-$1:$2'>Log tail for <tt>$1:$2</tt></a>
+<script type='text/javascript'><!--
+ make_toggle_button('$1:$2');
+--></script></h2>
EOF
}
html_logdump_info () {
cat <<EOF
-<div class=logdump-info>$3</div>
+<div id='logdump-$1:$2' class=logdump-info><script type='text/javascript'><!--
+ hide_logdump('$1:$2');
+--></script>$3</div>
EOF
}
html_logdump_file () {
cat <<EOF
-<pre class=logdump>
+<pre id='logdump-$1:$2' class=logdump>
+<script type='text/javascript'><!--
+ hide_logdump('$1:$2');
+--></script>$3</div>
EOF
cat "$3"
cat <<EOF
cat <<EOF
<div class=footer>
- Checked at $now $now_time.
- <br><tt>rsync-backup</tt> $VERSION; © 2014 Mark Wooding
+ Checked at $now $now_time<br>
+ <tt>rsync-backup</tt> $VERSION; © 2014 Mark Wooding
</div>
</body>
now=$(date +"%Y-%m-%d")
now_time=$(date +"%H:%M:%S %z")
+now_dow=$(date +"%A")
now_jdn=$(julian $now)
. "$conf"
failure_logs