1 { lib, pkgs, config, mylibs, ... }:
3 cfg = config.services.myWebsites.commons.stats;
6 services.myWebsites.commons.stats = {
7 enable = lib.mkEnableOption "enable statistics";
9 type = lib.types.listOf (lib.types.submodule {
11 conf = lib.mkOption { type = lib.types.path; };
12 name = lib.mkOption { type = lib.types.string; };
16 description = "Sites to generate stats";
21 config = lib.mkIf cfg.enable {
22 environment.systemPackages = [
26 nixpkgs.overlays = [ (self: super: rec {
27 goaccess = super.goaccess.overrideAttrs(old: rec {
28 configureFlags = old.configureFlags ++ [ "--enable-tcb=btree" ];
29 buildInputs = old.buildInputs ++ [ self.tokyocabinet self.bzip2 ];
36 stats = domain: conf: let
37 d = pkgs.writeScriptBin "stats-${domain}" ''
38 #!${pkgs.stdenv.shell}
41 date_regex=$(LC_ALL=C date -d yesterday +'%d\/%b\/%Y')
43 trap "rm -f $TMPFILE" EXIT
45 cat /var/log/httpd/access_log-${domain} | sed -n "/\\[$date_regex/ p" > $TMPFILE
46 for i in /var/log/httpd/access_log-${domain}*.gz; do
47 zcat "$i" | sed -n "/\\[$date_regex/ p" >> $TMPFILE
49 goaccess $TMPFILE --no-progress -o /var/lib/goaccess/${domain}/index.html -p ${conf}
51 in "${d}/bin/stats-${domain}";
52 allStats = sites: pkgs.writeScript "stats" ''
53 #!${pkgs.stdenv.shell}
55 ${builtins.concatStringsSep "\n" (map (v: stats v.name v.conf) sites)}
59 "5 0 * * * root ${allStats cfg.sites}"
63 system.activationScripts.goaccess = ''
64 mkdir -p /var/lib/goaccess
66 builtins.concatStringsSep "\n" (map (v: "mkdir -p /var/lib/goaccess/${v.name}") cfg.sites);