tazpanel annotate index.cgi @ rev 391
Remove "<hr />" (again)
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Mon May 26 14:59:45 2014 +0300 (2014-05-26) |
parents | b3f5245b1e90 |
children | 106b85c1951c |
rev | line source |
---|---|
pankso@2 | 1 #!/bin/sh |
pankso@2 | 2 # |
paul@52 | 3 # Main CGI interface for TazPanel. In on word: KISS. Use the main css form |
paul@52 | 4 # command so we are faster and do not load unneeded functions. If necessary |
pankso@14 | 5 # you can use the lib/ dir to handle external resources. |
pankso@2 | 6 # |
pankso@379 | 7 # Copyright (C) 2011-2014 SliTaz GNU/Linux - BSD License |
pankso@42 | 8 # |
pankso@2 | 9 |
pankso@14 | 10 # Common functions from libtazpanel |
pankso@14 | 11 . lib/libtazpanel |
pankso@14 | 12 get_config |
pascal@81 | 13 header |
pankso@2 | 14 |
al@292 | 15 TITLE="TazPanel" |
al@292 | 16 |
paul@127 | 17 # Check whether a configuration file has been modified after installation |
pascal@91 | 18 file_is_modified() |
pascal@91 | 19 { |
pascal@91 | 20 grep -l " $1$" $INSTALLED/*/md5sum | while read file; do |
al@292 | 21 |
pascal@91 | 22 # Found, but can we do diff ? |
pascal@91 | 23 [ "$(grep -h " $1$" $file)" != "$(md5sum $1)" ] || break |
pascal@91 | 24 org=$(dirname $file)/volatile.cpio.gz |
pascal@91 | 25 zcat $org 2>/dev/null | cpio -t 2>/dev/null | \ |
pascal@91 | 26 grep -q "^${1#/}$" || break |
pascal@91 | 27 |
pascal@91 | 28 case "$2" in |
pascal@91 | 29 diff) |
pascal@91 | 30 tmp=/tmp/tazpanel$$ |
pascal@91 | 31 mkdir -p $tmp |
pascal@91 | 32 ( cd $tmp ; zcat $org | cpio -id ${1#/} ) |
pascal@383 | 33 diff -abu $tmp$1 $1 | sed "s|$tmp||" |
pascal@91 | 34 rm -rf $tmp ;; |
pascal@91 | 35 button) |
pascal@91 | 36 cat <<EOT |
pascal@100 | 37 <a class="button" href='$SCRIPT_NAME?file=$1&action=diff'> |
al@303 | 38 <img src="$IMAGES/help.png" />$(gettext 'Differences')</a> |
pascal@91 | 39 EOT |
pascal@91 | 40 esac |
pascal@93 | 41 break |
pascal@91 | 42 done |
pascal@91 | 43 } |
al@312 | 44 |
al@312 | 45 |
al@303 | 46 # OK status in table |
al@303 | 47 ok_status_t() { |
al@303 | 48 echo " <td>[<span class='diff-add'> OK </span>]</td></tr>" |
al@303 | 49 } |
al@303 | 50 |
al@303 | 51 |
pankso@2 | 52 # |
pankso@49 | 53 # Things to do before displaying the page |
pankso@49 | 54 # |
pankso@49 | 55 |
pascal@81 | 56 [ -n "$(GET panel_pass)" ] && |
pascal@81 | 57 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF |
pankso@49 | 58 |
pankso@49 | 59 # |
pankso@2 | 60 # Commands |
pankso@2 | 61 # |
pankso@2 | 62 |
pascal@81 | 63 case " $(GET) " in |
pascal@364 | 64 *\ exec\ *) |
pascal@364 | 65 exec="$(GET exec)" |
pascal@364 | 66 TITLE=$(gettext 'TazPanel - exec') |
pascal@364 | 67 xhtml_header |
pascal@364 | 68 cat << EOT |
pascal@364 | 69 <h2>$exec</h2> |
pascal@364 | 70 <pre> |
pascal@364 | 71 $($exec 2>&1 | htmlize) |
pascal@364 | 72 </pre> |
pascal@364 | 73 EOT |
pascal@364 | 74 ;; |
pascal@81 | 75 *\ file\ *) |
pankso@56 | 76 # |
pascal@91 | 77 # Handle files |
pankso@56 | 78 # |
pascal@81 | 79 file="$(GET file)" |
pankso@161 | 80 case $file in |
pankso@161 | 81 *.html) |
pankso@161 | 82 cat $file && exit 0 ;; |
pankso@161 | 83 *) |
al@292 | 84 TITLE=$(gettext 'TazPanel - File') |
pankso@161 | 85 xhtml_header |
pankso@161 | 86 echo "<h2>$file</h2>" ;; |
pankso@161 | 87 esac |
al@303 | 88 |
pascal@90 | 89 if [ "$(GET action)" == "edit" ]; then |
pascal@90 | 90 cat <<EOT |
pascal@100 | 91 <form method="post" action="$SCRIPT_NAME?file=$file"> |
al@303 | 92 <img src="$IMAGES/edit.png" /> |
al@303 | 93 <input type="submit" value="$(gettext 'Save')"> |
al@303 | 94 <a class="button" href='$SCRIPT_NAME?file=$file&action=diff'> |
al@303 | 95 <img src="$IMAGES/help.png" />$(gettext 'Differences')</a> |
al@303 | 96 <textarea name="content" rows="30" style="width: 100%;"> |
al@303 | 97 $(cat $file | htmlize) |
al@303 | 98 </textarea> |
pascal@90 | 99 </form> |
pascal@90 | 100 EOT |
naitsirhc@267 | 101 #The space before textarea gets muddled when the form is submitted. |
naitsirhc@267 | 102 #It prevents anything else from getting messed up |
pascal@364 | 103 elif [ "$(GET action)" == "setvar" ]; then |
pascal@364 | 104 data="$(. $(GET file) ;eval echo \$$(GET var))" |
pascal@364 | 105 cat <<EOT |
pascal@364 | 106 <form method="post" action="$SCRIPT_NAME?file=$file"> |
pascal@364 | 107 <img src="$IMAGES/edit.png" /> |
pascal@364 | 108 <input type="submit" value="$(gettext 'Save')"> |
pascal@364 | 109 $(GET var) : |
pascal@364 | 110 <input type="hidden" name="var" value="$(GET var)"> |
pascal@364 | 111 <input type="text" name="content" value="${data:-$(GET default)}"> |
pascal@364 | 112 </form> |
pascal@364 | 113 EOT |
pascal@91 | 114 elif [ "$(GET action)" == "diff" ]; then |
pascal@91 | 115 echo '<pre id="diff">' |
pascal@91 | 116 file_is_modified $file diff | syntax_highlighter diff |
pascal@91 | 117 echo '</pre>' |
pascal@90 | 118 else |
al@340 | 119 R=$(echo -en '\r') |
pascal@364 | 120 if [ -n "$(POST content)" ]; then |
pascal@364 | 121 if [ -n "$(POST var)" ]; then |
pascal@364 | 122 sed -i "s|^\\($(POST var)=\\).*|\1\"$(POST content)\"|" $file |
pascal@364 | 123 else |
pascal@364 | 124 sed "s/$R /\n/g;s/$R%0//g" > $file <<EOT |
pascal@90 | 125 $(POST content) |
pascal@90 | 126 EOT |
pascal@364 | 127 fi |
pascal@364 | 128 fi |
pascal@90 | 129 cat <<EOT |
pascal@90 | 130 <div id="actions"> |
pascal@100 | 131 <a class="button" href='$SCRIPT_NAME?file=$file&action=edit'> |
al@303 | 132 <img src="$IMAGES/edit.png" />$(gettext 'Edit')</a> |
pascal@90 | 133 EOT |
pascal@91 | 134 file_is_modified $file button |
al@303 | 135 cat << EOT |
al@303 | 136 </div> |
al@303 | 137 <pre> |
al@303 | 138 EOT |
pascal@90 | 139 # Handle file type by extension as a Web Server does it. |
pascal@90 | 140 case "$file" in |
pascal@90 | 141 *.conf|*.lst) |
pascal@90 | 142 syntax_highlighter conf ;; |
pascal@90 | 143 *.sh|*.cgi) |
pascal@90 | 144 syntax_highlighter sh ;; |
pascal@90 | 145 *) |
al@303 | 146 cat | htmlize ;; |
pascal@90 | 147 esac < $file |
pascal@90 | 148 echo '</pre>' |
pascal@90 | 149 fi ;; |
al@303 | 150 |
al@312 | 151 |
pankso@191 | 152 *\ terminal\ *|*\ cmd\ *) |
pankso@191 | 153 # Cmdline terminal. |
pankso@194 | 154 commands='cat du help ls ping pwd who wget' |
pankso@191 | 155 cmd=$(GET cmd) |
al@292 | 156 TITLE=$(gettext 'TazPanel - Terminal') |
pankso@191 | 157 xhtml_header |
pankso@191 | 158 cat << EOT |
al@312 | 159 <section> |
pankso@191 | 160 <form method="get" action="$SCRIPT_NAME"> |
pankso@191 | 161 <div class="box"> |
al@303 | 162 root@$(hostname):~# <input autofocus type="text" name="cmd" style="width: 80%;" /> |
pankso@191 | 163 </div> |
pankso@191 | 164 </form> |
pankso@191 | 165 EOT |
pankso@191 | 166 echo '<pre id="terminal">' |
pankso@191 | 167 # Allow only a few commands for the moment. |
pankso@191 | 168 case "$cmd" in |
pankso@191 | 169 usage|help) |
al@303 | 170 gettext 'Small terminal emulator, commands options are supported.' |
pankso@195 | 171 echo "" |
al@303 | 172 eval_gettext 'Commands: $commands' |
al@303 | 173 echo ;; |
pankso@191 | 174 wget*) |
pankso@191 | 175 dl=/var/cache/downloads |
pankso@191 | 176 [ ! -d "$dl" ] && mkdir -p $dl |
al@303 | 177 eval_gettext 'Downloading to: $dl' && echo |
pankso@191 | 178 cd $dl && $cmd ;; |
pankso@191 | 179 du*|ls*|ping*|pwd|who) |
pankso@191 | 180 $cmd ;; |
pankso@194 | 181 cat*) |
pankso@194 | 182 # Cmd must be used with an arg. |
pankso@194 | 183 arg=$(echo $cmd | awk '{print $2}') |
al@303 | 184 [ "$arg" == "" ] && eval_gettext '$cmd needs an argument' && break |
pankso@194 | 185 $cmd ;; |
pankso@191 | 186 *) |
pankso@191 | 187 [ "$cmd" == "" ] || \ |
al@303 | 188 eval_gettext 'Unknown command: $cmd' && echo |
al@303 | 189 eval_gettext 'Commands: $commands' ;; |
pankso@191 | 190 esac |
al@312 | 191 echo '</pre></section>' |
al@312 | 192 ;; |
al@312 | 193 |
al@312 | 194 |
pascal@144 | 195 *\ top\ *) |
al@292 | 196 TITLE=$(gettext 'TazPanel - Process activity') |
pascal@144 | 197 xhtml_header |
al@303 | 198 echo $(gettext 'Refresh:') $(GET refresh) |
al@303 | 199 cat << EOT |
al@303 | 200 <br/> |
naitsirhc@268 | 201 <form method="get"> |
naitsirhc@268 | 202 <input type="hidden" name="top"/> |
al@303 | 203 <input type="submit" name="refresh" value="$(gettext '1s')"/> |
al@303 | 204 <input type="submit" name="refresh" value="$(gettext '5s')"/> |
al@303 | 205 <input type="submit" name="refresh" value="$(gettext '10s')"/> |
al@303 | 206 <input type="submit" value="$(gettext 'none')"/> |
al@303 | 207 </form> |
al@303 | 208 EOT |
al@303 | 209 if [ -n "$(GET refresh)" ]; then |
al@303 | 210 echo -n '<meta http-equiv="refresh" content="' |
al@303 | 211 echo -n "$(GET refresh)" | sed 's|\([^0-9]*\)\([0-9]\+\).*|\2|' |
al@303 | 212 echo '">' |
al@303 | 213 fi |
naitsirhc@268 | 214 |
pascal@144 | 215 echo '<pre>' |
al@303 | 216 top -n1 -b | htmlize | sed \ |
pankso@152 | 217 -e s"#^[A-Z].*:\([^']\)#<span class='sh-comment'>\0</span>#"g \ |
pankso@152 | 218 -e s"#PID.*\([^']\)#<span class='top'>\0</span>#"g |
pascal@144 | 219 echo '</pre>' ;; |
al@303 | 220 |
al@312 | 221 |
pascal@81 | 222 *\ debug\ *) |
al@292 | 223 TITLE=$(gettext 'TazPanel - Debug') |
pankso@53 | 224 xhtml_header |
al@303 | 225 cat << EOT |
al@303 | 226 <h2>$(gettext 'HTTP Environment')</h2> |
al@303 | 227 |
al@303 | 228 <pre>$(httpinfo)</pre> |
al@303 | 229 EOT |
al@303 | 230 ;; |
al@303 | 231 |
al@312 | 232 |
pankso@161 | 233 *\ report\ *) |
al@292 | 234 TITLE=$(gettext 'TazPanel - System report') |
pascal@163 | 235 [ -d /var/cache/slitaz ] || mkdir -p /var/cache/slitaz |
pankso@161 | 236 output=/var/cache/slitaz/sys-report.html |
pankso@161 | 237 xhtml_header |
al@303 | 238 cat << EOT |
pascal@371 | 239 <h2>$(eval_gettext 'Reporting to: $output')</h2> |
al@311 | 240 <table class="zebra outbox"> |
al@303 | 241 <tbody> |
al@303 | 242 <tr><td>$(gettext 'Creating report header...')</td> |
al@303 | 243 EOT |
pankso@161 | 244 cat > $output << EOT |
pankso@161 | 245 <!DOCTYPE html> |
pankso@161 | 246 <html xmlns="http://www.w3.org/1999/xhtml"> |
pankso@161 | 247 <head> |
al@303 | 248 <meta charset="utf-8" /> |
al@303 | 249 <title>$(gettext 'SliTaz system report')</title> |
pankso@161 | 250 <style type="text/css"> |
al@303 | 251 body { padding: 20px 60px; font-size: 13px; } |
al@303 | 252 h1, h2 { color: #444; } |
pankso@161 | 253 pre { background: #f1f1f1; border: 1px solid #ddd; |
pankso@161 | 254 padding: 10px; border-radius: 4px; } |
pascal@166 | 255 span.diff-rm { color: red; } |
pascal@166 | 256 span.diff-add { color: green; } |
pankso@161 | 257 </style> |
pankso@161 | 258 </head> |
pankso@161 | 259 <body> |
pankso@161 | 260 EOT |
al@303 | 261 cat << EOT |
al@303 | 262 $(ok_status_t) |
al@303 | 263 <tr><td>$(gettext 'Creating system summary...')</td> |
al@303 | 264 EOT |
pankso@161 | 265 cat >> $output << EOT |
al@303 | 266 <h1>$(gettext 'SliTaz system report')</h1> |
al@303 | 267 $(gettext 'Date:') $(date) |
pankso@161 | 268 <pre> |
pascal@163 | 269 uptime : $(uptime) |
pankso@161 | 270 cmdline : $(cat /proc/cmdline) |
pankso@161 | 271 version : $(cat /etc/slitaz-release) |
pankso@161 | 272 packages : $(ls /var/lib/tazpkg/installed | wc -l) installed |
pankso@161 | 273 kernel : $(uname -r) |
pankso@161 | 274 </pre> |
pankso@161 | 275 EOT |
al@303 | 276 cat << EOT |
al@303 | 277 $(ok_status_t) |
al@303 | 278 <tr><td>$(gettext 'Getting hardware info...')</td> |
al@303 | 279 EOT |
pankso@161 | 280 cat >> $output << EOT |
pankso@161 | 281 <h2>free</h2> |
al@303 | 282 <pre>$(free)</pre> |
pankso@161 | 283 |
pankso@161 | 284 <h2>lspci -k</h2> |
al@303 | 285 <pre>$(lspci -k)</pre> |
pankso@161 | 286 |
pankso@161 | 287 <h2>lsusb</h2> |
al@303 | 288 <pre>$(lsusb)</pre> |
pankso@161 | 289 |
pankso@161 | 290 <h2>lsmod</h2> |
al@303 | 291 <pre>$(lsmod)</pre> |
pankso@161 | 292 |
pankso@161 | 293 EOT |
al@303 | 294 cat << EOT |
al@303 | 295 $(ok_status_t) |
al@303 | 296 <tr><td>$(gettext 'Getting networking info...')</td> |
al@303 | 297 EOT |
pankso@161 | 298 cat >> $output << EOT |
pankso@161 | 299 <h2>ifconfig -a</h2> |
al@303 | 300 <pre>$(ifconfig -a)</pre> |
al@303 | 301 |
pascal@163 | 302 <h2>route -n</h2> |
al@303 | 303 <pre>$(route -n)</pre> |
al@303 | 304 |
pascal@163 | 305 <h2>/etc/resolv.conf</h2> |
al@303 | 306 <pre>$(cat /etc/resolv.conf)</pre> |
pascal@163 | 307 EOT |
al@303 | 308 cat << EOT |
al@303 | 309 $(ok_status_t) |
al@303 | 310 <tr><td>$(gettext 'Getting filesystems info...')</td> |
al@303 | 311 EOT |
pascal@163 | 312 cat >> $output << EOT |
pascal@163 | 313 <h2>blkid</h2> |
al@303 | 314 <pre>$(blkid)</pre> |
al@303 | 315 |
pascal@163 | 316 <h2>fdisk -l</h2> |
al@303 | 317 <pre>$(fdisk -l)</pre> |
al@303 | 318 |
pascal@163 | 319 <h2>mount</h2> |
al@303 | 320 <pre>$(mount)</pre> |
al@303 | 321 |
pascal@163 | 322 <h2>df -h</h2> |
al@303 | 323 <pre>$(df -h)</pre> |
al@303 | 324 |
pascal@163 | 325 <h2>df -i</h2> |
al@303 | 326 <pre>$(df -i)</pre> |
pascal@163 | 327 EOT |
al@303 | 328 cat << EOT |
al@303 | 329 $(ok_status_t) |
al@303 | 330 <tr><td>$(gettext 'Getting boot logs...')</td> |
al@303 | 331 EOT |
pascal@163 | 332 cat >> $output << EOT |
al@303 | 333 <h2>$(gettext 'Kernel messages')</h2> |
al@303 | 334 <pre>$(cat /var/log/dmesg.log)</pre> |
al@303 | 335 |
al@303 | 336 <h2>$(gettext 'Boot scripts')</h2> |
al@303 | 337 <pre>$(cat /var/log/boot.log | filter_taztools_msgs)</pre> |
pankso@161 | 338 EOT |
al@303 | 339 cat << EOT |
al@303 | 340 $(ok_status_t) |
al@303 | 341 <tr><td>$(gettext 'Creating report footer...')</td> |
al@303 | 342 EOT |
pankso@161 | 343 cat cat >> $output << EOT |
pankso@161 | 344 </body> |
pankso@161 | 345 </html> |
pankso@161 | 346 EOT |
al@303 | 347 cat << EOT |
al@303 | 348 $(ok_status_t) |
al@303 | 349 </tbody> |
al@303 | 350 </table> |
al@303 | 351 <p><a class="button" href="$SCRIPT_NAME?file=$output"> |
al@303 | 352 <img src="/styles/default/images/browser.png" /> |
al@303 | 353 $(gettext 'View report')</a> |
al@318 | 354 $(msg tip "$(gettext 'This report can be attached with a bug report on:') |
al@318 | 355 <a href="http://bugs.slitaz.org/">bugs.slitaz.org</a></p>") |
al@303 | 356 EOT |
al@303 | 357 ;; |
al@312 | 358 |
al@312 | 359 |
pankso@2 | 360 *) |
pankso@14 | 361 # |
pankso@2 | 362 # Default xHTML content |
pankso@14 | 363 # |
pankso@8 | 364 xhtml_header |
pascal@81 | 365 [ -n "$(GET gen_locale)" ] && new_locale=$(GET gen_locale) |
pascal@81 | 366 [ -n "$(GET rdate)" ] && echo "" |
al@303 | 367 hostname=$(hostname) |
pankso@2 | 368 cat << EOT |
pankso@13 | 369 <div id="wrapper"> |
pascal@371 | 370 <h2>$(eval_gettext 'Host: $hostname')</h2> |
al@303 | 371 <p>$(gettext 'SliTaz administration and configuration Panel')<p> |
pankso@154 | 372 </div> |
pankso@154 | 373 <div id="actions"> |
pankso@191 | 374 <a class="button" href="$SCRIPT_NAME?terminal"> |
al@303 | 375 <img src="$IMAGES/terminal.png" />$(gettext 'Terminal')</a> |
pankso@161 | 376 <a class="button" href="$SCRIPT_NAME?top"> |
al@303 | 377 <img src="$IMAGES/monitor.png" />$(gettext 'Process activity')</a> |
pankso@161 | 378 <a class="button" href="$SCRIPT_NAME?report"> |
al@303 | 379 <img src="$IMAGES/text.png" />$(gettext 'Create a report')</a> |
pankso@14 | 380 </div> |
pankso@14 | 381 |
al@312 | 382 <section> |
al@303 | 383 <h3>$(gettext 'Summary')</h3> |
pankso@14 | 384 <div id="summary"> |
al@303 | 385 <table> |
al@303 | 386 <tr><td>$(gettext 'Uptime:')</td> |
al@303 | 387 <td>$(uptime)</td> |
al@303 | 388 </tr> |
al@303 | 389 <tr><td>$(gettext 'Memory in Mb:')</td> |
al@303 | 390 EOT |
al@303 | 391 free -m | grep Mem: | awk '{print $2, $3, $4}' | while read memtotal memused memfree |
al@303 | 392 do |
al@303 | 393 cat << EOT |
pascal@371 | 394 <td>$(eval_gettext 'Total: $memtotal, Used: $memused, Free: $memfree')</td> |
al@303 | 395 EOT |
al@303 | 396 done |
al@303 | 397 cat << EOT |
al@303 | 398 </tr> |
al@303 | 399 <tr><td>$(gettext 'Linux kernel:')</td> |
al@303 | 400 <td>$(uname -r)</td> |
al@303 | 401 </tr> |
al@303 | 402 </table> |
pankso@33 | 403 <!-- Close summary --> |
pankso@33 | 404 </div> |
al@312 | 405 </section> |
pankso@14 | 406 |
al@312 | 407 <section> |
al@303 | 408 <h4>$(gettext 'Network status')</h4> |
pankso@154 | 409 $(list_network_interfaces) |
al@312 | 410 </section> |
pankso@154 | 411 |
al@312 | 412 <section> |
al@303 | 413 <h4>$(gettext 'Filesystem usage statistics')</h4> |
pankso@153 | 414 EOT |
paul@157 | 415 # Disk stats (management is done as hardware.cgi) |
al@303 | 416 cat << EOT |
al@311 | 417 <table class="zebra outbox"> |
al@303 | 418 EOT |
pankso@153 | 419 df_thead |
al@303 | 420 echo '<tbody>' |
pankso@153 | 421 df -h | grep ^/dev | while read fs size used av pct mp |
pankso@153 | 422 do |
pankso@153 | 423 cat << EOT |
pankso@153 | 424 <tr> |
pankso@153 | 425 <td><a href="hardware.cgi"> |
pankso@190 | 426 <img src="$IMAGES/harddisk.png" />${fs#/dev/}</a></td> |
pascal@343 | 427 <td>$(blkid $fs | sed '/LABEL=/!d;s/.*LABEL="\([^"]*\).*/\1/')</td> |
pascal@343 | 428 <td>$(blkid $fs | sed '/TYPE=/!d;s/.*TYPE="\([^"]*\).*/\1/')</td> |
pankso@153 | 429 <td>$size</td> |
pankso@153 | 430 <td>$av</td> |
al@303 | 431 <td class="meter"><meter min="0" max="100" value="$(echo $pct | cut -d% -f1)" |
al@303 | 432 low="$DU_WARN" high="$DU_CRIT" optimum="10"></meter> |
al@303 | 433 <span>$used - $pct</span> |
al@303 | 434 </td> |
pankso@153 | 435 <td>$mp</td> |
pascal@343 | 436 <td>$(blkid $fs | sed '/UUID=/!d;s/.*UUID="\([^"]*\).*/\1/')</td> |
pankso@153 | 437 </tr> |
pankso@153 | 438 EOT |
pankso@153 | 439 done |
pankso@153 | 440 cat << EOT |
al@303 | 441 </tbody> |
al@303 | 442 </table> |
al@312 | 443 </section> |
al@303 | 444 |
al@312 | 445 <section> |
al@303 | 446 <h3>$(gettext 'Panel Activity')</h3> |
pankso@120 | 447 <pre id="panel-activity"> |
pankso@120 | 448 $(cat $LOG_FILE | tail -n 8 | sort -r | syntax_highlighter activity) |
pankso@76 | 449 </pre> |
al@312 | 450 </section> |
pankso@2 | 451 EOT |
pankso@2 | 452 ;; |
pankso@2 | 453 esac |
pankso@2 | 454 |
pankso@14 | 455 xhtml_footer |
pankso@14 | 456 exit 0 |