Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

...

Each of the above elements - metrics and graphs are considered as dashlets. These dashlets can either be created using query interface or REST API.

Create dashlet via UI

For details on creating using query interface, refer to Dashboard changes using query.

Create dashlet via API

URL: http[s]:<host>:<port>/openspecimen/rest/ng/dashlet-configs

URLhttp://<host>:<port>/openspecimen/rest/ng/dashlet-configs
MethodPOST
Requestapplication/json
Example json for Metric

Dashlet to include metric : Count of completed visits

Code Block
collapsetrue
{
	"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
collapsetrue
  {
    "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
collapsetrue
  {
    "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
collapsetrue
{
    "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.

...

URLhttp://<host>:<port>/openspecimen/rest/ng/dashboards/{dashboardId}
MethodPUT
Requestapplication/json
Example json


Code Block
collapsetrue
{
  "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"
}


...