示例#1
0
    def get_program_stats(self,
                          types="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24",
                          fromdate="12/19/18",
                          todate="12/20/18",
                          fromtime="06:00:00 PM",
                          totime="12:00:00 AM"):
        """
        Get Stats - Pull statistics for specific time period, can do multiple reports of a duration

        Variables:
        types - KPI types
        fromDate - date to start
        todate - date to end
        fromtime - time to start
        totime - time to end
        reportDuration - duration to report on
        """
        logger.debug("Entering get_program_stats")
        request = '''{{
            "id":1,
            "jsonrpc":2.0,
            "method":"Report.GetProgramStatistics",
                    "params":{{
                    "outputType":"json",
                    "fromDate":"{0!s}",
                    "fromTime":"{1!s}",
                    "toDate":"{2!s}",
                    "toTime":"{3!s}",
                    "types":[{4!s}],
                    "availabilityProduct":"sentry"}}
        }}'''.format(fromdate, fromtime, todate, totime, types)
        logger.debug(request)
        return self.request_program_stats(request=request)
示例#2
0
    def request_program_stats(self, request):
        '''need to make sure the request is good
           and check for an early request
        '''
        logger.debug("Entering request_program_stats")
        while True:
            try:
                this_response = requests.post(self.requesturl, data=request)

                sentryUtils.log_response(this_response)
                stats_load = json.loads(this_response.text, parse_int = int, parse_float = int)
                if stats_load.has_key('result'):
                    return stats_load['result']
                elif stats_load.has_key('code'):
                    if str(stats_load["code"]) == "-32000": #code -32000 is an early request
                        print "Made a request too fast waiting a minute"
                        logger.debug("code: {0!s}".format(stats_load["code"]))
                        logger.debug("text: {0!s}".format(stats_load["message"]))
                        sleep(STATS_SLEEP_TIME)
                    else:
                        raise Exception("Bad response from Sentry {0!s}".format(this_response.text))
                else:
                    print "error: {0!s}".format(this_response.text)
            except:
                print "Sentry did not respond. Will try again"
        logger.debug("Leaving request_program_stats")
        return stats_load
示例#3
0
    def getMPEGInput(self):
        """
        {{
            "jsonrpc":2.0,
            "method":"Input.GetMPEGInput",
            "params":{"outputType":"json","activeOnly":true,"inputType":"ETH", "vlanIds":[1069]},
            "id":1
        }}"""

        request = """{
                    "jsonrpc":2.0,
                    "method":"Input.GetMPEGInput",
                    "params":{"outputType":"json","inputType":"ETH","activeOnly":true},
                    "id":1
                    }"""
        logger.debug(request)
        sentryUtils.log_response(requests.post(self.requesturl, data=request))
示例#4
0
    def get_program_stats_span(self,
                          types="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24",
                          span="1 minute",
                          availability_product="medius"):
        """
        Get Stats - Pull statistics for specific time period, can do multiple reports of a duration

        Variables:
        types - KPI types
        span - length of report
        availabilityProduct - where to read avability from

        """
        logger.debug("Entering get_program_stats_span")
        request = '''{{
            "id":1,
            "jsonrpc":2.0,
            "method":"Report.GetProgramStatistics",
                    "params":{{
                    "outputType":"json",
                    "types":[{0!s}],
                    "span":"{1!s}",
                    "availabilityProduct":"sentry"}}
        }}'''.format(types, span, availability_product)
        logger.debug(request)
        stats_load = self.request_program_stats(request=request)
        logger.debug("Leaving get_program_stats_span")
        return stats_load
示例#5
0
def DateRange(startDate, endDate, stepDuration):
    """
    Iterate over date range
    Variables
    startDate - datetime to start
    endDate - datetime to stop
    stepDuration - Duration of the step in seconds


    """
    logger.debug(
        "Entering dateRange: StartDate:{0} EndDate:{1} stepDuration:{2}".
        format(startDate, endDate, stepDuration))

    if startDate <= endDate:
        for n in range(0, int((endDate - startDate).total_seconds()),
                       stepDuration):
            yield startDate + timedelta(seconds=n)
    else:
        for n in range(0, int((startDate - endDate).total_seconds()),
                       stepDuration):
            yield startDate - timedelta(seconds=n)
