Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- """
- pes.py. Print Encoder status. An example of a slightly more complex set
- of responses and how to handle errors encountered in the send() function.
- """
- from __future__ import print_function
- import argparse
- import logging
- import sys
- from MythTV.services_api import send as api
- # From: https://code.mythtv.org/cgit/mythtv/tree/mythtv/libs/libmythtv/tv.h#n48
- TV_STATE = {-1: 'Error', 0: 'Idle', 1: 'WatchingLiveTV', 2: 'WatchingRecorded',
- 3: 'WatchingVideo', 4: 'WatchingDVD', 5: 'WatchingBD',
- 6: 'WatchingRecording', 7: 'Recording', 8: 'ChangingState'}
- def process_arguments():
- """Handle the command line arguments."""
- parser = argparse.ArgumentParser(description='Print Backend Encoder Stats',
- epilog='default values in ()s')
- parser.add_argument('--debug', action='store_true',
- help='print additional information (%(default)s)')
- parser.add_argument('--digest', type=str, metavar='<user:pass>',
- help='digest username:password')
- parser.add_argument('HOSTS', type=str, nargs='*', metavar='<host>',
- default=['localhost'],
- help='Backend hostname(s)/IP(s) (%(default)s)')
- parser.add_argument('--port', type=int, default=6544, metavar='<port>',
- help='Services API port, rarely changed (%(default)s)')
- parser.add_argument('--quiet', action='store_true',
- help='no output, e.g. for cron. (%(default)s)')
- parser.add_argument('--version', action='version', version='%(prog)s 0.7')
- return vars(parser.parse_args())
- def process_response(resp_dict, args):
- """Prints the status of all tuners."""
- tuner_in_error = False
- encoder_list = resp_dict['EncoderList']['Encoders']
- for elist in range(10):
- for i in range(10):
- try:
- state = int(encoder_list[elist]['State'])
- if state < 0:
- tuner_in_error = True
- qprint('{:^15.15}{:^4.4} {:17.17} {:^3.3} {:^3.3} {}'
- .format(
- encoder_list[elist]['Inputs'][i]['DisplayName'],
- encoder_list[elist]['Inputs'][i]['Id'],
- TV_STATE[state],
- encoder_list[elist]['Inputs'][i]['ScheduleOrder'],
- encoder_list[elist]['Inputs'][i]['LiveTVOrder'],
- encoder_list[elist]['Recording']['Title']), args)
- except IndexError:
- break
- return tuner_in_error
- def qprint(message, args):
- """Only print messages if --quiet wasn't used."""
- if not args['quiet']:
- print(message)
- def main():
- """Get the encoder statuses and call the processor."""
- args = process_arguments()
- tuner_error_rc = 0
- endpoint = 'Dvr/GetEncoderList'
- opts = {'debug': args['debug']}
- logging.basicConfig(level=logging.DEBUG if args['debug'] else logging.INFO)
- logging.getLogger('requests.packages.urllib3').setLevel(logging.WARNING)
- logging.getLogger('urllib3.connectionpool').setLevel(logging.WARNING)
- try:
- opts['user'], opts['pass'] = args['digest'].split(':')
- except (AttributeError, ValueError):
- pass
- for hostname in args['HOSTS']:
- backend = api.Send(host=hostname, port=args['port'])
- try:
- response = backend.send(endpoint=endpoint, opts=opts)
- except RuntimeError as error:
- sys.exit('{}'.format(error))
- qprint('\n{:<15.15} {:<4.4} {:<17.17} {} {} {} [Host: {}]'
- .format('Display Name', 'Id', 'State', 'Sched',
- 'Live', 'Recording Title', hostname), args)
- if process_response(response, args):
- tuner_error_rc += 1
- backend.close_session()
- sys.exit(tuner_error_rc)
- if __name__ == '__main__':
- main()
- # vim: set expandtab tabstop=4 shiftwidth=4 smartindent noai colorcolumn=80:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement