def per_workflow( self, trans, **kwd ): message = '' PageSpec = namedtuple('PageSpec', ['entries', 'offset', 'page', 'pages_found']) specs = sorter( 'workflow_name', kwd ) sort_id = specs.sort_id order = specs.order arrow = specs.arrow _order = specs.exc_order time_period = kwd.get('spark_time') time_period, _time_period = get_spark_time( time_period ) spark_limit = 30 offset = 0 limit = 10 if "entries" in kwd: entries = int(kwd.get( 'entries' )) else: entries = 10 limit = entries * 4 if "offset" in kwd: offset = int(kwd.get( 'offset' )) else: offset = 0 if "page" in kwd: page = int(kwd.get( 'page' )) else: page = 1 # In case we don't know which is the monitor user we will query for all jobs q = sa.select( ( model.Workflow.table.c.id.label( 'workflow_id' ), sa.func.min(model.Workflow.table.c.name).label( 'workflow_name' ), sa.func.count( model.WorkflowInvocation.table.c.id ).label( 'total_runs' ) ), from_obj=[ model.Workflow.table, model.WorkflowInvocation.table ], whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id == model.Workflow.table.c.id ), group_by=[ model.Workflow.table.c.id ], order_by=[ _order ], offset=offset, limit=limit ) all_runs_per_workflow = sa.select( ( model.Workflow.table.c.id.label( 'workflow_id' ), model.Workflow.table.c.name.label( 'workflow_name' ), self.select_day( model.WorkflowInvocation.table.c.create_time ).label( 'date' ) ), from_obj=[ model.Workflow.table, model.WorkflowInvocation.table ], whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id == model.Workflow.table.c.id ) ) currday = date.today() trends = dict() for run in all_runs_per_workflow.execute(): curr_tool = re.sub(r'\W+', '', str(run.workflow_id)) try: day = currday - run.date except TypeError: day = currday - datetime.date(run.date) day = day.days container = floor(day / _time_period) container = int(container) try: if container < spark_limit: trends[curr_tool][container] += 1 except KeyError: trends[curr_tool] = [0] * spark_limit if container < spark_limit: trends[curr_tool][container] += 1 runs = [] for row in q.execute(): runs.append( ( row.workflow_name, row.total_runs, row.workflow_id) ) pages_found = ceil(len(runs) / float(entries)) page_specs = PageSpec(entries, offset, page, pages_found) return trans.fill_template( '/webapps/reports/workflows_per_workflow.mako', order=order, arrow=arrow, sort_id=sort_id, spark_limit=spark_limit, time_period=time_period, trends=trends, runs=runs, message=message, page_specs=page_specs)
def per_workflow(self, trans, **kwd): message = '' PageSpec = namedtuple('PageSpec', ['entries', 'offset', 'page', 'pages_found']) specs = sorter('workflow_name', kwd) sort_id = specs.sort_id order = specs.order arrow = specs.arrow _order = specs.exc_order time_period = kwd.get('spark_time') time_period, _time_period = get_spark_time(time_period) spark_limit = 30 offset = 0 limit = 10 if "entries" in kwd: entries = int(kwd.get('entries')) else: entries = 10 limit = entries * 4 if "offset" in kwd: offset = int(kwd.get('offset')) else: offset = 0 if "page" in kwd: page = int(kwd.get('page')) else: page = 1 # In case we don't know which is the monitor user we will query for all jobs q = sa.select( (model.Workflow.table.c.id.label('workflow_id'), sa.func.min(model.Workflow.table.c.name).label('workflow_name'), sa.func.count( model.WorkflowInvocation.table.c.id).label('total_runs')), from_obj=[model.Workflow.table, model.WorkflowInvocation.table], whereclause=sa.and_(model.WorkflowInvocation.table.c.workflow_id == model.Workflow.table.c.id), group_by=[model.Workflow.table.c.id], order_by=[_order], offset=offset, limit=limit) all_runs_per_workflow = sa.select( (model.Workflow.table.c.id.label('workflow_id'), model.Workflow.table.c.name.label('workflow_name'), self.select_day( model.WorkflowInvocation.table.c.create_time).label('date')), from_obj=[model.Workflow.table, model.WorkflowInvocation.table], whereclause=sa.and_(model.WorkflowInvocation.table.c.workflow_id == model.Workflow.table.c.id)) currday = date.today() trends = dict() for run in all_runs_per_workflow.execute(): curr_tool = re.sub(r'\W+', '', str(run.workflow_id)) try: day = currday - run.date except TypeError: day = currday - datetime.date(run.date) day = day.days container = floor(day / _time_period) container = int(container) try: if container < spark_limit: trends[curr_tool][container] += 1 except KeyError: trends[curr_tool] = [0] * spark_limit if container < spark_limit: trends[curr_tool][container] += 1 runs = [] for row in q.execute(): runs.append((row.workflow_name, row.total_runs, row.workflow_id)) pages_found = ceil(len(runs) / float(entries)) page_specs = PageSpec(entries, offset, page, pages_found) return trans.fill_template( '/webapps/reports/workflows_per_workflow.mako', order=order, arrow=arrow, sort_id=sort_id, spark_limit=spark_limit, time_period=time_period, trends=trends, runs=runs, message=message, page_specs=page_specs)
def per_user( self, trans, **kwd ): message = '' PageSpec = namedtuple('PageSpec', ['entries', 'offset', 'page', 'pages_found']) specs = sorter( 'user_email', kwd ) sort_id = specs.sort_id order = specs.order arrow = specs.arrow _order = specs.exc_order time_period = kwd.get('spark_time') time_period, _time_period = get_spark_time( time_period ) spark_limit = 30 offset = 0 limit = 10 if "entries" in kwd: entries = int(kwd.get( 'entries' )) else: entries = 10 limit = entries * 4 if "offset" in kwd: offset = int(kwd.get( 'offset' )) else: offset = 0 if "page" in kwd: page = int(kwd.get( 'page' )) else: page = 1 workflows = [] q = sa.select( ( model.User.table.c.email.label( 'user_email' ), sa.func.count( model.StoredWorkflow.table.c.id ).label( 'total_workflows' ) ), from_obj=[ sa.outerjoin( model.StoredWorkflow.table, model.User.table ) ], group_by=[ 'user_email' ], order_by=[ _order ], offset=offset, limit=limit ) all_workflows_per_user = sa.select( ( model.User.table.c.email.label( 'user_email' ), self.select_day( model.StoredWorkflow.table.c.create_time ).label('date'), model.StoredWorkflow.table.c.id ), from_obj=[ sa.outerjoin( model.StoredWorkflow.table, model.User.table ) ] ) currday = datetime.today() trends = dict() for workflow in all_workflows_per_user.execute(): curr_user = re.sub(r'\W+', '', workflow.user_email) try: day = currday - workflow.date except TypeError: day = datetime.date(currday) - datetime.date(workflow.date) day = day.days container = floor(day / _time_period) container = int(container) try: if container < spark_limit: trends[curr_user][container] += 1 except KeyError: trends[curr_user] = [0] * spark_limit if container < spark_limit: trends[curr_user][container] += 1 for row in q.execute(): workflows.append( ( row.user_email, row.total_workflows ) ) pages_found = ceil(len(workflows) / float(entries)) page_specs = PageSpec(entries, offset, page, pages_found) return trans.fill_template( '/webapps/reports/workflows_per_user.mako', order=order, arrow=arrow, sort_id=sort_id, spark_limit=spark_limit, trends=trends, time_period=time_period, workflows=workflows, message=message, page_specs=page_specs )
def per_user(self, trans, **kwd): message = '' PageSpec = namedtuple('PageSpec', ['entries', 'offset', 'page', 'pages_found']) specs = sorter('user_email', kwd) sort_id = specs.sort_id order = specs.order arrow = specs.arrow _order = specs.exc_order time_period = kwd.get('spark_time') time_period, _time_period = get_spark_time(time_period) spark_limit = 30 offset = 0 limit = 10 if "entries" in kwd: entries = int(kwd.get('entries')) else: entries = 10 limit = entries * 4 if "offset" in kwd: offset = int(kwd.get('offset')) else: offset = 0 if "page" in kwd: page = int(kwd.get('page')) else: page = 1 workflows = [] q = sa.select( (model.User.table.c.email.label('user_email'), sa.func.count( model.StoredWorkflow.table.c.id).label('total_workflows')), from_obj=[ sa.outerjoin(model.StoredWorkflow.table, model.User.table) ], group_by=['user_email'], order_by=[_order], offset=offset, limit=limit) all_workflows_per_user = sa.select( (model.User.table.c.email.label('user_email'), self.select_day( model.StoredWorkflow.table.c.create_time).label('date'), model.StoredWorkflow.table.c.id), from_obj=[ sa.outerjoin(model.StoredWorkflow.table, model.User.table) ]) currday = datetime.today() trends = dict() for workflow in all_workflows_per_user.execute(): curr_user = re.sub(r'\W+', '', workflow.user_email) try: day = currday - workflow.date except TypeError: day = datetime.date(currday) - datetime.date(workflow.date) day = day.days container = floor(day / _time_period) container = int(container) try: if container < spark_limit: trends[curr_user][container] += 1 except KeyError: trends[curr_user] = [0] * spark_limit if container < spark_limit: trends[curr_user][container] += 1 for row in q.execute(): workflows.append((row.user_email, row.total_workflows)) pages_found = ceil(len(workflows) / float(entries)) page_specs = PageSpec(entries, offset, page, pages_found) return trans.fill_template('/webapps/reports/workflows_per_user.mako', order=order, arrow=arrow, sort_id=sort_id, spark_limit=spark_limit, trends=trends, time_period=time_period, workflows=workflows, message=message, page_specs=page_specs)