示例#6
0
    def test_login(self):
        """
        Test logon
        this will return the response and headers from the Sentry
        This should get a 200 response and an error saying
        there is no real request
        """

        logger.debug("Entering Sentry test login")
        this_response = requests.get(self.requesturl)
        print "StatusCode: " + str(this_response.status_code)
        print "Headers: "
        for header, value in this_response.headers.items():
            print "    %s : %s", header, value
        print "Encoding: " + this_response.encoding
        print "Text: " + this_response.text
        try:
            print "Json" + this_response.json()
        except ValueError:
            pass
        logger.debug("Leaving Sentry test login")
        return this_response.status_code
示例#7
0
    def get_sentry_info(self):
        """
        return the Sentry info
        {
        "jsonrpc":2.0,
        "method":"Report.GetSentryInfo",
        "params":{"outputType":"json"},
        "id":1
        }
        """
        logger.debug("Entering Get Sentry Info")

        request = """{
                    "jsonrpc":2.0,
                    "method":"Report.GetSentryInfo",
                    "params":{"outputType":"json"},
                    "id":1
                    }"""
        this_response = requests.post(self.requesturl, data=request)

        logger.debug("leaving Get Sentry Info")

        return this_response.text
示例#8
0
def main():
    '''
    main function
    '''

    logger.debug("Entering Read Dish Main")
    parser = argparse.ArgumentParser(description='Import new settings',
                                     add_help=True)
    parser.add_argument('--system',
                        '-s',
                        dest='system',
                        help='URL of Sentry or Medius',
                        required=True)
    parser.add_argument('--userName',
                        '-u',
                        dest='userName',
                        help='userName for login',
                        required=True)
    parser.add_argument('--password',
                        '-p',
                        dest='password',
                        help='password for login',
                        required=True)

    results = parser.parse_args()

    sentrys = [
        '10.0.1.12', '10.0.1.13', '10.0.1.14', '10.126.2.37', '10.126.2.39'
    ]

    medius = sentryConnection.Sentry(tekip=(results.system.strip()),
                                     medius=True,
                                     user=results.userName.strip(),
                                     passwd=results.password.strip())

    medius.getMPEGInput()
