Revision 3d6d8464 snf-astakos-app/astakos/admin/stats.py

b/snf-astakos-app/astakos/admin/stats.py
46 46

  
47 47

  
48 48
def get_astakos_stats():
49
    stats = {"datetime": datetime.datetime.now().strftime("%c")}
50

  
51
    resources = Resource.objects.values_list("name", flat=True)
49
    stats = {"datetime": datetime.datetime.now().strftime("%c"),
50
             "providers": [],
51
             "users": {},
52
             "resources": {}}
52 53

  
53 54
    users = AstakosUser.objects.all()
54 55
    verified = users.filter(email_verified=True)
55 56
    active = users.filter(is_active=True)
56 57

  
57
    user_stats = {}
58
    user_stats["total"] = {"total": users.count(),
59
                           "verified": verified.count(),
60
                           "active": active.count(),
61
                           "usage": {}}
62

  
63
    for resource in resources:
64
        usage = Holding.objects.filter(resource=resource)\
65
                               .aggregate(summ=Sum("usage_max"))
66
        user_stats["total"]["usage"][resource] = int(usage["summ"])
67

  
68 58
    for provider in settings.ASTAKOS_IM_MODULES:
59
        # Add provider
60
        stats["providers"].append(provider)
69 61

  
62
        # Add stats about users
70 63
        users = AstakosUser.objects.filter(auth_providers__module=provider)
71 64
        verified = users.filter(email_verified=True)
72 65
        active = users.filter(is_active=True)
73 66

  
74
        user_stats[provider] = {"total": users.count(),
75
                                "verified": verified.count(),
76
                                "active": active.count(),
77
                                "usage": {}}
67
        stats["users"][provider] = {"total": users.count(),
68
                                    "verified": verified.count(),
69
                                    "active": active.count()}
78 70

  
71
        # Add stats about resources
79 72
        users_uuids = users.values_list("uuid", flat=True)
80
        for resource in resources:
81
            usage = Holding.objects\
82
                           .filter(holder__in=users_uuids, resource=resource)\
83
                           .aggregate(summ=Sum("usage_max"))
84
            user_stats[provider]["usage"][resource] = int(usage["summ"])
85

  
86
    stats["users"] = user_stats
73
        resources_stats = {}
74
        for resource in Resource.objects.all():
75
            info = Holding.objects\
76
                          .filter(holder__in=users_uuids,
77
                                  resource=resource.name)\
78
                          .aggregate(usage_sum=Sum("usage_max"),
79
                                     limit_sum=Sum("limit"))
80
            resources_stats[resource.name] = {"used": info["usage_sum"],
81
                                              "limit": info["limit_sum"],
82
                                              "unit": resource.unit,
83
                                              "description": resource.desc}
84
        stats["resources"][provider] = resources_stats
87 85

  
88 86
    return stats

Also available in: Unified diff