#!/usr/bin/env python
'''Pulls one of the ACQ400 http ajax monitor files, parses and prints user selected values
Examples::
    [pgm@hoy5 utils]$ ./getmonitor.py --verbose=2 --key='VA[PN]' acq2106_119 acq2106_276
    acq2106_119 VAN -13.1
    acq2106_119 VAP 12.78
    acq2106_276 VAN -13.0
    acq2106_276 VAP 12.89
    ./getmonitor.py --verbose=2 --key='.*AGGSTA.0x0c (\w+).*' --monxml=acq4000.xml acq2106_119 acq2106_261 acq2106_262
    acq2106_119 0x00000066
    acq2106_261 0x00000025
    acq2106_262 0x00000100
Created on 6 Oct 2020
@author: pgm
'''
import urllib.request
import argparse
from lxml import etree
import lxml
import xml.etree.ElementTree as ElementTree
import re
[docs]def getvolts(uut, monxml, kex, verbose=0): 
    while True:
        try:   
            content = urllib.request.urlopen("http://{}/d-tacq/data/{}".format(uut, monxml)).read()
            root = etree.fromstring(content)
            break
        except lxml.etree.XMLSyntaxError:
            continue
        
    for acqdata in root.xpath('//acqData'):
        key = acqdata.attrib['n']
        if kex.match(key):
            value = acqdata[0].text
            if verbose == 2:
                print(uut, key, value)
            elif verbose == 1:
                print(key, value)
            else:
                print(value)
        else:            
            for m in kex.finditer(acqdata[0].text):
                try:
                    value = m.group(1)
                except:
                    value = m.group()
                if verbose == 2:
                    print(uut, value)
                else:
                    print(value)                               
[docs]def get_parser():
    parser = argparse.ArgumentParser(description='parse and print monitor files')
    parser.add_argument('--verbose', default=1, type=int, help='0: print value, 1: print key,value, 2: print uut,key, value')
    parser.add_argument('--monxml', default="volts.xml", help='monitor file to request and parse')
    parser.add_argument('--key', default='VA.', help='key, could be regex')
    parser.add_argument('uuts', nargs='+')
    return parser 
    
[docs]def run_main(args):
    kex = re.compile(args.key)
    for uut in args.uuts:
        getvolts(uut, args.monxml, kex, verbose=args.verbose) 
if __name__ == '__main__':
    run_main(get_parser().parse_args())