Skip to content

Commit

Permalink
Merge pull request #238 from unicef-drp/investigate-ephemeral-storage
Browse files Browse the repository at this point in the history
Investigate ephemeral storage
  • Loading branch information
danangmassandy authored Oct 7, 2024
2 parents 4ff482c + 02d726c commit 21241e0
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 2 deletions.
5 changes: 5 additions & 0 deletions django_project/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@ class SitePreferencesAdmin(admin.ModelAdmin):
'fields': (
'login_help_text',
)
}),
('Logging', {
'fields': (
'ephemeral_paths',
)
})
)
inlines = (SitePreferencesImageInline,)
Expand Down
3 changes: 2 additions & 1 deletion django_project/core/middleware/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from .VersionMiddleware import VersionMiddleware
from .version import VersionMiddleware
from .ephemeral import EphemeralMiddleware
42 changes: 42 additions & 0 deletions django_project/core/middleware/ephemeral.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import subprocess
from sentry_sdk import capture_message, configure_scope

from core.models import SitePreferences


def du(paths):
"""disk usage for each path"""
cmd = ['du', '-sc']
cmd.extend(paths)
bytes_arr = subprocess.check_output(cmd).splitlines()
return [b.decode('utf-8') for b in bytes_arr]


class EphemeralMiddleware:
"""Add Ephemeral information after API call."""

def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request):
response = self.get_response(request)
pref = SitePreferences.preferences()
if not pref.ephemeral_paths:
return response

resolver_match = getattr(request, 'resolver_match', None)
possible_versions = []
if resolver_match and resolver_match.namespace:
possible_versions = resolver_match.namespace.split(':')

# check for layer tiles path
is_layer_tiles = '/layer_tiles/' in request.path
if possible_versions or is_layer_tiles:
with configure_scope() as scope:
sizes = du(pref.ephemeral_paths)
for size in sizes:
splits = size.split()
if len(splits) == 2:
scope.set_extra(splits[1], splits[0])
capture_message('Ephemeral Storage Event')
return response
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0.7 on 2024-10-07 11:44

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0032_sitepreferences_login_help_text'),
]

operations = [
migrations.AddField(
model_name='sitepreferences',
name='ephemeral_paths',
field=models.JSONField(blank=True, default=list, help_text='List of path to monitor the size and send to sentry.', null=True),
),
]
9 changes: 9 additions & 0 deletions django_project/core/models/preferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,15 @@ class SitePreferences(SingletonModel):
),
)

ephemeral_paths = models.JSONField(
default=list,
blank=True,
null=True,
help_text=(
'List of path to monitor the size and send to sentry.'
)
)

class Meta: # noqa: D106
verbose_name_plural = "site preferences"

Expand Down
3 changes: 2 additions & 1 deletion django_project/core/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'core.middleware.VersionMiddleware'
'core.middleware.VersionMiddleware',
'core.middleware.EphemeralMiddleware'
]

ROOT_URLCONF = 'core.urls'
Expand Down

1 comment on commit 21241e0

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage report for django_project/dashboard

St.
Category Percentage Covered / Total
🔴 Statements 5.16% 520/10077
🔴 Branches 0.72% 39/5421
🔴 Functions 2.38% 59/2478
🔴 Lines 5.24% 514/9811

Test suite run success

12 tests passing in 5 suites.

Report generated by 🧪jest coverage report action from 21241e0

Please sign in to comment.