Esempio n. 1
0
def authenticate(aDict):
 """Function docstring for authenticate TBD

 Args:
  - node (required)
  - username (required)
  - project_id (required)
  - password (required)
  - project_name (required)

 Output:
 """
 from zdcp.core.logger import log
 ret = {}
 controller = Device(SC['nodes'][aDict['node']],None)
 res = controller.auth({'project':aDict['project_name'], 'username':aDict['username'],'password':aDict['password'] })
 ret = {'authenticated':res['auth']}
 if res['auth'] == 'OK':
  with DB() as db:
   ret.update({'project_name':aDict['project_name'],'project_id':aDict['project_id'],'username':aDict['username'],'token':controller.get_token(),'expires':controller.get_cookie_expire()})
   db.do("INSERT INTO openstack_tokens(token,expires,project_id,username,node) VALUES('%s','%s','%s','%s','%s')"%(controller.get_token(),controller.get_token_expire(),aDict['project_id'],aDict['username'],SC['nodes'][aDict['node']]))
   token_id = db.get_last_id()
   for service in ['heat','nova','neutron','glance']:
    svc = controller.get_service(service,'public')
    if len(svc['path']) > 0:
     svc['path'] = svc['path'] + '/'
    db.do("INSERT INTO openstack_services(id,service,service_port,service_url,service_id) VALUES('%s','%s','%s','%s','%s')"%(token_id,service,svc['port'],svc['path'],svc['id']))
   db.do("INSERT INTO openstack_services(id,service,service_port,service_url,service_id) VALUES('%s','%s','%s','%s','%s')"%(token_id,"contrail",8082,'',''))
  log("openstack_authenticate - successful login and catalog init for %s@%s"%(aDict['username'],aDict['node']))
 else:
  log("openstack_authenticate - error logging in for  %s@%s"%(aDict['username'],ctrl))
 return ret
Esempio n. 2
0
def opendns_my_ip():
    from dns import resolver
    from socket import gethostbyname
    try:
        opendns = resolver.Resolver()
        opendns.nameservers = [gethostbyname('resolver1.opendns.com')]
        myiplookup = opendns.query("myip.opendns.com", 'A').response.answer[0]
        return str(myiplookup).split()[4]
    except Exception as exresolve:
        log("OpenDNS Error - Resolve: " + str(exresolve))
        return False
Esempio n. 3
0
def server(aNodeID):
    from os import getenv, path as ospath, environ
    from sys import stdout, stdin, path as syspath
    from json import loads, dumps
    from importlib import import_module
    query, output, api, args, mod, fun, additional = getenv(
        "QUERY_STRING"), 'null', None, None, None, None, {}
    (api, _, extra) = query.partition('&')
    (mod, _, fun) = api.partition('_')
    try:
        data = stdin.read()
        args = loads(data) if len(data) > 0 else {}
        if extra:
            for part in extra.split("&"):
                (k, void, v) = part.partition('=')
                additional[k] = v
        # Node is always master for system calls
        node = additional.get('node',
                              aNodeID if not mod == 'system' else 'master')
        stdout.write("X-API-Node:%s\r\n" % node)
        from zdcp.core.logger import rest as log
        log(node, api, dumps(args), extra)
        if node == aNodeID:
            module = import_module("zdcp.rest.%s" % mod)
            module.__add_globals__({
                'ospath': ospath,
                'loads': loads,
                'dumps': dumps,
                'import_module': import_module
            })
            output = dumps(getattr(module, fun, None)(args))
            stdout.write("X-API-Res:OK\r\n")
        else:
            from zdcp.core.common import rest_call
            from zdcp.SettingsContainer import SC
            try:
                res = rest_call("%s?%s" % (SC['nodes'][node], query), args)
            except Exception as err:
                raise Exception(err)
            else:
                output = dumps(res['data'])
            stdout.write("X-API-Res:%s\r\n" % res['info']['x-api-res'])
    except Exception as e:
        stdout.write("X-API-Res:ERROR\r\n")
        stdout.write("X-API-Args:%s\r\n" % args)
        stdout.write("X-API-Info:%s\r\n" % str(e))
        stdout.write("X-API-Xcpt:%s\r\n" % type(e).__name__)
    stdout.write("X-API-Method:%s\r\n" % environ['REQUEST_METHOD'])
    stdout.write("X-API-Function:%s\r\n" % api)
    stdout.write("Content-Type: application/json\r\n")
    stdout.write("Access-Control-Allow-Origin: *\r\n")
    stdout.flush()
    stdout.write("\r\n")
    stdout.write(output)
