Skip to content

Commit

Permalink
Re-enable Storage Metrics emmiter.
Browse files Browse the repository at this point in the history
Revert "Disable the Storage Metrics emmiter for now."
This reverts commit 7029ee4.

Closes pulp#5762
  • Loading branch information
decko committed Sep 16, 2024
1 parent 0cd8dc1 commit deff405
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 19 deletions.
2 changes: 2 additions & 0 deletions CHANGES/5762.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Re-enable the Domain Storage metric emmiter and adds a feature flag to it.
This is an experimental feature and can change without prior notice.
11 changes: 10 additions & 1 deletion pulpcore/app/models/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from django.forms.models import model_to_dict
from django.utils.timezone import now
from django_guid import get_guid
from django_lifecycle import BEFORE_UPDATE, BEFORE_SAVE, hook
from django_lifecycle import BEFORE_UPDATE, BEFORE_SAVE, AFTER_SAVE, AFTER_DELETE, hook

from pulpcore.constants import ALL_KNOWN_CONTENT_CHECKSUMS
from pulpcore.app import pulp_hashlib
Expand All @@ -34,6 +34,7 @@
UnsupportedDigestValidationError,
)


# All available digest fields ordered by algorithm strength.
_DIGEST_FIELDS = []
for alg in ("sha512", "sha384", "sha256", "sha224", "sha1", "md5"):
Expand Down Expand Up @@ -390,6 +391,14 @@ def touch(self):
"""Update timestamp_of_interest."""
self.save(update_fields=["timestamp_of_interest"])

@hook(AFTER_SAVE)
@hook(AFTER_DELETE)
def emmit_telemetry(self):
from pulpcore.plugin.tasking import dispatch
from pulpcore.app.tasks import telemetry

dispatch(telemetry.emmit_disk_space_usage_telemetry, args=(self.pulp_domain.pk,))


class PulpTemporaryFile(HandleTempFilesMixin, BaseModel):
"""
Expand Down
10 changes: 1 addition & 9 deletions pulpcore/app/models/domain.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.core.files.storage import default_storage
from django.db import models
from django_lifecycle import hook, BEFORE_DELETE, BEFORE_UPDATE
from django_lifecycle import hook, BEFORE_DELETE, BEFORE_UPDATE, AFTER_CREATE

from pulpcore.app.models import BaseModel, AutoAddObjPermsMixin
from pulpcore.exceptions import DomainProtectedError
Expand Down Expand Up @@ -72,14 +72,6 @@ def _cleanup_orphans_pre_delete(self):
# Delete on by one to properly cleanup the storage.
artifact.delete()

# Disabling Storage metrics until we find a solution to resource usage.
# https://github.com/pulp/pulpcore/issues/5468
# @hook(AFTER_CREATE)
# def _report_domain_disk_usage(self):
# from pulpcore.app.util import DomainMetricsEmitterBuilder
#
# DomainMetricsEmitterBuilder.build(self)

class Meta:
permissions = [
("manage_roles_domain", "Can manage role assignments on domain"),
Expand Down
31 changes: 31 additions & 0 deletions pulpcore/app/tasks/telemetry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from logging import getLogger

from opentelemetry import metrics

from django.db.models import Sum

_logger = getLogger(__name__)


def emmit_disk_space_usage_telemetry(domain_pk=None, *args, **kwargs):
from pulpcore.app.models import Artifact, Domain

artifacts = Artifact.objects.values("pulp_domain__name").annotate(
total_size=Sum("size", default=0)
)

if domain_pk:
domain = Domain.objects.get(pk=domain_pk)
meter = metrics.get_meter(f"domain.{domain.name}.disk_usage.meter")
else:
_logger.info("Ready to calculate the space usage for all domains")
meter = metrics.get_meter("disk_usage.meter")

gauge = meter.create_gauge(
name="disk_usage",
description="The total disk size per domain.",
unit="bytes",
)

for domain in artifacts:
gauge.set(domain["total_size"], {"domain_name": domain["pulp_domain__name"]})
11 changes: 8 additions & 3 deletions pulpcore/app/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -584,10 +584,15 @@ def _disk_usage_callback(self):


def init_domain_metrics_exporter():
from pulpcore.app.models.domain import Domain
PULP_OTEL_SPACE_USAGE_TELEMETRY = (
os.getenv("PULP_OTEL_SPACE_USAGE_TELEMETRY", "").lower() == "true"
)

for domain in Domain.objects.all():
DomainMetricsEmitter.build(domain)
if PULP_OTEL_SPACE_USAGE_TELEMETRY:
from pulpcore.app.models.domain import Domain

for domain in Domain.objects.all():
DomainMetricsEmitter.build(domain)


class PGAdvisoryLock:
Expand Down
6 changes: 0 additions & 6 deletions pulpcore/app/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,3 @@

application = get_wsgi_application()
application = OpenTelemetryMiddleware(application)

# Disabling Storage metrics until we find a solution to resource usage.
# https://github.com/pulp/pulpcore/issues/5468
# from pulpcore.app.util import init_domain_metrics_exporter # noqa: E402

# init_domain_metrics_exporter()

0 comments on commit deff405

Please sign in to comment.