Esempio n. 1
0
def response_view(request, responseid, template):
    response = get_object_or_404(Response, id=responseid)

    try:
        prod = Product.objects.get(db_name=response.product)

        if (not prod.on_dashboard
                and (not request.user.is_authenticated()
                     or not request.user.has_perm(
                         'analytics.can_view_dashboard'))):

            # If this is a response for a hidden product and the user
            # isn't in the analytics group, then they can't see it.
            return HttpResponseForbidden()

    except Product.DoesNotExist:
        pass

    mlt = None
    records = None
    errors = []

    if (request.user.is_authenticated()
            and request.user.has_perm('analytics.can_view_dashboard')):

        try:
            # Convert it to a list to force it to execute right now.
            mlt = ResponseMappingType.reshape(
                ResponseMappingType.morelikethis(response))
        except ElasticsearchException as exc:
            errors.append('Failed to do morelikethis: %s' % exc)

        records = [
            (u'Response records', Record.objects.records(response)),
        ]
        jobs = GengoJob.objects.filter(
            object_id=response.id,
            content_type=ContentType.objects.get_for_model(response)
        )
        for job in jobs:
            records.append(
                (u'Gengo job record {0}'.format(job.id), job.records)
            )

    # We don't pass the response directly to the template and instead
    # do some data tweaks here to make it more palatable for viewing.
    return render(request, template, {
        'errors': errors,
        'response': response,
        'mlt': mlt,
        'records': records,
    })
Esempio n. 2
0
def analytics_duplicates(request):
    """Shows all duplicate descriptions over the last n days"""
    template = 'analytics/analyzer/duplicates.html'

    n = 14

    responses = (ResponseMappingType.search()
                 .filter(created__gte=datetime.now() - timedelta(days=n))
                 .values_dict('description', 'happy', 'created', 'locale',
                              'user_agent', 'id')
                 .order_by('created').everything())

    responses = ResponseMappingType.reshape(responses)

    total_count = len(responses)

    response_dupes = {}
    for resp in responses:
        response_dupes.setdefault(resp['description'], []).append(resp)

    response_dupes = [
        (key, val) for key, val in response_dupes.items()
        if len(val) > 1
    ]

    # convert the dict into a list of tuples sorted by the number of
    # responses per tuple largest number first
    response_dupes = sorted(response_dupes, key=lambda item: len(item[1]) * -1)

    # duplicate_count -> count
    # i.e. "how many responses had 2 duplicates?"
    summary_counts = defaultdict(int)
    for desc, responses in response_dupes:
        summary_counts[len(responses)] = summary_counts[len(responses)] + 1
    summary_counts = sorted(summary_counts.items(), key=lambda item: item[0])

    return render(request, template, {
        'n': 14,
        'response_dupes': response_dupes,
        'render_time': datetime.now(),
        'summary_counts': summary_counts,
        'total_count': total_count,
    })
Esempio n. 3
0
def analytics_duplicates(request):
    """Shows all duplicate descriptions over the last n days"""
    template = 'analytics/analyzer/duplicates.html'

    n = 14

    responses = (ResponseMappingType.search().filter(
        created__gte=datetime.now() - timedelta(days=n)).values_dict(
            'description', 'happy', 'created', 'locale', 'user_agent',
            'id').order_by('created').everything())

    responses = ResponseMappingType.reshape(responses)

    total_count = len(responses)

    response_dupes = {}
    for resp in responses:
        response_dupes.setdefault(resp['description'], []).append(resp)

    response_dupes = [(key, val) for key, val in response_dupes.items()
                      if len(val) > 1]

    # convert the dict into a list of tuples sorted by the number of
    # responses per tuple largest number first
    response_dupes = sorted(response_dupes, key=lambda item: len(item[1]) * -1)

    # duplicate_count -> count
    # i.e. "how many responses had 2 duplicates?"
    summary_counts = defaultdict(int)
    for desc, responses in response_dupes:
        summary_counts[len(responses)] = summary_counts[len(responses)] + 1
    summary_counts = sorted(summary_counts.items(), key=lambda item: item[0])

    return render(
        request, template, {
            'n': 14,
            'response_dupes': response_dupes,
            'render_time': datetime.now(),
            'summary_counts': summary_counts,
            'total_count': total_count,
        })
Esempio n. 4
0
File: views.py Progetto: rlr/fjord
def response_view(request, responseid, template):
    response = get_object_or_404(Response, id=responseid)

    mlt = None
    records = None
    errors = []

    if (request.user.is_authenticated()
            and request.user.has_perm('analytics.can_view_dashboard')):

        try:
            # Convert it to a list to force it to execute right now.
            mlt = ResponseMappingType.reshape(
                ResponseMappingType.morelikethis(response))
        except ElasticsearchException as exc:
            errors.append('Failed to do morelikethis: %s' % exc)

        records = [
            (u'Response records', Record.objects.records(response)),
        ]
        jobs = GengoJob.objects.filter(
            object_id=response.id,
            content_type=ContentType.objects.get_for_model(response)
        )
        for job in jobs:
            records.append(
                (u'Gengo job record {0}'.format(job.id), job.records)
            )

    # We don't pass the response directly to the template and instead
    # do some data tweaks here to make it more palatable for viewing.
    return render(request, template, {
        'errors': errors,
        'response': response,
        'mlt': mlt,
        'records': records,
    })
Esempio n. 5
0
def response_view(request, responseid, template):
    response = get_object_or_404(Response, id=responseid)

    mlt = None
    records = None
    errors = []

    if (request.user.is_authenticated()
            and request.user.has_perm('analytics.can_view_dashboard')):

        try:
            # Convert it to a list to force it to execute right now.
            mlt = ResponseMappingType.reshape(
                ResponseMappingType.morelikethis(response))
        except ElasticsearchException as exc:
            errors.append('Failed to do morelikethis: %s' % exc)

        records = [
            (u'Response records', Record.objects.records(response)),
        ]
        jobs = GengoJob.objects.filter(
            object_id=response.id,
            content_type=ContentType.objects.get_for_model(response)
        )
        for job in jobs:
            records.append(
                (u'Gengo job record {0}'.format(job.id), job.records)
            )

    # We don't pass the response directly to the template and instead
    # do some data tweaks here to make it more palatable for viewing.
    return render(request, template, {
        'errors': errors,
        'response': response,
        'mlt': mlt,
        'records': records,
    })