Advertisement
Guest User

print_encoder_status.py

a guest
Aug 15th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.08 KB | None | 0 0
  1. #!/usr/bin/env python2
  2.  
  3. """
  4. pes.py. Print Encoder status. An example of a slightly more complex set
  5. of responses and how to handle errors encountered in the send() function.
  6. """
  7.  
  8. from __future__ import print_function
  9. import argparse
  10. import logging
  11. import sys
  12. from MythTV.services_api import send as api
  13.  
  14. # From: https://code.mythtv.org/cgit/mythtv/tree/mythtv/libs/libmythtv/tv.h#n48
  15.  
  16. TV_STATE = {-1: 'Error', 0: 'Idle', 1: 'WatchingLiveTV', 2: 'WatchingRecorded',
  17.             3: 'WatchingVideo', 4: 'WatchingDVD', 5: 'WatchingBD',
  18.             6: 'WatchingRecording', 7: 'Recording', 8: 'ChangingState'}
  19.  
  20.  
  21. def process_arguments():
  22.     """Handle the command line arguments."""
  23.     parser = argparse.ArgumentParser(description='Print Backend Encoder Stats',
  24.                                      epilog='default values in ()s')
  25.  
  26.     parser.add_argument('--debug', action='store_true',
  27.                         help='print additional information (%(default)s)')
  28.  
  29.     parser.add_argument('--digest', type=str, metavar='<user:pass>',
  30.                         help='digest username:password')
  31.  
  32.     parser.add_argument('HOSTS', type=str, nargs='*', metavar='<host>',
  33.                         default=['localhost'],
  34.                         help='Backend hostname(s)/IP(s) (%(default)s)')
  35.  
  36.     parser.add_argument('--port', type=int, default=6544, metavar='<port>',
  37.                         help='Services API port, rarely changed (%(default)s)')
  38.  
  39.     parser.add_argument('--quiet', action='store_true',
  40.                         help='no output, e.g. for cron. (%(default)s)')
  41.  
  42.     parser.add_argument('--version', action='version', version='%(prog)s 0.7')
  43.  
  44.     return vars(parser.parse_args())
  45.  
  46.  
  47. def process_response(resp_dict, args):
  48.     """Prints the status of all tuners."""
  49.  
  50.     tuner_in_error = False
  51.     encoder_list = resp_dict['EncoderList']['Encoders']
  52.  
  53.     for elist in range(10):
  54.         for i in range(10):
  55.             try:
  56.                 state = int(encoder_list[elist]['State'])
  57.                 if state < 0:
  58.                     tuner_in_error = True
  59.                 qprint('{:^15.15}{:^4.4}  {:17.17}  {:^3.3}  {:^3.3}  {}'
  60.                        .format(
  61.                            encoder_list[elist]['Inputs'][i]['DisplayName'],
  62.                            encoder_list[elist]['Inputs'][i]['Id'],
  63.                            TV_STATE[state],
  64.                            encoder_list[elist]['Inputs'][i]['ScheduleOrder'],
  65.                            encoder_list[elist]['Inputs'][i]['LiveTVOrder'],
  66.                            encoder_list[elist]['Recording']['Title']), args)
  67.             except IndexError:
  68.                 break
  69.  
  70.     return tuner_in_error
  71.  
  72.  
  73. def qprint(message, args):
  74.     """Only print messages if --quiet wasn't used."""
  75.     if not args['quiet']:
  76.         print(message)
  77.  
  78.  
  79. def main():
  80.     """Get the encoder statuses and call the processor."""
  81.  
  82.     args = process_arguments()
  83.     tuner_error_rc = 0
  84.     endpoint = 'Dvr/GetEncoderList'
  85.     opts = {'debug': args['debug']}
  86.  
  87.     logging.basicConfig(level=logging.DEBUG if args['debug'] else logging.INFO)
  88.     logging.getLogger('requests.packages.urllib3').setLevel(logging.WARNING)
  89.     logging.getLogger('urllib3.connectionpool').setLevel(logging.WARNING)
  90.  
  91.     try:
  92.         opts['user'], opts['pass'] = args['digest'].split(':')
  93.     except (AttributeError, ValueError):
  94.         pass
  95.  
  96.     for hostname in args['HOSTS']:
  97.  
  98.         backend = api.Send(host=hostname, port=args['port'])
  99.         try:
  100.             response = backend.send(endpoint=endpoint, opts=opts)
  101.         except RuntimeError as error:
  102.             sys.exit('{}'.format(error))
  103.  
  104.         qprint('\n{:<15.15} {:<4.4} {:<17.17} {} {} {}  [Host: {}]'
  105.                .format('Display Name', 'Id', 'State', 'Sched',
  106.                        'Live', 'Recording Title', hostname), args)
  107.  
  108.         if process_response(response, args):
  109.             tuner_error_rc += 1
  110.  
  111.         backend.close_session()
  112.  
  113.     sys.exit(tuner_error_rc)
  114.  
  115.  
  116. if __name__ == '__main__':
  117.     main()
  118.  
  119. # vim: set expandtab tabstop=4 shiftwidth=4 smartindent noai colorcolumn=80:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement