Esempio n. 1
0
def get_template_statistics_for_service_by_day(service_id):
    whole_days = request.args.get('whole_days',
                                  request.args.get('limit_days', ''))
    try:
        whole_days = int(whole_days)
    except ValueError:
        error = '{} is not an integer'.format(whole_days)
        message = {'whole_days': [error]}
        raise InvalidRequest(message, status_code=400)

    if whole_days < 0 or whole_days > 7:
        raise InvalidRequest(
            {'whole_days': ['whole_days must be between 0 and 7']},
            status_code=400)
    data = fetch_notification_status_for_service_for_today_and_7_previous_days(
        service_id, by_template=True, limit_days=whole_days)

    return jsonify(data=[{
        'count': row.count,
        'template_id': str(row.template_id),
        'template_name': row.template_name,
        'template_type': row.notification_type,
        'is_precompiled_letter': row.is_precompiled_letter,
        'status': row.status
    } for row in data])
Esempio n. 2
0
def get_template_statistics_for_service_by_day(service_id):
    whole_days = request.args.get("whole_days", request.args.get("limit_days", ""))
    try:
        whole_days = int(whole_days)
    except ValueError:
        error = "{} is not an integer".format(whole_days)
        message = {"whole_days": [error]}
        raise InvalidRequest(message, status_code=400)

    if whole_days < 0 or whole_days > 7:
        raise InvalidRequest({"whole_days": ["whole_days must be between 0 and 7"]}, status_code=400)
    data = fetch_notification_status_for_service_for_today_and_7_previous_days(
        service_id, by_template=True, limit_days=whole_days
    )

    return jsonify(
        data=[
            {
                "count": row.count,
                "template_id": str(row.template_id),
                "template_name": row.template_name,
                "template_type": row.notification_type,
                "is_precompiled_letter": row.is_precompiled_letter,
                "status": row.status,
            }
            for row in data
        ]
    )
Esempio n. 3
0
def get_service_statistics(service_id, today_only, limit_days=7):
    # today_only flag is used by the send page to work out if the service will exceed their daily usage by sending a job
    if today_only:
        stats = dao_fetch_todays_stats_for_service(service_id)
    else:
        stats = fetch_notification_status_for_service_for_today_and_7_previous_days(service_id, limit_days=limit_days)

    return statistics.format_statistics(stats)
def test_fetch_notification_status_for_service_for_today_and_7_previous_days(notify_db_session):
    service_1 = create_service(service_name='service_1')
    sms_template = create_template(service=service_1, template_type=SMS_TYPE)
    sms_template_2 = create_template(service=service_1, template_type=SMS_TYPE)
    email_template = create_template(service=service_1, template_type=EMAIL_TYPE)

    create_ft_notification_status(date(2018, 10, 29), 'sms', service_1, count=10)
    create_ft_notification_status(date(2018, 10, 24), 'sms', service_1, count=8)
    create_ft_notification_status(date(2018, 10, 29), 'sms', service_1, notification_status='created')
    create_ft_notification_status(date(2018, 10, 29), 'email', service_1, count=3)
    create_ft_notification_status(date(2018, 10, 26), 'letter', service_1, count=5)

    create_notification(sms_template, created_at=datetime(2018, 10, 31, 11, 0, 0))
    create_notification(sms_template_2, created_at=datetime(2018, 10, 31, 11, 0, 0))
    create_notification(sms_template, created_at=datetime(2018, 10, 31, 12, 0, 0), status='delivered')
    create_notification(email_template, created_at=datetime(2018, 10, 31, 13, 0, 0), status='delivered')

    # too early, shouldn't be included
    create_notification(service_1.templates[0], created_at=datetime(2018, 10, 30, 12, 0, 0), status='delivered')

    results = sorted(
        fetch_notification_status_for_service_for_today_and_7_previous_days(service_1.id),
        key=lambda x: (x.notification_type, x.status)
    )

    assert len(results) == 4

    assert results[0].notification_type == 'email'
    assert results[0].status == 'delivered'
    assert results[0].count == 4

    assert results[1].notification_type == 'letter'
    assert results[1].status == 'delivered'
    assert results[1].count == 5

    assert results[2].notification_type == 'sms'
    assert results[2].status == 'created'
    assert results[2].count == 3

    assert results[3].notification_type == 'sms'
    assert results[3].status == 'delivered'
    assert results[3].count == 11
def test_fetch_notification_status_by_template_for_service_for_today_and_7_previous_days(notify_db_session):
    service_1 = create_service(service_name='service_1')
    sms_template = create_template(template_name='sms Template 1', service=service_1, template_type=SMS_TYPE)
    sms_template_2 = create_template(template_name='sms Template 2', service=service_1, template_type=SMS_TYPE)
    email_template = create_template(service=service_1, template_type=EMAIL_TYPE)

    # create unused email template
    create_template(service=service_1, template_type=EMAIL_TYPE)

    create_ft_notification_status(date(2018, 10, 29), 'sms', service_1, count=10)
    create_ft_notification_status(date(2018, 10, 29), 'sms', service_1, count=11)
    create_ft_notification_status(date(2018, 10, 24), 'sms', service_1, count=8)
    create_ft_notification_status(date(2018, 10, 29), 'sms', service_1, notification_status='created')
    create_ft_notification_status(date(2018, 10, 29), 'email', service_1, count=3)
    create_ft_notification_status(date(2018, 10, 26), 'letter', service_1, count=5)

    create_notification(sms_template, created_at=datetime(2018, 10, 31, 11, 0, 0))
    create_notification(sms_template, created_at=datetime(2018, 10, 31, 12, 0, 0), status='delivered')
    create_notification(sms_template_2, created_at=datetime(2018, 10, 31, 12, 0, 0), status='delivered')
    create_notification(email_template, created_at=datetime(2018, 10, 31, 13, 0, 0), status='delivered')

    # too early, shouldn't be included
    create_notification(service_1.templates[0], created_at=datetime(2018, 10, 30, 12, 0, 0), status='delivered')

    results = fetch_notification_status_for_service_for_today_and_7_previous_days(service_1.id, by_template=True)

    assert [
        ('email Template Name', False, mock.ANY, 'email', 'delivered', 1),
        ('email Template Name', False, mock.ANY, 'email', 'delivered', 3),
        ('letter Template Name', False, mock.ANY, 'letter', 'delivered', 5),
        ('sms Template 1', False, mock.ANY, 'sms', 'created', 1),
        ('sms Template Name', False, mock.ANY, 'sms', 'created', 1),
        ('sms Template 1', False, mock.ANY, 'sms', 'delivered', 1),
        ('sms Template 2', False, mock.ANY, 'sms', 'delivered', 1),
        ('sms Template Name', False, mock.ANY, 'sms', 'delivered', 10),
        ('sms Template Name', False, mock.ANY, 'sms', 'delivered', 11),

    ] == sorted(results, key=lambda x: (x.notification_type, x.status, x.template_name, x.count))