Introduction
...
URL: http[s]:<host>:<port>/openspecimen/rest/ng/dashlet-configs
URL | http://<host>:<port>/ openspecimen/rest/ng/dashlet-configs |
Method | POST |
Request | application/json |
Example json for Metric | Dashlet to include metric : Count of completed visits Code Block |
---|
| {
"name":"visit_count",
"title":"Visits",
"type":"COUNTER",
"dataSource":{
"options":{
"criteria":" SpecimenCollectionGroup.activityStatus = \"Active\" and SpecimenCollectionGroup.collectionStatus = \"Complete\" and Specimen.collectionStatus = \"Collected\" ",
"metric":{
"expr":"count(distinct SpecimenCollectionGroup.name)",
"title":"Visits"
}
},
"type":"AQL"
},
"chartOpts":{},
"activityStatus":"Active"
} |
|
Example json for graph | Dashlet to include graph : Available aliquots by type Code Block |
---|
| {
"name": "dash_1_20161215_0251537",
"title": "Available aliquots by type",
"type": "CHART",
"dataSource": {
"options": {
"criteria": " Specimen.collectionStatus = \"Collected\" and Specimen.lineage = \"Aliquot\" and Specimen.specimenPosition.containerName exists ",
"metric": {
"expr": "count(distinct Specimen.id)",
"title": "Aliquots"
},
"category": {
"expr": "Specimen.type",
"title": "Type"
}
},
"type": "AQL"
},
"chartOpts": {
"type": "Pie"
},
"activityStatus": "Active"
} |
|
Example JSON for SQL based count dashlet |
Code Block |
---|
| {
"name": "dash-sys-active-dps",
"title": "Distribution Protocols",
"type": "COUNTER",
"dataSource": {
"type":"SQL",
"options": {
"metrics": [{"columnIndex": 0,"title": "Active Distribution Protocols"}],
"sql": "select count(dp.identifier) from catissue_distribution_protocol dp where dp.activity_status = 'Active'"
}
},
"chartOpts": {},
"activityStatus": "Active"
} |
|
Example JSON for SQL based graph dashlet |
Code Block |
---|
| {
"name": "specimensByAnatomicSiteGroup",
"title": "Collected specimens by anatomic site group",
"type": "CHART",
"dataSource": {
"type":"SQL",
"options": {
"category": {"columnIndex":0,"title":"Anatomic Site"},
"metrics":[{"columnIndex":1,"title":"Collected Specimens"}],
"sql": "select a.value, count(s.identifier) from catissue_specimen s inner join catissue_collection_protocol cp on cp.identifier = s.collection_protocol_id inner join catissue_permissible_value pv on pv.value = s.tissue_site inner join os_pvs_hierarchy h on h.descendant_id = pv.identifier inner join catissue_permissible_value a on a.identifier = h.ancestor_id where %sql_cp_restriction% and (a.parent_identifier is null and s.collection_status = 'Collected' and s.lineage = 'Aliquot' and s.available_quantity > 0 and pv.public_id = 'anatomic_site' and a.public_id = 'anatomic_site' and s.activity_status != 'Disabled') group by a.value order by count(s.identifier) desc",
"restrictionOpts":{"type":"sql_cp_restriction","opts":{"cpIdExpr":"cp.identifier"}}
}
},
"chartOpts": {"type":"Pie","showSectionValuePct":true},
"activityStatus": "Active"
} |
columnIndex in category and metrics specify what column of SQL result set should be used. In above example, first column of result set (i.e. columnIndex: 0) is used to create categories and second column of result set is used to show the count of each category. |
...
URL | http://<host>:<port>/ openspecimen/rest/ng/dashboards/{dashboardId} |
Method | PUT |
Request | application/json |
Example json |
Code Block |
---|
| {
"view": "CollectionProtocol",
"viewParams": {
"cpId": "-1"
},
"dashlets": [
{
"config": {
"name": "dash-sys-participants"
},
"sortOrder": 1
},
{
"config": {
"name": "visit_count"
},
"sortOrder": 2
},
{
"config": {
"name": "dash_1_20161214_0406950"
},
"sortOrder": 3
},
{
"config": {
"name": "dash_1_20161214_0357273"
},
"sortOrder": 4
},
{
"config": {
"name": "dash_1_20161215_0251537"
},
"sortOrder": 5
},
{
"config": {
"name": "dash-spmns-by-anatomic"
},
"sortOrder": 6
},
{
"config": {
"name": "dash-sys-coll-dist"
},
"sortOrder": 7
},
{
"config": {
"name": "dash-sys-coll-dist-yr"
},
"sortOrder": 8
},
{
"config": {
"name": "dash-spmns-by-path"
},
"sortOrder": 9
}
],
"activityStatus": "Active"
} |
|
...