grafdhall-0.1.0.0: examples/zuul-tenant-usage.dhall
let Grafana =
https://raw.githubusercontent.com/weeezes/dhall-grafana/f78d2887939dcb555a47a4b85a91a3d6b38ec2ea/package.dhall sha256:a0e1b5432090944fa671efce0085c6049019ae0d00ca289c268b4528d1cd39af
let Prelude =
https://prelude.dhall-lang.org/v17.0.0/package.dhall sha256:10db3c919c25e9046833df897a8ffe2701dc390fa0893d958c3430524be5a43e
let Tenant = { Type = { name : Text, id : Text } }
let tenants =
[ { name = "Fedora", id = "fedora" }
, { name = "RDO", id = "rdoproject_org" }
, { name = "Packit", id = "packit-service" }
, { name = "Local", id = "local" }
]
let gauge =
\(measurement : Text) ->
Grafana.MetricsTargets.InfluxTarget
{ groupBy =
[ { type = "time", params = [ "\$__interval" ] }
, { type = "fill", params = [ "previous" ] }
]
, measurement
, orderByTime = "ASC"
, policy = "default"
, refId = "A"
, rawQuery = False
, query = ""
, resultFormat = "time_series"
, select =
[ [ { type = "field", params = [ "value" ] }
, { type = "distinct", params = [] : List Text }
]
]
, tags = [ { key = "metric_type", operator = "=", value = "gauge" } ]
}
let resource-panel =
\(title : Text) ->
\(measurement : Text) ->
Grafana.Panels.mkGraphPanel
Grafana.GraphPanel::{
, title
, gridPos = { x = 0, y = 1, w = 24, h = 8 }
, targets = [ gauge measurement ]
}
let panels =
\(tenant : Text) ->
[ Grafana.Panels.mkTextPanel
Grafana.TextPanel::{
, title = "Generated with grafdhall"
, gridPos = { x = 0, y = 0, w = 24, h = 1 }
, content =
''
# This dashboard is generated with grafdhall
''
}
, resource-panel
"Instances"
"zuul.nodepool.resources.tenant.${tenant}.instances"
, resource-panel
"Cores"
"zuul.nodepool.resources.tenant.${tenant}.cores"
, resource-panel "Memory" "zuul.nodepool.resources.tenant.${tenant}.ram"
]
let all-panel =
\(measurement : Text) ->
Grafana.Panels.mkGraphPanel
Grafana.GraphPanel::{
, title = "Resources usage: ${measurement}"
, gridPos = { x = 0, y = 0, w = 24, h = 8 }
, targets =
Prelude.List.map
Tenant.Type
Grafana.MetricsTargets
( \(tenant : Tenant.Type) ->
gauge
"zuul.nodepool.resources.tenant.${tenant.id}.${measurement}"
)
tenants
}
let tenant-dashboard =
\(tenant : Tenant.Type) ->
Grafana.Dashboard::{
, title = "Tenant ${tenant.name} resources usage"
, panels = Grafana.Utils.generateIds (panels tenant.id)
, uid = Some "${tenant.name}-tenant-resources"
, editable = True
}
let tenant-dashboards =
Prelude.List.map
Tenant.Type
Grafana.Dashboard.Type
tenant-dashboard
tenants
let all-tenant-dashboard =
Grafana.Dashboard::{
, title = "Tenants resource usage"
, uid = Some "all-tenants-resources"
, panels =
Grafana.Utils.generateIds
( Prelude.List.map
Text
(Natural -> Grafana.Panels.Panels)
all-panel
[ "instances", "cores", "ram" ]
)
, editable = True
}
in [ all-tenant-dashboard ] # tenant-dashboards