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)
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)
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)