Exemplo n.º 1
0
    def test_management_dashboard_stats(self, mail):
        """Test management dashboard stats"""

        # reset cache and built just one stats, avg_time_to_complete_task
        map(delete_cache_group, management_dashboard_stats)
        date_15m_old = (datetime.datetime.utcnow() -  datetime.timedelta(minutes=15)).isoformat()
        date_now = datetime.datetime.utcnow()

        expected_avg_time = '15m 00s'
        for i in range(5):
            TaskRunFactory.create(created=date_15m_old, finish_time=date_now)

        avg_time = stats.avg_time_to_complete_task()
        assert avg_time == expected_avg_time, \
            "Average time to complete tasks in last 30 days should be {}".format(expected_avg_time)

        stats_cached = stats.management_dashboard_stats_cached()
        assert not stats_cached, 'management dashboard stats should be reported as unavailable'
        if not stats_cached:
            user_email = '*****@*****.**'
            get_management_dashboard_stats(user_email)
            subject = 'Management Dashboard Statistics'
            msg = 'Management dashboard statistics is now available. It can be accessed by refreshing management dashboard page.'
            body = (u'Hello,\n\n{}\nThe {} team.'
                    .format(msg, current_app.config.get('BRAND')))
            mail_dict = dict(recipients=[user_email], subject=subject, body=body)
            mail.assert_called_with(mail_dict)
Exemplo n.º 2
0
def management_dashboard():
    if not site_stats.management_dashboard_stats_cached():
        flash(
            'Management dashboard is calculating the statistics. Please return to this page after receiving notification.',
            'warning')
        DASHBOARD_QUEUE.enqueue(get_management_dashboard_stats,
                                current_user.email_addr)
        return redirect_content_type(url_for('admin.index'))

    # charts
    project_chart = site_stats.project_chart()
    category_chart = site_stats.category_chart()
    task_chart = site_stats.task_chart()
    submission_chart = site_stats.submission_chart()
    current_app.logger.info(task_chart)

    # General platform usage
    timed_stats_funcs = [
        site_stats.number_of_active_jobs, site_stats.number_of_created_jobs,
        site_stats.number_of_created_tasks,
        site_stats.number_of_completed_tasks,
        site_stats.avg_time_to_complete_task,
        site_stats.number_of_active_users,
        site_stats.categories_with_new_projects
    ]

    # Work on platform
    current_stats_funcs = [
        site_stats.avg_task_per_job, site_stats.tasks_per_category
    ]

    timed_stats = OrderedDict()
    for func in timed_stats_funcs:
        timed_stats[func.__doc__] = OrderedDict()
        for days in [30, 60, 90, 350, 'all']:
            timed_stats[func.__doc__][days] = func(days)

    current_stats = OrderedDict((func.__doc__, func())  #TODO : uncomment later
                                for func in current_stats_funcs)

    return render_template('admin/management_dashboard.html',
                           timed_stats=timed_stats,
                           current_stats=current_stats,
                           project_chart=project_chart,
                           category_chart=category_chart,
                           task_chart=task_chart,
                           submission_chart=submission_chart)