diff options
author | Britney Fransen <brfransen@gmail.com> | 2012-09-01 21:55:46 (GMT) |
---|---|---|
committer | Britney Fransen <brfransen@gmail.com> | 2012-09-01 21:55:46 (GMT) |
commit | 2fc24e3699697bf406338eea7b9f8c475399e79b (patch) | |
tree | 7a2693c501853ffc78ff69cf0c8c848b16ec731b | |
parent | e0c0e2b0962375dfc62740cafd1620df719d4d31 (diff) | |
download | linhes_pkgbuild-2fc24e3699697bf406338eea7b9f8c475399e79b.zip linhes_pkgbuild-2fc24e3699697bf406338eea7b9f8c475399e79b.tar.gz linhes_pkgbuild-2fc24e3699697bf406338eea7b9f8c475399e79b.tar.bz2 |
LinHES-system: Add scripts for misc status in MythWeb. closes #845.
-rw-r--r-- | abs/core/LinHES-system/LinHES-system.install | 12 | ||||
-rw-r--r-- | abs/core/LinHES-system/PKGBUILD | 15 | ||||
-rwxr-xr-x | abs/core/LinHES-system/misc_recent_recordings.pl | 194 | ||||
-rwxr-xr-x | abs/core/LinHES-system/misc_status_config.py | 15 | ||||
-rwxr-xr-x | abs/core/LinHES-system/misc_status_info.sh | 23 | ||||
-rwxr-xr-x | abs/core/LinHES-system/misc_upcoming_recordings.pl | 328 | ||||
-rwxr-xr-x | abs/core/LinHES-system/misc_which_recorder.pl | 105 |
7 files changed, 690 insertions, 2 deletions
diff --git a/abs/core/LinHES-system/LinHES-system.install b/abs/core/LinHES-system/LinHES-system.install new file mode 100644 index 0000000..f2185cd --- /dev/null +++ b/abs/core/LinHES-system/LinHES-system.install @@ -0,0 +1,12 @@ +## arg 1: the new package version +post_install() { + /usr/LH/bin/misc_status_config.py +} + +## arg 1: the new package version +## arg 2: the old package version +post_upgrade() { + /usr/LH/bin/misc_status_config.py +} + +# vim:set ts=2 sw=2 et: diff --git a/abs/core/LinHES-system/PKGBUILD b/abs/core/LinHES-system/PKGBUILD index cf2d688..9a62ccf 100644 --- a/abs/core/LinHES-system/PKGBUILD +++ b/abs/core/LinHES-system/PKGBUILD @@ -1,6 +1,6 @@ pkgname=LinHES-system pkgver=2 -pkgrel=53 +pkgrel=54 arch=('i686') MVDIR=$startdir/pkg/usr/LH BINDIR=$startdir/pkg/usr/bin @@ -8,6 +8,7 @@ install=LinHES.install pkgdesc="scripts and things related to having an automated system" depends=(linhes-sounds xdotool fluxbox tilda keylaunch python_aosd 'linhes-scripts>=7-24' 'runit-scripts>=2.1.1-43' 'udisks' 'LinHES-config>=2.3-59') backup=(etc/modprobe.d/alsa-base) +install=LinHES-system.install binfiles="LinHES-start optimize_mythdb.py myth_mtc.py myth_mtc.sh LinHES-run firstboot.sh load-modules-mythvantage.sh @@ -21,7 +22,12 @@ binfiles="LinHES-start optimize_mythdb.py lh_system_all_host_update add_storage.py diskspace.sh - cacheclean lh_message.sh switch_web.sh" + cacheclean lh_message.sh switch_web.sh + misc_recent_recordings.pl + misc_status_config.py + misc_status_info.sh + misc_upcoming_recordings.pl + misc_which_recorder.pl" source=(LinHES-session LinHES-profile.sh $binfiles alsa-base myth_mtc.lr diskspace smolt.cron cacheclean.cron) @@ -78,6 +84,11 @@ md5sums=('d1a5963c5a440a608031c6d750232633' '9603b0ca6e090eff31e76482a3c335e7' 'b798ee0796d1b760a2998f90eb8ce9cc' '4a3cd8f9b33b2b86fdba47a8f1fa2859' + '06a628469051237943b7c874f2e29b8a' + '0512f859cd5ea1d9eb972840caef2f0e' + '45f46d1f9193c8dde18e56369ec29a1e' + 'a8edbe7bc37e9932e8749d9f5f89c16f' + '14cea9e87654441b766a97576233ba5a' 'eb879fee9603a05d5420d4ce8ed9e450' 'f1870a9522c79e6b248fcbf81dec3280' '84492954db16740f949d795b74383189' diff --git a/abs/core/LinHES-system/misc_recent_recordings.pl b/abs/core/LinHES-system/misc_recent_recordings.pl new file mode 100755 index 0000000..92dda8a --- /dev/null +++ b/abs/core/LinHES-system/misc_recent_recordings.pl @@ -0,0 +1,194 @@ +#!/usr/bin/perl -w +# +# Outputs information about the most-recently-recorded shows. +# +# Automatically detects database settings. +# + +# Includes + use DBI; + use Getopt::Long; + use MythTV; + +# Some variables we'll use here + our ($num_recordings, $live, $heading, $plain_text, $text_format, $usage); + our ($hours, $minutes, $seconds); + our ($dnum_recordings, $dheading, $dtext_format); + our ($dhours, $dminutes, $dseconds); + our ($status_text_format, $status_value_format); + our ($dstatus_text_format, $dstatus_value_format); + +# Default number of recent recordings to show + $dnum_recordings = 5; +# Default period in which to show recordings + $dhours = -1; + $dminutes = -1; + $dseconds = -1; +# Default status output heading + $dheading='Recent Recordings:\n'; +# Default format of plain-text output + $dtext_format='%n/%j, %g:%i %A - %cc\n%T - %S\n%R\n\n'; +# Default format of status output display text + $dstatus_text_format= '<a href="javascript:void(0)">%n/%j %g:%i %A - %cc - %T - %S<br />'. + '<span><strong>%T</strong> %n/%j, %g:%i %A<br />'. + '<em>%S</em><br /><br />%R<br /></span></a><hr />'; +# Default format of status output value + $dstatus_value_format = '%n/%j, %g:%i %A - %T - %S'; + +# Provide default values for GetOptions + $num_recordings = $dnum_recordings; + $hours = $dhours; + $minutes = $dminutes; + $seconds = $dseconds; + $heading = $dheading; + $text_format = $dtext_format; + $status_text_format = $dstatus_text_format; + $status_value_format = $dstatus_value_format; + +# Load the cli options + GetOptions('num_recordings|recordings=s' => \$num_recordings, + 'hours|o=i' => \$hours, + 'minutes=i' => \$minutes, + 'seconds|e=i' => \$seconds, + 'live' => \$live, + 'heading=s' => \$heading, + 'plain_text' => \$plain_text, + 'text_format=s' => \$text_format, + 'status_text_format=s' => \$status_text_format, + 'status_value_format=s' => \$status_value_format, + 'usage|help' => \$usage + ); + +# Print usage + if ($usage) { + print <<EOF; +$0 usage: + +options: + +--recordings [number of recordings] + + Outputs information on the last [number of recordings] shows recorded by + MythTV. To output information on all recordings, specify -1. + + default: $dnum_recordings + +--hours [number of hours] + + Outputs information on recordings that occurred within [number of hours]. + This option may be specified in conjunction with --minutes and --seconds. + To output information on all matching recordings regardless of start time, + specify -1 for --hours, --minutes, and --seconds. + + default: $dhours + +--minutes [number of minutes] + + Outputs information on recordings that occurred within [number of minutes]. + This option may be specified in conjunction with --hours and --seconds. + To output information on all matching recordings regardless of start time, + specify -1 for --hours, --minutes, and --seconds. + + default: $dminutes + +--seconds [number of seconds] + + Outputs information on recordings that occurred within [number of seconds]. + This option may be specified in conjunction with --hours and --minutes. + To output information on all matching recordings regardless of start time, + specify -1 for --hours, --minutes, and --seconds. + + default: $dseconds + +--live + Include information on recent LiveTV recordings. + +--heading [heading] + Output the [heading] before printing information about recordings. + + default: \'$dheading\' + +--plain_text + Output information in plain text format (i.e. for inclusion in an e-mail + notification). + +--text_format [format] + Use the provided [format] to display information on the recordings. The + format should use the same format specifiers used by mythlink.pl, but + may also use \\r and/or \\n for line breaks. This option is ignored + if --plain_text is not used. + + default: \'$dtext_format\' + +--help + + Show this help text. + +EOF + exit; + } + +# Determine the period of interest + my $now = time(); + my $start_after = $now; + $start_after = $start_after - ($hours * 3600) if ($hours > 0); + $start_after = $start_after - ($minutes * 60) if ($minutes > 0); + $start_after = $start_after - $seconds if ($seconds > 0); + $start_after = 0 if (!($start_after < $now)); + +# Fix the heading. + if (defined($plain_text)) { + $heading =~ s/\\r/\r/g; + $heading =~ s/\\n/\n/g; + } + else { + # Remove line break format specifiers from heading for status output + $heading =~ s/(\\r|\\n)//g; + } + +# Connect to mythbackend + my $Myth = new MythTV(); + +# Get the list of recordings + my $count = 0; + my %rows = $Myth->backend_rows('QUERY_RECORDINGS Delete'); + our $show; + foreach my $row (@{$rows{'rows'}}) { + last unless (($count < $num_recordings) || ($num_recordings < 0)); + $show = new MythTV::Program(@$row); + # Skip LiveTV recordings? + next unless (defined($live) || $show->{'recgroup'} ne 'LiveTV'); + # Within the period of interest? + last if (($start_after) && ($show->{'recstartts'} < $start_after)); + # Print the recording information in the desired format + if (defined($plain_text)) { + text_print($count); + } + else { + status_print($count); + } + $count++; + } + +# Print the output for use in the backend status page. + sub status_print { + my $count = shift; + my $text = $show->format_name($status_text_format, ' ', ' ', 1, 0 ,1); + my $value = $show->format_name($status_value_format, ' ', ' ', + 1, 0 ,1); + print("$heading<div class=\"schedule\">") if ($count == 0); + print("$text"); + print("</div>") if ($count == ($num_recordings - 1)); + print("[]:[]recording$count"); + print("[]:[]$value\n"); + } + +# Print the output in plain text format + sub text_print { + my $count = shift; + my $text = $show->format_name($text_format, ' ', ' ', 1, 0 ,1); + $text =~ s/\\r/\r/g; + $text =~ s/\\n/\n/g; + print("$heading") if ($count == 0); + print("$text"); + } diff --git a/abs/core/LinHES-system/misc_status_config.py b/abs/core/LinHES-system/misc_status_config.py new file mode 100755 index 0000000..0a0ba6c --- /dev/null +++ b/abs/core/LinHES-system/misc_status_config.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python2 + +# This script will configure the myth db to use the misc_status_info scripts + +from socket import gethostname +from MythTV import MythDB +mythdb = MythDB() +localhostname = gethostname() + +# mythtv-setup +if mythdb.settings[localhostname].MiscStatusScript == u'': + mythdb.settings[localhostname].MiscStatusScript = u'/usr/LH/bin/misc_status_info.sh' + print 'The MythTV database setting MiscStatusScript was updated to /usr/LH/bin/misc_status_info.sh.' +else: + print 'The MythTV database setting MiscStatusScript is already set and will not be updated.' diff --git a/abs/core/LinHES-system/misc_status_info.sh b/abs/core/LinHES-system/misc_status_info.sh new file mode 100755 index 0000000..14a972c --- /dev/null +++ b/abs/core/LinHES-system/misc_status_info.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Show all upcoming conflicts +/usr/LH/bin/misc_upcoming_recordings.pl --recordings -1 \ + --no_show_scheduled \ + --heading '<h3>Recording Conflicts</h3>' \ + --no_conflicts_message '<h3>No Recording Conflicts</h3>' + +# Show all the shows recorded today +/usr/LH/bin/misc_recent_recordings.pl --recordings=-1 --hours=24 \ + --heading '<h3>Shows Recorded In The Last 24 Hours</h3>' + +# Get Encoder that was used for recordings from the backend log +firstrun=1 +loglist=`find /var/log/ -name *_mythbackend.*.log*` +for i in `ls -t $loglist` +do + if [ $firstrun -eq 1 ]; then + echo "<h3>Encoder Information</h3><div class=\"schedule\"" + firstrun=0 + fi + /usr/LH/bin/misc_which_recorder.pl --noheader $i +done diff --git a/abs/core/LinHES-system/misc_upcoming_recordings.pl b/abs/core/LinHES-system/misc_upcoming_recordings.pl new file mode 100755 index 0000000..377c2dc --- /dev/null +++ b/abs/core/LinHES-system/misc_upcoming_recordings.pl @@ -0,0 +1,328 @@ +#!/usr/bin/perl -w +# +# Provides notification of upcoming recordings. +# +# Automatically detects database settings. +# + +# Includes + use DBI; + use Getopt::Long; + use MythTV; + +# Some variables we'll use here + our ($num_recordings, $heading, $plain_text, $text_format, $usage); + our ($hours, $minutes, $seconds, $no_conflicts_message); + our ($scheduled, $duplicates, $deactivated, $conflicts); + our ($dnum_recordings, $dheading, $dtext_format); + our ($dhours, $dminutes, $dseconds, $dno_conflicts_message); + our ($dscheduled, $dduplicates, $ddeactivated, $dconflicts); + our ($status_text_format, $status_value_format); + our ($dstatus_text_format, $dstatus_value_format); + +# Default number of upcoming recordings to show + $dnum_recordings = 5; +# Default period in which to show recordings + $dhours = -1; + $dminutes = -1; + $dseconds = -1; +# Default recording status types to show + $dscheduled = 1; + $dduplicates = 0; + $ddeactivated = 0; + $dconflicts = 1; +# Default status output heading + $dheading='Upcoming Recordings:\n'; +# Default format of plain-text output + $dtext_format='%rs\n%n/%j, %g:%i %A - %cc\n%T - %S\n%R\n\n'; +# Default "no conflicts" message + $dno_conflicts_message='No conflicts.\n'; +# Default format of status output display text + $dstatus_text_format= '<a href="javascript:void(0)">%rs - %n/%j %g:%i %A - %cc - '. + '%T - %S<br />'. + '<span><strong>%T</strong> %n/%j, %g:%i %A<br />'. + '<em>%S</em><br /><br />%R<br /></span></a><hr />'; +# Default format of status output value + $dstatus_value_format = '%n/%j %g:%i %A - %T - %S'; + +# Provide default values for GetOptions + $num_recordings = $dnum_recordings; + $hours = $dhours; + $minutes = $dminutes; + $seconds = $dseconds; + $scheduled = $dscheduled; + $duplicates = $dduplicates; + $deactivated = $ddeactivated; + $conflicts = $dconflicts; + $heading = $dheading; + $text_format = $dtext_format; + $no_conflicts_message = $dno_conflicts_message; + $status_text_format = $dstatus_text_format; + $status_value_format = $dstatus_value_format; + +# Load the cli options + GetOptions('num_recordings|recordings=s' => \$num_recordings, + 'hours|o=i' => \$hours, + 'minutes=i' => \$minutes, + 'seconds|s=i' => \$seconds, + 'show_scheduled|_show_scheduled|scheduled|_scheduled|e!' + => \$scheduled, + 'show_duplicates|_show_duplicates|duplicates|_duplicates|p!' + => \$duplicates, + 'show_deactivated|_show_deactivated|deactivated|_deactivated|v!' + => \$deactivated, + 'show_conflicts|_show_conflicts|conflicts|_conflicts!' + => \$conflicts, + 'heading=s' => \$heading, + 'plain_text' => \$plain_text, + 'text_format=s' => \$text_format, + 'no_conflicts_message=s' => \$no_conflicts_message, + 'status_text_format=s' => \$status_text_format, + 'status_value_format=s' => \$status_value_format, + 'usage|help' => \$usage + ); + +# Print usage + if ($usage) { + # Make default "--show_*" options readable + $dscheduled = ($dscheduled ? '--show_scheduled' : + '--no_show_scheduled'); + $dduplicates = ($dduplicates ? '--show_duplicates' : + '--no_show_duplicates'); + $ddeactivated = ($ddeactivated ? '--show_deactivated' : + '--no_show_deactivated'); + $dconflicts = ($dconflicts ? '--show_conflicts' : + '--no_show_conflicts'); + print <<EOF; +$0 usage: + +options: + +--recordings [number of recordings] + + Outputs information on the next [number of recordings] shows to be recorded + by MythTV and that match the criteria specified for --scheduled, + --duplicates, --deactivated, and --conflicts. To output information on all + matching recordings, specify -1. + + default: $dnum_recordings + +--hours [number of hours] + + Outputs information on recordings starting in the next [number of hours] + and that match the criteria specified for --scheduled, --duplicates, + --deactivated, and --conflicts. This option may be specified in + conjunction with --minutes and --seconds. To output information on all + matching recordings regardless of start time, specify -1 for --hours, + --minutes, and --seconds. + + default: $dhours + +--minutes [number of minutes] + + Outputs information on recordings starting in the next [number of minutes] + and that match the criteria specified for --scheduled, --duplicates, + --deactivated, and --conflicts. This option may be specified in + conjunction with --hours and --seconds. To output information on all + matching recordings regardless of start time, specify -1 for --hours, + --minutes, and --seconds. + + default: $dminutes + +--seconds [number of seconds] + + Outputs information on recordings starting in the next [number of seconds] + and that match the criteria specified for --scheduled, --duplicates, + --deactivated, and --conflicts. This option may be specified in + conjunction with --hours and --minutes. To output information on all + matching recordings regardless of start time, specify -1 for --hours, + --minutes, and --seconds. + + default: $dseconds + +--show_scheduled|--no_show_scheduled + + Outputs information about scheduled recordings. Scheduled recordings are + those that MythTV plans to actually record. + + default: $dscheduled + +--show_duplicates|--no_show_duplicates + + Outputs information about duplicate recordings. Duplicate recordings are + those that will not be recorded because of the specified duplicate matching + policy for the rule. + + default: $dduplicates + +--show_deactivated|--no_show_deactivated + + Outputs information about deactivated recordings. Deactivated recordings + are those that MythTV will not record because the schedule is inactive, + because the showing was set to never record, because the show is being + recorded in an earlier or later showing, because there are too many + recordings or not enough disk space to allow the recording, or because + the show you\'ve specified for recording is not listed in the timeslot + specified. + + default: $ddeactivated + +--show_conflicts|--no_show_conflicts + + Outputs information about conflicts (those shows that MythTV cannot record + because of other higher-priority scheduled recordings). + + default: $dconflicts + +--heading [heading] + Output the [heading] before printing information about recordings. + + default: \'$dheading\' + +--plain_text + Output information in plain text format (i.e. for inclusion in an e-mail + notification). + +--text_format [format] + Use the provided [format] to display information on the recordings. The + format should use the same format specifiers used by mythlink.pl, but + may also use \\r and/or \\n for line breaks and %rs for recording status. + This option is ignored if --plain_text is not used. + + default: \'$dtext_format\' + +--no_conflicts_message [message] + Use the provided [message] to specify there are no conflicts. This option + is used when only information about conflicts is requested and there are + no conflicts. I.e. it is only used with the combination of show_* + options --show_conflicts, --no_show_scheduled, --no_show_deactivated, + and --no_show_duplicates . + + default: \'$dno_conflicts_message\' + +--help + + Show this help text. + +EOF + exit; + } + +# Determine the period of interest + my $now = time(); + my $start_before = $now; + $start_before = $start_before + ($hours * 3600) if ($hours > 0); + $start_before = $start_before + ($minutes * 60) if ($minutes > 0); + $start_before = $start_before + $seconds if ($seconds > 0); + $start_before = 0 if (!($start_before > $now)); + +# Fix the heading. + if (defined($plain_text)) { + $heading =~ s/\\r/\r/g; + $heading =~ s/\\n/\n/g; + } + else { + # Remove line break format specifiers from heading for status output + $heading =~ s/(\\r|\\n)//g; + } + +# Connect to mythbackend + my $Myth = new MythTV(); + +# Get the list of recordings + my $count = 0; + my %rows = $Myth->backend_rows('QUERY_GETALLPENDING', 2); + my $has_conflicts = $rows{'offset'}[0]; + if ((!$has_conflicts) && + (($conflicts) && + (!(($scheduled) || ($duplicates) || ($deactivated))))) { + $no_conflicts_message =~ s/\\r/\r/g; + $no_conflicts_message =~ s/\\n/\n/g; + print "$no_conflicts_message"; + exit 0; + } + my $num_scheduled = $rows{'offset'}[1]; + our $show; + foreach my $row (@{$rows{'rows'}}) { + last unless (($count < $num_recordings) || ($num_recordings < 0)); + $show = new MythTV::Program(@$row); + last if (($start_before) && ($show->{'recstartts'} > $start_before)); + next if ((!$scheduled) && (is_scheduled($show->{'recstatus'}))); + next if ((!$duplicates) && (is_duplicate($show->{'recstatus'}))); + next if ((!$deactivated) && (is_deactivated($show->{'recstatus'}))); + next if ((!$conflicts) && (is_conflict($show->{'recstatus'}))); + + # Print the recording information in the desired format + if (defined($plain_text)) { + text_print($count); + } + else { + status_print($count); + } + $count++; + } + +# Returns true if the show is scheduled to record + sub is_scheduled { + my $recstatus = (shift() or 0); + return (($MythTV::recstatus_willrecord == $recstatus) || + ($MythTV::recstatus_recorded == $recstatus) || + ($MythTV::recstatus_recording == $recstatus)); + } + +# Returns true if the show is a duplicate + sub is_duplicate { + my $recstatus = (shift() or 0); + return (($MythTV::recstatus_repeat == $recstatus) || + ($MythTV::recstatus_previousrecording == $recstatus) || + ($MythTV::recstatus_currentrecording == $recstatus)); + } + +# Returns true if the recording is deactivated + sub is_deactivated { + my $recstatus = (shift() or 0); + return (($MythTV::recstatus_inactive == $recstatus) || + ($MythTV::recstatus_toomanyrecordings == $recstatus) || + ($MythTV::recstatus_cancelled == $recstatus) || + ($MythTV::recstatus_deleted == $recstatus) || + ($MythTV::recstatus_aborted == $recstatus) || + ($MythTV::recstatus_notlisted == $recstatus) || + ($MythTV::recstatus_dontrecord == $recstatus) || + ($MythTV::recstatus_lowdiskspace == $recstatus) || + ($MythTV::recstatus_tunerbusy == $recstatus) || + ($MythTV::recstatus_neverrecord == $recstatus) || + ($MythTV::recstatus_earliershowing == $recstatus) || + ($MythTV::recstatus_latershowing == $recstatus)); + } + +# Returns true if the show cannot be recorded due to a conflict + sub is_conflict { + my $recstatus = (shift() or 0); + return ($MythTV::recstatus_conflict == $recstatus); + } + +# Print the output for use in the backend status page. + sub status_print { + my $count = shift; + my $text = $show->format_name($status_text_format, ' ', ' ', 1, 0 ,1); + $text =~ s/%rs/$MythTV::RecStatus_Types{$show->{'recstatus'}}/g; + my $value = $show->format_name($status_value_format, ' ', ' ', + 1, 0 ,1); + $value =~ s/%rs/$MythTV::RecStatus_Types{$show->{'recstatus'}}/g; + print("$heading<div class=\"schedule\">") if ($count == 0); + print("$text"); + print("</div>") if ($count == ($num_recordings - 1)); + print("[]:[]recording$count"); + print("[]:[]$value\n"); + } + +# Print the output in plain text format + sub text_print { + my $count = shift; + my $text = $show->format_name($text_format, ' ', ' ', 1, 0 ,1); + $text =~ s/%rs/$MythTV::RecStatus_Types{$show->{'recstatus'}}/g; + $text =~ s/\\r/\r/g; + $text =~ s/\\n/\n/g; + print("$heading") if ($count == 0); + print("$text"); + } diff --git a/abs/core/LinHES-system/misc_which_recorder.pl b/abs/core/LinHES-system/misc_which_recorder.pl new file mode 100755 index 0000000..f8a1022 --- /dev/null +++ b/abs/core/LinHES-system/misc_which_recorder.pl @@ -0,0 +1,105 @@ +#!/usr/bin/perl -w +# +# Parses the backend log file and includes information on which encoder was used to record shows. + +my ($time, $title, $subtitle, $chanid, $cardid, $sourceid); +my $index = 0; + +sub print_text +{ + print "$time - $title"; + print ": $subtitle" if ($subtitle); + print "\n"; + print " - Encoder ID: $cardid\n"; + print " - Video Source ID: $sourceid\n"; + print " - Channel ID: $chanid\n"; +} + +sub print_xml +{ + print "<a href=\"javascript:void(0)\">$time - $title"; + print ": $subtitle" if ($subtitle); + print " - Encoder: $cardid<br />". + "<span><strong>$title</strong> $time<br />"; + print "<em>$subtitle</em><br />" if ($subtitle); + print "<br />Channel ID: $chanid<br />Encoder ID: $cardid<br />". + "Video Source ID: $sourceid<br /></span></a><hr />"; + # For XML parsers + print "[]:[]capture_info$index\[]:[]time='$time':title='$title'". + ":subtitle='$subtitle':chanid='$chanid':cardid='$cardid'". + ":sourceid='$sourceid'\n"; +} + +my $mode = shift; +my $log_file = shift; + +if (($mode ne "--text") && ($mode ne "--noheader")) +{ + $log_file = $mode; +} + +if ($log_file =~ m/^--.*/i) +{ + die ("Only one option can be used at a time.\n"); +} + +if ($log_file =~ /\.gz$/) +{ +# read top down +# open($fh, "gunzip -c $log_file |") or die "Unable to open log file '$log_file', stopping:"; + open($fh, "gunzip -c $log_file |tac |") or die "Unable to open log file '$log_file', stopping:"; +} +else +{ +# read top down +# open($fh, "<$log_file") or die "Unable to open log file '$log_file', stopping:"; + open($fh, "tac $log_file |") or die "Unable to open log file '$log_file', stopping:"; +} + +while (<$fh>) +{ +# Myth .24 regex to find start of recording +# if (/^(.*)(?:\d(?: I )?|I.* -) (?:Started|Tuning) recording: (.*): channel (\d+) on cardid (\d+), sourceid (\d+)/) + if (/^(\d+-\d+-\d+T\d+\:\d+\:\d+)(?:.*) (?:Started|Tuning) recording: (.*): channel (\d+) on cardid (\d+), sourceid (\d+)/) + { + if ($mode eq "--noheader") + { + print "<div class=\"schedule\">" + if (($index == 0) && ($mode ne "--text")); + } + else + { + print "<h3>Encoder Information</h3><div class=\"schedule\">" + if (($index == 0) && ($mode ne "--text")); + } + $index++; + + ($time, $title, $chanid, $cardid, $sourceid) = ($1, $2, $3, $4, $5); + $time = `date -d $time +%a' '%m/%d' '%H:%M' '%p`; + chomp ($time); + if (($title =~ /"?(.+)"?:"?(.*)"?/) || ($title =~ /(.+) "(.*)"/)) + { + $title = $1; + $subtitle = $2; + } + else + { + $subtitle = ''; + } + $title =~ s/^"//; + $subtitle =~ s/^"//; + $title =~ s/"$//; + $subtitle =~ s/"$//; + if ($mode eq "--text") + { + print_text; + } + else + { + print_xml; + } + } +} +print "</div>" if (($index > 0) && ($mode ne "--text")); + +close $fh; |