BigPanda Package
Use this Flux Package to send alerts to BigPanda. The implementation is using bigpanda v2 API that is described
in https://docs.bigpanda.com/docs/alert-api#create-alert.
See also
bigpanda.sendAlert
sendAlert
sends a message that creates an alert in BigPanda. Arguments:
Name |
Type |
Description |
token |
string |
BigPanda API Authorization token. Required. |
appKey |
string |
BigPanda App Key. Required. |
status |
string |
Alert status, one of ok, critical, warning, acknowledged Required. |
rec |
record |
Alert data. Required. |
url |
string |
BigPanda API URL. Defaults to "https://api.bigpanda.io/data/v2/alerts". Optional |
Basic Example:
import "contrib/rhajek/bigpanda"
data = {
host: "my-host",
check: "my-check",
description: "Great Scott!- Disk usage is: ${lastReported.status}.",
}
bigpanda.sendAlert(url: url, appKey: appKey, token: token, status: "critical", rec: data)
bigpanda.endpoint
endpoint
function creates a factory function that accepts a mapping function mapFn
and creates a target function for pipeline |>
that sends alert messages from table rows. The mapFn
accepts a table row and returns an object with properties defined in the bigpanda.sendAlert
function arguments expect appKey, token and url. Arguments:
Name |
Type |
Description |
token |
string |
API Authorization key. |
appKey |
string |
BigPanda AppKey used to specify domain of the alert. |
url |
string |
BigPanda API URL. Optional. Default is "https://api.bigpanda.io/data/v2/alerts". |
Basic Example:
import "contrib/rhajek/bigpanda"
import "influxdata/influxdb/secrets"
// this value can be stored in the secret-store()
token = secrets.get(key: "BIG_PANDA_TOKEN")
lastReported =
from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._measurement == "statuses")
|> last()
|> tableFind(fn: (key) => true)
|> bigpanda.endpoint(appKey: "my-appkey", token: token)(mapFn: (r) => {
return { r with
status: bigpanda.statusFromLevel(level: r.level),
description: "Great Scott!- Disk usage is: ${r.level}."
}
})()
BigPanda alert timestamps are optional and use standard Unix time format.
Example with timestamp:
from(...)
|> bigpanda.endpoint(appKey: "my-appkey", token: "...") (mapFn: (r) => {
return { r with
status: bigpanda.statusFromLevel(level: r.level),
description: "Great Scott!- Disk usage is: ${r.level}.",
timestamp: int(v:now())/1000000000
}
})()
bigpanda.statusFromLevel
bigpanda.statusFromLevel()
function converts InfluxDB status level to a BigPanda status.
import "bigpanda"
bigpanda.statusFromLevel(
level: "crit"
)
// returns "critical"
Status level |
BigPanda status |
crit |
critical |
warn |
warning |
info |
ok |
ok |
ok |