diff --git a/CONTROL/control b/CONTROL/control index 50131f5..868aa8c 100644 --- a/CONTROL/control +++ b/CONTROL/control @@ -1,10 +1,10 @@ Package: webif Priority: optional Section: web -Version: 1.2.2-5 +Version: 1.2.2-6 Architecture: mipsel Maintainer: af123@hummypkg.org.uk -Depends: webif-channelicons(>=1.1.17),lighttpd(>=1.4.35-2),jim(>=0.76),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7),jim-binary(>=0.76),service-control(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=2.0.3),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.2) +Depends: webif-channelicons(>=1.1.18),lighttpd(>=1.4.35-2),jim(>=0.76),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7),jim-binary(>=0.76),service-control(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=2.0.3),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.3) Suggests: Description: An evolving web interface for the Humax. Tags: http://hummy.tv/forum/threads/5866/ diff --git a/CONTROL/postinst b/CONTROL/postinst index 724a8fc..b4eeb5f 100755 --- a/CONTROL/postinst +++ b/CONTROL/postinst @@ -20,7 +20,7 @@ crontab=$PKG_ROOT/bin/crontab if [ -x $crontab ]; then $crontab -l | grep -v webif/lib/bin/auto > $tmpf cat $tmpf - << EOM | $crontab - -*/10 * * * * /mod/webif/lib/bin/auto >/dev/null 2>&1 +5,25,45 * * * * /mod/webif/lib/bin/auto >/dev/null 2>&1 EOM fi @@ -54,6 +54,9 @@ fi hook=/mod/boot/xinit.d/rt3070 [ -f $hook ] && rm -f $hook +# Remove legacy mongoose startup script +[ -f /mod/etc/init.d/Z01mongoose ] && rm -f /mod/etc/init.d/Z01mongoose + # Migrate record log to new name. ( cd /mod/tmp diff --git a/etc/recmon.d/autotrigger b/etc/recmon.d/autotrigger index f4d5bd7..079ccb7 100755 --- a/etc/recmon.d/autotrigger +++ b/etc/recmon.d/autotrigger @@ -1,17 +1,25 @@ #!/mod/bin/jimsh source /mod/webif/lib/setup -require lock +require system.class settings.class lock + +set loglevel [[settings] autolog] set file [lindex $argv 0] set dir [file dirname $file] +set prefix "autotrigger\[[pid]\]" +if {$loglevel > 0} { system plog auto "$prefix: will run for $dir" } + # Wait up to 10 minutes for any existing auto process to finish... -if {![acquire_lock webif_auto 600]} { +if {![acquire_lock webif_auto 600 5]} { puts "Cannot acquire exclusive lock, terminating." + system plog auto "$prefix: failed to get lock" exit } -release_lock webif_auto +if {$loglevel > 0} { system plog auto "$prefix: got lock" } -exec /mod/webif/lib/bin/auto -single $dir +exec /mod/webif/lib/bin/auto -prelocked -logprefix "$prefix: " -singledir $dir + +if {$loglevel > 0} { system plog auto "$prefix: done" } diff --git a/webif/html/sched/assets.jim b/webif/html/sched/assets.jim index d609aec..11dd554 100755 --- a/webif/html/sched/assets.jim +++ b/webif/html/sched/assets.jim @@ -137,8 +137,6 @@ puts { placeholder="Defaults to channel name" class="text ui-widget-content ui-corner-all"> - - diff --git a/webif/lib/bin/auto b/webif/lib/bin/auto index 0115da9..9f856de 100755 --- a/webif/lib/bin/auto +++ b/webif/lib/bin/auto @@ -10,29 +10,56 @@ set audiomp3 [$settings audiomp3] set modules {decrypt dedup shrink mpg mp3 expire} -if {![acquire_lock webif_auto]} { - puts "Cannot acquire exclusive lock, terminating." + +set logfile "/mod/tmp/auto.log" + +set logfd "unset" +set logprefix "" +set prelocked 0 +while {[llength $argv]} { + switch -- [lindex $argv 0] { + -d { + set loglevel 2 + set logfd stdout + } + -prelocked { + set prelocked 1 + } + -logprefix { + set argv [lrange $argv 1 end] + if {[llength $argv]} { + set logprefix [lindex $argv 0] + } + } + default { + # Unknown option, pass to rest of script. + break + } + } + set argv [lrange $argv 1 end] +} + +if {!$prelocked && ![acquire_lock webif_auto 10 1]} { + if {$loglevel > 1} { + system plog auto "Could not acquire lock." + } + puts "Could acquire exclusive lock, terminating." exit } -set logfile "/mod/tmp/auto.log" # Rotate log file if large enough. if {[file exists $logfile] && [file size $logfile] > 2097152} { file copy -force $logfile "/mod/tmp/auto_old.log" file delete $logfile } -if {[lindex $argv 0] eq "-d"} { - set argv [lrange $argv 1 end] - set loglevel 2 - set logfd stdout -} else { +if {$logfd eq "unset"} { set logfd [open "/mod/tmp/auto.log" "a+"] } proc log {msg {level 1}} { if {$level > $::loglevel} return - puts $::logfd "[system logtimestamp] - $msg" + puts $::logfd "[system logtimestamp] - $::logprefix$msg" flush $::logfd } @@ -55,6 +82,8 @@ foreach mod $modules { set "hook_pre$mod" {} set "hook_post$mod" {} set "hook_post${mod}scan" {} + set "hook_pre${mod}singledir" {} + set "hook_post${mod}singledir" {} } proc register {type fn {priority 50}} { @@ -72,10 +101,14 @@ proc runplugin {name {ts 0}} { global $var foreach p [lsort -index end -decreasing -integer [subst $$var]] { lassign $p fn priority - log "Running $name plugin $fn (priority $priority)" 2 - if {[catch {uplevel 1 $fn $ts} msg]} { + log "Running $name plugin $fn (priority $priority) \[$ts]" 2 + if {[catch {uplevel 1 [list $fn $ts]} msg]} { log "Plugin error: $msg" 0 + foreach {proc file line} [info stacktrace] { + log " @ $file:$proc:$line" 0 + } } + log "Completed $name plugin $fn" 2 } } @@ -308,7 +341,11 @@ proc do_decrypt {ts} { set helper 0 } else { log " $file - Not yet indexed, trying helper." - lassign [system dlnahelper [file normalize $file]] url + if {[catch { + lassign [system dlnahelper [file normalize $file]] url + } msg]} { + log " $file - $msg" + } if {$url eq ""} { log " $file - Can't use helper." return @@ -706,7 +743,9 @@ proc scansingle {dirs} { log "Encountered special directory." break } + runplugin "pre${arg}singledir" $dir xscan $dir $arg $sup 0 + runplugin "post${arg}singledir" $dir log "$arg scan completed in [elapsed $st] seconds." } } @@ -717,12 +756,16 @@ file stat "$root/" rootstat set rootdev $rootstat(dev) log "Root device: $rootdev" 2 -if {[lindex $argv 0] eq "-single"} { +if {[lindex $argv 0] eq "-singledir"} { scansingle [lrange $argv 1 end] } elseif {[llength $argv] > 0} { set loglevel 2 foreach arg $argv { set st [clock milliseconds] + if {$arg ni $modules} { + log "Unknown scan type: $arg" + continue + } log "$arg scan starting." set processed_files {} runplugin "pre${arg}scan" diff --git a/webif/lib/lock b/webif/lib/lock index 5141070..300cf43 100644 --- a/webif/lib/lock +++ b/webif/lib/lock @@ -14,7 +14,7 @@ proc _lock_to_port {id} { proc _lock_dummy {newsock addr port} { } -proc acquire_lock {id {timeout 0}} { +proc acquire_lock {id {timeout 0} {interval 0.2}} { global _locks set port [_lock_to_port $id] @@ -24,7 +24,7 @@ proc acquire_lock {id {timeout 0}} { while {[catch {set socket [\ socket stream.server "127.0.0.1:$port"]} msg]} { if {[clock seconds] > $timeout} { return 0 } - sleep 0.2 + sleep $interval } set _locks($id) $socket