示例#9
0
    def UpdateMPEGInput(self, UpdateMPEG, BreakNumber = 20):
        '''
        Function to talk to Input.UpdateMPEGInput to set the input settings.
        arguments:
                UpdateMPEG - List of dicts containing the MPEG input settings
                BreakNumber - how many port settings to send at a time
        '''
        '''
        example Input.UpdateMPEGInput request
        {
            "jsonrpc":2.0,"method":"Input.UpdateMPEGInput","params":
            {"inputType":"json","inputSettings":[{"sentryName":"Name or IP",
            "portnum":13,"sourceIp":"*","groupAddr":"225.215.1.5","destPort":8000,
            "name":"Port 13","desc":"My port 13","monitorBackup":false,
            "backupSourceIp":"*","backupGroupAddr":"225.215.2.1","backupDestPort":8001,
            "vlanId":1069,"mode":"Multicast"}]},"id":1}
        '''
        '''
        example responses from Input.UpdateMPEGInput
        {"ver":"1.0","jsonrpc":"2.0","code":-32602,"message":"sentryName is a required parameter.","data":null,"cnt":null}
        {"ver":"1.0","jsonrpc":"2.0","id":1,"result":[{"region":"PA","location":"Danville","display_name":"sentry3",
            "ip_addr":"10.0.1.14","unit_name":"sentry3","Error":"Port 1155, 1156, 1157, 1158, 1159 are out of the range.","System ID":4}]}
        {"ver":"1.0","jsonrpc":"2.0","id":1,"result":[{"region":"PA","location":"Danville","display_name":"sentry3",
            "ip_addr":"10.0.1.14","unit_name":"sentry3","response":{"resultCode":"200","resultMsg":"Success"},"System ID":4}]}
         {"ver":"1.0","jsonrpc":"2.0","id":1,"result":[{"region":"PA","location":"Danville","display_name":"sentry2","ip_addr":"10.0.1.13","unit_name":"sentry2",
            "Error":"The Source IP for port number 9 (172.31.27.22 ) is invalid.<br>The Source IP for port number 11 (172.31.27.22 ) is invalid.
            <br>The Source IP for port number 12 (172.31.27.22 ) is invalid.<br>The Source IP for port number 14 (172.31.27.22 ) is invalid.
            <br>The Source IP for port number 15 (172.31.27.22 ) is invalid.<br>The Source IP for port number 17 (172.31.27.22 ) is invalid.
            <br>The Source IP for port number 20 (172.31.27.22 ) is invalid.<br>The Source IP for port number 21 (172.31.27.22 ) is invalid.","System ID":3}]
        '''
        logger.debug("Entering UpdateMPEGInput")
        InputSettings = ''
        for num, port in enumerate(UpdateMPEG, start=1):
            InputSettings += str(json.dumps(port))
            if num % BreakNumber == 0 or num == len(UpdateMPEG):
                request = '''{{"jsonrpc":2.0,
                    "method":"Input.UpdateMPEGInput",
                    "params":
                    {{"inputType":"json",
                    "inputSettings":
                    [{0!s}]}},"id":1}}'''.format(str(InputSettings))
                logger.debug(request)
                this_response = requests.post(self.requesturl, data=request)
                sentryUtils.log_response(this_response)
                '''if stats_load.has_key('result'):
                    return stats_load['result']
                else:
                        raise Exception("Bad response from Sentry {0!s}".format(this_response.text))
                else:
                    print "error: {0!s}".format(this_response.text)'''
                InputSettings = ''
            else:
                InputSettings += ','

        logger.debug("Leaving UpdateMPEGInput")
示例#10
0
    def SetProgramMapping(self, ProgramMapping, BreakNumber=20):
        '''
        Function to talk to "Program.SetProgramMapping to set the input settings.
        arguments:
                UpdateMPEG - List of dicts containing the MPEG input settings
                BreakNumber - how many port settings to send at a time
        '''
        '''
        example "Program.SetProgramMapping request
            {
            "jsonrpc":2.0,
            "method":"Program.SetProgramMapping",
            "params":
            {"inputType":"json","inputSettings":[{"sentryName":"Name or IP","portNumber":"1","programNumber":"1","providerName":"HBO"},
            {"sentryName":"Name or IP","portNumber":"1","programNumber":"2","providerName":"5StarMAX"},
            {"sentryName":"Name or IP","portNumber":"1","programNumber":"3","providerName":"MyProvider","userAdded":true}]},
            "id":1
            }
        '''
        '''
        example responses from "Program.SetProgramMapping"

        '''
        logger.debug("Entering ProgramMapping")
        InputSettings = ''
        for num, port in enumerate(ProgramMapping, start=1):
            InputSettings += str(json.dumps(port))
            if num % BreakNumber == 0 or num == len(ProgramMapping):
                request = '''{{
                    "jsonrpc":2.0,
                    "method":"Program.SetProgramMapping",
                    "params":
                    {{"inputType":"json","inputSettings":
                    [{0!s}]}},"id":1}}'''.format(str(InputSettings))
                logger.debug(request)
                this_response = requests.post(self.requesturl, data=request)
                sentryUtils.log_response(this_response)
                '''if stats_load.has_key('result'):
                    return stats_load['result']
                else:
                        raise Exception("Bad response from Sentry {0!s}".format(this_response.text))
                else:
                    print "error: {0!s}".format(this_response.text)'''
                InputSettings = ''
            else:
                InputSettings += ','

        logger.debug("Leaving ProgramMapping")
