From e4a945cd175fa78ee6373f2a30505c4322befa2b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Thu, 10 Jan 2019 22:40:32 +0100 Subject: [PATCH] Move goaccess to specific module --- virtual/eldiron.nix | 53 ----------------- virtual/modules/websites/aten.nix | 8 +++ virtual/modules/websites/chloe.nix | 8 +++ virtual/modules/websites/commons/stats.nix | 66 +++++++++++++++++++++ virtual/modules/websites/connexionswing.nix | 8 +++ virtual/modules/websites/ludivine.nix | 8 +++ virtual/modules/websites/piedsjaloux.nix | 12 ++++ 7 files changed, 110 insertions(+), 53 deletions(-) create mode 100644 virtual/modules/websites/commons/stats.nix diff --git a/virtual/eldiron.nix b/virtual/eldiron.nix index a1e6909..e1edc01 100644 --- a/virtual/eldiron.nix +++ b/virtual/eldiron.nix @@ -36,19 +36,6 @@ services.myWebsites.production.enable = true; services.myWebsites.integration.enable = true; - nixpkgs.config.packageOverrides = oldpkgs: rec { - goaccess = oldpkgs.goaccess.overrideAttrs(old: rec { - name = "goaccess-${version}"; - version = "1.3"; - src = pkgs.fetchurl { - url = "https://tar.goaccess.io/${name}.tar.gz"; - sha256 = "16vv3pj7pbraq173wlxa89jjsd279004j4kgzlrsk1dz4if5qxwc"; - }; - configureFlags = old.configureFlags ++ [ "--enable-tcb=btree" ]; - buildInputs = old.buildInputs ++ [ pkgs.tokyocabinet pkgs.bzip2 ]; - }); - }; - networking = { firewall = { enable = true; @@ -96,7 +83,6 @@ pkgs.telnet pkgs.htop pkgs.vim - pkgs.goaccess occ ]; @@ -152,15 +138,6 @@ install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions/mantisbt install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions/davical ''; - # FIXME: initial sync - goaccess = '' - mkdir -p /var/lib/goaccess - mkdir -p /var/lib/goaccess/aten.pro - mkdir -p /var/lib/goaccess/ludivinecassal.com - mkdir -p /var/lib/goaccess/piedsjaloux.fr - mkdir -p /var/lib/goaccess/osteopathe-cc.fr - mkdir -p /var/lib/goaccess/connexionswing.com - ''; }; environment.etc."ssh/ldap_authorized_keys" = let @@ -331,36 +308,6 @@ ]; }; - services.cron = { - enable = true; - systemCronJobs = let - stats = domain: conf: let - d = pkgs.writeScriptBin "stats-${domain}" '' - #!${pkgs.stdenv.shell} - set -e - shopt -s nullglob - date_regex=$(LC_ALL=C date -d yesterday +'%d\/%b\/%Y') - TMPFILE=$(mktemp) - trap "rm -f $TMPFILE" EXIT - - cat /var/log/httpd/access_log-${domain} | sed -n "/\\[$date_regex/ p" > $TMPFILE - for i in /var/log/httpd/access_log-${domain}*.gz; do - zcat "$i" | sed -n "/\\[$date_regex/ p" >> $TMPFILE - done - goaccess $TMPFILE --no-progress -o /var/lib/goaccess/${domain}/index.html -p ${conf} - ''; - in "${d}/bin/stats-${domain}"; - # FIXME: running several goaccess simultaneously seems to be - # bugged? - in [ - "5 0 * * * root ${stats "aten.pro" ./packages/aten_goaccess.conf}" - "6 0 * * * root ${stats "ludivinecassal.com" ./packages/ludivinecassal_goaccess.conf}" - "7 0 * * * root ${stats "piedsjaloux.fr" ./packages/piedsjaloux_goaccess.conf}" - "8 0 * * * root ${stats "osteopathe-cc.fr" ./packages/chloe_goaccess.conf}" - "9 0 * * * root ${stats "connexionswing.com" ./packages/connexionswing_goaccess.conf}" - ]; - }; - systemd.services.tt-rss = { description = "Tiny Tiny RSS feeds update daemon"; serviceConfig = { diff --git a/virtual/modules/websites/aten.nix b/virtual/modules/websites/aten.nix index 53db03a..4688db3 100644 --- a/virtual/modules/websites/aten.nix +++ b/virtual/modules/websites/aten.nix @@ -17,6 +17,14 @@ in { config = lib.mkMerge [ (lib.mkIf cfg.production.enable { + services.myWebsites.commons.stats.enable = true; + services.myWebsites.commons.stats.sites = [ + { + name = "aten.pro"; + conf = ../../packages/aten_goaccess.conf; + } + ]; + security.acme.certs."aten" = config.services.myCertificates.certConfig // { domain = "aten.pro"; extraDomains = { diff --git a/virtual/modules/websites/chloe.nix b/virtual/modules/websites/chloe.nix index 67e8e1f..3309dd2 100644 --- a/virtual/modules/websites/chloe.nix +++ b/virtual/modules/websites/chloe.nix @@ -17,6 +17,14 @@ in { config = lib.mkMerge [ (lib.mkIf cfg.production.enable { + services.myWebsites.commons.stats.enable = true; + services.myWebsites.commons.stats.sites = [ + { + name = "osteopathe-cc.fr"; + conf = ../../packages/chloe_goaccess.conf; + } + ]; + security.acme.certs."chloe" = config.services.myCertificates.certConfig // { domain = "osteopathe-cc.fr"; extraDomains = { diff --git a/virtual/modules/websites/commons/stats.nix b/virtual/modules/websites/commons/stats.nix new file mode 100644 index 0000000..a7ade3b --- /dev/null +++ b/virtual/modules/websites/commons/stats.nix @@ -0,0 +1,66 @@ +{ lib, pkgs, config, mylibs, ... }: +let + cfg = config.services.myWebsites.commons.stats; +in { + options = { + services.myWebsites.commons.stats = { + enable = lib.mkEnableOption "enable statistics"; + sites = lib.mkOption { + # FIXME: specify + type = lib.types.listOf (lib.types.unspecified); + default = []; + description = "Sites to generate stats"; + }; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ + pkgs.goaccess + ]; + + nixpkgs.config.packageOverrides = oldpkgs: rec { + goaccess = oldpkgs.goaccess.overrideAttrs(old: rec { + name = "goaccess-${version}"; + version = "1.3"; + src = pkgs.fetchurl { + url = "https://tar.goaccess.io/${name}.tar.gz"; + sha256 = "16vv3pj7pbraq173wlxa89jjsd279004j4kgzlrsk1dz4if5qxwc"; + }; + configureFlags = old.configureFlags ++ [ "--enable-tcb=btree" ]; + buildInputs = old.buildInputs ++ [ pkgs.tokyocabinet pkgs.bzip2 ]; + }); + }; + + services.cron = { + enable = true; + systemCronJobs = let + stats = domain: conf: let + d = pkgs.writeScriptBin "stats-${domain}" '' + #!${pkgs.stdenv.shell} + set -e + shopt -s nullglob + date_regex=$(LC_ALL=C date -d yesterday +'%d\/%b\/%Y') + TMPFILE=$(mktemp) + trap "rm -f $TMPFILE" EXIT + + cat /var/log/httpd/access_log-${domain} | sed -n "/\\[$date_regex/ p" > $TMPFILE + for i in /var/log/httpd/access_log-${domain}*.gz; do + zcat "$i" | sed -n "/\\[$date_regex/ p" >> $TMPFILE + done + goaccess $TMPFILE --no-progress -o /var/lib/goaccess/${domain}/index.html -p ${conf} + ''; + in "${d}/bin/stats-${domain}"; + # FIXME: running several goaccess simultaneously seems to be + # bugged? + in + pkgs.lib.lists.imap0 (i: v: "${toString (i+5)} 0 * * * root ${stats v.name v.conf}") cfg.sites; + }; + + # FIXME: initial sync + system.activationScripts.goaccess = '' + mkdir -p /var/lib/goaccess + '' + + builtins.concatStringsSep "\n" (map (v: "mkdir -p /var/lib/goaccess/${v.name}") cfg.sites); + }; +} diff --git a/virtual/modules/websites/connexionswing.nix b/virtual/modules/websites/connexionswing.nix index dcc7264..9fc0cec 100644 --- a/virtual/modules/websites/connexionswing.nix +++ b/virtual/modules/websites/connexionswing.nix @@ -17,6 +17,14 @@ in { config = lib.mkMerge [ (lib.mkIf cfg.production.enable { + services.myWebsites.commons.stats.enable = true; + services.myWebsites.commons.stats.sites = [ + { + name = "connexionswing.com"; + conf = ../../packages/connexionswing_goaccess.conf; + } + ]; + security.acme.certs."connexionswing" = config.services.myCertificates.certConfig // { domain = "connexionswing.com"; extraDomains = { diff --git a/virtual/modules/websites/ludivine.nix b/virtual/modules/websites/ludivine.nix index 6eb98e7..b3c1c51 100644 --- a/virtual/modules/websites/ludivine.nix +++ b/virtual/modules/websites/ludivine.nix @@ -17,6 +17,14 @@ in { config = lib.mkMerge [ (lib.mkIf cfg.production.enable { + services.myWebsites.commons.stats.enable = true; + services.myWebsites.commons.stats.sites = [ + { + name = "ludivinecassal.com"; + conf = ../../packages/ludivinecassal_goaccess.conf; + } + ]; + security.acme.certs."ludivinecassal" = config.services.myCertificates.certConfig // { domain = "ludivinecassal.com"; extraDomains = { diff --git a/virtual/modules/websites/piedsjaloux.nix b/virtual/modules/websites/piedsjaloux.nix index 46161c7..451ae52 100644 --- a/virtual/modules/websites/piedsjaloux.nix +++ b/virtual/modules/websites/piedsjaloux.nix @@ -15,8 +15,20 @@ in { }; }; + imports = [ + ./commons/stats.nix + ]; + config = lib.mkMerge [ (lib.mkIf cfg.production.enable { + services.myWebsites.commons.stats.enable = true; + services.myWebsites.commons.stats.sites = [ + { + name = "piedsjaloux.fr"; + conf = ../../packages/piedsjaloux_goaccess.conf; + } + ]; + security.acme.certs."piedsjaloux" = config.services.myCertificates.certConfig // { domain = "piedsjaloux.fr"; extraDomains = { -- 2.41.0