mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Any
 | 
						|
 | 
						|
from django.db.models import QuerySet
 | 
						|
from django.http import HttpRequest, HttpResponse
 | 
						|
from django.shortcuts import render
 | 
						|
 | 
						|
from corporate.lib.activity import (
 | 
						|
    ActivityHeaderEntry,
 | 
						|
    format_optional_datetime,
 | 
						|
    make_table,
 | 
						|
    user_support_link,
 | 
						|
)
 | 
						|
from zerver.decorator import require_server_admin
 | 
						|
from zerver.models import UserActivity, UserProfile
 | 
						|
from zerver.models.users import get_user_profile_by_id
 | 
						|
 | 
						|
 | 
						|
def get_user_activity_records(
 | 
						|
    user_profile: UserProfile,
 | 
						|
) -> QuerySet[UserActivity]:
 | 
						|
    fields = [
 | 
						|
        "query",
 | 
						|
        "client__name",
 | 
						|
        "count",
 | 
						|
        "last_visit",
 | 
						|
    ]
 | 
						|
 | 
						|
    records = (
 | 
						|
        UserActivity.objects.filter(
 | 
						|
            user_profile=user_profile,
 | 
						|
        )
 | 
						|
        .order_by("-last_visit")
 | 
						|
        .select_related("client")
 | 
						|
        .only(*fields)
 | 
						|
    )
 | 
						|
    return records
 | 
						|
 | 
						|
 | 
						|
@require_server_admin
 | 
						|
def get_user_activity(request: HttpRequest, user_profile_id: int) -> HttpResponse:
 | 
						|
    user_profile = get_user_profile_by_id(user_profile_id)
 | 
						|
    records = get_user_activity_records(user_profile)
 | 
						|
 | 
						|
    title = f"{user_profile.full_name}"
 | 
						|
    cols = [
 | 
						|
        "Query",
 | 
						|
        "Client",
 | 
						|
        "Count",
 | 
						|
        "Last visit (UTC)",
 | 
						|
    ]
 | 
						|
 | 
						|
    def row(record: UserActivity) -> list[Any]:
 | 
						|
        return [
 | 
						|
            record.query,
 | 
						|
            record.client.name,
 | 
						|
            record.count,
 | 
						|
            format_optional_datetime(record.last_visit),
 | 
						|
        ]
 | 
						|
 | 
						|
    rows = list(map(row, records))
 | 
						|
 | 
						|
    header_entries = []
 | 
						|
    header_entries.append(ActivityHeaderEntry(name="Email", value=user_profile.delivery_email))
 | 
						|
    header_entries.append(ActivityHeaderEntry(name="Realm", value=user_profile.realm.name))
 | 
						|
 | 
						|
    user_support = user_support_link(user_profile.delivery_email)
 | 
						|
 | 
						|
    content = make_table(title, cols, rows, header=header_entries, title_link=user_support)
 | 
						|
 | 
						|
    return render(
 | 
						|
        request,
 | 
						|
        "corporate/activity/activity.html",
 | 
						|
        context=dict(
 | 
						|
            data=content,
 | 
						|
            title=title,
 | 
						|
            is_home=False,
 | 
						|
        ),
 | 
						|
    )
 |