コード例 #1
0
ファイル: campaign_hourly.py プロジェクト: edgeflip/edgeflip
def campaign_hourly(request, client_pk, campaign_pk):
    """ Data for a particular campaign, used by the chart view """

    query = """
        SELECT
            date_trunc('hour', hour) as time,
            {}
        FROM campaignhourly
        JOIN campaigns using (campaign_id)
        WHERE campaigns.campaign_id = %s
        GROUP BY time
        ORDER BY time ASC
        """.format(metric_where_fragment())
    cursor = connections['reporting'].cursor()

    response_format = request.GET.get('format', '')

    def retrieve_campaign_hourly_csv():
        def csv_tz(row, indices):
            for index in indices:
                aware_ts = row[index] if timezone.is_aware(row[index]) else timezone.make_aware(row[index], timezone.utc)
                row[index] = aware_ts.strftime('%Y-%m-%dT%H:%M:%S %Z')
            return row

        data = run_safe_row_query(
            cursor,
            query,
            (campaign_pk,)
        )
        data = [csv_tz(row, [0]) for row in data]
        data.insert(0, [col.name for col in cursor.description])
        return data

    def retrieve_campaign_hourly():
        return run_safe_dict_query(
            cursor,
            query,
            (campaign_pk,)
        )

    if response_format == 'csv':
        data = cached_report(
            'campaignhourlycsv',
            campaign_pk,
            retrieve_campaign_hourly_csv
        )
        return generate_csv(data, client_pk)
    else:
        data = cached_report(
            'campaignhourly',
            campaign_pk,
            retrieve_campaign_hourly
        )
        return JsonResponse({'data': [isoformat_dict(row) for row in data]})
コード例 #2
0
ファイル: client_summary.py プロジェクト: edgeflip/edgeflip
def client_summary(request, client_pk):
    """
    Data for the initial pageview, a summary of client stats grouped by campaign
    """

    client = Client.objects.get(pk=client_pk)

    def retrieve_campaign_rollups():
        return run_safe_dict_query(
            connections['reporting'].cursor(),
            """
            SELECT
                campaignrollups.campaign_id as root_id,
                campaigns.name,
                max(latest_activity) as latest_activity,
                min(first_activity) as first_activity,
                {}
            FROM campaignrollups
            JOIN campaigns using (campaign_id)
            JOIN (
                select
                    campaign_id,
                    to_char(max(hour), 'YYYY-MM-DD') as latest_activity,
                    to_char(min(hour), 'YYYY-MM-DD') as first_activity
                    from campaignhourly group by campaign_id
                ) as timelookup using (campaign_id)
            WHERE campaigns.client_id = %s
            GROUP BY campaignrollups.campaign_id, campaigns.name
            ORDER BY campaignrollups.campaign_id desc
            """.format(metric_where_fragment()),
            (client.client_id,)
        )

    def retrieve_client_rollups():
        return run_safe_dict_query(
            connections['reporting'].cursor(),
            """
            SELECT
            {}
            FROM clientrollups
            WHERE client_id = %s
            """.format(metric_where_fragment()),
            (client.client_id,)
        )

    def retrieve_client_lastdata():
        return Campaignhourly.objects \
            .filter(campaign__client_id=client.client_id) \
            .aggregate(max_hour=Max('hour'))['max_hour']

    data = cached_report(
        'campaignrollups',
        client.client_id,
        retrieve_campaign_rollups
    )

    rollup_data = cached_report(
        'clientrollups',
        client.client_id,
        retrieve_client_rollups
    )

    last_updated = cached_report(
        'clientlastdata',
        client.client_id,
        retrieve_client_lastdata
    )

    return JsonResponse({
        'data': data,
        'rollups': rollup_data,
        'lastupdated': last_updated
    })