60 lines
1.3 KiB
Nix
60 lines
1.3 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
# keeps peer to peer connections alive with a periodic ping
|
|
|
|
with lib;
|
|
with builtins;
|
|
|
|
# todo auto restart
|
|
|
|
let
|
|
cfg = config.keepalive-ping;
|
|
|
|
serviceTemplate = host:
|
|
{
|
|
"keepalive-ping@${host}" = {
|
|
description = "Periodic ping keep alive for ${host} connection";
|
|
|
|
requires = [ "network-online.target" ];
|
|
after = [ "network.target" "network-online.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig.Restart = "always";
|
|
|
|
path = with pkgs; [ iputils ];
|
|
|
|
script = ''
|
|
ping -i ${cfg.delay} ${host} &>/dev/null
|
|
'';
|
|
};
|
|
};
|
|
|
|
combineAttrs = foldl recursiveUpdate { };
|
|
|
|
serviceList = map serviceTemplate cfg.hosts;
|
|
|
|
services = combineAttrs serviceList;
|
|
in
|
|
{
|
|
options.keepalive-ping = {
|
|
enable = mkEnableOption "Enable keep alive ping task";
|
|
hosts = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
description = ''
|
|
Hosts to ping periodically
|
|
'';
|
|
};
|
|
delay = mkOption {
|
|
type = types.str;
|
|
default = "60";
|
|
description = ''
|
|
Ping interval in seconds of periodic ping per host being pinged
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
systemd.services = services;
|
|
};
|
|
}
|