Example #1
0
def cache_tasks_counts(t):
    TASKS_SUMMARY_KWARGS = {'cache' : (cache.with_prefix(sc_cache, "plugin_cs_monitor"),TASKS_SUMMARY_CACHE_TIME), 'cacheable' : True}

    if GROUPING_MODE == 'python':
        res = dbs(t.id > 0).select(t.group_name, t.status, orderby=t.group_name|t.status, **TASKS_SUMMARY_KWARGS)
        rtn = {}
        for row in res:
            k = row.group_name
            s = row.status
            if k not in rtn:
                rtn[k] = defaultdict(lambda : { 'count' : 0, 'pretty' : nice_task_status(s)})
                rtn[k][s]['count'] += 1
            else:
                rtn[k][s]['count'] += 1
    else:
        c = t.id.count()
        res = dbs(t.id > 0).select(c, t.group_name, t.status, groupby=t.group_name|t.status, **TASKS_SUMMARY_KWARGS)
        rtn = Storage()
        for row in res:
            k = row.scheduler_task.group_name
            s = row.scheduler_task.status
            if k not in rtn:
                rtn[k] = {s : { 'count' : row[c], 'pretty' : nice_task_status(s)}}
            else:
                rtn[k][s] = { 'count' : row[c], 'pretty' : nice_task_status(s)}

    return rtn
Example #2
0
def cache_tasks_counts(t):
    TASKS_SUMMARY_KWARGS = {'cache' : (cache.with_prefix(sc_cache, "plugin_cs_monitor"),TASKS_SUMMARY_CACHE_TIME), 'cacheable' : True}

    if GROUPING_MODE == 'python':
        res = dbs(t.id > 0).select(t.group_name, t.status, orderby=t.group_name|t.status, **TASKS_SUMMARY_KWARGS)
        rtn = {}
        for row in res:
            k = row.group_name
            s = row.status
            if k not in rtn:
                rtn[k] = defaultdict(lambda : { 'count' : 0, 'pretty' : nice_task_status(s)})
                rtn[k][s]['count'] += 1
            else:
                rtn[k][s]['count'] += 1
    else:
        c = t.id.count()
        res = dbs(t.id > 0).select(c, t.group_name, t.status, groupby=t.group_name|t.status, **TASKS_SUMMARY_KWARGS)
        rtn = Storage()
        for row in res:
            k = row.scheduler_task.group_name
            s = row.scheduler_task.status
            if k not in rtn:
                rtn[k] = {s : { 'count' : row[c], 'pretty' : nice_task_status(s)}}
            else:
                rtn[k][s] = { 'count' : row[c], 'pretty' : nice_task_status(s)}

    return rtn
Example #3
0
def task_details():
    id = request.args(0)
    task = dbs(st.id == id).select().first()
    if not task:
        return ''
    task.status_ = nice_task_status(task.status)
    return dict(task=task, st=st)
Example #4
0
def run_details():
    task_id = request.args(0)
    if not task_id:
        return ''
    paginate = 20
    try:
        page = int(request.vars.page or 1)-1
    except ValueError:
        page = 0
    limitby = (paginate*page,paginate*(page+1))
    total = dbs(sr.task_id == task_id).count()
    q = sr.task_id == task_id
    qfilter = request.vars.qfilter
    if qfilter:
        parts = []
        fields = [sr.status, sr.run_result, sr.run_output, sr.traceback, sr.worker_name]
        for a in fields:
            parts.append(a.contains(qfilter))
            qf = reduce(lambda a, b: a | b, parts)
        q = q & qf
    runs = dbs(q).select(orderby=~sr.stop_time|~sr.id, limitby=limitby)
    for row in runs:
        row.status_ = nice_task_status(row.status)
        if row.start_time and row.stop_time:
            td = row.stop_time - row.start_time
            td = (td.seconds + td.days * 24 * 3600)
        else:
            td = 0
        row.elapsed_seconds_ = td
    return dict(runs=runs, paginate=paginate, total=total, page=page)
