parent
1ac07c82e1
commit
530b4bcadd
@ -0,0 +1,116 @@ |
||||
{ options, config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
cfg = config.services.alerta; |
||||
|
||||
alertaConf = pkgs.writeTextFile { |
||||
name = "alertad.conf"; |
||||
text = '' |
||||
DATABASE_URL = '${cfg.databaseUrl}' |
||||
DATABASE_NAME = '${cfg.databaseName}' |
||||
LOG_FILE = '${cfg.logDir}/alertad.log' |
||||
LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' |
||||
CORS_ORIGINS = [ ${concatMapStringsSep ", " (s: "\"" + s + "\"") cfg.corsOrigins} ]; |
||||
AUTH_REQUIRED = ${if cfg.authenticationRequired then "True" else "False"} |
||||
SIGNUP_ENABLED = ${if cfg.signupEnabled then "True" else "False"} |
||||
${cfg.extraConfig} |
||||
''; |
||||
}; |
||||
in |
||||
{ |
||||
options.services.alerta = { |
||||
enable = mkEnableOption "alerta"; |
||||
|
||||
port = mkOption { |
||||
type = types.int; |
||||
default = 5000; |
||||
description = "Port of Alerta"; |
||||
}; |
||||
|
||||
bind = mkOption { |
||||
type = types.str; |
||||
default = "0.0.0.0"; |
||||
example = literalExample "0.0.0.0"; |
||||
description = "Address to bind to. The default is to bind to all addresses"; |
||||
}; |
||||
|
||||
logDir = mkOption { |
||||
type = types.path; |
||||
description = "Location where the logfiles are stored"; |
||||
default = "/var/log/alerta"; |
||||
}; |
||||
|
||||
databaseUrl = mkOption { |
||||
type = types.str; |
||||
description = "URL of the MongoDB or PostgreSQL database to connect to"; |
||||
default = "mongodb://localhost"; |
||||
example = "mongodb://localhost"; |
||||
}; |
||||
|
||||
databaseName = mkOption { |
||||
type = types.str; |
||||
description = "Name of the database instance to connect to"; |
||||
default = "monitoring"; |
||||
example = "monitoring"; |
||||
}; |
||||
|
||||
corsOrigins = mkOption { |
||||
type = types.listOf types.str; |
||||
description = "List of URLs that can access the API for Cross-Origin Resource Sharing (CORS)"; |
||||
example = [ "http://localhost" "http://localhost:5000" ]; |
||||
default = [ "http://localhost" "http://localhost:5000" ]; |
||||
}; |
||||
|
||||
authenticationRequired = mkOption { |
||||
type = types.bool; |
||||
description = "Whether users must authenticate when using the web UI or command-line tool"; |
||||
default = false; |
||||
}; |
||||
|
||||
signupEnabled = mkOption { |
||||
type = types.bool; |
||||
description = "Whether to prevent sign-up of new users via the web UI"; |
||||
default = true; |
||||
}; |
||||
|
||||
extraConfig = mkOption { |
||||
description = "These lines go into alertad.conf verbatim."; |
||||
default = ""; |
||||
type = types.lines; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.enable { |
||||
systemd.services.alerta = { |
||||
description = "Alerta Monitoring System"; |
||||
wantedBy = [ "multi-user.target" ]; |
||||
after = [ "networking.target" ]; |
||||
environment = { |
||||
ALERTA_SVR_CONF_FILE = alertaConf; |
||||
}; |
||||
serviceConfig = { |
||||
ExecStart = "${pkgs.python36Packages.alerta-server}/bin/alertad run --port ${toString cfg.port} --host ${cfg.bind}"; |
||||
User = "alerta"; |
||||
Group = "alerta"; |
||||
PermissionsStartOnly = true; |
||||
}; |
||||
preStart = '' |
||||
mkdir -p ${cfg.logDir} |
||||
chown alerta:alerta ${cfg.logDir} |
||||
''; |
||||
}; |
||||
|
||||
environment.systemPackages = [ pkgs.python36Packages.alerta ]; |
||||
|
||||
users.users.alerta = { |
||||
uid = config.ids.uids.alerta; |
||||
description = "Alerta user"; |
||||
}; |
||||
|
||||
users.groups.alerta = { |
||||
gid = config.ids.gids.alerta; |
||||
}; |
||||
}; |
||||
} |
Loading…
Reference in new issue