Esempio n. 4
0
def get_loopia_ip(subdomain):
    from zdcp.SettingsContainer import SC
    import xmlrpclib
    try:
        client = xmlrpclib.ServerProxy(uri=SC['loopia']['rpc_server'],
                                       encoding='utf-8')
        data = client.getZoneRecords(SC['loopia']['username'],
                                     SC['loopia']['password'],
                                     SC['loopia']['domain'], subdomain)[0]
        return data['rdata']
    except Exception as exmlrpc:
        log("System Error - Loopia get: " + str(exmlrpc))
        return False
Esempio n. 5
0
def alarm(aDict):
    """Function docstring for alarm TBD

 Args:

 Output:
 """
    from zdcp.core.logger import log
    log("appformix_alarm({})".format(str(aDict)))
    return {
        'result': 'OK',
        'info': 'got alarm',
        'data': 'waiting to find out what to do with it :-)'
    }
Esempio n. 6
0
def log(aDict):
    """ Function 'log' logs to default system log whatever is in parameter 'msg'

 Args:
  - msg

 Output:
 """
    ret = {'result': 'OK'}
    try:
        from zdcp.core.logger import log
        log(aDict['msg'])
    except Exception as e:
        ret['info'] = str(e)
        ret['result'] = 'NOT_OK'
    return ret
Esempio n. 7
0
def logs_clear(aDict):
    """Function docstring for logs_clear TBD

 Args:

 Output:
 """
    from zdcp.SettingsContainer import SC
    from zdcp.core.logger import log
    ret = {'node': SC['system']['id'], 'file': {}}
    for name, file in SC['logs'].iteritems():
        try:
            open(file, 'w').close()
            ret['file'][name] = 'CLEARED'
            log("Emptied log [{}]".format(name))
        except Exception as err:
            ret['file'][name] = 'ERROR: %s' % (str(err))
    return ret
Esempio n. 8
0
def set_loopia_ip(subdomain, newip):
    from zdcp.SettingsContainer import SC
    import xmlrpclib
    try:
        client = xmlrpclib.ServerProxy(uri=SC['loopia']['rpc_server'],
                                       encoding='utf-8')
        data = client.getZoneRecords(SC['loopia']['username'],
                                     SC['loopia']['password'],
                                     SC['loopia']['domain'], subdomain)[0]
        oldip = data['rdata']
        data['rdata'] = newip
        status = client.updateZoneRecord(SC['loopia']['username'],
                                         SC['loopia']['password'],
                                         SC['loopia']['domain'], subdomain,
                                         data)[0]
    except Exception as exmlrpc:
        log("System Error - Loopia set: " + str(exmlrpc))
        return False
    return True
Esempio n. 9
0
 def log_msg(self, aMsg):
  try:
   from zdcp.core.logger import log
   log(aMsg)
  except: pass