示例#11
0
 def updatePrimaryAudio(self, programMapping):
     """
         {{}
         "jsonrpc":2.0,
         "method":"Audio.UpdatePrimaryPID",
         "params":{"inputType":"json",
             "inputSettings":[
                 {{
                 "sentryName":"192.0.0.0",
                 "portNumber":"0",
                 "programNumber":"10",
                 "pidOrder":"1",
                 "codecType":"MPEG1",
                 "language":"eng"
                 }}}
             ]}},
         "id":1                
     """
     logger.debug("Entering updatePrimaryAudio")
     for program in programMapping:
         if (program['Audio_1'] != "0"):
             try:
                 int(program['Audio_1'])
                 audio_select = '"pidOrder":"{0!s}"'.format(program['Audio_1'])
             except ValueError:
                 audio_select = '"codecType":"DOLBY {0!s}"'.format(program['Audio_1'])
             request = """{{
                         "jsonrpc":2.0,
                         "method":"Audio.UpdatePrimaryPID",
                         "params":{{"inputType":"json",
                             "inputSettings":[
                                 {{
                                 "sentryName":"{0!s}",
                                 "portNumber":"{1!s}",
                                 "programNumber":"{2!s}",
                                 {3!s}
                                 }}
                             ]}},
                         "id":1
                         }}""".format(program['sentryName'],program['portNumber'],program['programNumber'],audio_select)
             logger.debug(request)
             sentryUtils.log_response(requests.post(self.requesturl, data=request))
     logger.debug("Leaving updatePrimaryAudio")
示例#12
0
    def __init__(self,
                 tekip="",
                 medius=True,
                 user="",
                 passwd=""):
        """
        Initilize the connection to the Sentry
        This will build the request URL
        arguments:
                tekIP - Ip of Sentry/Medius
                medius - True if Medius
                user - Logon User name
                passwd - Password
                requestURL - Url for Request
        """

        logger.debug("Entering Sentry Init")
        self.tekip = tekip
        self.medius = medius
        self.user = user
        self.passwd = passwd
        self.requesturl = "http://"+user+":"+passwd+"@"+tekip+"/vnm-api/index.php"
        logger.debug("Request URL: {0!s}".format(self.requesturl))
        logger.debug("leaving Sentry Init")
示例#13
0
def main():
    '''
    main function
    '''
    logger.debug("Entering Get program stats Main")
    parser = argparse.ArgumentParser(description='Import new settings',
                                     add_help=True)
    parser.add_argument('--system',
                        '-s',
                        dest='system',
                        help='URL of Sentry/s',
                        required=True)
    parser.add_argument('--user',
                        '-u',
                        dest='userName',
                        help='userName for login',
                        required=True)
    parser.add_argument('--pass',
                        '-p',
                        dest='password',
                        help='password for login',
                        required=True)
    parser.add_argument('--duration',
                        '-D',
                        dest='duration',
                        help='length of reports in seconds',
                        required=True)

    results = parser.parse_args()

    sentrys = []

    for item in results.system.split(','):
        sentrys.append(
            sentryConnection.Sentry(tekip=(item.strip()),
                                    medius=False,
                                    user=results.userName,
                                    passwd=results.password))
    while True:
        end = datetime.datetime.now() - datetime.timedelta(hours=3)
        nextStartTime = datetime.datetime.now() + datetime.timedelta(
            seconds=STATS_SLEEP_TIME)
        start = end - datetime.timedelta(seconds=STATS_SLEEP_TIME)
        for Sentry in sentrys:
            print("Doing Sentry: {0!s} Start: {1!s} End:{2!s}".format(
                Sentry.tekip, start.isoformat(), end.isoformat()))
            # Get the stats, this will return JSON
            #try:
            stats_load = Sentry.get_program_stats(
                types=
                "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24",
                fromdate=start.date(),
                todate=end.date(),
                fromtime=start.strftime('%H:%M:00'),
                totime=end.strftime('%H:%M:00'))
            #stats_load = (Sentry.get_program_stats_span(span="1 minute"))
            #logger.debug(stats_load)
            #print stats_load
            process_json(stats_load, Sentry.tekip)

            #except:
            #    print "Cannot connect to {0!s}".format(Sentry.tekip)
            #for key, value in stats_load[0].items():
            #    print key, value

        logger.debug("leaving Get program stats Main")
        '''print nextStartTime 
        print datetime.datetime.now()
        print nextStartTime - datetime.datetime.now()
        if nextStartTime > datetime.datetime.now():
            delta = nextStartTime - datetime.datetime.now()'''
        sleep(STATS_SLEEP_TIME)
