diff options
author | Kierán Meinhardt <kmein@posteo.de> | 2022-10-04 19:16:58 +0200 |
---|---|---|
committer | Kierán Meinhardt <kmein@posteo.de> | 2022-10-04 19:16:58 +0200 |
commit | af744fad896ffba2f78a7fd1721fe6887c466d2d (patch) | |
tree | 327b8ccfb422215540c5af1d4c70abc46863c04b /krebs/2configs | |
parent | b5c79e3f77fda034b7c0ad485f07b1e3c92d7533 (diff) |
reaktor2: add cache to krebsfood hook
Diffstat (limited to 'krebs/2configs')
-rw-r--r-- | krebs/2configs/reaktor2.nix | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/krebs/2configs/reaktor2.nix b/krebs/2configs/reaktor2.nix index 9d738813b..33d7ad270 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 |