Esempio n. 1
0
def advertise(peer):
    try:
        message = create_route_advertisement()
        message['dest'] = peer['agtuuid']
        process(message)
    finally:
        ctr_decrement('threads (advertising-{0})'.format(peer['agtuuid']))
Esempio n. 2
0
def __forward(message):
    peers = RAMCollection('peers').find(agtuuid=message['dest'])

    if message['dest'] == cherrypy.config.get('agtuuid'):
        process(message)
        ctr_increment('messages forwarded')
    elif len(peers) > 0:
        try:
            if peers[0].object['url'] != None:
                MPIClient(peers[0].object['url'],
                          cherrypy.config.get(
                              'server.secret_digest')).send_json(message)

                ctr_increment('messages forwarded')
            else:
                push_message(message)
        except:
            ctr_increment('messages dropped')
    else:
        weight = None
        best_route = None

        for route in RAMCollection('routes').find(agtuuid=message['dest']):
            if weight == None or float(route.object['weight']) < float(weight):
                weight = route.object['weight']
                best_route = route

        if best_route is not None:
            gtwuuid = best_route.object['gtwuuid']
        else:
            gtwuuid = None

        peers = RAMCollection('peers').find(agtuuid=gtwuuid)
        if len(peers) > 0:
            try:
                if peers[0].object['url'] != None:
                    MPIClient(peers[0].object['url'],
                              cherrypy.config.get(
                                  'server.secret_digest')).send_json(message)

                    ctr_increment('messages forwarded')
                else:
                    push_message(message)
            except:
                ctr_increment('messages dropped')
        else:
            ctr_increment('messages dropped')

    ctr_decrement('threads (forwarding)')
Esempio n. 3
0
def poll(peer):
    try:
        message = {}
        message['dest'] = peer['agtuuid']
        message['type'] = 'pull messages'

        if peer['url'] != None and peer['polling'] == True:
            messages = MPIClient(
                peer['url'],
                cherrypy.config.get('server.secret_digest')).send_json(message)

            for message in messages:
                Thread(target=process, args=(message, )).start()
    finally:
        ctr_decrement('threads (polling-{0})'.format(peer['agtuuid']))
Esempio n. 4
0
def pop_messages(**kargs):
    message_lock.acquire()

    message_list = []
    messages = Collection('messages')

    for message in messages.find(**kargs):
        message_list.append(message.object)
        message.destroy()
        ctr_increment('messages popped')
        ctr_decrement('messages queued')

    message_lock.release()

    return message_list
Esempio n. 5
0
def execute(scruuid):
    script = SQLCollection('scripts').get_object(scruuid)

    status, stdout, stderr = interpret(script.object['body'])

    script.object['status'] = status
    script.object['stdout'] = stdout
    script.object['stderr'] = stderr

    if script.object['silent'] in (False, 'false'):
        script.set()

    ctr_decrement('threads (script-{0})'.format(scruuid))

    jobs_lock.acquire()
    del jobs[scruuid]
    jobs_lock.release()
Esempio n. 6
0
def worker():
    register_timer(name='message_worker', target=worker, timeout=60).start()

    message_lock.acquire()

    messages = Collection('messages')

    for message in messages.find():
        try:
            if time() - message.object['timestamp'] > MESSAGE_TIMEOUT:
                message.destroy()

                ctr_increment('messages expired')
                ctr_decrement('messages queued')
        except:
            message.destroy()

    message_lock.release()
Esempio n. 7
0
def execute(cronuuid):
    try:
        cron = SQLCollection('crons').get_object(cronuuid)

        status, stdout, stderr = process_sync(cron.object['command'],
                                              timeout=cron.object['timeout'])

        cron.object['stdout b64data'] = b64encode(stdout).decode()
        cron.object['stderr b64data'] = b64encode(stderr).decode()
        cron.object['status'] = status

        cron.set()
    except:
        pass

    ctr_decrement('threads (cron-{0})'.format(cronuuid))
    jobs_lock.acquire()
    del jobs[cronuuid]
    jobs_lock.release()
Esempio n. 8
0
def process(message_in):
    ctr_increment('threads (processing)')
    message_out = __process(message_in)
    ctr_decrement('threads (processing)')
    return message_out