示例#14
0
#!/usr/bin/env python
'''
Created on Aug 13 2018

@author: Patrick Rosini
'''

import requests #request package will have to be installed, does HTTP requests
import json
from time import sleep #we can only do pregram stats requests once per minute
from sentryLogging import logger
import sentryUtils

STATS_SLEEP_TIME = 60  # Time to wait between requests

logger.debug("Entering Sentry Connection")

class Sentry(object):
    """
    Class to connect to Sentry
    """

    def __init__(self,
                 tekip="",
                 medius=True,
                 user="",
                 passwd=""):
        """
        Initilize the connection to the Sentry
        This will build the request URL
        arguments:
示例#15
0
def log_response(this_response):
    """
    write out all the info in the response from the Sentry/Medius
    """
    logger.debug("Entering log response")
    logger.debug("StatusCode: " + str(this_response.status_code))
    logger.debug("Headers: ")
    for header, value in this_response.headers.items():
        logger.debug("    %s : %s", header, value)
    logger.debug("Encoding: " + this_response.encoding)
    logger.debug("Text: " + this_response.text)
    try:
        logger.debug(this_response.json())
    except ValueError:
        pass
    logger.debug("Leaving log response")
示例#16
0
#!/usr/bin/env python
'''
Created on Aug 13 2018

@author: Patrick Rosini
'''

from sentryLogging import logger
from datetime import datetime, timedelta

logger.debug("Entering Sentry Utils")


def log_response(this_response):
    """
    write out all the info in the response from the Sentry/Medius
    """
    logger.debug("Entering log response")
    logger.debug("StatusCode: " + str(this_response.status_code))
    logger.debug("Headers: ")
    for header, value in this_response.headers.items():
        logger.debug("    %s : %s", header, value)
    logger.debug("Encoding: " + this_response.encoding)
    logger.debug("Text: " + this_response.text)
    try:
        logger.debug(this_response.json())
    except ValueError:
        pass
    logger.debug("Leaving log response")

示例#17
0
from datetime import datetime, timedelta
import argparse
import sys
#from xml.sax.saxutils import escape
import codecs
from time import sleep  #we can only do pregram stats requests once per minute
import sqlite3
import csv
import sentryConnection  # Connection to Sentry and implement calls
import sentryUtils  # date transform and other things needed
from sentryLogging import logger  #Setup logging in a single file

STATS_SLEEP_TIME = 60  # Time to wait between requests

logger.debug("Entering audio report")


def main():

    sys.stdout = codecs.getwriter('utf8')(sys.stdout)

    logger.debug("Entering Main")

    one_day = timedelta(days=1)
    header = False
    parser = argparse.ArgumentParser(
        description='Generate reports from Sentry/Medius', add_help=True)
    parser.add_argument(
        '--startDate',
        '-d',
示例#18
0
#!/usr/bin/env python
'''
Created on Jan 3 2019

@author: Patrick Rosini
'''

import argparse
import logging
import json
import sentryConnection
import pandas as pd
from sentryLogging import logger
from collections import OrderedDict

logger.debug("Read Dish")

"""
In Use - enable
EVERTZ - Launch Status
EVERTZ - DMG1
EVERTZ - DMG2
EVERTZ - Encoder
Backup Port portnum (backup)
MULTICAST - groupAddr, desc
EVERTZ - IRD1
EVERTZ - IRD2
Multicast DUPLICATE
Primary Port - portnum (primary)
PORT - destPort
SSM1 - sourceIp (primary)
示例#19
0
def main():
    import argparse
    import sentryConnection
    import sentryUtils
    from datetime import datetime, timedelta
    import sys
    from xml.sax.saxutils import escape
    import codecs
    from time import sleep
    import json
    import csv

    sys.stdout = codecs.getwriter('utf8')(sys.stdout)

    logger.debug("Entering Main")

    one_day = timedelta(days=1)
    header = False
    parser = argparse.ArgumentParser(
        description='Genrate reports from Sentry/Medius', add_help=True)
    parser.add_argument(
        '--startDate',
        '-d',
        dest='startDate',
        help='date/time to start reporting period mm/dd/yy hh:mm:ss PM',
        required=True)
    parser.add_argument(
        '--endDate',
        '-e',
        dest='endDate',
        help='date/time to end reporting period mm/dd/yy hh:mm:ss PM',
        required=True)
    parser.add_argument('--duration',
                        '-D',
                        dest='duration',
                        help='length of reports in seconds',
                        required=True)
    parser.add_argument('--system',
                        '-s',
                        dest='system',
                        help='URL of Sentry or Medius',
                        required=True)
    parser.add_argument('--userName',
                        '-u',
                        dest='userName',
                        help='userName for login',
                        required=True)
    parser.add_argument('--password',
                        '-p',
                        dest='password',
                        help='password for login',
                        required=True)
    parser.add_argument(
        '--output',
        '-o',
        dest='outFile',
        help='file for output',
        default=(datetime.today() - one_day).strftime('%d%b%Y') + '.csv')

    results = parser.parse_args()

    Sentry = sentryConnection.Sentry(tekip=results.system,
                                     medius=False,
                                     user=results.userName,
                                     passwd=results.password)
    #print Sentry.get_sentry_info()

    # make real dates
    try:
        systemStartDate = sentryUtils.systemDateTime(results.startDate)
        systemEndDate = sentryUtils.systemDateTime(results.endDate)
    except Exception, e:
        print "invalid dates, they should be in for format mm/dd/yy hh:mm:ss PM, {0}".format(
            e)
        sys.exit(1)
