From e4a945cd175fa78ee6373f2a30505c4322befa2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Thu, 10 Jan 2019 22:40:32 +0100 Subject: Move goaccess to specific module --- virtual/modules/websites/commons/stats.nix | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 virtual/modules/websites/commons/stats.nix (limited to 'virtual/modules/websites/commons/stats.nix') 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); + }; +} -- cgit v1.2.3