Exemple #1
0
def admin_metrics(request, slug):
    """Overview metrics for course organizers.

    We only are interested in the pages of the course and the participants.
    """
    project = get_object_or_404(Project, slug=slug)
    metric_permissions = project.get_metrics_permissions(request.user)
    participants = project.participants(include_deleted=True).order_by("user__username")
    participant_profiles = (participant.user for participant in participants)
    tracker_models.update_metrics_cache(project)
    keys = ("username", "last_active", "course_activity_minutes", "comment_count", "task_edits_count")
    metrics = tracker_models.metrics_summary(project, participant_profiles)
    data = (dict(itertools.izip(keys, d)) for d in metrics)

    return render_to_response(
        "projects/project_admin_metrics.html",
        {
            "project": project,
            "can_view_metric_overview": metric_permissions[0],
            "can_view_metric_detail": metric_permissions[1],
            "data": data,
            "metrics_tab": True,
            "is_challenge": (project.category == project.CHALLENGE),
        },
        context_instance=RequestContext(request),
    )
Exemple #2
0
def admin_metrics(request, slug):
    """Overview metrics for course organizers.

    We only are interested in the pages of the course and the participants.
    """
    project = get_object_or_404(Project, slug=slug)
    metric_permissions = project.get_metrics_permissions(request.user)
    participants = project.participants(
        include_deleted=True).order_by('user__username')
    participant_profiles = (participant.user for participant in participants)
    tracker_models.update_metrics_cache(project)
    keys = ('username', 'last_active', 'course_activity_minutes',
            'comment_count', 'task_edits_count')
    metrics = tracker_models.metrics_summary(project, participant_profiles)
    data = (dict(itertools.izip(keys, d)) for d in metrics)

    return render_to_response(
        'projects/project_admin_metrics.html', {
            'project': project,
            'can_view_metric_overview': metric_permissions[0],
            'can_view_metric_detail': metric_permissions[1],
            'data': data,
            'metrics_tab': True,
            'is_challenge': (project.category == project.CHALLENGE),
        },
        context_instance=RequestContext(request))
Exemple #3
0
def admin_metrics_data_ajax(request, slug):
    """ returns data for jquery data tables plugin """
    project = get_object_or_404(Project, slug=slug)
    participants = project.participants(
        include_deleted=True).order_by('user__username')
    participant_profiles = (participant.user for participant in participants)
    tracker_models.update_metrics_cache(project)
    metrics = tracker_models.metrics_summary(project, participant_profiles)
    json = simplejson.dumps({'aaData': list(metrics)})
    return http.HttpResponse(json, mimetype="application/json")
Exemple #4
0
def admin_metrics(request, slug):
    """Overview metrics for course organizers.

    We only are interested in the pages of the course and the participants.
    """
    project = get_object_or_404(Project, slug=slug)
    metric_permissions = project.get_metrics_permissions(request.user)
    participants = (participant.user for participant in project.participants())
    tracker_models.update_metrics_cache(project)
    keys = ('username', 'last_active', 'course_activity_minutes',
        'comment_count', 'task_edits_count')
    metrics = tracker_models.metrics_summary(project, participants)
    data = (dict(itertools.izip(keys, d)) for d in metrics)

    return render_to_response('projects/project_admin_metrics.html', {
            'project': project,
            'can_view_metric_overview': metric_permissions[0],
            'can_view_metric_detail': metric_permissions[1],
            'data': data,
            'metrics_tab': True,
            'is_challenge': (project.category == project.CHALLENGE),
    }, context_instance=RequestContext(request))