示例#20
0
def main():

    sys.stdout = codecs.getwriter('utf8')(sys.stdout)

    logger.debug("Entering Main")

    one_day = timedelta(days=1)
    header = False
    parser = argparse.ArgumentParser(
        description='Generate reports from Sentry/Medius', add_help=True)
    parser.add_argument(
        '--startDate',
        '-d',
        dest='startDate',
        help='date/time to start reporting period mm/dd/yy hh:mm:ss PM',
        required=True)
    parser.add_argument(
        '--endDate',
        '-e',
        dest='endDate',
        help='date/time to end reporting period mm/dd/yy hh:mm:ss PM',
        required=True)
    parser.add_argument('--duration',
                        '-D',
                        dest='duration',
                        help='length of reports in seconds',
                        required=True)
    parser.add_argument('--system',
                        '-s',
                        dest='system',
                        help='URL of Sentry or Medius',
                        required=True)
    parser.add_argument('--userName',
                        '-u',
                        dest='userName',
                        help='userName for login',
                        required=True)
    parser.add_argument('--password',
                        '-p',
                        dest='password',
                        help='password for login',
                        required=True)
    parser.add_argument('--output',
                        '-o',
                        dest='outFile',
                        help='file for output',
                        default=(datetime.today() -
                                 one_day).strftime('%d%b%Y'))
    parser.add_argument('--endmin',
                        '-m',
                        dest='endMin',
                        help='End minute to filter results on',
                        default='20')

    results = parser.parse_args()

    sentrys = []

    for item in results.system.split(','):
        sentrys.append(
            sentryConnection.Sentry(tekip=(item.strip()),
                                    medius=False,
                                    user=results.userName,
                                    passwd=results.password))

    # make real dates
    try:
        system_start_date = sentryUtils.systemDateTime(results.startDate)
        system_end_date = sentryUtils.systemDateTime(results.endDate)
    except Exception, e:
        print "invalid dates, they should be in for format mm/dd/yy hh:mm:ss PM, {0}".format(
            e)
        sys.exit(1)
