Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Intervention Loaders #358

Draft
wants to merge 35 commits into
base: improve_slow_loaders_ph2
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
5dcfe0f
improve fm_question and intervention loaders
Jun 4, 2024
108a545
improve partner loader
Jun 5, 2024
4d6e29d
add missing condition in selection
Jun 5, 2024
ed2d27d
fix query
Jun 6, 2024
1a4fdd1
major improvement on intervention and minor update for partner
Jun 6, 2024
88ac53c
improvements in agreement loader
Jun 17, 2024
3ff5f7e
improvements for interventionbudget
Jun 17, 2024
be2bd83
improvements for data.engagement
Jun 18, 2024
f60e903
resolve conflict after rebase
Jul 4, 2024
dc1b8a5
sort in descending order to get the oldest item as the first item
Jul 4, 2024
4e5bc32
improve NestedLocationLoaderMixin queries
emaciupe Jul 8, 2024
59c92de
speed up intervention loader
emaciupe Jul 8, 2024
82c7b53
fix location_m2m_field
emaciupe Jul 8, 2024
7735ac3
appy prefetch to reduce number of sql statements
Jul 9, 2024
f99dc38
fix code format issues
Jul 9, 2024
590c0e1
improve fm_question and intervention loaders
Jun 4, 2024
83c6a95
improve partner loader
Jun 5, 2024
fffa8bd
add missing condition in selection
Jun 5, 2024
b366630
fix query
Jun 6, 2024
aea3490
major improvement on intervention and minor update for partner
Jun 6, 2024
56ce759
improvements in agreement loader
Jun 17, 2024
9c10a57
improvements for interventionbudget
Jun 17, 2024
7b50a13
improvements for data.engagement
Jun 18, 2024
6abec9f
resolve conflict after rebase
Jul 4, 2024
5ff3857
sort in descending order to get the oldest item as the first item
Jul 4, 2024
1c4249b
appy prefetch to reduce number of sql statements
Jul 9, 2024
da14de1
fix code format issues
Jul 9, 2024
ad41ae9
Merge branch 'improve_slow_loaders_ph2' of https://github.com/unicef/…
Jul 9, 2024
3d25e34
resolve conflicts
Jul 9, 2024
ca1bc92
revert back the changes on fmquestions to keep bulk update feature
Jul 9, 2024
ef757a8
fix text CHANGES
Jul 9, 2024
50af751
intervention etl: batch create or update
emaciupe Jul 9, 2024
f587802
Merge branch 'improve_slow_loaders_ph2' of github.com:unicef/etools-d…
emaciupe Jul 9, 2024
e87fa7d
merge issue: correct version
emaciupe Jul 9, 2024
1dad96e
revert aggregation for get_outstanding_amt_local; minor tweaks and cl…
emaciupe Jul 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion CHANGES
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
4.6.1
4.7
----
* Improvements on data.intervention
* Page size increase for speed up
* Improvement on data.partner by preetching related T2FTravelactivity
* Improvement on data.agreement (partners)
* Improvement on data.interventionbudget (partners)
* Improvement on data.engagement

4.6.1
----
* Fix loaders delta logic
* Increased PDIndicator.section_name field length
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile-dev
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ ENV PYTHONUNBUFFERED 1
COPY Pipfile .
COPY Pipfile.lock .

RUN pipenv install --ignore-pipfile --system
RUN pipenv install --ignore-pipfile --dev --system

EXPOSE 8000

38 changes: 7 additions & 31 deletions docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ x-devdatamart-defaults: &devdatamart_defaults
- db
- redis
volumes:
- "$PWD:/code"
- "./:/code"
environment:
DEBUG: 0
DATABASE_URL: postgis://postgres:@db:5432/etools_datamart
#NOTE: Please update ETOOLS DB server IP/name and port specific to your enviroment.
DATABASE_URL_ETOOLS: postgis://postgres:@192.168.24.151:5442/etools
DATABASE_URL_PRP: postgis://postgres:@db-prp:5432/prp
DATABASE_URL_ETOOLS: postgis://postgres:@192.168.0.106:25432/etools
DATABASE_URL_PRP: postgis://postgres:@192.168.0.106:35432/prp
AUTOCREATE_USERS: "admin,123"
CACHE_URL: "redis://redis:6379/1"
CACHE_URL_LOCK: "redis://redis:6379/1"
Expand Down Expand Up @@ -55,22 +55,22 @@ services:
- traefik.http.services.datamart.loadBalancer.server.port=8080
- traefik.enable=true
volumes:
- $PWD:/code
- ./:/code
beat:
container_name: datamart_beat
<< : *devdatamart_defaults
working_dir: /code/src
command: celery -A etools_datamart beat --loglevel=debug
volumes:
- $PWD:/code
- ./:/code