Esempio n. 10
0
def process(aDict):
    """Function docstring for process. Process a media file

 Args:
  - filepath (cond optional)
  - path (cond optional)                 
  - file (cond optional)

 Output:
 """
    from time import time
    from subprocess import check_call, call
    from os import devnull, chmod, rename, remove
    from zdcp.core.logger import log
    filename = aDict.get('filepath') if aDict.get('filepath') else ospath.join(
        aDict.get('path'), aDict.get('file'))
    ret = {
        'prefix': filename[:-4],
        'suffix': filename[-3:],
        'timestamp': int(time()),
        'rename': False,
        'res': 'NOT_OK',
        'error': None
    }
    srt = check_srt({'filepath': filename})
    info = aDict if aDict.get('name') and aDict.get('info') else check_title(
        {'filepath': filename})
    dest = ospath.abspath(ospath.join(info['path'], info['name']))
    ret.update({
        'info': info,
        'srt': srt,
        'changes': {
            'subtitle': "",
            'audio': "",
            'srt': ""
        },
        'dest': dest
    })

    try:

        if filename != dest:
            try:
                rename(filename, dest)
            except Exception as e:
                ret['error'] = str(e)
            else:
                ret['rename'] = True

        if ret['suffix'] == 'mkv' and not ret['error']:
            if srt['code']:
                log("INFO - %s - SRT found:%s" % (filename, srt['code']))
                srtfile = "%s.process" % srt['file']
                ret['changes'][
                    'srt'] = "--language 0:{0} --track-name 0:{0} -s 0 -D -A {1}".format(
                        srt['code'], repr(ospath.abspath(srtfile)))
                rename(srt['file'], srtfile)

            probe = check_content({'filepath': dest, 'srt': srt.get('code')})
            ret['probe'] = probe

            # if forced download or if there are subs to remove but no subs to add left
            if len(probe['subtitle']['remove']) > 0:
                ret['changes']['subtitle'] = "--no-subtitles" if len(
                    probe['subtitle']
                    ['add']) == 0 else "--stracks " + ",".join(
                        map(str, probe['subtitle']['add']))

            if len(probe['audio']['remove']) and len(
                    probe['audio']['add']) > 0:
                ret['changes']['audio'] = "--atracks " + ",".join(
                    map(str, probe['audio']['add']))

            if (ret['rename'] or probe['video']['set_default']
                    or probe['audio']['add_aac']
                    or len(ret['changes']['subtitle'])
                    or len(ret['changes']['audio']) or srt['code']):
                log("INFO - %s - Modifying file" % filename)
                FNULL = open(devnull, 'w')

                if ret['rename']:
                    ret['update_title'] = info['info']
                    call([
                        'mkvpropedit', '--set', "title=" + info['info'], dest
                    ],
                         stdout=FNULL,
                         stderr=FNULL)

                if probe['video']['set_default']:
                    call([
                        'mkvpropedit', '--edit', 'track:v1', '--set',
                        'language=eng', dest
                    ],
                         stdout=FNULL,
                         stderr=FNULL)

                if probe['audio']['add_aac'] or len(
                        ret['changes']['audio']) or len(
                            ret['changes']['subtitle']) or srt['code']:
                    from zdcp.SettingsContainer import SC
                    from tempfile import mkdtemp
                    log("INFO - %s - Modifying addaac:%s Modify: %s %s" %
                        (probe['audio']['add_aac'], ret['changes']['subtitle'],
                         ret['changes']['audio'], ret['changes']['srt']))
                    tmpfile = filename + ".process"
                    rename(dest, tmpfile)
                    tempd = SC['multimedia']['temp_directory']
                    tempdir = mkdtemp(suffix="", prefix='aac.', dir=tempd)

                    if probe['audio']['add_aac']:
                        check_call([
                            'avconv', '-i', tmpfile, '-vn', '-acodec',
                            'pcm_s16le', '-ac', '2', tempdir + '/audiofile.wav'
                        ],
                                   stdout=FNULL,
                                   stderr=FNULL)
                        check_call(
                            ['normalize-audio', tempdir + '/audiofile.wav'],
                            stdout=FNULL,
                            stderr=FNULL)
                        check_call([
                            'faac', '-c', '48000', '-b', '160', '-q', '100',
                            '-s', tempdir + '/audiofile.wav', '-o',
                            tempdir + '/audiofile.aac'
                        ],
                                   stdout=FNULL,
                                   stderr=FNULL)
                        ret['changes'][
                            'srt'] = "--language 0:{} --default-track 0 {}/audiofile.aac ".format(
                                probe['video']['language'],
                                tempdir) + ret['changes']['srt']

                    call([
                        "mkvmerge -o '{}' {} {} '{}' {}".format(
                            dest, ret['changes']['subtitle'],
                            ret['changes']['audio'], tmpfile,
                            ret['changes']['srt'])
                    ],
                         stdout=FNULL,
                         stderr=FNULL,
                         shell=True)
                    call(['rm', '-fR', tempdir])
                    remove(tmpfile)

                if srt['code']: rename(srtfile, srtfile + "ed")

        elif ret['suffix'] == 'mp4' and ret['rename'] and (
                srt['code'] or aDict.get('modify')):
            FNULL = open(devnull, 'w')
            if srt['code']:
                tmpfile = filename + ".process"
                rename(dest, tmpfile)
                chmod(srt['file'], 0666)
                chmod(dest, 0666)
                call([
                    'MP4Box -add {0}:hdlr=sbtl:lang={1}:name={2}:group=2:layer=-1:disable {3} -out {4}'
                    .format(repr(srt['file']), srt['code'], srt['name'],
                            repr(tmpfile), repr(dest))
                ],
                     shell=True,
                     stdout=FNULL)
                rename(srt['file'], "%s.processed" % srt['file'])
                remove(tmpfile)
            if aDict.get('modify'):
                if info['episode']:
                    call([
                        'mp4tags', '-o', info['episode'], '-n',
                        info['episode'][1:3], '-M', info['episode'][4:6], '-S',
                        info['title'], '-m', info['info'], dest
                    ],
                         stdout=FNULL,
                         stderr=FNULL)
                else:
                    log("WARN - %s - Movie modifications not implemented" %
                        filename)

    except Exception as err:
        ret['error'] = str(err)
        log("XCPT - %s - Error: %s" % (filename, str(err)))
    else:
        ret['seconds'] = (int(time()) - ret['timestamp'])
        if ospath.exists(dest):
            log("INFO - %s - Success - processed in % seconds" %
                (filename, ret['seconds']))
            chmod(dest, 0666)
            ret['res'] = 'OK'
        else:
            log("ERRR - %s - FAILURE PROCESSING!" % filename)
            ret['error'] = 'COMPLETE_NO_FILE'

    return ret