Activity metrics in json - #2726
Merged
Merged
Conversation
fbacall
requested changes
Aug 26, 2026
fbacall
left a comment
Contributor
There was a problem hiding this comment.
You'll also need to update the API schema to detail these changes:
seek/public/api/definitions/_schemas.yml
Line 325 in 16cb930
it will probably need a new "type" defined for the metrics
Contributor
There was a problem hiding this comment.
Pull request overview
Adds activity metrics (“Views”, “Downloads”, “Runs”) to the JSON:API resource-level meta payload for contributed resources, aligning the API output with the existing UI “Activity” panel and issue #2027.
Changes:
- Extend
ContributedResourceSerializerto emitmeta.metrics.view_count, and conditionallydownload_count/run_count. - Add a functional test covering metrics presence/shape for workflows (runnable vs non-runnable).
- Update OpenAPI schemas and refresh the public JSON example payloads to reflect the new
meta.metricsfield (and regenerated IDs/formatting).
Reviewed changes
Copilot reviewed 133 out of 133 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| app/serializers/contributed_resource_serializer.rb | Adds meta.metrics with view/download/run counts (conditional for downloads/runs). |
| public/api/definitions/_schemas.yml | Documents meta.metrics and adds a metrics schema. |
| test/functional/workflows_controller_test.rb | Adds controller tests asserting metrics appear in workflow JSON output. |
| public/api/examples/workflowsResponse.json | Regenerated example response formatting (empty data array). |
| public/api/examples/workflowPost.json | Regenerated example IDs. |
| public/api/examples/workflowPatch.json | Regenerated example IDs. |
| public/api/examples/studyResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/studyPostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/studyPost.json | Regenerated example IDs. |
| public/api/examples/studyPatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/studyPatch.json | Regenerated example IDs. |
| public/api/examples/studiesResponse.json | Regenerated example IDs/titles. |
| public/api/examples/sopsResponse.json | Regenerated example IDs. |
| public/api/examples/sopResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/sopPostResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/sopPost.json | Regenerated example IDs. |
| public/api/examples/sopPatch.json | Regenerated example IDs. |
| public/api/examples/sampleTypesResponse.json | Regenerated example response formatting (empty data array). |
| public/api/examples/sampleTypePostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/sampleTypePost.json | Regenerated example IDs/titles. |
| public/api/examples/sampleTypePatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/sampleTypePatch.json | Regenerated example IDs/formatting. |
| public/api/examples/sampleResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/samplePostResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/samplePost.json | Regenerated example IDs. |
| public/api/examples/samplePatchResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/samplePatch.json | Regenerated example IDs/formatting. |
| public/api/examples/sampleControlledVocabPostResponse.json | Regenerated example IDs. |
| public/api/examples/sampleControlledVocabPatchResponse.json | Regenerated example IDs. |
| public/api/examples/sampleControlledVocabPatch.json | Regenerated example IDs. |
| public/api/examples/publicationsResponse.json | Regenerated example IDs. |
| public/api/examples/projectPostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/projectPost.json | Regenerated example IDs. |
| public/api/examples/projectPatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/projectPatch.json | Regenerated example IDs. |
| public/api/examples/programmesResponse.json | Regenerated example IDs/titles. |
| public/api/examples/programmeResponse.json | Regenerated example IDs. |
| public/api/examples/programmePostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/programmePost.json | Regenerated example IDs. |
| public/api/examples/programmePatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/programmePatch.json | Regenerated example IDs. |
| public/api/examples/presentationsResponse.json | Regenerated example response formatting (empty data array). |
| public/api/examples/presentationPostResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/presentationPost.json | Regenerated example IDs. |
| public/api/examples/presentationPatch.json | Regenerated example IDs. |
| public/api/examples/personResponse.json | Regenerated example IDs. |
| public/api/examples/personPostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/personPost.json | Regenerated example IDs/emails. |
| public/api/examples/personPatchResponse.json | Regenerated example IDs. |
| public/api/examples/personPatch.json | Regenerated example IDs. |
| public/api/examples/peopleResponse.json | Regenerated example IDs/titles. |
| public/api/examples/organismsResponse.json | Regenerated example IDs. |
| public/api/examples/organismResponse.json | Regenerated example IDs. |
| public/api/examples/observationUnitsResponse.json | Regenerated example IDs. |
| public/api/examples/observationUnitResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/observationUnitPostResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/observationUnitPost.json | Regenerated example IDs. |
| public/api/examples/observationUnitPatchResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/observationUnitPatch.json | Regenerated example IDs. |
| public/api/examples/modelsResponse.json | Regenerated example response formatting (empty data array). |
| public/api/examples/modelPost.json | Regenerated example IDs. |
| public/api/examples/modelPatch.json | Regenerated example IDs. |
| public/api/examples/isaTagResponse.json | Regenerated example IDs. |
| public/api/examples/investigationsResponse.json | Regenerated example IDs/titles. |
| public/api/examples/investigationResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/investigationPostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/investigationPost.json | Regenerated example IDs. |
| public/api/examples/investigationPatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/investigationPatch.json | Regenerated example IDs. |
| public/api/examples/institutionsResponse.json | Regenerated example IDs/titles. |
| public/api/examples/institutionResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/institutionPostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/institutionPatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/institutionPatch.json | Regenerated example IDs. |
| public/api/examples/humanDiseaseResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/fileTemplatesResponse.json | Regenerated example IDs. |
| public/api/examples/fileTemplateResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/fileTemplatePostResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/fileTemplatePost.json | Regenerated example IDs. |
| public/api/examples/fileTemplatePatchResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/fileTemplatePatch.json | Regenerated example IDs. |
| public/api/examples/extendedMetadataTypesResponse.json | Regenerated example IDs. |
| public/api/examples/extendedMetadataTypeResponse.json | Regenerated example IDs. |
| public/api/examples/eventsResponse.json | Regenerated example response formatting (empty data array). |
| public/api/examples/eventResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/eventPostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/eventPost.json | Regenerated example IDs. |
| public/api/examples/eventPatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/eventPatch.json | Regenerated example IDs. |
| public/api/examples/documentsResponse.json | Regenerated example IDs. |
| public/api/examples/documentPost.json | Regenerated example IDs. |
| public/api/examples/documentPatch.json | Regenerated example IDs. |
| public/api/examples/dataFilesResponse.json | Regenerated example response formatting (empty data array). |
| public/api/examples/dataFilePost.json | Regenerated example IDs. |
| public/api/examples/dataFilePatch.json | Regenerated example IDs. |
| public/api/examples/contentBlobResponse.json | Regenerated example IDs/links. |
| public/api/examples/collectionsResponse.json | Regenerated example IDs. |
| public/api/examples/collectionPostResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/collectionPost.json | Regenerated example IDs. |
| public/api/examples/collectionPatchResponse.json | Adds meta.metrics in example + regenerates IDs/timestamps. |
| public/api/examples/collectionPatch.json | Regenerated example IDs. |
| public/api/examples/collectionItemsResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/collectionItemResponse.json | Regenerated example IDs/timestamps. |
| public/api/examples/collectionItemPostResponse.json | Regenerated example IDs/timestamps. |
| public/api/examples/collectionItemPost.json | Regenerated example IDs. |
| public/api/examples/collectionItemPatchResponse.json | Regenerated example IDs/timestamps. |
| public/api/examples/collectionItemPatch.json | Regenerated example IDs. |
| public/api/examples/assaysResponse.json | Regenerated example response formatting (empty data array). |
| public/api/examples/assayResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/assayPostResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/assayPost.json | Regenerated example IDs. |
| public/api/examples/assayPatchResponse.json | Regenerated example IDs/formatting. |
| public/api/examples/assayPatch.json | Regenerated example IDs/formatting. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
fbacall
approved these changes
Sep 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #2027
This adds the view, run and download counts to the
metaproperty of the json serialisation. It only adds them if they exist (using the same check as in_usage_info_box.erb), so these properties shouldn't appear when not necessary.