worker:
container_name: datamart_worker
<< : *devdatamart_defaults
working_dir: /code/src
command: celery -A etools_datamart worker --loglevel=debug
volumes:
- $PWD:/code
- ./:/code

db:
image: postgis/postgis:12-3.2
Expand All @@ -84,31 +84,7 @@ services:
POSTGRES_DB: etools_datamart
volumes:
- "$PWD/build/db:/var/lib/postgresql/data"

# Rely on etools and prp database instances running locally
#db-etools:
# image: postgis/postgis:12-3.2
# container_name: datamart_etools
# shm_size: '1gb'
# environment:
# POSTGRES_USER: postgres
# POSTGRES_PASSWORD:
# POSTGRES_DB: etools
# volumes:
# - "$PWD/build/etools:/var/lib/postgresql/data"

db-prp:
image: postgis/postgis:12-3.2
shm_size: '1gb'
container_name: datamart_prp
environment:
POSTGRES_HOST_AUTH_METHOD: trust
#POSTGRES_USER: postgres
#POSTGRES_PASSWORD:
POSTGRES_DB: prp
volumes:
- "$PWD/build/prp:/var/lib/postgresql/data"


redis:
image: redis:alpine
container_name: datamart_redis
40 changes: 31 additions & 9 deletions src/etools_datamart/apps/mart/data/models/audit_engagement.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.contrib.postgres.fields import ArrayField
from django.core.paginator import Paginator
from django.db import models
from django.db.models import Count, JSONField
from django.db.models import Count, JSONField, Prefetch
from django.utils.translation import gettext as _

from model_utils import Choices
Expand All @@ -15,6 +15,7 @@
AuditAudit,
AuditEngagement,
AuditEngagementActivePd,
AuditEngagementSections,
AuditMicroassessment,
AuditRisk,
AuditSpecialaudit,
Expand Down Expand Up @@ -214,7 +215,7 @@ def get_authorized_officers(self, record: AuditEngagement, values: dict, **kwarg

def get_active_pd(self, record: AuditEngagement, values: dict, **kwargs):
ret = []
for o in AuditEngagementActivePd.objects.select_related("intervention").filter(engagement=record):
for o in record.prefetched_AuditEngagementActivePds:
ret.append(
{
"title": o.intervention.title,
Expand Down Expand Up @@ -253,15 +254,17 @@ def get_action_points(self, record: AuditEngagement, values: dict, **kwargs):
from etools_datamart.api.endpoints.datamart.actionpoint import ActionPointSimpleSerializer

ret = []
for r in ActionPointsActionpoint.objects.filter(engagement=record).all():
for r in record.prefetched_ActionPoints:
ret.append(ActionPointSimpleSerializer(r).data)
return ret

def get_key_internal_control_weaknesses(self, record: AuditEngagement, values: dict, **kwargs):
qs = AuditRisk.objects.filter(
blueprint__category__header="Key Internal Controls Weaknesses", engagement_id=record.id
)
return [risk.blueprint.header for risk in qs]
risks = []

for risk in record.prefetched_AuditRisks:
risks.append(risk.blueprint.header)

return risks

def process_country(self):
# TODO: Analyze more before batch processing
Expand All @@ -271,12 +274,31 @@ def process_country(self):
"engagement_ptr__partner",
"engagement_ptr__agreement",
"engagement_ptr__agreement__auditor_firm",
"engagement_ptr__agreement__auditor_firm__organization",
"engagement_ptr__po_item",
).prefetch_related(
"engagement_ptr__authorized_officers",
"engagement_ptr__staff_members",
"engagement_ptr__AuditEngagementSections_engagement",
"engagement_ptr__AuditEngagementOffices_engagement",
Prefetch(
"engagement_ptr__AuditEngagementSections_engagement",
AuditEngagementSections.objects.all(),
to_attr="prefetched_AuditEngagementSections",
),
Prefetch(
"engagement_ptr__ActionPointsActionpoint_engagement",
ActionPointsActionpoint.objects.all(),
to_attr="prefetched_ActionPoints",
),
Prefetch(
"engagement_ptr__AuditEngagementActivePd_engagement",
AuditEngagementActivePd.objects.all(),
to_attr="prefetched_AuditEngagementActivePds",
),
Prefetch(
"engagement_ptr__AuditRisk_engagement",
AuditRisk.objects.filter(blueprint__category__header="Key Internal Controls Weaknesses"),
to_attr="prefetched_AuditRisks",
),
):
record.id = record.engagement_ptr_id
record.sub_type = m
Expand Down
Loading