blob: 4f6174cef2898b7f7ef3c8594a4e99d6d57d3855 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#!/bin/bash
usage () {
echo "Usage: $0 [-h] [-s] [-t <minutes_needed>] [-l] [-w] [-m] [-r] [-v]"
echo
echo "-h - Print this help/usage message and quit"
echo "-s - Run silently (default is verbose)"
echo "-t - Minutes of idle time needed (default is 20)"
echo "-l - Check for user logins (default: false - do not check)"
echo "-w - Check for open windows (default: false - do not check)"
echo "-m - Include mythshutdown daily wake, locked, & about to start wake in system busy"
echo " (default: daily wake, locked & about to start wake is system idle)"
echo "-r - Check if mythfrontends are running (default: false - do not check)"
echo "-v - Be more verbose for debugging"
echo
echo "Silent mode is recommended for use in cron jobs or scripts."
exit $1
}
msg () { # A status reporting function
[ "$VERBOSE" -ne 0 ] && echo "$*"
}
mysql_cmd () {
/usr/bin/mysql -u root mythconverg -sBe "$*"
}
# Command line argument handling
VERBOSE=1
LOGINS=0
WINDOWS=0
DAILY=0
RUNNING=0
TIME_BEFORE=20
TIME_AFTER=5 # Only adjustable by editing here
while getopts "hslwmrt:v" OPT ; do
case $OPT in
h) usage 0 ;;
s) VERBOSE=0 ;;
t) TIME_BEFORE=$OPTARG ;;
l) LOGINS=1 ;;
w) WINDOWS=1 ;;
m) DAILY=1 ;;
r) RUNNING=1 ;;
v) VERBOSE=2 ;;
*) usage 1 ;;
esac
done
# Check for extra cruft on the command line...
shift $(($OPTIND - 1))
[ -n "$*" ] && usage 1
msg "Checking what MythTV is doing now or plans to within $TIME_BEFORE minutes..."
msg
/usr/bin/mythshutdown --status
BUSY="$?"
msg "mythshutdown returned $BUSY"
if [ "$DAILY" -eq 0 ] ; then
msg " including daily wake, locked, and about to start wake as system idle"
# Ignore daily wake, locked and about to start wake flag values
BUSY=$(($BUSY & 0x2F))
msg " mythshutdown returned $BUSY"
fi
SCHEMALOCK=$(mysql_cmd "select count(*) from schemalock")
msg "schemalock $SCHEMALOCK"
JOBS=$(mysql_cmd "select count(*) from jobqueue where status = 4")
msg "running jobs $JOBS"
INUSE=$(mysql_cmd "select count(*) from inuseprograms")
msg "inuse programs $INUSE"
UPCOMING=$(timeout 3 misc_upcoming_recordings.pl --plain_text --text_format "%rs " --heading "" --minutes $TIME_BEFORE --recordings -1 | wc -w)
msg "planned recordings $UPCOMING"
if [ "$VERBOSE" -ge 2 ] ; then
msg
timeout 3 /usr/LH/bin/misc_upcoming_recordings.pl --plain_text --minutes $TIME_BEFORE --recordings -1
fi
# Check all host's mythfrontends if they are running and playing
HOSTNAMES=$(mysql_cmd "select hostname from settings where value = 'FrontendIdleTimeout'")
FERUNNING=0
PLAYING=0
for HOST in $HOSTNAMES
do
if [ "$VERBOSE" -ge 2 ]; then
msg "Checking $HOST's mythfrontend status..."
fi
ncOUTPUT=$(timeout 2 nc $HOST 6546 << EOF
query location
quit
EOF
)
if [ "$RUNNING" -ge 1 ] ; then
if [[ "$ncOUTPUT" == *"# "* ]]; then
FERUNNING=$(( $FERUNNING + 1 ))
msg "$HOST's mythfrontend is running $FERUNNING"
else
msg "$HOST's mythfrontend is NOT running $FERUNNING"
fi
fi
if [[ "$ncOUTPUT" == *"# Playback "* ]]; then
PLAYING=$(( $PLAYING + 1 ))
msg "$HOST is playing a recording or video $PLAYING"
else
msg "$HOST is NOT playing a recording or video $PLAYING"
fi
done
# Check for users logged in
if [ "$LOGINS" -ge 1 ] ; then
USERS=`/usr/bin/last | /bin/grep "still logged in" | awk '{ print $1 }'`
if [ -n "$USERS" ] ; then
LOGINS=1
msg "The following user(s) are still logged in:"
msg "${USERS}"
else
LOGINS=0
msg "No users are logged in $LOGINS"
fi
fi
# Check for open windows
FOUNDWINDOWS=0
if [ "$WINDOWS" -ge 1 ] ; then
/usr/LH/bin/xwin_find.sh -q '.*(mythtv@|xterm|Firefox|Namoroka|Opera|Chromium).*'
FOUNDWINDOWS="$?"
FOUNDWINDOWS=$(($FOUNDWINDOWS == 0))
if [ "$FOUNDWINDOWS" -eq 0 ] ; then
msg "no application windows open $FOUNDWINDOWS"
else
msg "one or more application windows open $FOUNDWINDOWS"
fi
fi
activities=$(($BUSY + $SCHEMALOCK + $JOBS + $INUSE + $UPCOMING + $FERUNNING + $PLAYING + $LOGINS + $FOUNDWINDOWS))
msg
if [ "$activities" -eq 0 ] ; then
msg "System is idle"
exit 0
else
msg "System is busy"
exit 1
fi
|