Skip to content

Commit 892811c

Browse files
committed
⚡ [#469] Reduce DB and HTTPs connections
- Avoid retrieving the selectielijst service for each zaak - Take advantage of connection pooling by sharing client between zaken
1 parent c583f69 commit 892811c

File tree

2 files changed

+54
-20
lines changed

2 files changed

+54
-20
lines changed

backend/src/openarchiefbeheer/zaken/tasks.py

+32-18
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
from zgw_consumers.models import Service
1111

1212
from openarchiefbeheer.celery import app
13+
from openarchiefbeheer.config.models import APIConfig
1314
from openarchiefbeheer.destruction.utils import resync_items_and_zaken
1415
from openarchiefbeheer.logging import logevent
1516

1617
from .api.serializers import ZaakSerializer
1718
from .decorators import log_errors
1819
from .models import Zaak
19-
from .utils import pagination_helper, process_expanded_data
20+
from .utils import NoClient, pagination_helper, process_expanded_data
2021

2122
logger = logging.getLogger(__name__)
2223

@@ -26,6 +27,10 @@ def retrieve_and_cache_zaken_from_openzaak() -> None:
2627
zrc_service = Service.objects.get(api_type=APITypes.zrc)
2728
zrc_client = build_client(zrc_service)
2829

30+
config = APIConfig.get_solo()
31+
service = config.selectielijst_api_service
32+
selectielijst_api_client = build_client(service) if service else None
33+
2934
today = datetime.date.today()
3035
query_params = {
3136
"expand": "resultaat,resultaat.resultaattype,zaaktype,rollen",
@@ -53,24 +58,27 @@ def retrieve_and_cache_zaken_from_openzaak() -> None:
5358
timeout=settings.REQUESTS_DEFAULT_TIMEOUT,
5459
)
5560

56-
for index, data in enumerate(data_iterator):
57-
logger.info("Retrieved page %s.", index + 1)
61+
with selectielijst_api_client or NoClient():
62+
for index, data in enumerate(data_iterator):
63+
logger.info("Retrieved page %s.", index + 1)
5864

59-
zaken = process_expanded_data(data["results"])
65+
zaken = data["results"]
66+
if selectielijst_api_client:
67+
zaken = process_expanded_data(zaken, selectielijst_api_client)
6068

61-
# Since before we indexed also zaken without einddatum, prevent
62-
# crash when retrieving zaken.
63-
if zaken_in_db:
64-
new_zaken = {zaak["url"]: zaak for zaak in zaken}
65-
duplicates = Zaak.objects.filter(url__in=new_zaken.keys())
66-
if duplicates.exists():
67-
for duplicate in duplicates:
68-
del new_zaken[duplicate.url]
69-
zaken = [zaak for zaak in new_zaken.values()]
69+
# Since before we indexed also zaken without einddatum, prevent
70+
# crash when retrieving zaken.
71+
if zaken_in_db:
72+
new_zaken = {zaak["url"]: zaak for zaak in zaken}
73+
duplicates = Zaak.objects.filter(url__in=new_zaken.keys())
74+
if duplicates.exists():
75+
for duplicate in duplicates:
76+
del new_zaken[duplicate.url]
77+
zaken = [zaak for zaak in new_zaken.values()]
7078

71-
serializer = ZaakSerializer(data=zaken, many=True)
72-
serializer.is_valid(raise_exception=True)
73-
serializer.save()
79+
serializer = ZaakSerializer(data=zaken, many=True)
80+
serializer.is_valid(raise_exception=True)
81+
serializer.save()
7482

7583

7684
@app.task
@@ -87,8 +95,12 @@ def resync_zaken():
8795
"einddatum__lt": today.isoformat(),
8896
}
8997

98+
config = APIConfig.get_solo()
99+
service = config.selectielijst_api_service
100+
selectielijst_api_client = build_client(service) if service else None
101+
90102
logevent.resync_started()
91-
with transaction.atomic(), zrc_client:
103+
with transaction.atomic(), zrc_client, selectielijst_api_client or NoClient():
92104
Zaak.objects.all().delete()
93105

94106
response = zrc_client.get(
@@ -109,7 +121,9 @@ def resync_zaken():
109121
for index, data in enumerate(data_iterator):
110122
logger.info("Retrieved page %s.", index + 1)
111123

112-
zaken = process_expanded_data(data["results"])
124+
zaken = data["results"]
125+
if selectielijst_api_client:
126+
zaken = process_expanded_data(zaken, selectielijst_api_client)
113127

114128
serializer = ZaakSerializer(data=zaken, many=True)
115129
serializer.is_valid(raise_exception=True)

backend/src/openarchiefbeheer/zaken/utils.py

+22-2
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,26 @@ def get_resource(url: str) -> dict | None:
6161
return data
6262

6363

64-
def process_expanded_data(zaken: list[dict]) -> list[dict]:
64+
def get_resource_with_prebuilt_client(url: str, client: APIClient) -> dict | None:
65+
response = client.get(url)
66+
response.raise_for_status()
67+
data = response.json()
68+
69+
return data
70+
71+
72+
def process_expanded_data(
73+
zaken: list[dict], selectielijst_api_client: APIClient
74+
) -> list[dict]:
6575
def expand_procestype(zaak: dict) -> dict:
6676
if "_expand" not in zaak:
6777
return zaak
6878

6979
extra_data = zaak["_expand"]
7080
if procestype_url := extra_data["zaaktype"].get("selectielijst_procestype"):
71-
expanded_procestype = get_resource(procestype_url)
81+
expanded_procestype = get_resource_with_prebuilt_client(
82+
procestype_url, selectielijst_api_client
83+
)
7284
if expanded_procestype is not None:
7385
extra_data["zaaktype"]["selectielijst_procestype"] = expanded_procestype
7486

@@ -391,3 +403,11 @@ def retrieve_zaaktypen(query_params: HashableDict | None = None) -> list[dict]:
391403
results += page["results"]
392404

393405
return results
406+
407+
408+
class NoClient:
409+
def __enter__(self):
410+
return None
411+
412+
def __exit__(self, *args):
413+
return None

0 commit comments

Comments
 (0)