Exemple #5
0
def export_detailed_csv(request, slug):
    """Display detailed CSV for certain users."""
    project = get_object_or_404(Project, slug=slug)
    # Preprocessing
    tracker_models.update_metrics_cache(project)
    organizers = project.organizers(include_deleted=True).order_by('user__username')
    organizer_profiles = (organizer.user for organizer in organizers)
    organizer_ids = organizers.values('user_id')
    participants = project.non_organizer_participants(include_deleted=True).order_by(
        'user__username')
    participant_profiles = (participant.user for participant in participants)
    participant_ids = participants.values('user_id')
    followers = project.non_participant_followers(include_deleted=True).order_by(
        'source__username')
    follower_profiles = (follower.source for follower in followers)
    follower_ids = followers.values('source_id')
    previous_followers = project.previous_followers(include_deleted=True).order_by(
        'source__username')
    previous_follower_profiles = (previous.source for previous
        in previous_followers)
    previous_follower_ids = project.previous_followers().values('source_id')
    headers = ["Time on Pages", "Non-zero Length Page Views",
        "Zero-length Page Views", "Comments", "Page Edits"]
    # Create csv response
    response = http.HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; '
    response['Content-Disposition'] += 'filename=detailed_report.csv'
    writer = unicodecsv.writer(response)
    writer.writerow(["Course: " + project.name])
    writer.writerow(["Data generated: " + datetime.datetime.now().strftime(
        "%b %d, %Y")])
    writer.writerow([])
    writer.writerow([])
    # Write Total Metrics
    writer.writerow(["TOTALS"])
    writer.writerow(["Organizers"] + headers)
    metrics = tracker_models.user_total_metrics(project,
        organizer_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants"] + headers)
    metrics = tracker_models.user_total_metrics(project,
        participant_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers"] + headers)
    for row in tracker_models.user_total_metrics(project, follower_profiles):
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers"] + headers)
    metrics = tracker_models.user_total_metrics(project,
        previous_follower_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors"] + headers)
    for row in tracker_models.unauth_total_metrics(project):
        writer.writerow(row + ["0"] * 2)
    writer.writerow([])
    writer.writerow([])
    # Restoring profile iterators
    organizer_profiles = (organizer.user for organizer in organizers)
    participant_profiles = (participant.user for participant in participants)
    follower_profiles = (follower.source for follower in followers)
    previous_follower_profiles = (previous.source for previous
        in previous_followers)
    # Write Per Page Total Metrics
    writer.writerow(["PER PAGE TOTALS"])
    writer.writerow(["Organizers", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project,
        organizer_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project,
        participant_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project, follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project,
        previous_follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors", "Page Paths"] + headers[:-2])
    for row in tracker_models.unauth_total_per_page_metrics(project):
        writer.writerow(row)
    writer.writerow([])
    writer.writerow([])
    # Write Chronological Metrics
    writer.writerow(["CHRONOLOGICAL"])
    writer.writerow(["Organizers", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        organizer_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        participant_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        follower_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        previous_follower_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors", "Dates"] + headers)
    for row in tracker_models.chronological_unauth_metrics(project):
        writer.writerow(row + ["0"] * 2)
    writer.writerow([])
    writer.writerow([])
    # Write Chronological Per Page Metrics
    writer.writerow(["CHRONOLOGICAL PER PAGE"])
    writer.writerow(["Organizers", "Dates", "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(
        project, organizer_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants", "Dates", "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(
        project, participant_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers", "Dates", "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(
        project, follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers", "Dates",
        "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(project,
        previous_follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors", "Dates",
        "Page Paths"] + headers[:-2])
    for row in tracker_models.chronological_unauth_per_page_metrics(project):
        writer.writerow(row)
    writer.writerow([])
    writer.writerow([])

    return response
Exemple #6
0
def export_detailed_csv(request, slug):
    """Display detailed CSV for certain users."""
    project = get_object_or_404(Project, slug=slug)
    # Preprocessing
    tracker_models.update_metrics_cache(project)
    organizers = project.organizers(include_deleted=True).order_by('user__username')
    organizer_profiles = (organizer.user for organizer in organizers)
    organizer_ids = organizers.values('user_id')
    participants = project.non_organizer_participants(include_deleted=True).order_by(
        'user__username')
    participant_profiles = (participant.user for participant in participants)
    participant_ids = participants.values('user_id')
    followers = project.non_participant_followers(include_deleted=True).order_by(
        'source__username')
    follower_profiles = (follower.source for follower in followers)
    follower_ids = followers.values('source_id')
    previous_followers = project.previous_followers(include_deleted=True).order_by(
        'source__username')
    previous_follower_profiles = (previous.source for previous
        in previous_followers)
    previous_follower_ids = project.previous_followers().values('source_id')
    headers = ["Time on Pages", "Non-zero Length Page Views",
        "Zero-length Page Views", "Comments", "Page Edits"]
    # Create csv response
    response = http.HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; '
    response['Content-Disposition'] += 'filename=detailed_report.csv'
    writer = unicodecsv.writer(response)
    writer.writerow(["Course: " + project.name])
    writer.writerow(["Data generated: " + datetime.datetime.now().strftime(
        "%b %d, %Y")])
    writer.writerow([])
    writer.writerow([])
    # Write Total Metrics
    writer.writerow(["TOTALS"])
    writer.writerow(["Organizers"] + headers)
    metrics = tracker_models.user_total_metrics(project,
        organizer_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants"] + headers)
    metrics = tracker_models.user_total_metrics(project,
        participant_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers"] + headers)
    for row in tracker_models.user_total_metrics(project, follower_profiles):
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers"] + headers)
    metrics = tracker_models.user_total_metrics(project,
        previous_follower_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors"] + headers)
    for row in tracker_models.unauth_total_metrics(project):
        writer.writerow(row + ["0"] * 2)
    writer.writerow([])
    writer.writerow([])
    # Restoring profile iterators
    organizer_profiles = (organizer.user for organizer in organizers)
    participant_profiles = (participant.user for participant in participants)
    follower_profiles = (follower.source for follower in followers)
    previous_follower_profiles = (previous.source for previous
        in previous_followers)
    # Write Per Page Total Metrics
    writer.writerow(["PER PAGE TOTALS"])
    writer.writerow(["Organizers", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project,
        organizer_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project,
        participant_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project, follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers", "Page Paths"] + headers[:-2])
    metrics = tracker_models.user_total_per_page_metrics(project,
        previous_follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors", "Page Paths"] + headers[:-2])
    for row in tracker_models.unauth_total_per_page_metrics(project):
        writer.writerow(row)
    writer.writerow([])
    writer.writerow([])
    # Write Chronological Metrics
    writer.writerow(["CHRONOLOGICAL"])
    writer.writerow(["Organizers", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        organizer_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        participant_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        follower_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers", "Dates"] + headers)
    metrics = tracker_models.chronological_user_metrics(project,
        previous_follower_profiles)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors", "Dates"] + headers)
    for row in tracker_models.chronological_unauth_metrics(project):
        writer.writerow(row + ["0"] * 2)
    writer.writerow([])
    writer.writerow([])
    # Write Chronological Per Page Metrics
    writer.writerow(["CHRONOLOGICAL PER PAGE"])
    writer.writerow(["Organizers", "Dates", "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(
        project, organizer_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Participants", "Dates", "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(
        project, participant_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Followers", "Dates", "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(
        project, follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Previous Followers", "Dates",
        "Page Paths"] + headers[:-2])
    metrics = tracker_models.chronological_user_per_page_metrics(project,
        previous_follower_ids)
    for row in metrics:
        writer.writerow(row)
    writer.writerow([])
    writer.writerow(["Unauthenticated Visitors", "Dates",
        "Page Paths"] + headers[:-2])
    for row in tracker_models.chronological_unauth_per_page_metrics(project):
        writer.writerow(row)
    writer.writerow([])
    writer.writerow([])

    return response