https://github.com/odis-labs/refana
Define Grafana dashboards with ReasonML
https://github.com/odis-labs/refana
Last synced: 8 months ago
JSON representation
Define Grafana dashboards with ReasonML
- Host: GitHub
- URL: https://github.com/odis-labs/refana
- Owner: odis-labs
- License: mit
- Created: 2019-06-20T14:45:28.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-01-31T16:14:55.000Z (almost 6 years ago)
- Last Synced: 2024-08-03T01:29:12.414Z (over 1 year ago)
- Language: Reason
- Homepage: https://odis-labs.github.io/refana/refana
- Size: 75.2 KB
- Stars: 19
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - refana - labs | 20 | (Reason)
README
# Refana
Define Grafana dashboards with ReasonML.
- [Homepage](https://odis-labs.github.io/refana/refana)
- [API reference](https://odis-labs.github.io/refana/refana/Refana)
## Usage
### Defining metrics
```reason
let cpu = (~name) =>
Grafana.(Query.prometheus(Prometheus_query {
"id": "CPU",
"expr": fmt("rate(cpu_seconds{container_name=~'%s'}[30s])", name),
"format": "time_series",
"legend": "cpu_seconds@{{pod_name}}"
}));
let mem = (~name) =>
Grafana.(Query.prometheus(Prometheus_query {
"id": "MEM",
"expr": fmt("sum(memory_rss{container_name=~'%s'}) by (pod_name)", name),
"format": "time_series",
"legend": "memory_rss@{{pod_name}}"
}));
```
### Creating panels
```reason
let name = "my-app";
let metrics = Grafana.[
Panel.row(Row {
"title": "My metrics",
"position": size(~width=24, ~height=1),
}),
Panel.graph(Graph {
"title": "Container CPU usage",
"position": size(~width=12, ~height=9),
"queries": [cpu(~name)]
}),
Panel.graph(Graph {
"title": "Container memory usage",
"position": size(~width=12, ~height=9),
"queries": [Std.Grafana.Metrics.mem(~name)]
})
];
```
### Creating dashboards
```reason
let dash = Grafana.Dashboard {
"title": "My Monitoring Dashboard",
"panels": Grafana.panels([metrics])
}
```