示例#21
0
    def deletePrimaryPIDSettings(self, sentryList):
        """
        {
        "jsonrpc":2.0,
        "method":"Audio.GetPrimaryPIDSettings",
        "params":{
            "outputType":"json",
            "sentryNames":"10.0.1.12,10.0.1.13,10.0.1.14"
            },
        "id":1
        }
        {
        "jsonrpc":2.0,
        "method":"Audio.DeletePrimaryPIDSettings",
        "params":{
            "inputType":"json",
            "inputSettings":[{
                "sentryName": "192.0.0.0",
                "portNumber":"1",
                "programNumber":"10"
                },
                {
                "sentryName": "192.0.0.0",
                "portNumber":"2",
                "programNumber":"10"
                }
            ]
        },
        "id":1
        }
	
        
        """
        logger.debug("Entering deletePrimaryPIDSettings")
        for sentry in sentryList:
            request = """{{
                        "jsonrpc":2.0,
                        "method":"Audio.GetPrimaryPIDSettings",
                        "params":{{
                            "outputType":"json",
                            "sentryNames":"{0!s}"
                            }},
                        "id":1
                        }}""".format(sentry.strip())
            logger.debug(request)
            this_response = requests.post(self.requesturl, data=request)
            sentryUtils.log_response(this_response)
            audioSettings = json.loads(this_response.text, parse_int = int, parse_float = int)
            if audioSettings.has_key('result'):
                for audio in audioSettings['result']:
                    if not audio.has_key('Error'):
                        request = """{{
                                "jsonrpc":2.0,
                                "method":"Audio.DeletePrimaryPIDSettings",
                                "params":{{
                                    "inputType":"json",
                                    "inputSettings":[{{
                                        "sentryName": "{0!s}",
                                        "portNumber":"{1!s}",
                                        "programNumber":"{2!s}"
                                        }}
                                ]
                                }},
                                "id":1
                                }}""".format(sentry.strip(),audio['port_number'],audio['program_number'])
                        logger.debug(request)
                        this_response = requests.post(self.requesturl, data=request)
                        sentryUtils.log_response(this_response)
        logger.debug("Leaving deletePrimaryPIDSettings")
