nix-config/hosts/containers/scrape/default.nix

211 lines
6.5 KiB
Nix

{ pkgs, config, scrapers, ... }:
let
freifunkNodes = {
"1139" = "10.200.4.120";
"1884" = "10.200.7.100";
"1891" = "10.200.7.107";
"1099" = "10.200.4.80";
"1864" = "10.200.7.80";
};
luftqualitaetStations = [ "1672" "1649" "1680" "1639" ];
in {
c3d2.isInHq = false;
networking.hostName = "scrape";
networking.interfaces.eth0.ipv4.addresses = [{
address = "172.20.73.32";
prefixLength = 26;
}];
networking.defaultGateway = "172.20.73.1";
# Required for deployment
services.openssh.enable = true;
users.groups.scrape = {};
users.users.scrape = {
isNormalUser = true;
group = "scrape";
# don't make /home/scrape inaccessible by nginx
createHome = false;
};
services.nginx = {
enable = true;
recommendedProxySettings = true;
virtualHosts."scrape.hq.c3d2.de" = {
default = true;
forceSSL = true;
enableACME = true;
root = config.users.users.scrape.home;
extraConfig = ''
autoindex on;
'';
};
};
networking.firewall.allowedTCPPorts = [ 80 443 ];
systemd.services = let
scraperPkgs = import scrapers { inherit pkgs; };
makeService = { script, host ? "", user ? "", password ? "" }: {
script =
"${scraperPkgs."${script}"}/bin/${script} ${host} ${user} ${password}";
serviceConfig = {
User = config.users.users.scrape.name;
Group = config.users.users.scrape.group;
};
};
makeNodeScraper = nodeId: {
name = "scrape-node${nodeId}";
value = makeService {
script = "freifunk_node";
host = freifunkNodes."${nodeId}";
};
};
makeLuftScraper = station: {
name = "scrape-luftqualitaet${station}";
value = makeService {
script = "luftqualitaet";
host = station;
};
};
in {
nginx.serviceConfig.ProtectHome = "read-only";
scrape-xeri = makeService {
script = "xerox";
host = "xeri.hq.c3d2.de";
inherit (pkgs.scrape-xeri-login) user password;
};
scrape-roxi = makeService {
script = "xerox";
host = "roxi.hq.c3d2.de";
};
scrape-fhem = makeService {
script = "fhem";
host = "fhem.hq.c3d2.de";
inherit (pkgs.scrape-fhem-login) user password;
};
scrape-matemat = makeService {
script = "matemat";
host = "matemat.hq.c3d2.de";
inherit (pkgs.scrape-matemat-login) user password;
};
scrape-impfee = makeService {
script = "impfee";
};
scrape-riesa-efau-kalender = {
script = ''
${scraperPkgs.riesa-efau-kalender}/bin/riesa-efau-kalender > /tmp/riesa-efau-kalender.ics
mv /tmp/riesa-efau-kalender.ics ${config.users.users.scrape.home}/
'';
serviceConfig = {
User = config.users.users.scrape.name;
Group = config.users.users.scrape.group;
};
};
scrape-kreuzchor-termine = {
script = ''
${scraperPkgs.kreuzchor-termine}/bin/kreuzchor-termine > /tmp/kreuzchor-termine.ics
mv /tmp/kreuzchor-termine.ics ${config.users.users.scrape.home}/
'';
serviceConfig = {
User = config.users.users.scrape.name;
Group = config.users.users.scrape.group;
};
};
scrape-dhmd-veranstaltungen = {
script = ''
${scraperPkgs.dhmd-veranstaltungen}/bin/dhmd-veranstaltungen > /tmp/dhmd-veranstaltungen.ics
mv /tmp/dhmd-veranstaltungen.ics ${config.users.users.scrape.home}/
'';
serviceConfig = {
User = config.users.users.scrape.name;
Group = config.users.users.scrape.group;
};
};
scrape-mkz-programm = {
script = ''
${scraperPkgs.mkz-programm}/bin/mkz-programm > /tmp/mkz-programm.ics
mv /tmp/mkz-programm.ics ${config.users.users.scrape.home}/
'';
serviceConfig = {
User = config.users.users.scrape.name;
Group = config.users.users.scrape.group;
};
};
scrape-drk-impfaktionen = {
script = ''
${scraperPkgs.drk-impfaktionen}/bin/drk-impfaktionen > /tmp/drk-impfaktionen.ics
mv /tmp/drk-impfaktionen.ics ${config.users.users.scrape.home}/
'';
serviceConfig = {
User = config.users.users.scrape.name;
Group = config.users.users.scrape.group;
};
};
} // builtins.listToAttrs
(map makeNodeScraper (builtins.attrNames freifunkNodes) ++
map makeLuftScraper luftqualitaetStations
);
systemd.timers = let
makeTimer = service: interval: {
partOf = [ "${service}.service" ];
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = interval;
};
makeNodeScraperTimer = nodeId:
let name = "scrape-node${nodeId}";
in {
inherit name;
value = makeTimer name "minutely";
};
makeLuftScraperTimer = station:
let name = "scrape-luftqualitaet${station}";
in {
inherit name;
value = makeTimer name "hourly";
};
in {
scrape-xeri = makeTimer "scrape-xeri.service" "minutely";
scrape-roxi = makeTimer "scrape-roxi.service" "minutely";
scrape-fhem = makeTimer "scrape-fhem.service" "minutely";
scrape-matemat = makeTimer "scrape-matemat.service" "minutely";
scrape-impfee = makeTimer "scrape-impfee.service" "minutely";
scrape-riesa-efau-kalender = {
partOf = [ "scrape-riesa-efau-kalender.service" ];
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "hourly";
};
scrape-kreuzchor-termine = {
partOf = [ "scrape-kreuzchor-termine.service" ];
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "daily";
};
scrape-dhmd-veranstaltungen = {
partOf = [ "scrape-dhmd-veranstaltungen.service" ];
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "hourly";
};
scrape-mkz-programm = {
partOf = [ "scrape-mkz-programm.service" ];
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "hourly";
};
scrape-drk-impfaktionen = {
partOf = [ "scrape-drk-impfaktionen.service" ];
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "hourly";
};
} // builtins.listToAttrs
(map makeNodeScraperTimer (builtins.attrNames freifunkNodes) ++
(map makeLuftScraperTimer luftqualitaetStations)
);
# This value determines the NixOS release with which your system is to be
# compatible, in order to avoid breaking some software such as database
# servers. You should change this only after NixOS release notes say you
# should.
system.stateVersion = "20.03"; # Did you read the comment?
}