core: add more prometheus metrics

This commit is contained in:
Jens Langhammer 2020-01-19 21:01:26 +01:00
parent fc4a46bd9c
commit d9ecb7070d
2 changed files with 11 additions and 10 deletions

View File

@ -14,6 +14,7 @@ from django.utils.translation import gettext as _
from guardian.mixins import GuardianUserMixin from guardian.mixins import GuardianUserMixin
from model_utils.managers import InheritanceManager from model_utils.managers import InheritanceManager
from structlog import get_logger from structlog import get_logger
from django_prometheus.models import ExportModelOperationsMixin
from passbook.core.signals import password_changed from passbook.core.signals import password_changed
from passbook.lib.models import CreatedUpdatedModel, UUIDModel from passbook.lib.models import CreatedUpdatedModel, UUIDModel
@ -28,7 +29,7 @@ def default_nonce_duration():
return now() + timedelta(hours=4) return now() + timedelta(hours=4)
class Group(UUIDModel): class Group(ExportModelOperationsMixin("group"), UUIDModel):
"""Custom Group model which supports a basic hierarchy""" """Custom Group model which supports a basic hierarchy"""
name = models.CharField(_("name"), max_length=80) name = models.CharField(_("name"), max_length=80)
@ -49,7 +50,7 @@ class Group(UUIDModel):
unique_together = (("name", "parent",),) unique_together = (("name", "parent",),)
class User(GuardianUserMixin, AbstractUser): class User(ExportModelOperationsMixin("user"), GuardianUserMixin, AbstractUser):
"""Custom User model to allow easier adding o f user-based settings""" """Custom User model to allow easier adding o f user-based settings"""
uuid = models.UUIDField(default=uuid4, editable=False) uuid = models.UUIDField(default=uuid4, editable=False)
@ -72,7 +73,7 @@ class User(GuardianUserMixin, AbstractUser):
permissions = (("reset_user_password", "Reset Password"),) permissions = (("reset_user_password", "Reset Password"),)
class Provider(models.Model): class Provider(ExportModelOperationsMixin("provider"), models.Model):
"""Application-independent Provider instance. For example SAML2 Remote, OAuth2 Application""" """Application-independent Provider instance. For example SAML2 Remote, OAuth2 Application"""
property_mappings = models.ManyToManyField( property_mappings = models.ManyToManyField(
@ -107,7 +108,7 @@ class UserSettings:
self.view_name = view_name self.view_name = view_name
class Factor(PolicyModel): class Factor(ExportModelOperationsMixin("factor"), PolicyModel):
"""Authentication factor, multiple instances of the same Factor can be used""" """Authentication factor, multiple instances of the same Factor can be used"""
name = models.TextField() name = models.TextField()
@ -128,7 +129,7 @@ class Factor(PolicyModel):
return f"Factor {self.slug}" return f"Factor {self.slug}"
class Application(PolicyModel): class Application(ExportModelOperationsMixin("application"), PolicyModel):
"""Every Application which uses passbook for authentication/identification/authorization """Every Application which uses passbook for authentication/identification/authorization
needs an Application record. Other authentication types can subclass this Model to needs an Application record. Other authentication types can subclass this Model to
add custom fields and other properties""" add custom fields and other properties"""
@ -154,7 +155,7 @@ class Application(PolicyModel):
return self.name return self.name
class Source(PolicyModel): class Source(ExportModelOperationsMixin("source"), PolicyModel):
"""Base Authentication source, i.e. an OAuth Provider, SAML Remote or LDAP Server""" """Base Authentication source, i.e. an OAuth Provider, SAML Remote or LDAP Server"""
name = models.TextField() name = models.TextField()
@ -199,7 +200,7 @@ class UserSourceConnection(CreatedUpdatedModel):
unique_together = (("user", "source"),) unique_together = (("user", "source"),)
class Policy(UUIDModel, CreatedUpdatedModel): class Policy(ExportModelOperationsMixin("policy"), UUIDModel, CreatedUpdatedModel):
"""Policies which specify if a user is authorized to use an Application. Can be overridden by """Policies which specify if a user is authorized to use an Application. Can be overridden by
other types to add other fields, more logic, etc.""" other types to add other fields, more logic, etc."""
@ -241,7 +242,7 @@ class DebugPolicy(Policy):
verbose_name_plural = _("Debug Policies") verbose_name_plural = _("Debug Policies")
class Invitation(UUIDModel): class Invitation(ExportModelOperationsMixin("invitation"), UUIDModel):
"""Single-use invitation link""" """Single-use invitation link"""
created_by = models.ForeignKey("User", on_delete=models.CASCADE) created_by = models.ForeignKey("User", on_delete=models.CASCADE)
@ -266,7 +267,7 @@ class Invitation(UUIDModel):
verbose_name_plural = _("Invitations") verbose_name_plural = _("Invitations")
class Nonce(UUIDModel): class Nonce(ExportModelOperationsMixin("nonce"), UUIDModel):
"""One-time link for password resets/sign-up-confirmations""" """One-time link for password resets/sign-up-confirmations"""
expires = models.DateTimeField(default=default_nonce_duration) expires = models.DateTimeField(default=default_nonce_duration)

View File

@ -19,7 +19,7 @@ class MetricsView(View):
if auth_type != "Basic" or given_credentials != expected: if auth_type != "Basic" or given_credentials != expected:
response = HttpResponse(status=401) response = HttpResponse(status=401)
response['WWW-Authenticate'] = 'Basic realm="passbook-monitoring"' response["WWW-Authenticate"] = 'Basic realm="passbook-monitoring"'
return response return response
return ExportToDjangoView(request) return ExportToDjangoView(request)