Example #5
0
def task_details():
    id = request.args(0)
    task = dbs(st.id == id).select().first()
    if not task:
        return ''
    task.status_ = nice_task_status(task.status)
    return dict(task=task, st=st)
Example #6
0
def run_details():
    task_id = request.args(0)
    if not task_id:
        return ''
    paginate = 20
    try:
        page = int(request.vars.page or 1) - 1
    except ValueError:
        page = 0
    limitby = (paginate * page, paginate * (page + 1))
    total = dbs(sr.task_id == task_id).count()
    q = sr.task_id == task_id
    qfilter = request.vars.qfilter
    if qfilter:
        parts = []
        fields = [
            sr.status, sr.run_result, sr.run_output, sr.traceback,
            sr.worker_name
        ]
        for a in fields:
            parts.append(a.contains(qfilter))
            qf = reduce(lambda a, b: a | b, parts)
        q = q & qf
    runs = dbs(q).select(orderby=~sr.stop_time | ~sr.id, limitby=limitby)
    for row in runs:
        row.status_ = nice_task_status(row.status)
        if row.start_time and row.stop_time:
            td = row.stop_time - row.start_time
            td = (td.seconds + td.days * 24 * 3600)
        else:
            td = 0
        row.elapsed_seconds_ = td
    return dict(runs=runs, paginate=paginate, total=total, page=page)
Example #7
0
def task_group():
    group_name, status = request.args(0), request.args(1)
    if not group_name:
        return ''
    c = cache_tasks_counts(st)
    paginate = 20
    try:
        page = int(request.vars.page or 1) - 1
    except ValueError:
        page = 0
    limitby = (paginate * page, paginate * (page + 1))
    q = (st.group_name == group_name)
    if status:
        q = q & (st.status == status)
        if group_name in c and status in c[group_name]:
            total = c[group_name][status]['count']
        else:
            total = 0
    else:
        if group_name in c:
            total = sum([a['count'] for a in c[group_name].values()])
        else:
            total = 0
    qfilter = request.vars.qfilter
    if qfilter:
        parts = []
        fields = [
            st.task_name, st.group_name, st.function_name, st.uuid, st.args,
            st.vars, st.assigned_worker_name
        ]
        for a in fields:
            parts.append(a.contains(qfilter))
            qf = reduce(lambda a, b: a | b, parts)
        q = q & qf
    tasks = dbs(q).select(limitby=limitby, orderby=~st.next_run_time)
    for row in tasks:
        row.status_ = nice_task_status(row.status)

    BASEURL = URL("plugin_cs_monitor", "tactions", user_signature=True)
    return dict(tasks=tasks,
                paginate=paginate,
                total=total,
                page=page,
                BASEURL=BASEURL)
Example #8
0
def task_group():
    group_name, status = request.args(0), request.args(1)
    if not group_name:
        return ''
    c = cache_tasks_counts(st)
    paginate = 10
    try:
        page = int(request.vars.page or 1)-1
    except ValueError:
        page = 0
    limitby = (paginate*page,paginate*(page+1))
    q = (st.group_name == group_name)
    if status:
        q = q & (st.status == status)
        if group_name in c and status in c[group_name]:
            total = c[group_name][status]['count']
        else:
            total = 0
    else:
        if group_name in c:
            total = sum([a['count'] for a in c[group_name].values()])
        else:
            total = 0
    qfilter = request.vars.qfilter
    if qfilter:
        parts = []
        fields = [st.task_name, st.group_name, st.function_name, st.uuid, st.args, st.vars, st.assigned_worker_name]
        for a in fields:
            parts.append(a.contains(qfilter))
            qf = reduce(lambda a, b: a | b, parts)
        q = q & qf
    tasks = dbs(q).select(limitby=limitby, orderby=~st.next_run_time)
    for row in tasks:
        row.status_ = nice_task_status(row.status)

    BASEURL = URL("plugin_cs_monitor", "tactions", user_signature=True)
    return dict(tasks=tasks, paginate=paginate, total=total, page=page, BASEURL=BASEURL)