示例#22
0
def main():
    '''
    main function
    '''
    logger.debug("Entering Read Dish Main")
    parser = argparse.ArgumentParser(description='Import new settings', add_help=True)
    parser.add_argument('--file','-f', dest='file', help='File to read', default="Sling.csv")
    parser.add_argument('--system' ,'-s', dest='system', help='URL of Sentry or Medius', required=True)
    parser.add_argument('--user' ,'-u', dest='userName', help='userName for login', required=True)
    parser.add_argument('--pass' ,'-p', dest='password', help='password for login', required=True)
    parser.add_argument('--sentrylist','-S', dest='sentrylist', help='list of Sentrys', default="sentrys.csv")
    parser.add_argument('--testing','-T', dest='testing', help='for testing, removes > 1000 and over Sentry 3', action='store_true')



    results = parser.parse_args()

    dt = pd.read_csv(results.file, keep_default_na=False)
    ProgramList = dt.to_dict('records')

    #sentrys=['10.0.1.12','10.0.1.13','10.0.1.14','10.126.2.37','10.126.2.39']
    sentrylist = open(results.sentrylist.strip(),"r")
    sentrys = sentrylist.readlines()

    medius = sentryConnection.Sentry(tekip=(results.system.strip()),
                        medius=True,
                        user=results.userName.strip(),
                        passwd=results.password.strip())

    UpdateMPEGInput = []

    for program in ProgramList:
        if logger.getEffectiveLevel() <= logging.DEBUG:
            logger.debug(program)
        if program['SLING CALL'] and (not results.testing or int(program['Sentry Number'].strip().replace("Sentry ","")) <= 3): # three to stay within my test system
            #primary monitoring
            ProgramDict = {'portnum':int((program['Primary Port']).replace("Port ",""))}
            ProgramDict['portNumber'] = int((program['Primary Port']).replace("Port ",""))
            ProgramDict['sourceIp'] = str(program['SSM1'].strip())
            ProgramDict['groupAddr'] = str(program['MULTICAST'].strip())
            ProgramDict['destPort'] = int(program['PORT'])
            ProgramDict['name'] = str(program['SLING CALL'].strip()) + str("-Pri")
            ProgramDict['desc'] = str(program['SSM1'].strip())
            ProgramDict['sentryName'] = sentrys[int(str(program['Sentry Number'].strip()).replace("Sentry ","")) - 1].strip()
            ProgramDict['providerName'] = str(program['SLING CALL'].strip()) + str("-Pri")
            if str(program['In Use'].strip()) == 'Yes':
                ProgramDict['enabled'] = True
            else:
                ProgramDict['enabled'] = False
            ProgramDict['Audio_1'] = str(program['Audio_1'].strip())
            ProgramDict['Audio_2'] = str(program['Audio_2'].strip())
            ProgramDict['userAdded'] = 'true'
            ProgramDict['programNumber'] = int(-1)            
            #write dict to list
            UpdateMPEGInput.append(ProgramDict)
            #Backup monitoring
            ProgramDict = {'sourceIp':str(program['SSM2'].strip())}
            if results.testing: # for testing fit the ports under 1000
                ProgramDict['portnum'] = int((program['Backup Port']).replace("Port ","")) - 500
                ProgramDict['portNumber'] = int((program['Backup Port']).replace("Port ","")) - 500
            else:
                ProgramDict['portnum'] = int((program['Backup Port']).replace("Port ",""))
                ProgramDict['portNumber'] = int((program['Backup Port']).replace("Port ",""))
            ProgramDict['groupAddr'] = str(program['MULTICAST'].strip())
            ProgramDict['destPort'] = int(program['PORT'])
            ProgramDict['name'] = str(program['SLING CALL'].strip()) + str("-Bu")
            ProgramDict['desc'] = str(program['SSM2'].strip())
            ProgramDict['sentryName'] = sentrys[int(str(program['Sentry Number'].strip()).replace("Sentry ","")) - 1].strip()
            ProgramDict['providerName'] = str(program['SLING CALL'].strip()) + str("-Bu")
            if str(program['In Use'].strip()) == 'Yes':
                ProgramDict['enabled'] = True
            else:
                ProgramDict['enabled'] = False
            ProgramDict['Audio_1'] = str(program['Audio_1'].strip())
            ProgramDict['Audio_2'] = str(program['Audio_2'].strip())
            ProgramDict['userAdded'] = 'true'
            ProgramDict['programNumber'] = int(-1)
            #write dict to list
            UpdateMPEGInput.append(ProgramDict)

    #print UpdateMPEGInput
    if logger.getEffectiveLevel() <= logging.DEBUG:
        for program in UpdateMPEGInput:
            logger.debug(json.dumps(program))
    
    medius.UpdateMPEGInput(UpdateMPEGInput, BreakNumber=40)
    medius.SetProgramMapping(UpdateMPEGInput, BreakNumber=40)
    medius.deletePrimaryPIDSettings(sentrys)
    medius.updatePrimaryAudio(UpdateMPEGInput)
示例#23
0
#!/usr/bin/env python
'''
Created on Aug 13 2018

@author: Patrick Rosini
'''

from sentryLogging import logger
from datetime import datetime, timedelta

logger.debug("Entering Program stats")


def main():
    import argparse
    import sentryConnection
    import sentryUtils
    from datetime import datetime, timedelta
    import sys
    from xml.sax.saxutils import escape
    import codecs
    from time import sleep
    import json
    import csv

    sys.stdout = codecs.getwriter('utf8')(sys.stdout)

    logger.debug("Entering Main")

    one_day = timedelta(days=1)
    header = False