Exemplo n.º 1
0
def worker(request, hostname):
    # TODO: Show logs/stdout
    # TODO: Load the task data via ajax, so the page loads quickly
    user = request.user.username

    updatee = request.GET.get("updateessentia")
    if updatee is not None:
        log.log_worker_action(hostname, user, "updateessentia")
        jobs.update_essentia.apply_async([hostname], queue=hostname)
        return redirect('docserver-worker', hostname)
    updatep = request.GET.get("updatepcm")
    if updatep is not None:
        log.log_worker_action(hostname, user, "updatepycm")
        jobs.update_pycompmusic.apply_async([hostname], queue=hostname)
        return redirect('docserver-worker', hostname)
    restart = request.GET.get("restart")
    if restart is not None:
        log.log_worker_action(hostname, user, "restart")
        jobs.shutdown_celery(hostname)
        return redirect('docserver-worker', hostname)

    try:
        wk = models.Worker.objects.get(hostname=hostname)
    except models.Worker.DoesNotExist:
        wk = None

    workername = "celery@%s" % hostname
    i = app.control.inspect([workername])
    tasks = i.active()
    active = []
    if tasks:
        workertasks = tasks[workername]
        for t in workertasks:
            thetask = understand_task(t)
            active.append(thetask)

    reservedtasks = i.reserved()
    reserved = []
    if reservedtasks:
        workerreserved = reservedtasks[workername]
        for t in workerreserved:
            thetask = understand_task(t)
            reserved.append(thetask)

    if not tasks and not reservedtasks:
        state = "Offline"
    elif wk and wk.state == models.Worker.UPDATING:
        state = "Updating"
    elif len(active) or len(reserved):
        state = "Active"
    elif len(active) == 0 and len(reserved) == 0:
        state = "Idle"

    processed_files = log.get_processed_files(hostname)
    recent = []
    for p in processed_files:
        try:
            collection = models.Collection.objects.get(collectionid=p["collection"])
            document = collection.documents.get(external_identifier=p["recording"])
            modver = models.ModuleVersion.objects.get(pk=p["moduleversion"])
            recent.append({"document": document,
                           "collection": collection,
                           "modulever": modver,
                           "date": p["date"]})
        except ObjectDoesNotExist:
            pass

    actions = log.get_worker_actions(hostname)
    workerlog = []
    for a in actions:
        date = datetime.datetime.strptime(a["date"], "%Y-%m-%dT%H:%M:%S.%f")
        workerlog.append({"date": date, "action": a["action"]})

    ret = {"worker": wk, "state": state, "active": active,
           "reserved": reserved, "recent": recent, "workerlog": workerlog}
    return render(request, 'docserver/worker.html', ret)
Exemplo n.º 2
0
def worker(request, hostname):
    # TODO: Show logs/stdout
    # TODO: Load the task data via ajax, so the page loads quickly
    user = request.user.username

    updatee = request.GET.get("updateessentia")
    if updatee is not None:
        log.log_worker_action(hostname, user, "updateessentia")
        jobs.update_essentia.apply_async([hostname], queue=hostname)
        return redirect('docserver-worker', hostname)
    updatep = request.GET.get("updatepcm")
    if updatep is not None:
        log.log_worker_action(hostname, user, "updatepycm")
        jobs.update_pycompmusic.apply_async([hostname], queue=hostname)
        return redirect('docserver-worker', hostname)
    restart = request.GET.get("restart")
    if restart is not None:
        log.log_worker_action(hostname, user, "restart")
        jobs.shutdown_celery(hostname)
        return redirect('docserver-worker', hostname)

    try:
        wk = models.Worker.objects.get(hostname=hostname)
    except models.Worker.DoesNotExist:
        wk = None

    workername = "celery@%s" % hostname
    i = app.control.inspect([workername])
    tasks = i.active()
    active = []
    if tasks:
        workertasks = tasks[workername]
        for t in workertasks:
            thetask = understand_task(t)
            active.append(thetask)

    reservedtasks = i.reserved()
    reserved = []
    if reservedtasks:
        workerreserved = reservedtasks[workername]
        for t in workerreserved:
            thetask = understand_task(t)
            reserved.append(thetask)

    if not tasks and not reservedtasks:
        state = "Offline"
    elif wk and wk.state == models.Worker.UPDATING:
        state = "Updating"
    elif len(active) or len(reserved):
        state = "Active"
    elif len(active) == 0 and len(reserved) == 0:
        state = "Idle"

    processed_files = log.get_processed_files(hostname)
    recent = []
    for p in processed_files:
        try:
            collection = models.Collection.objects.get(collectionid=p.get("collection"))
            document = collection.documents.get(external_identifier=p.get("recording"))
            modver = models.ModuleVersion.objects.get(pk=p.get("moduleversion"))
            recent.append({"document": document,
                           "collection": collection,
                           "modulever": modver,
                           "date": p.get("date")})
        except ObjectDoesNotExist:
            pass

    actions = log.get_worker_actions(hostname)
    workerlog = []
    for a in actions:
        date = datetime.datetime.strptime(a["date"], "%Y-%m-%dT%H:%M:%S.%f")
        workerlog.append({"date": date, "action": a["action"]})

    ret = {"worker": wk, "state": state, "active": active,
           "reserved": reserved, "recent": recent, "workerlog": workerlog}
    return render(request, 'docserver/worker.html', ret)
Exemplo n.º 3
0
def update_all_workers(user=None):
    workers = models.Worker.objects.all()
    for w in workers:
        log.log_worker_action(w.hostname, user, "updateall")
        update_single_worker.apply_async([w.hostname], queue=w.hostname)