diff --git a/flake.nix b/flake.nix index 5753ae3..ef6a254 100644 --- a/flake.nix +++ b/flake.nix @@ -4,19 +4,18 @@ inputs = { nixpkgs = { url = "nixpkgs/nixos-24.05"; - # url = "github:natsukium/nixpkgs/pydantic2"; }; }; outputs = { self, nixpkgs, - } @ inputs: let + }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - py = pkgs.python3.override { + py = pkgs.python312.override { packageOverrides = final: prev: { django = prev.django_5; }; @@ -47,7 +46,8 @@ packages.${system} = { healthchecks = let pname = "healthchecks"; - version = "3.4"; + version = "3.6"; + hash = "sha256-aKt9L3ZgZ8HffcNNJaR+hAI38raWuLp2q/6+rvkl2pM="; secrets = [ "DB_PASSWORD" "DISCORD_CLIENT_SECRET" @@ -64,7 +64,6 @@ "TRELLO_APP_KEY" "TWILIO_AUTH" ]; - hash = "sha256-hiuw7XfCDy+9fzuQMaeN9+XsENeBI1RNXy8IM1HIFhI="; localSettings = pkgs.writeText "local_settings.py" '' import os CSRF_TRUSTED_HOSTS = os.getenv("CSRF_TRUSTED_HOSTS", "").split(",") @@ -195,15 +194,27 @@ ); maintenance = let - script = pkgs.writeShellScript "maintenance" '' - CURL_OPTIONS="--fail --silent --show-error --max-time 10 --retry 5 --output /dev/null" - ${pkgs.curl}/bin/curl $CURL_OPTIONS http://webserver.healthchecks.svc/ping/$MAINTENANCE_CHECK_UUID/start - ${self.packages.${system}.healthchecks}/app/manage.py prunenotifications - ${self.packages.${system}.healthchecks}/app/manage.py pruneusers - ${self.packages.${system}.healthchecks}/app/manage.py prunetokenbucket - ${self.packages.${system}.healthchecks}/app/manage.py pruneflips - ${pkgs.curl}/bin/curl $CURL_OPTIONS http://webserver.healthchecks.svc/ping/$MAINTENANCE_CHECK_UUID - ''; + script = pkgs.writeTextFile { + name = "maintenance"; + text = pkgs.lib.concatStringsSep "\n" [ + #!${pkgs.nushell}/bin/nu" + "" + "alias manage = ${self.packages.${system}.healthchecks}/app/manage.py" + "" + (builtins.readFile ./maintenance.nu) + ]; + executable = true; + destination = "/bin/maintenance"; + }; + # script = pkgs.writeShellScript "maintenance" '' + # CURL_OPTIONS="--fail --silent --show-error --max-time 10 --retry 5 --output /dev/null" + # ${pkgs.curl}/bin/curl $CURL_OPTIONS http://webserver.healthchecks.svc/ping/$MAINTENANCE_CHECK_UUID/start + # ${self.packages.${system}.healthchecks}/app/manage.py prunenotifications + # ${self.packages.${system}.healthchecks}/app/manage.py pruneusers + # ${self.packages.${system}.healthchecks}/app/manage.py prunetokenbucket + # ${self.packages.${system}.healthchecks}/app/manage.py pruneflips + # ${pkgs.curl}/bin/curl $CURL_OPTIONS http://webserver.healthchecks.svc/ping/$MAINTENANCE_CHECK_UUID + # ''; in pkgs.dockerTools.buildLayeredImage ( pkgs.lib.attrsets.recursiveUpdate baseImage { diff --git a/maintenance.nu b/maintenance.nu new file mode 100644 index 0000000..e1244b5 --- /dev/null +++ b/maintenance.nu @@ -0,0 +1,63 @@ +def healthcheck_start [ + url: record +] { + if not ($env | get -i HEALTHCHECK_URL | is-empty ) { + http get --full --max-time 10 ($url | update path $"($in.path)/start" | url join) | ignore + } +} + +def healthcheck_log [ + url: record + log: string +] { + if not ($url | is-empty ) { + http post --max-time 10 ($url | update path $"($in.path)/log" | url join) $log | ignore + } +} + +def healthcheck_fail [ + url: record + log: string +] { + if not ($url | is-empty ) { + http post --full --max-time 10 ($url | update path $"($in.path)/fail" | url join) $log | ignore + } +} + +def healthcheck_stop [ + url: record +] { + if not ($url | is-empty ) { + http get --full --max-time 10 ($url | url join) | ignore + } +} + +def main [] { + let rid = (random uuid) + + let healthcheck_url = if not ($env | get -i HEALTHCHECK_URL | is-empty) { + $env.HEALTHCHECK_URL | url parse | update params ($in | get params | insert rid $rid) + } else { + {} + } + + healthcheck_start $healthcheck_url + + let result = (do {manage prunenotifications} | complete) + print ($result.stdout | str trim --right) + healthcheck_log $healthcheck_url $result.stdout + + let result = (do {manage pruneusers} | complete) + print ($result.stdout | str trim --right) + healthcheck_log $healthcheck_url $result.stdout + + let result = (do {manage prunetokenbucket} | complete) + print ($result.stdout | str trim --right) + healthcheck_log $healthcheck_url $result.stdout + + let result = (do {manage pruneflips} | complete) + print ($result.stdout | str trim --right) + healthcheck_log $healthcheck_url $result.stdout + + healthcheck_stop $healthcheck_url +}