瀏覽代碼

[desktop] Lazily count the number of users

It's possible the metrics could get imported before the
test database has been created, which will cause an exception
to be thrown because the User database doesn't exist yet.
Erick Tryzelaar 10 年之前
父節點
當前提交
c0a65f3741
共有 1 個文件被更改,包括 2 次插入14 次删除
  1. 2 14
      desktop/core/src/desktop/metrics.py

+ 2 - 14
desktop/core/src/desktop/metrics.py

@@ -22,7 +22,6 @@ import threading
 
 from django.contrib.auth.models import User
 from django.contrib.auth.signals import user_logged_in, user_logged_out
-from django.db.models.signals import post_save, post_delete
 from django.dispatch import receiver
 
 from desktop.lib.metrics import global_registry
@@ -139,25 +138,14 @@ response_time = global_registry().timer(
 
 # ------------------------------------------------------------------------------
 
-user_count = global_registry().gauge(
+user_count = global_registry().gauge_callback(
     name='desktop.users.count',
+    callback=lambda: User.objects.count(),
     label='User count',
     description='Total number of users',
     numerator='users',
 )
 
-# Initialize with the current user count.
-user_count.set_value(User.objects.all().count())
-
-@receiver(post_save, sender=User)
-def user_post_save_handler(sender, **kwargs):
-  if 'created' in kwargs:
-    user_count.set_value(User.objects.all().count())
-
-@receiver(post_delete, sender=User)
-def user_post_delete_handler(sender, **kwargs):
-  user_count.set_value(User.objects.all().count())
-
 logged_in_users = global_registry().counter(
     name='desktop.users.logged-in.count',
     label='Number of logged in users',