Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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 )
Пример #4
0
    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)