def view_jobs(service_id): page = int(request.args.get('page', 1)) jobs_response = job_api_client.get_page_of_jobs(service_id, page=page) jobs = [add_rate_to_job(job) for job in jobs_response['data']] prev_page = None if jobs_response['links'].get('prev', None): prev_page = generate_previous_dict('main.view_jobs', service_id, page) next_page = None if jobs_response['links'].get('next', None): next_page = generate_next_dict('main.view_jobs', service_id, page) scheduled_jobs = '' if not current_user.has_permissions('view_activity') and page == 1: scheduled_jobs = render_template( 'views/dashboard/_upcoming.html', scheduled_jobs=job_api_client.get_scheduled_jobs(service_id), hide_heading=True, ) return render_template( 'views/jobs/jobs.html', jobs=jobs, page=page, prev_page=prev_page, next_page=next_page, scheduled_jobs=scheduled_jobs, )
def view_jobs(service_id): page = int(request.args.get("page", 1)) jobs_response = job_api_client.get_page_of_jobs(service_id, page=page) jobs = [add_rate_to_job(job) for job in jobs_response["data"]] prev_page = None if jobs_response["links"].get("prev", None): prev_page = generate_previous_dict("main.view_jobs", service_id, page) next_page = None if jobs_response["links"].get("next", None): next_page = generate_next_dict("main.view_jobs", service_id, page) return render_template( "views/jobs/jobs.html", jobs=jobs, page=page, prev_page=prev_page, next_page=next_page, scheduled_jobs=render_template( "views/dashboard/_upcoming.html", scheduled_jobs=job_api_client.get_scheduled_jobs(service_id), hide_show_more=True, title=_("Scheduled messages"), ) if page == 1 else None, )
def view_jobs(service_id): page = int(request.args.get('page', 1)) # all but scheduled and cancelled statuses_to_display = job_api_client.JOB_STATUSES - { 'scheduled', 'cancelled' } jobs_response = job_api_client.get_jobs(service_id, statuses=statuses_to_display, page=page) jobs = [add_rate_to_job(job) for job in jobs_response['data']] prev_page = None if jobs_response['links'].get('prev', None): prev_page = generate_previous_dict('main.view_jobs', service_id, page) next_page = None if jobs_response['links'].get('next', None): next_page = generate_next_dict('main.view_jobs', service_id, page) return render_template( 'views/jobs/jobs.html', jobs=jobs, page=page, prev_page=prev_page, next_page=next_page, )
def test_add_rate_to_job_calculates_rate(failed, delivered, expected_failure_rate): resp = add_rate_to_job({ 'notifications_failed': failed, 'notifications_delivered': delivered, 'id': 'foo' }) assert resp['failure_rate'] == expected_failure_rate
def test_add_rate_to_job_calculates_rate(failed, delivered, expected_failure_rate): resp = add_rate_to_job({ "notifications_failed": failed, "notifications_delivered": delivered, "id": "foo", }) assert resp["failure_rate"] == expected_failure_rate
def get_dashboard_partials(service_id): all_statistics = template_statistics_client.get_template_statistics_for_service( service_id, limit_days=7) template_statistics = aggregate_template_usage(all_statistics) scheduled_jobs, immediate_jobs = [], [] if job_api_client.has_jobs(service_id): scheduled_jobs = job_api_client.get_scheduled_jobs(service_id) immediate_jobs = [ add_rate_to_job(job) for job in job_api_client.get_immediate_jobs(service_id) ] stats = aggregate_notifications_stats(all_statistics) column_width, max_notifiction_count = get_column_properties( number_of_columns=( 3 if current_service.has_permission('letter') else 2)) dashboard_totals = get_dashboard_totals(stats), highest_notification_count = max( sum(value[key] for key in {'requested', 'failed', 'delivered'}) for key, value in dashboard_totals[0].items()) return { 'upcoming': render_template('views/dashboard/_upcoming.html', scheduled_jobs=scheduled_jobs), 'inbox': render_template( 'views/dashboard/_inbox.html', inbound_sms_summary=( service_api_client.get_inbound_sms_summary(service_id) if current_service.has_permission('inbound_sms') else None), ), 'totals': render_template( 'views/dashboard/_totals.html', service_id=service_id, statistics=dashboard_totals[0], column_width=column_width, smaller_font_size=(highest_notification_count > max_notifiction_count), ), 'template-statistics': render_template( 'views/dashboard/template-statistics.html', template_statistics=template_statistics, most_used_template_count=max( [row['count'] for row in template_statistics] or [0]), ), 'has_template_statistics': bool(template_statistics), 'jobs': render_template('views/dashboard/_jobs.html', jobs=immediate_jobs), 'has_jobs': bool(immediate_jobs) }
def test_add_rate_to_job_preserves_initial_fields(): resp = add_rate_to_job({ 'notifications_failed': 0, 'notifications_delivered': 0, 'id': 'foo' }) assert set(resp.keys()) == { 'notifications_failed', 'notifications_delivered', 'id', 'failure_rate' }
def test_add_rate_to_job_preserves_initial_fields(): resp = add_rate_to_job( { 'notifications_failed': 0, 'notifications_delivered': 0, 'id': 'foo' } ) assert set(resp.keys()) == {'notifications_failed', 'notifications_delivered', 'id', 'failure_rate'}
def test_add_rate_to_job_calculates_rate(failed, delivered, expected_failure_rate): resp = add_rate_to_job( { 'notifications_failed': failed, 'notifications_delivered': delivered, 'id': 'foo' } ) assert resp['failure_rate'] == expected_failure_rate
def test_add_rate_to_job_preserves_initial_fields(): resp = add_rate_to_job({ "notifications_failed": 0, "notifications_delivered": 0, "id": "foo" }) assert set(resp.keys()) == { "notifications_failed", "notifications_delivered", "id", "failure_rate", }
def get_dashboard_partials(service_id): all_statistics = template_statistics_client.get_template_statistics_for_service( service_id, limit_days=7) template_statistics = aggregate_template_usage(all_statistics) scheduled_jobs, immediate_jobs = [], [] if job_api_client.has_jobs(service_id): scheduled_jobs = job_api_client.get_scheduled_jobs(service_id) immediate_jobs = [ add_rate_to_job(job) for job in job_api_client.get_immediate_jobs(service_id) ] stats = aggregate_notifications_stats(all_statistics) column_width, max_notifiction_count = get_column_properties( number_of_columns=( 3 if current_service.has_permission("letter") else 2)) dashboard_totals = (get_dashboard_totals(stats), ) highest_notification_count = max( sum(value[key] for key in {"requested", "failed", "delivered"}) for key, value in dashboard_totals[0].items()) return { "upcoming": render_template("views/dashboard/_upcoming.html", scheduled_jobs=scheduled_jobs), "totals": render_template( "views/dashboard/_totals.html", service_id=service_id, statistics=dashboard_totals[0], column_width=column_width, smaller_font_size=(highest_notification_count > max_notifiction_count), ), "template-statistics": render_template( "views/dashboard/template-statistics.html", template_statistics=template_statistics, most_used_template_count=max( [row["count"] for row in template_statistics] or [0]), ), "has_template_statistics": bool(template_statistics), "jobs": render_template("views/dashboard/_jobs.html", jobs=immediate_jobs), "has_jobs": bool(immediate_jobs), "has_scheduled_jobs": bool(scheduled_jobs), }
def view_jobs(service_id): page = int(request.args.get("page", 1)) # all but scheduled and cancelled statuses_to_display = job_api_client.JOB_STATUSES - {"scheduled", "cancelled"} jobs_response = job_api_client.get_jobs(service_id, statuses=statuses_to_display, page=page) jobs = [add_rate_to_job(job) for job in jobs_response["data"]] prev_page = None if jobs_response["links"].get("prev", None): prev_page = generate_previous_dict("main.view_jobs", service_id, page) next_page = None if jobs_response["links"].get("next", None): next_page = generate_next_dict("main.view_jobs", service_id, page) return render_template("views/jobs/jobs.html", jobs=jobs, page=page, prev_page=prev_page, next_page=next_page)
def get_dashboard_partials(service_id): # all but scheduled and cancelled statuses_to_display = job_api_client.JOB_STATUSES - { 'scheduled', 'cancelled' } template_statistics = aggregate_usage( template_statistics_client.get_template_statistics_for_service( service_id, limit_days=7)) scheduled_jobs = sorted(job_api_client.get_jobs(service_id, statuses=['scheduled' ])['data'], key=lambda job: job['scheduled_for']) immediate_jobs = [ add_rate_to_job(job) for job in job_api_client.get_jobs( service_id, limit_days=7, statuses=statuses_to_display)['data'] ] service = service_api_client.get_detailed_service(service_id) return { 'upcoming': render_template('views/dashboard/_upcoming.html', scheduled_jobs=scheduled_jobs), 'totals': render_template('views/dashboard/_totals.html', service_id=service_id, statistics=get_dashboard_totals( service['data']['statistics'])), 'template-statistics': render_template( 'views/dashboard/template-statistics.html', template_statistics=template_statistics, most_used_template_count=max( [row['count'] for row in template_statistics] or [0]), ), 'has_template_statistics': bool(template_statistics), 'jobs': render_template('views/dashboard/_jobs.html', jobs=immediate_jobs), 'has_jobs': bool(immediate_jobs), 'usage': render_template( 'views/dashboard/_usage.html', **calculate_usage( service_api_client.get_service_usage(service_id)['data'])), }
def get_dashboard_partials(service_id): # all but scheduled and cancelled statuses_to_display = job_api_client.JOB_STATUSES - {'scheduled', 'cancelled'} template_statistics = aggregate_usage( template_statistics_client.get_template_statistics_for_service(service_id, limit_days=7) ) scheduled_jobs = sorted( job_api_client.get_jobs(service_id, statuses=['scheduled'])['data'], key=lambda job: job['scheduled_for'] ) immediate_jobs = [ add_rate_to_job(job) for job in job_api_client.get_jobs(service_id, limit_days=7, statuses=statuses_to_display)['data'] ] service = service_api_client.get_detailed_service(service_id) return { 'upcoming': render_template( 'views/dashboard/_upcoming.html', scheduled_jobs=scheduled_jobs ), 'totals': render_template( 'views/dashboard/_totals.html', service_id=service_id, statistics=get_dashboard_totals(service['data']['statistics']) ), 'template-statistics': render_template( 'views/dashboard/template-statistics.html', template_statistics=template_statistics, most_used_template_count=max( [row['count'] for row in template_statistics] or [0] ), ), 'has_template_statistics': bool(template_statistics), 'jobs': render_template( 'views/dashboard/_jobs.html', jobs=immediate_jobs ), 'has_jobs': bool(immediate_jobs), 'usage': render_template( 'views/dashboard/_usage.html', **calculate_usage(service_api_client.get_service_usage(service_id)['data']) ), }
def get_dashboard_partials(service_id): # all but scheduled and cancelled statuses_to_display = job_api_client.JOB_STATUSES - { 'scheduled', 'cancelled' } template_statistics = aggregate_usage( template_statistics_client.get_template_statistics_for_service( service_id, limit_days=7)) scheduled_jobs = sorted(job_api_client.get_jobs(service_id, statuses=['scheduled' ])['data'], key=lambda job: job['scheduled_for']) immediate_jobs = [ add_rate_to_job(job) for job in job_api_client.get_jobs( service_id, limit_days=7, statuses=statuses_to_display)['data'] ] service = service_api_client.get_detailed_service(service_id) column_width, max_notifiction_count = get_column_properties( number_of_columns=( 3 if 'letter' in current_service['permissions'] else 2)) dashboard_totals = get_dashboard_totals(service['data']['statistics']), highest_notification_count = max( sum(value[key] for key in {'requested', 'failed', 'delivered'}) for key, value in dashboard_totals[0].items()) return { 'upcoming': render_template('views/dashboard/_upcoming.html', scheduled_jobs=scheduled_jobs), 'inbox': render_template( 'views/dashboard/_inbox.html', inbound_sms_summary=( service_api_client.get_inbound_sms_summary(service_id) if 'inbound_sms' in current_service['permissions'] else None), ), 'totals': render_template( 'views/dashboard/_totals.html', service_id=service_id, statistics=dashboard_totals[0], column_width=column_width, smaller_font_size=(highest_notification_count > max_notifiction_count), ), 'template-statistics': render_template( 'views/dashboard/template-statistics.html', template_statistics=template_statistics, most_used_template_count=max( [row['count'] for row in template_statistics] or [0]), ), 'has_template_statistics': bool(template_statistics), 'jobs': render_template('views/dashboard/_jobs.html', jobs=immediate_jobs), 'has_jobs': bool(immediate_jobs) }