Case 1
Location search based on country (iso2 or Name)
In location API, tried to load 500 outlets in the country by (iso2)
URL: https://replica.psi-mis.org/locator/api/1?iso2={country ISO}&number=500
Similarly, in FHIR, we tried to load 500 locations in that country and measured the time taken to get the response back.
URL: https://fhir-dev.psi-mis.org/fhir?address-country={country_name}&_count=500
Summary of test results
| DHIS2 | FHIR | DHIS2 vs FHIR % |
|
---|---|---|---|---|
Average | 0.554281 | 0.555023 | -0.13% |
|
Test detailed results
logged on Dec 1/ 2022 UTC-7 08:40:00
Performance Testing for | Attempt | DHIS2 API | FHIR API | FHIR API (with HealthcareServices), | Improvement % |
---|---|---|---|---|---|
El Salvador | Attempt - 1 | 0.566667 | 0.488375 | 0.487989 | 16.03% |
| Attempt - 2 | 0.532607 | 0.437886 | 0.548295 | 21.63% |
| Attempt - 3 | 0.532142 | 0.452103 | 0.463129 | 17.7% |
Kenya | Attempt - 1 | 0.657443 | 0.604362 | 0.625961 | 8.78% |
| Attempt - 2 | 0.655574 | 0.578361 | 0.574557 | 13.35% |
| Attempt - 3 | 0.659164 | 0.573111 | 0.663475 | 15.02% |
Nigeria | Attempt - 1 | 0.526847 | 0.570136 | 0.651838 | -7.59% |
| Attempt - 2 | 0.528978 | 0.588868 | 0.620271 | -10.17% |
| Attempt - 3 | 0.536548 | 0.568277 | 0.70342 | -5.58% |
Cameroon | Attempt - 1 | 0.372636 | 0.587497 | 0.590178 | -36.57% |
| Attempt - 2 | 0.371032 | 0.584348 | 0.595724 | -36.5% |
| Attempt - 3 | 0.371502 | 0.558964 | 0.585595 | -33.54% |
Nepal | Attempt - 1 | 0.662525 | 0.612458 | 0.682753 | 8.17% |
| Attempt - 2 | 0.670834 | 0.56743 | 0.571592 | 18.22% |
| Attempt - 3 | 0.669719 | 0.553174 | 0.584597 | 21.07% |
Overall Average |
| 0.554281 | 0.555023 | 0.596625 | -0.13% |
Testing Script
##Case 1
case_1_results = [{"description": "Performance Testing for", "attempt": "Attempt", "dhis2": "DHIS2 API", "fhir": "FHIR API", "fhir_with_healthcareServices": "FHIR API (with HealthcareServices),", "improvement":"Improvement %"}]
print("Case #1 - Getting 500 orgUnits/Location in the country (by ISO)")
improvements = []
dhis2_performances = []
fhir_hsc_performances = []
fhir_performances = []
for country in countries:
for i in range(1,4):
case_1_result = {}
if i == 1:
case_1_result['description'] = "{}".format(country['name'])
case_1_result['attempt'] = "Attempt - {}".format(i)
dhis2_url = dhis2_base_url+'iso2={}&number=500'.format(country['code'])
result = requests.get(dhis2_url, auth=dhis2_auth)
if result.status_code == 200:
dhis2_performances.append(result.elapsed.total_seconds())
case_1_result['dhis2'] = dhis2_performances[-1]
request_url = fhir_location_url+'address-country={}&_count=500'.format(country['name'])
fhirResult = requests.get(request_url, auth=fhir_auth)
if fhirResult.status_code == 200:
fhir_performances.append(fhirResult.elapsed.total_seconds())
case_1_result['fhir'] = fhir_performances[-1]
request_healthcare_url = fhir_location_url+'address-country={}&_count=500&_revinclude=HealthcareService:location'.format(country['name'])
fhirHealthcareServicesResult = requests.get(request_healthcare_url, auth=fhir_auth)
if fhirHealthcareServicesResult.status_code == 200:
fhir_hsc_performances.append(fhirHealthcareServicesResult.elapsed.total_seconds())
case_1_result['fhir_with_healthcareServices'] = fhir_hsc_performances[-1]
improvements.append(((case_1_result['dhis2'] / case_1_result['fhir']) - 1)*100)
case_1_result['improvement'] = '{}%'.format(float("{:.2f}".format(improvements[-1])))
case_1_results.append(case_1_result)
time.sleep(0.01)
case_1_result = {}
case_1_result['description'] = "Overall Average"
case_1_result['dhis2'] = np.average(dhis2_performances)
case_1_result['fhir'] = np.average(fhir_performances)
case_1_result['fhir_with_healthcareServices'] = np.average(fhir_hsc_performances)
case_1_result['improvement'] = '{}%'.format(float("{:.2f}".format(((case_1_result['dhis2']/case_1_result['fhir'])-1)*100)))
case_1_results.append(case_1_result)
print(tabulate(case_1_results, headers='firstrow', tablefmt='pipe'))