Skip to content

Commit

Permalink
Add new values to output and update form version
Browse files Browse the repository at this point in the history
  • Loading branch information
ktuite committed Sep 25, 2024
1 parent 1f9ea63 commit ebeb0ba
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 3 deletions.
2 changes: 1 addition & 1 deletion config/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"analytics": {
"url": "https://data.getodk.cloud/v1/key/eOZ7S4bzyUW!g1PF6dIXsnSqktRuewzLTpmc6ipBtRq$LDfIMTUKswCexvE0UwJ9/projects/1/forms/odk-analytics/submissions",
"formId": "odk-analytics",
"version": "v2024.1.0_1"
"version": "v2024.2.0_1"
},
"s3blobStore": {}
}
Expand Down
7 changes: 6 additions & 1 deletion lib/data/analytics.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,12 @@ const metricsTemplate = {
"num_client_audit_rows": 0,
"num_audits_failed": 0,
"num_audits_failed5": 0,
"num_audits_unprocessed": 0
"num_audits_unprocessed": 0,
"num_offline_entity_branches": 0,
"num_offline_entity_interrupted_branches": 0,
"num_offline_entity_submissions_reprocessed": 0,
"max_entity_submission_delay": 0,
"avg_entity_submission_delay": 0
},
"projects": [
{
Expand Down
12 changes: 12 additions & 0 deletions lib/model/query/analytics.js
Original file line number Diff line number Diff line change
Expand Up @@ -738,10 +738,15 @@ const previewMetrics = () => (({ Analytics }) => Promise.all([
Analytics.countClientAuditAttachments(),
Analytics.countClientAuditProcessingFailed(),
Analytics.countClientAuditRows(),
Analytics.countOfflineBranches(),
Analytics.countInterruptedBranches(),
Analytics.countSubmissionReprocess(),
Analytics.measureEntityProcessingTime(),
Analytics.projectMetrics()
]).then(([db, encrypt, bigForm, admins, audits,
archived, managers, viewers, collectors,
caAttachments, caFailures, caRows,
oeBranches, oeInterruptedBranches, oeSubReprocess, oeProcessingTime,
projMetrics]) => {
const metrics = clone(metricsTemplate);
// system
Expand Down Expand Up @@ -776,6 +781,13 @@ const previewMetrics = () => (({ Analytics }) => Promise.all([
metrics.system.num_audits_unprocessed = audits.unprocessed;
metrics.system.sso_enabled = oidc.isEnabled() ? 1 : 0;

// 2024.2.0 offline entity metrics
metrics.system.num_offline_entity_branches = oeBranches;
metrics.system.num_offline_entity_interrupted_branches = oeInterruptedBranches;
metrics.system.num_offline_entity_submissions_reprocessed = oeSubReprocess;
metrics.system.max_entity_submission_delay = oeProcessingTime.max_wait;
metrics.system.avg_entity_submission_delay = oeProcessingTime.avg_wait;

return metrics;
}));

Expand Down
64 changes: 63 additions & 1 deletion test/integration/other/analytics-queries.js
Original file line number Diff line number Diff line change
Expand Up @@ -1902,6 +1902,69 @@ describe('analytics task queries', function () {
const event = (await container.Audits.getLatestByAction('submission.attachment.update')).get();
await container.run(sql`update audits set failures = 5 where id = ${event.id}`);


// 2024.2 offline entity metrics

// create the form
await asAlice.post('/v1/projects/1/forms?publish=true')
.set('Content-Type', 'application/xml')
.send(testData.forms.offlineEntity)
.expect(200);

// Creating an update chain
// API create
// update 2, update 1, (out of order reprocessing)
// API update (interrupt branch)
// update 3
const branchId = uuid();

await asAlice.post('/v1/projects/1/datasets/people/entities')
.send({
uuid: '12345678-1234-4123-8234-123456789abc',
label: 'abc',
})
.expect(200);

// switching the order of these updates triggers the
// submission.reprocess count
await asAlice.post('/v1/projects/1/forms/offlineEntity/submissions')
.send(testData.instances.offlineEntity.one
.replace('one', 'one-update2')
.replace('baseVersion="1"', 'baseVersion="2"')
.replace('branchId=""', `branchId="${branchId}"`)
)
.set('Content-Type', 'application/xml')
.expect(200);

await asAlice.post('/v1/projects/1/forms/offlineEntity/submissions')
.send(testData.instances.offlineEntity.one
.replace('one', 'one-update1')
.replace('branchId=""', `branchId="${branchId}"`)
)
.set('Content-Type', 'application/xml')
.expect(200);

await exhaust(container);

// inserting an API update before continuing the branch triggers
// the interrupted branch count
await asAlice.patch('/v1/projects/1/datasets/people/entities/12345678-1234-4123-8234-123456789abc?baseVersion=3')
.send({ label: 'abc update' })
.expect(200);

await asAlice.post('/v1/projects/1/forms/offlineEntity/submissions')
.send(testData.instances.offlineEntity.one
.replace('one', 'one-update3')
.replace('baseVersion="1"', 'baseVersion="3"')
.replace('branchId=""', `branchId="${branchId}"`)
)
.set('Content-Type', 'application/xml')
.expect(200);

await exhaust(container);

// After the interesting stuff above, encrypt and archive the project

// encrypting a project
await asAlice.post('/v1/projects/1/key')
.send({ passphrase: 'supersecret', hint: 'it is a secret' });
Expand All @@ -1927,7 +1990,6 @@ describe('analytics task queries', function () {
(null, 'dummy.action', null, null, '1999-1-1', 5),
(null, 'dummy.action', null, null, '1999-1-1', 0)`);


const res = await container.Analytics.previewMetrics();

// can't easily test this metric
Expand Down

0 comments on commit ebeb0ba

Please sign in to comment.