Skip to content

Commit

Permalink
Merge pull request #175 from BraunRudolf/add/log_memory_usage
Browse files Browse the repository at this point in the history
Add/log memory usage
  • Loading branch information
peterdudfield authored Jun 27, 2024
2 parents 1ebc117 + 6033006 commit 560a566
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 3 deletions.
44 changes: 42 additions & 2 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion pv_site_api/cache.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
""" Caching utils for api"""

import json
import os
from datetime import datetime, timedelta, timezone
from functools import wraps

import psutil
import structlog
from pvsite_datamodel.read.user import get_user_by_email
from pvsite_datamodel.write.database import save_api_call_to_db
Expand All @@ -22,7 +24,7 @@ def remove_old_cache(
"""
Remove old cache entries from the cache
:param last_updated: dict of last updated times
:param last_updated: dict of last updatedtimes
:param response: dict of responses, same keys as last_updated
:param remove_cache_time_seconds: the amount of time, after which the cache should be removed
"""
Expand All @@ -38,6 +40,9 @@ def remove_old_cache(
last_updated.pop(key)
response.pop(key)

process = psutil.Process(os.getpid())
logger.debug(f"Memory is {process.memory_info().rss / 10 ** 6} MB")

return last_updated, response


Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ structlog = "^22.3.0"
pyjwt = {extras = ["crypto"], version = "^2.6.0"}
pvsite-datamodel = "1.0.19"
geopandas = "^0.14.2"
psutil = "^6.0.0"

[tool.poetry.group.dev.dependencies]
isort = "^5.12.0"
Expand Down
67 changes: 67 additions & 0 deletions tests/test_cache.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
""" Test for chach """

import logging
from datetime import datetime, timedelta, timezone

import structlog

from pv_site_api.cache import remove_old_cache


def get_logger():
"""
Configure structlog to use caplog-compatible output
"""

structlog.configure(
processors=[
structlog.stdlib.add_log_level,
structlog.stdlib.PositionalArgumentsFormatter(),
structlog.processors.StackInfoRenderer(),
structlog.processors.format_exc_info,
structlog.dev.ConsoleRenderer(),
],
logger_factory=structlog.stdlib.LoggerFactory(),
)
return structlog.get_logger()


logger = get_logger()


def test_remove_old_cache(caplog):
"""
Test entry removal and debug messages
"""
with caplog.at_level(logging.DEBUG):
now = datetime.now(tz=timezone.utc)
last_updated = {
"key1": now - timedelta(seconds=160),
"key2": now - timedelta(seconds=180),
"key3": now - timedelta(seconds=60),
}

response = {
"key1": "response1",
"key2": "response2",
"key3": "response3",
}

remove_cache_time_seconds = 120
remove_old_cache(last_updated, response, remove_cache_time_seconds)

assert "key1" not in last_updated
assert "key2" not in last_updated
assert "key3" in last_updated

assert "key1" not in response
assert "key2" not in response
assert "key3" in response
expected_debug_messages = [
"Removing key1 from cache, (",
"Removing key2 from cache, (",
"Memory is ",
]

for message in expected_debug_messages:
assert any(message in rec.message for rec in caplog.records)

0 comments on commit 560a566

Please sign in to comment.