]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Move goaccess to specific module
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Thu, 10 Jan 2019 21:40:32 +0000 (22:40 +0100)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Thu, 10 Jan 2019 21:40:32 +0000 (22:40 +0100)
virtual/eldiron.nix
virtual/modules/websites/aten.nix
virtual/modules/websites/chloe.nix
virtual/modules/websites/commons/stats.nix [new file with mode: 0644]
virtual/modules/websites/connexionswing.nix
virtual/modules/websites/ludivine.nix
virtual/modules/websites/piedsjaloux.nix

index a1e69091decd65cc158d0fcadf7f22819a1b8691..e1edc01e271b1594d7befb4d28607e42129c8476 100644 (file)
     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
     ];
 
         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
       ];
     };
 
-    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 = {
index 53db03a623061075540361ef65476f06e05cfee5..4688db3d5af2f5ccd294629957af665cb77236ab 100644 (file)
@@ -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 = {
index 67e8e1fb3846df1301ef1b65f8160e9d288f9b5f..3309dd2b6dc2204346842eed3d29d70a87648d14 100644 (file)
@@ -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 (file)
index 0000000..a7ade3b
--- /dev/null
@@ -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);
+  };
+}
index dcc726414bdadf325c3730aa321db88f38142b86..9fc0cecdb5ebba7c28b59bf1986a7b860c8db850 100644 (file)
@@ -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 = {
index 6eb98e7a350242c28771cac5b72523e93194c22a..b3c1c515fe4fb9df005b829598727825e848be75 100644 (file)
@@ -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 = {
index 46161c7e8de8cc4605b13d58ec9c6e00380ab7ff..451ae52a91cce7497a68dda126ba839176bea454 100644 (file)
@@ -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 = {