def read(self, request, jobid=None, mfileid=None, authid=None): if jobid: job = Job.objects.get(id=jobid) return job elif mfileid: jobs = Job.objects.filter(mfile=mfileid) return jobs elif authid: auth = Auth.objects.get(pk=authid) logging.info("S %s" % auth) if utils.is_service(auth.base): ds = DataService.objects.get(id=auth.base.id) return ds.do("GET","jobs") jobs = Job.objects.filter(mfile=auth.base.id) return jobs if utils.is_mfile(auth.base): jobs = Job.objects.filter(mfile=auth.base.id) return jobs
def get_job_plots(request, baseid=None): taskstates = TaskState.objects.none() tasks_whitelist = TaskDescription.objects.values_list('task_name') if baseid: jobs = None try: base = NamedBase.objects.get(id=baseid) if utils.is_container(base): hc = HostingContainer.objects.get(id=baseid) jobs = hc.jobs() if utils.is_service(base): ds = DataService.objects.get(id=baseid) jobs = ds.jobs() if utils.is_mfile(base): mf = MFile.objects.get(id=baseid) jobs = Job.objects.filter(mfile=mf) except NamedBase.DoesNotExist: try: auth = Auth.objects.get(id=baseid) if utils.is_container(auth.base): base = auth.get_real_base() jobs = base.jobs() if utils.is_service(auth.base): base = auth.get_real_base() jobs = base.jobs() if utils.is_mfile(auth.base): base = auth.get_real_base() jobs = Job.objects.filter(mfile=base) except Auth.DoesNotExist: pass pass if jobs == None: logging.error("Base id %s does not relate to a base or auth", baseid) return None asyncs = JobASyncResult.objects.filter(job__in=jobs).values_list("async_id",flat=True) taskstates = TaskState.objects.filter(task_id__in=asyncs) taskstates = taskstates.filter(name__in=tasks_whitelist) elif request.user.is_staff: taskstates = TaskState.objects.all() plots = [] types = request.GET for type in types: names = taskstates.values('name') if type == "last24": now = datetime.datetime.now() count = now - datetime.timedelta(days=1) step = datetime.timedelta(hours=1) prev = count - step taskplot = {} data = [] sdata = {} while count <= now: tasks = taskstates.filter(tstamp__lt=count,tstamp__gt=prev) prev = count count = count + step '''for task in names: _taskname = task["name"] stasks = tasks.filter(name=_taskname) if _taskname not in sdata: sdata[_taskname] = {} sdata[_taskname]["label"] = _taskname sdata[_taskname]["data"] = [] sdata[_taskname]["data"].append( [time.mktime(count.timetuple())*1000, str(len(stasks)) ])''' data.append( [time.mktime(count.timetuple())*1000, str(len(tasks)) ]) taskplot["data"] = [ {"label": "All Jobs", "data" : data} ] + sdata.values() taskplot["type"] = "time" taskplot["size"] = "small" taskplot["label"] = "Tasks in last 24 hours" plots.append(taskplot) if type == "last1": now = datetime.datetime.now() count = now - datetime.timedelta(hours=1) step = datetime.timedelta(minutes=5) prev = count - step taskplot = {} data = [] sdata = {} while count <= now: tasks = taskstates.filter(tstamp__lt=count,tstamp__gt=prev) prev = count count = count + step '''for task in names: _taskname = task["name"] stasks = tasks.filter(name=_taskname) if _taskname not in sdata: sdata[_taskname] = {} sdata[_taskname]["label"] = _taskname sdata[_taskname]["data"] = [] sdata[_taskname]["data"].append( [time.mktime(count.timetuple())*1000, str(len(stasks)) ])''' data.append( [time.mktime(count.timetuple())*1000, str(len(tasks)) ]) taskplot["data"] = [ {"label": "All Jobs", "data" : data} ] + sdata.values() taskplot["type"] = "time" taskplot["size"] = "small" taskplot["label"] = "Tasks in last hour" plots.append(taskplot) if type == "jobsbytype": jobplot = {} jobplot["type"] = "pie" jobplot["label"] = "Jobs by Type" jobplot["size"] = "large" query = taskstates.values("name").annotate(n=Count("name")) if query.count() == 0: data = [] data.append({ "label" : "No Data" , "data" : 1, "color" : "#CCCCCC"}) jobplot["data"] = data plots.append(jobplot) else: for val in query: if val["name"] == None: val["label"] = "unknown" else: val["label"] = val["name"].split(".")[-1] val["data"] = val["n"] jobplot["data"] = [item for item in query] plots.append(jobplot) if type == "jobs": jobplot = {} jobplot["type"] = "pie" jobplot["size"] = "small" jobplot["label"] = "All Jobs" jobplot["data"] = [ {"label":"Success" , "data": taskstates.filter(state="SUCCESS").count(), "color" : "#00CC00" }, {"label":"Failed" , "data": taskstates.filter(state="FAILURE").count(), "color" : "#CC0000", } ] plots.append(jobplot) task_names = set(taskstates.values_list("name",flat=True).distinct()) if len(task_names) == 0: data = [] data.append({ "label" : "No Data" , "data" : 1, "color" : "#CCCCCC"}) jobplot["data"] = data #plots.append(jobplot) else: for taskname in task_names: subplot = {} subplot["type"] = "pie" subplot["size"] = "small" subplot["label"] = "Job %s" % taskname.split(".")[-1] tasks = taskstates.filter(name=taskname) success = tasks.filter(state="SUCCESS").aggregate(success=Count('name'))["success"] failure = tasks.filter(state="FAILURE").aggregate(failure=Count('name'))["failure"] data = [] data.append({ "label" : "Failed" , "data" : failure, "color" : "#CC0000"}) data.append({ "label" : "Success" , "data" : success, "color" : "#00CC00"}) subplot["data"] = data plots.append(subplot) return plots