1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2024-11-18 11:40:45 +00:00
nixpkgs/nixos/modules/services/monitoring/uptime.nix
stuebinm 6afb255d97 nixos: remove all uses of lib.mdDoc
these changes were generated with nixq 0.0.2, by running

  nixq ">> lib.mdDoc[remove] Argument[keep]" --batchmode nixos/**.nix
  nixq ">> mdDoc[remove] Argument[keep]" --batchmode nixos/**.nix
  nixq ">> Inherit >> mdDoc[remove]" --batchmode nixos/**.nix

two mentions of the mdDoc function remain in nixos/, both of which
are inside of comments.

Since lib.mdDoc is already defined as just id, this commit is a no-op as
far as Nix (and the built manual) is concerned.
2024-04-13 10:07:35 -07:00

101 lines
3.3 KiB
Nix

{ config, options, pkgs, lib, ... }:
let
inherit (lib) literalExpression mkOption mkEnableOption mkIf mkMerge types optional;
cfg = config.services.uptime;
opt = options.services.uptime;
configDir = pkgs.runCommand "config" { preferLocalBuild = true; }
(if cfg.configFile != null then ''
mkdir $out
ext=`echo ${cfg.configFile} | grep -o \\..*`
ln -sv ${cfg.configFile} $out/default$ext
ln -sv /var/lib/uptime/runtime.json $out/runtime.json
'' else ''
mkdir $out
cat ${pkgs.nodePackages.node-uptime}/lib/node_modules/node-uptime/config/default.yaml > $out/default.yaml
cat >> $out/default.yaml <<EOF
autoStartMonitor: false
mongodb:
connectionString: 'mongodb://localhost/uptime'
EOF
ln -sv /var/lib/uptime/runtime.json $out/runtime.json
'');
in {
options.services.uptime = {
configFile = mkOption {
description = ''
The uptime configuration file
If mongodb: server != localhost, please set usesRemoteMongo = true
If you only want to run the monitor, please set enableWebService = false
and enableSeparateMonitoringService = true
If autoStartMonitor: false (recommended) and you want to run both
services, please set enableSeparateMonitoringService = true
'';
type = types.nullOr types.path;
default = null;
};
usesRemoteMongo = mkOption {
description = "Whether the configuration file specifies a remote mongo instance";
default = false;
type = types.bool;
};
enableWebService = mkEnableOption "the uptime monitoring program web service";
enableSeparateMonitoringService = mkEnableOption "the uptime monitoring service" // {
default = cfg.enableWebService;
defaultText = literalExpression "config.${opt.enableWebService}";
};
nodeEnv = mkOption {
description = "The node environment to run in (development, production, etc.)";
type = types.str;
default = "production";
};
};
config = mkMerge [ (mkIf cfg.enableWebService {
systemd.services.uptime = {
description = "uptime web service";
wantedBy = [ "multi-user.target" ];
environment = {
NODE_CONFIG_DIR = configDir;
NODE_ENV = cfg.nodeEnv;
NODE_PATH = "${pkgs.nodePackages.node-uptime}/lib/node_modules/node-uptime/node_modules";
};
preStart = "mkdir -p /var/lib/uptime";
serviceConfig.ExecStart = "${pkgs.nodejs}/bin/node ${pkgs.nodePackages.node-uptime}/lib/node_modules/node-uptime/app.js";
};
services.mongodb.enable = mkIf (!cfg.usesRemoteMongo) true;
}) (mkIf cfg.enableSeparateMonitoringService {
systemd.services.uptime-monitor = {
description = "uptime monitoring service";
wantedBy = [ "multi-user.target" ];
requires = optional cfg.enableWebService "uptime.service";
after = optional cfg.enableWebService "uptime.service";
environment = {
NODE_CONFIG_DIR = configDir;
NODE_ENV = cfg.nodeEnv;
NODE_PATH = "${pkgs.nodePackages.node-uptime}/lib/node_modules/node-uptime/node_modules";
};
# Ugh, need to wait for web service to be up
preStart = if cfg.enableWebService then "sleep 1s" else "mkdir -p /var/lib/uptime";
serviceConfig.ExecStart = "${pkgs.nodejs}/bin/node ${pkgs.nodePackages.node-uptime}/lib/node_modules/node-uptime/monitor.js";
};
}) ];
}