Management Dashboard tiles
Overview
The Management Dashboard is a grid of tiles, and every tile is an entry in the panels array of one of its four configuration files. Which file a tile belongs in decides where it appears:
| File | Tiles shown |
|---|---|
config/hd/cmp.json |
The portfolio view, where the Measurement schema holds more than one application |
config/hd/app.json |
A single application’s view |
config/hd/cmp-ISO.json |
The portfolio view when the reader switches to the ISO-5055 View |
config/hd/app-ISO.json |
A single application’s view in the ISO-5055 View |
This page is the reference for what those entries can contain. See Tile customization for locating and editing the files, and Configuration options for the settings that affect the whole interface rather than one tile. The Engineering and Security dashboards use an entirely different set of tiles - see Engineering tiles.
Change color and title and move a tile or two before attempting anything larger, and keep a copy of the working file. A malformed .json stops the dashboard reading its configuration at all.
For what each tile shows an end user, see the Management Dashboard guide.
Areas
Each file holds an areas array, and each area is one section of the dashboard. An area takes an id, a title used as the section heading, and its panels:
| Area | Present in |
|---|---|
| Overview | cmp.json and app.json |
| Trends | cmp.json and app.json |
| Automated Enhancement Point | app.json only |
Every tile takes these
| Property | Purpose |
|---|---|
plugin |
Which tile this is. The values are listed in Plugin types and are case-sensitive |
id |
A technical identifier. It must be unique within the file |
parameters |
The plugin-specific settings |
color |
An optional colour theme. Light grey is used if none is given |
size |
large for a wide tile, small for a standard one. small is the default and is omitted throughout the shipped files |
autoFit |
Optional, true by default, shrinking the title’s font so it fits the tile. Set false to keep the font size and let long titles be truncated instead |
The colour themes are blue, black, grey-dark, orange, green, purple, grey-light and yellow. Some tile examples also use light-red and red.
Position
Tiles are laid out left to right and top to bottom within their area, in the order they appear in the panels array. To move a tile, cut and paste its block higher or lower in the array: the earlier it appears, the earlier it is displayed.
Portfolio and application plugin names
Most plugins have two names, and using the wrong one gives you a tile that does not render:
- In
cmp.json, the plural form -QualityIndicatorResults. - In
app.json, the singular form -QualityIndicatorResult.
A few plugins keep one name in both files, and a few work in only one of the two. The table in Plugin types gives the name to use for each.
Common plugin parameters
These appear across most plugins:
| Parameter | Purpose |
|---|---|
title |
The label shown on the tile. A \r in the string forces a line break, which is how the ISO tiles print Reliability \r(ISO-5055) on two lines |
description |
Free text. Most plugins do not display it |
format |
How the value is printed, using the numeral.js formats - 0.00 for a grade, 0,000 for a count, 0.0% for a percentage, $0,000.0a for an abbreviated currency |
mode |
How much detail the tile carries, terse or verbose. Not every plugin supports it |
order |
descending or ascending, for the plugins that rank their contents |
count |
How many rows a ranking tile lists. 5 fits the tile height |
zoom |
true by default, letting a user select part of a drill-down chart to zoom into. Useful where a chart carries one column per application |
scope |
Restricts the tile to the applications carrying one tag - see below |
description is free text that the tile prints as a caption. It is not the name of the metric, and the shipped files do not always agree with the product’s own labels. The shipped cmp.json and app.json both configure the Technical Size tile as {"id": "10151", "description": "Measured size"}, where 10151 is the Lines of Code metric.
The scope parameter
scope filters a tile, and everything you reach by clicking it, down to the applications carrying one tag. Both sub-parameters are required:
"scope": { "category": "Vendors", "tag": "Vendor 1" }
Scoped tiles are how one dashboard serves several audiences: a Number of applications tile scoped to a vendor counts only that vendor’s applications. See Tags and categories for defining the categories and tags themselves.
scope is accepted by PortfolioListing, QualityIndicatorResults, QualityIndicatorEvolution, SizingMeasureResults, SizingMeasureEvolution, BackgroundFactsResults, BackgroundFactsEvolution, CustomExpressions and CustomExpressionsEvolution.
Indicator ids
Wherever a plugin takes a qualityIndicator, sizingMeasure, functionalWeightMeasure or backgroundFact, the object takes an id, a format and an optional description. The id may be one of the named constants below, or the numerical id of any CAST Imaging Core metric - 10151 for Lines of Code, 66031 for Programming Practices, and so on.
| Object | Named ids |
|---|---|
qualityIndicator |
TQI, ROBUSTNESS, EFFICIENCY, SECURITY, CHANGEABILITY, TRANSFERABILITY, ARCHITECTURAL_DESIGN, DOCUMENTATION, PERFORMANCE, PROGRAMMING_PRACTICE, SEI_MAINTAINABILITY, and the ISO-5055 family - ISO-5055, ISO-5055-RELIABILITY, ISO-5055-SECURITY, ISO-5055-PERFORMANCE-EFFICIENCY, ISO-5055-MAINTAINABILITY |
sizingMeasure |
LINES_OF_CODE, NUMBER_OF_ARTIFACTS, NUMBER_OF_COMMENT_LINES, NUMBER_OF_DECISION_POINTS, NUMBER_OF_FILES, NUMBER_OF_FUNCTION_POINTS, NUMBER_OF_BACKFIRED_FUNCTION_POINTS, CRITICAL_VIOLATIONS, TOTAL_VIOLATIONS, TECHNICAL_DEBT, OMG_TECHNICAL_DEBT, OMG_TECHNICAL_DEBT_ISO, OMG_TECHNICAL_DEBT_CISQ |
backgroundFact |
BUSINESS_VALUE, COST, DELIVERY_FEATURE_REQUESTS, EFFORT, ENHANCEMENT_FUNCTION_POINTS, PENDING_FEATURE_REQUESTS, PENDING_FIXES |
A qualityIndicator may also carry two parameters of its own:
| Parameter | Purpose |
|---|---|
mode |
grade for a value from 1 to 4, violations for a count, or compliance for a percentage. The ISO-5055 tiles use compliance |
indexID |
The parent Business Criterion index, needed for drill-down. The ISO-5055 characteristics all sit under 1061000 |
At portfolio level only, sizingMeasure also accepts the function point measures: AUTOMATED_IFPUG_FUNCTION_POINTS_ESTIMATION, UNADJUSTED_DATA_FUNCTION_POINTS, UNADJUSTED_TRANSACTIONAL_FUNCTION_POINTS, and the ADDED_, MODIFIED_, DELETED_ and UNCHANGED_ variants of FUNCTION_POINTS, DATA_FUNCTION_POINTS and TRANSACTIONAL_FUNCTION_POINTS.
The function point measures return values only where the EFP license key is present. A tile configured on one of them displays only the applications that have results, so on a portfolio where few applications carry function points the tile can render as a few small squares in an empty space.
Grade colouring and labels
A QualityIndicatorResults block at the top level of the file sets the defaults for every grade-based tile. Configuration options covers ranges; the rest of the block is:
| Parameter | Purpose |
|---|---|
groupBy |
How the drill-down groups applications, for example technology |
colors |
from and to hex codes for grade 1 and grade 4, and useGradient to interpolate between them rather than use plain bands |
gradeLabels |
A word per range boundary, so a grade reads as a term rather than a number |
riskGauge |
thresholds and colors for tiles using the riskGauge widget. One more colour is always needed than there are thresholds |
gradeLabels keys must match the ranges values:
"ranges": [1.6, 2.4, 3.0, 3.4],
"gradeLabels": { "1.6": "Poor", "2.4": "Average", "3.0": "Good", "3.4": "Excellent" }
An individual tile can override any of this in its own details block.
The ISO-5055 views
The two ISO files are complete layouts, not a four-tile overlay on the default view, and they are narrower than the files they replace. Both drop the Notification Quick Facts tile, app-ISO.json has no Automated Enhancement Point area and no Top Critical Rules tile, and cmp-ISO.json carries no defaultView key.
What they do configure:
| Tile | Plugin | In |
|---|---|---|
| Number of applications | PortfolioListing |
cmp-ISO.json |
| Technical Size | SizingMeasureResults / SizingMeasureResult on 10151 |
Both |
| Reliability, Security, Performance-Efficiency, Maintainability | IndustryStandards / IndustryStandard, type: "ISO-5055" |
Both |
| Technical Debt (OMG) by ISO-5055 | SizingMeasureResults / SizingMeasureResult on OMG_TECHNICAL_DEBT_ISO |
Both |
| Top 5 riskiest Applications | CriticalViolationsPerHealthFactor on ISO-5055-SECURITY |
cmp-ISO.json |
| Technologies Overview, Top riskiest Modules | CriticalViolationsPerHealthFactor on ISO-5055 |
app-ISO.json |
| The four characteristics over time, and OMG debt over time | QualityIndicatorEvolution, SizingMeasureEvolution |
Both, in Trends |
The four characteristic ids are 1061003 Reliability, 1061004 Security, 1061002 Performance-Efficiency and 1061001 Maintainability, each with indexID 1061000. The ranking tiles count TOTAL_VIOLATIONS rather than CRITICAL_VIOLATIONS.
IndustryStandardsKeys in app-ISO.json lists the Business Criterion ids behind each standard - AIP, Best-Practices, CISQ and ISO-5055 - and is what the interface uses to group them. See Configuration options.
Plugin types
cmp.json |
app.json |
Tile | Provided by default |
|---|---|---|---|
PortfolioListing |
- | Number of applications | Yes |
QualityIndicatorResults |
QualityIndicatorResult |
A Health Measure grade | Yes |
SizingMeasureResults |
SizingMeasureResult |
A size or violation count | Yes |
FunctionalWeightMeasureResults |
FunctionalWeightMeasureResult |
Functional and enhancement size | Yes, in app.json |
QualityIndicatorBySizingMeasureResults |
QualityIndicatorBySizingMeasureResult |
Applications Map, Modules Mapping | Yes |
CriticalViolationsPerHealthFactor |
CriticalViolationsPerHealthFactor |
Top riskiest, Technologies Overview | Yes |
CriticalQualityRulesRatios |
CriticalQualityRuleRatio |
Top critical rules | Yes, in cmp.json |
| - | DetailView |
Top Critical Rules | Yes, in app.json |
QualityIndicatorEvolution |
QualityIndicatorEvolution |
A grade over time | Yes |
SizingMeasureEvolution |
SizingMeasureEvolution |
A size or count over time | Yes |
Notification |
- | Quick Facts | Yes |
IndustryStandards |
IndustryStandard |
An industry standard’s grade or violations | Yes, in the ISO views |
QualityStandards |
QualityStandards |
Top Priority, or a custom tag’s violations | Configure manually |
BackgroundFactsResults |
BackgroundFactsResult |
One Background Fact metric | Configure manually |
BackgroundFactsEvolution |
BackgroundFactsEvolution |
One Background Fact over time | Configure manually |
BackgroundFactAndQualityIndicatoryBySizingMeasureResults |
- | A three-measure bubble chart | Configure manually |
CustomExpressions |
CustomExpression |
A calculated value | Configure manually |
CustomExpressionsEvolution |
CustomExpressionsEvolution |
A calculated value over time | Configure manually |
ExternalLink |
ExternalLink |
A link out of the dashboard | Configure manually |
ExternalLinkWithImage |
ExternalLinkWithImage |
The same, over a background image | Configure manually |
PortfolioListing
Counts the applications in the portfolio. Portfolio level only. Takes title, and scope to count only one tag’s applications.
{ "id": 20150818, "plugin": "PortfolioListing", "color": "grey-dark",
"parameters": { "title": "Number of applications" } }
QualityIndicatorResults
A single Health Measure grade. Takes a qualityIndicator and a widget:
widget |
Renders as |
|---|---|
gauge |
A dial. The default choice in the shipped files |
donut |
A ring |
riskGauge |
A dial coloured by the riskGauge thresholds rather than by grade. The tile theme is restricted to grey-light or grey-dark |
technicalId names a parent technical criterion, which the tile then displays alongside the measure. details overrides the global ranges, colors and riskGauge for this tile alone, and icon: true puts an icon beside the title.
{ "id": 5, "plugin": "QualityIndicatorResults", "color": "yellow",
"parameters": { "title": "Robustness", "widget": "gauge",
"qualityIndicator": { "id": "ROBUSTNESS", "format": "0.00" } } }
SizingMeasureResults
A size or violation count. Takes a sizingMeasure, and mode to decide how much the tile carries.
{ "id": 12, "plugin": "SizingMeasureResults", "color": "orange",
"parameters": { "title": "Critical violations", "mode": "terse",
"sizingMeasure": { "id": "CRITICAL_VIOLATIONS", "format": "0,000" } } }
FunctionalWeightMeasureResults
Functional and enhancement size. Takes a functionalWeightMeasure in place of a sizingMeasure.
{ "id": 1999, "plugin": "FunctionalWeightMeasureResult", "color": "blue",
"parameters": { "title": "Functional & Enhancement Size",
"functionalWeightMeasure": { "id": "AUTOMATED_IFPUG_FUNCTION_POINTS_ESTIMATION",
"format": "0,000",
"description": "OMG-Compliant Automated FPs" } } }
The Automated Enhancement Point area uses the same plugin with an AEP id. Drilling down lists the applications excluded from the measure, which is to say those without an EFP license.
QualityIndicatorBySizingMeasureResults
Plots a grade against a size. Takes both a qualityIndicator and a sizingMeasure, and a type:
type |
Renders as |
|---|---|
treemap |
A block per application or module, sized by the sizing measure and coloured by the grade |
topRiskiest |
A table of the worst count entries |
treemapColors sets the palette, as a ranges array and a matching colors array of the same length. Either measure object may also carry a tooltipFormat for the figure shown on hover.
{ "id": 3, "plugin": "QualityIndicatorBySizingMeasureResults", "size": "large", "color": "purple",
"parameters": { "type": "treemap", "title": "Applications Map", "order": "descending",
"qualityIndicator": { "id": "TQI", "format": "0.00", "description": "Total Quality Index" },
"sizingMeasure": { "id": "LINES_OF_CODE", "format": "0,000.0a", "description": "Lines of Code" },
"treemapColors": { "ranges": [1, 2, 3, 4],
"colors": ["#ff3600", "#ff0242", "#fbbb6e", "#3dc680"] } } }
CriticalViolationsPerHealthFactor
Ranks applications, modules or technologies by critical violations against one Health Measure. Takes type: "topRiskiest", a qualityIndicator, usually a sizingMeasure, and count.
mode decides what the figure is: grade for 1 to 4, violations for a count, or compliance for a percentage. In app.json, scattering: "technologies" ranks technologies instead of modules, which is how the Technologies Overview tile is built.
{ "id": 10, "plugin": "CriticalViolationsPerHealthFactor", "color": "green", "size": "large",
"parameters": { "type": "topRiskiest", "title": "Top 5 riskiest Applications",
"count": 5, "order": "descending",
"qualityIndicator": { "id": "EFFICIENCY", "format": "0.00", "description": "Efficiency" },
"sizingMeasure": { "id": "CRITICAL_VIOLATIONS", "format": "0,000a",
"description": "Critical Violations" } } }
CriticalQualityRulesRatios
The top critical rules, with a Checked column counting the objects the rule examined and a Failed column counting or scoring those that violate it.
| Parameter | Purpose |
|---|---|
mode |
ratio for a Failed (%) column, number for Failed (#) |
count |
How many rules to list |
order |
Ranks on the number of failed checks |
limit |
A ceiling on applications. Above it the tile does not load and says so. Earlier dashboard releases named this parameter loadLimit |
This tile reads far more data than the others, and the volume grows with the number of applications in scope. limit exists for that reason, and the shipped cmp.json sets it to 100. Raise it only if you are prepared for the portfolio view to become slower.
{ "id": 14, "plugin": "CriticalQualityRulesRatios", "size": "large", "color": "grey-dark",
"parameters": { "limit": 100, "title": "Top 5 critical rules", "count": 5,
"order": "descending", "format": "0,000", "mode": "ratio" } }
DetailView
The shipped app.json builds its Top Critical Rules tile with DetailView and type: "topRules", taking the same count, order, format and mode parameters as CriticalQualityRulesRatios.
{ "id": 107, "plugin": "DetailView", "color": "grey-dark", "size": "large",
"parameters": { "type": "topRules", "title": "Top Critical Rules", "count": 5,
"format": "0,000", "order": "descending", "mode": "ratio" } }
A DetailView block at the top level of app.json separately sets the treemapColors used by drill-down treemaps.
QualityIndicatorEvolution
A Health Measure over the selected period. Takes a qualityIndicator, a widget of number, line or spline, and optionally mode as grade, violations or compliance.
number prints the variation as a figure; line joins snapshots with straight segments and spline smooths them.
SizingMeasureEvolution
The same, for a sizingMeasure. Takes the same widget values.
{ "id": 101, "plugin": "SizingMeasureEvolution", "color": "orange",
"parameters": { "widget": "spline", "title": "Critical violations",
"sizingMeasure": { "id": "CRITICAL_VIOLATIONS", "format": "0,000" } } }
Notification
The Quick Facts tile. Portfolio level only. notifications is an array, each entry a type:
type |
Reports the number of applications |
|---|---|
analysisSince |
Not analyzed within the selected period |
addedCount |
Added within the selected period |
sizingMeasureEvolution |
Whose named sizingMeasure moved by more than threshold, in the direction given by trend - increase or decrease |
qualityIndicatorEvolution |
Whose named qualityIndicator moved by more than threshold, with trend as improvement or degradation |
{ "id": 1000, "plugin": "Notification", "color": "blue", "size": "large",
"parameters": { "title": "Applications Fast Facts",
"notifications": [
{ "type": "analysisSince" },
{ "type": "addedCount" },
{ "type": "sizingMeasureEvolution", "threshold": 0.01, "trend": "increase",
"sizingMeasure": { "id": "CRITICAL_VIOLATIONS", "format": "0",
"description": "critical violations" } } ] } }
Only the first five entries appear on the tile itself. Configure more if you want them: the rest are shown when you click through. An entry whose value is zero is left out of the drill-down.
IndustryStandards
A grade, violation count or compliance percentage for one industry standard. Takes a type of CISQ, MIPS, ISO-5055, OWASP-2013 or OWASP-2017, a widget where the mode is grade, and an industryStandard object:
| Parameter | Purpose |
|---|---|
id |
The standard’s Business Criterion id, from the extension that provides it |
indexID |
The parent Business Criterion index, which is what makes drill-down work. For CISQ-Performance-Efficiency (1062102) the parent is 1062100 |
mode |
grade, violations or compliance |
format |
0.00 for a grade, 0,000 for violations, 0.0% for compliance |
Data comes from the CISQ Index, MIPS Reduction Index, ISO-5055 Index and OWASP Index extensions, which must be installed before the snapshot is generated.
{ "id": 1234, "plugin": "IndustryStandards", "color": "black",
"parameters": { "type": "CISQ", "title": "CISQ-Security Index", "widget": "gauge",
"industryStandard": { "id": "1062166", "indexID": "1062100", "mode": "grade",
"format": "0.00" } } }
QualityStandards
Counts violations of the rules carrying one tag. Takes a qualityStandards object of id, format and description. The same configuration works at both levels.
The Top Priority tile is this plugin pointed at the AIP-TOP-PRIORITY tag, and is no longer supplied out of the box:
{ "id": 213, "plugin": "QualityStandards", "color": "light-red",
"parameters": { "title": "Top Priority",
"qualityStandards": { "id": "AIP-TOP-PRIORITY", "format": "0,000",
"description": "Violations" } } }
Point id at any other quality standard tag, or at a custom tag of your own, to get a tile for it. Clicking through lists the rules carrying the tag.
Quality standard tags need the Quality Standards Mapping extension installed before the snapshot was generated, and AIP-TOP-PRIORITY also needs System Level Rules. Without them the tile has no data to report.
BackgroundFactsResults
One Background Fact metric, uploaded during snapshot generation. Takes a backgroundFact object, plus:
| Parameter | Purpose |
|---|---|
aggregation |
sum or average, deciding how per-application values are combined at portfolio level. sum by default |
url |
An external page describing the metric. Without it the tile cannot be clicked through, since the data is not CAST’s |
The aggregation choice matters more than it looks. With a cost of 400 recorded against one of two applications, sum reports 400 at portfolio level and 0 for the application with no value, while average reports 200 in both places.
{ "id": 66002, "plugin": "BackgroundFactsResults", "color": "green",
"parameters": { "title": "Cost", "aggregation": "sum",
"url": "http://www.castsoftware.com",
"backgroundFact": { "id": "66002", "format": "0.0",
"description": "Total cost value" } } }
BackgroundFactsEvolution
The same metric over time. Takes backgroundFact, aggregation, a widget of number, line or spline, and selectedApplicationCount for how many applications the drill-down plots by default at portfolio level.
BackgroundFactAndQualityIndicatoryBySizingMeasureResults
A bubble chart carrying three measures at once: a qualityIndicator on the x axis, a backgroundFact on the y axis, and a sizingMeasure as the bubble size. Portfolio level only, and not present in any shipped file.
chartSettings passes options through to the charting library. xAxis and yAxis each accept plotLines, marking a value with a labelled line, and plotBands, shading a from and to interval.
{ "id": 10203, "plugin": "BackgroundFactAndQualityIndicatoryBySizingMeasureResults",
"color": "purple",
"parameters": { "title": "Lines of Code - Effort", "order": "descending",
"qualityIndicator": { "id": "TQI", "format": "0.00", "description": "TQI" },
"sizingMeasure": { "id": "LINES_OF_CODE", "format": "0,000a" },
"backgroundFact": { "id": "EFFORT", "format": "0.00", "description": "Effort" },
"chartSettings": { "xAxis": { "plotLines": [ { "value": 3,
"label": { "text": "TQI=3" } } ] } } } }
The plugin name really is spelt BackgroundFactAndQualityIndicatoryBySizingMeasureResults, with Indicatory rather than Indicator. Copy it exactly.
ExternalLink
A tile that leads somewhere outside the dashboard. Takes title and url.
{ "id": 100, "plugin": "ExternalLink", "color": "red",
"parameters": { "title": "Tackle your Technical Debt",
"url": "http://www.castsoftware.com" } }
ExternalLinkWithImage
The same, with a background image in place of a plain colour. Adds imageUrl.
Custom expression tiles
CustomExpressions computes a value from other measures instead of reading one directly, which covers the indicators that are ratios: violations per thousand lines, cost per function point, and so on. CustomExpressionsEvolution does the same across snapshots.
| Parameter | Purpose |
|---|---|
expression |
The formula, written over the variable keys - "crit / tqi" |
variables |
One entry per key in the expression, each a type of qualityIndicator, sizingMeasure or backgroundFact, and an id |
aggregator |
average (the default), sum, or AvgSum |
documentation |
Explanatory text, which may include HTML, shown on the portfolio drill-down page |
{ "id": 987654321529, "plugin": "CustomExpressions", "color": "blue",
"parameters": { "title": "TQI - Critical violations ratio", "format": "0.00",
"expression": "crit / tqi",
"variables": { "tqi": { "type": "qualityIndicator", "id": "TQI" },
"crit": { "type": "sizingMeasure", "id": "CRITICAL_VIOLATIONS" } } } }
With aggregator set to AvgSum, each variable may carry its own aggregator of sum or average. That is what lets a portfolio ratio be totalled before it is divided, giving the sum of all violations over the sum of all function points rather than an average of per-application ratios.
title identifies a custom expression tile as well as labelling it. Give the portfolio and application tiles built on the same formula the same title, or the application drill-down lists it twice.
Operators
| Operator | Meaning | Example | Result |
|---|---|---|---|
( ) |
Parentheses | 2 * (3 + 4) |
14 |
, |
Parameter separator | max(2, 1, 5) |
5 |
+ - * / |
Arithmetic | 6 / 2 |
3 |
% or mod |
Modulus | 8 % 3 |
2 |
^ |
Power | 2 ^ 3 |
8 |
! |
Factorial | 5! |
120 |
? : |
Conditional | 15 > 100 ? 1 : -1 |
-1 |
Functions
| Function | Meaning | Example | Result |
|---|---|---|---|
abs(x) |
Absolute value | abs(-2) |
2 |
round(x, n) |
Round to n places |
round(3.142265, 3) |
3.142 |
sqrt(x) |
Square root | sqrt(4) |
2 |
log(x, base) |
Logarithm, base 10 if omitted | log(1024, 2) |
10 |
Expressions that return anything other than a number, a boolean for instance, are not rendered.