nixos/gatus: init module
This commit is contained in:
parent
04fcf3c5bd
commit
f1daa46d45
@ -113,6 +113,8 @@
|
|||||||
|
|
||||||
- [Localsend](https://localsend.org/), an open source cross-platform alternative to AirDrop. Available as [programs.localsend](#opt-programs.localsend.enable).
|
- [Localsend](https://localsend.org/), an open source cross-platform alternative to AirDrop. Available as [programs.localsend](#opt-programs.localsend.enable).
|
||||||
|
|
||||||
|
- [Gatus](https://github.com/TwiN/gatus), an automated developer-oriented status page. Available as [services.gatus](#opt-services.gatus.enable).
|
||||||
|
|
||||||
- [cryptpad](https://cryptpad.org/), a privacy-oriented collaborative platform (docs/drive/etc), has been added back. Available as [services.cryptpad](#opt-services.cryptpad.enable).
|
- [cryptpad](https://cryptpad.org/), a privacy-oriented collaborative platform (docs/drive/etc), has been added back. Available as [services.cryptpad](#opt-services.cryptpad.enable).
|
||||||
|
|
||||||
- [realm](https://github.com/zhboner/realm), a simple, high performance relay server written in rust. Available as [services.realm.enable](#opt-services.realm.enable).
|
- [realm](https://github.com/zhboner/realm), a simple, high performance relay server written in rust. Available as [services.realm.enable](#opt-services.realm.enable).
|
||||||
|
@ -882,6 +882,7 @@
|
|||||||
./services/monitoring/datadog-agent.nix
|
./services/monitoring/datadog-agent.nix
|
||||||
./services/monitoring/do-agent.nix
|
./services/monitoring/do-agent.nix
|
||||||
./services/monitoring/fusion-inventory.nix
|
./services/monitoring/fusion-inventory.nix
|
||||||
|
./services/monitoring/gatus.nix
|
||||||
./services/monitoring/goss.nix
|
./services/monitoring/goss.nix
|
||||||
./services/monitoring/grafana-agent.nix
|
./services/monitoring/grafana-agent.nix
|
||||||
./services/monitoring/grafana-image-renderer.nix
|
./services/monitoring/grafana-image-renderer.nix
|
||||||
|
132
nixos/modules/services/monitoring/gatus.nix
Normal file
132
nixos/modules/services/monitoring/gatus.nix
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.services.gatus;
|
||||||
|
|
||||||
|
settingsFormat = pkgs.formats.yaml { };
|
||||||
|
|
||||||
|
inherit (lib)
|
||||||
|
getExe
|
||||||
|
literalExpression
|
||||||
|
maintainers
|
||||||
|
mkEnableOption
|
||||||
|
mkIf
|
||||||
|
mkOption
|
||||||
|
mkPackageOption
|
||||||
|
;
|
||||||
|
|
||||||
|
inherit (lib.types)
|
||||||
|
bool
|
||||||
|
int
|
||||||
|
nullOr
|
||||||
|
path
|
||||||
|
submodule
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.gatus = {
|
||||||
|
enable = mkEnableOption "Gatus";
|
||||||
|
|
||||||
|
package = mkPackageOption pkgs "gatus" { };
|
||||||
|
|
||||||
|
configFile = mkOption {
|
||||||
|
type = path;
|
||||||
|
default = settingsFormat.generate "gatus.yaml" cfg.settings;
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
let settingsFormat = pkgs.formats.yaml { }; in settingsFormat.generate "gatus.yaml" cfg.settings;
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Path to the Gatus configuration file.
|
||||||
|
Overrides any configuration made using the `settings` option.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environmentFile = mkOption {
|
||||||
|
type = nullOr path;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
File to load as environment file.
|
||||||
|
Environmental variables from this file can be interpolated in the configuration file using `''${VARIABLE}`.
|
||||||
|
This is useful to avoid putting secrets into the nix store.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = mkOption {
|
||||||
|
type = submodule {
|
||||||
|
freeformType = settingsFormat.type;
|
||||||
|
options = {
|
||||||
|
web.port = mkOption {
|
||||||
|
type = int;
|
||||||
|
default = 8080;
|
||||||
|
description = ''
|
||||||
|
The TCP port to serve the Gatus service at.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
default = { };
|
||||||
|
|
||||||
|
example = literalExpression ''
|
||||||
|
{
|
||||||
|
web.port = 8080;
|
||||||
|
endpoints = [{
|
||||||
|
name = "website";
|
||||||
|
url = "https://twin.sh/health";
|
||||||
|
interval = "5m";
|
||||||
|
conditions = [
|
||||||
|
"[STATUS] == 200"
|
||||||
|
"[BODY].status == UP"
|
||||||
|
"[RESPONSE_TIME] < 300"
|
||||||
|
];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
description = ''
|
||||||
|
Configuration for Gatus.
|
||||||
|
Supported options can be found at the [docs](https://gatus.io/docs).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
openFirewall = mkOption {
|
||||||
|
type = bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to open the firewall for the Gatus web interface.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
systemd.services.gatus = {
|
||||||
|
description = "Automated developer-oriented status page";
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = true;
|
||||||
|
User = "gatus";
|
||||||
|
Group = "gatus";
|
||||||
|
Type = "simple";
|
||||||
|
Restart = "on-failure";
|
||||||
|
ExecStart = getExe cfg.package;
|
||||||
|
StateDirectory = "gatus";
|
||||||
|
SyslogIdentifier = "gatus";
|
||||||
|
EnvironmentFile = lib.optional (cfg.environmentFile != null) cfg.environmentFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
GATUS_CONFIG_PATH = cfg.configFile;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = lib.optionals cfg.openFirewall [ cfg.settings.web.port ];
|
||||||
|
};
|
||||||
|
|
||||||
|
meta.maintainers = with maintainers; [ pizzapim ];
|
||||||
|
}
|
@ -365,6 +365,7 @@ in {
|
|||||||
mimir = handleTest ./mimir.nix {};
|
mimir = handleTest ./mimir.nix {};
|
||||||
gancio = handleTest ./gancio.nix {};
|
gancio = handleTest ./gancio.nix {};
|
||||||
garage = handleTest ./garage {};
|
garage = handleTest ./garage {};
|
||||||
|
gatus = runTest ./gatus.nix;
|
||||||
gemstash = handleTest ./gemstash.nix {};
|
gemstash = handleTest ./gemstash.nix {};
|
||||||
geoserver = runTest ./geoserver.nix;
|
geoserver = runTest ./geoserver.nix;
|
||||||
gerrit = handleTest ./gerrit.nix {};
|
gerrit = handleTest ./gerrit.nix {};
|
||||||
|
34
nixos/tests/gatus.nix
Normal file
34
nixos/tests/gatus.nix
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
name = "gatus";
|
||||||
|
meta.maintainers = with pkgs.lib.maintainers; [ pizzapim ];
|
||||||
|
|
||||||
|
nodes.machine =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
services.gatus = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
web.port = 8080;
|
||||||
|
metrics = true;
|
||||||
|
|
||||||
|
endpoints = [
|
||||||
|
{
|
||||||
|
name = "metrics";
|
||||||
|
url = "http://localhost:8080/metrics";
|
||||||
|
interval = "1s";
|
||||||
|
conditions = [
|
||||||
|
"[STATUS] == 200"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
machine.wait_for_unit("gatus.service")
|
||||||
|
machine.succeed("curl -s http://localhost:8080/metrics | grep go_info")
|
||||||
|
'';
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user