From af744fad896ffba2f78a7fd1721fe6887c466d2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Tue, 4 Oct 2022 19:16:58 +0200 Subject: reaktor2: add cache to krebsfood hook --- krebs/2configs/reaktor2.nix | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'krebs/2configs/reaktor2.nix') diff --git a/krebs/2configs/reaktor2.nix b/krebs/2configs/reaktor2.nix index 9d738813..33d7ad27 100644 --- a/krebs/2configs/reaktor2.nix +++ b/krebs/2configs/reaktor2.nix @@ -79,17 +79,34 @@ let pattern = "18@p"; activate = "match"; command = { - env.radius = toString 250; # metres around c-base to search + env = { + radius = toString 250; # metres around c-base to search + age_threshold = toString (24 * 60 * 60); + state_file = "${stateDir}/krebsfood"; + }; filename = pkgs.writeDash "krebsfood" '' set -efu expected_max_results=1024 # the upper bound on the number of restaurants - echo '[out:json];node(id:260050809)->.cbase; - ( - node(around.cbase:'$radius')[amenity=fast_food]; - node(around.cbase:'$radius')[amenity=restaurant]; - );out;' \ - | ${pkgs.curl}/bin/curl -sSL -d @- -X POST http://overpass-api.de/api/interpreter \ + file_age_seconds() { + expr "$(date +%s)" - "$(date +%s -r "$1")" + } + + get_restaurants() { + if [ -f "$state_file" ]; then + [ "$(file_age_seconds "$state_file")" -lt "$age_threshold" ] && cat "$state_file" + else + echo '[out:json];node(id:260050809)->.cbase; + ( + node(around.cbase:'$radius')[amenity=fast_food]; + node(around.cbase:'$radius')[amenity=restaurant]; + );out;' \ + | ${pkgs.curl}/bin/curl -sSL -d @- -X POST http://overpass-api.de/api/interpreter \ + | tee "$state_file" + fi + } + + get_restaurants \ | ${pkgs.jq}/bin/jq -r --argjson random "$(shuf -i 0-$expected_max_results -n 1)" ' .elements | length as $length -- cgit v1.2.3