at master 2.3 kB view raw
1{ lib, pkgs, ... }: 2{ 3 name = "karma"; 4 nodes = { 5 server = 6 { ... }: 7 { 8 services.prometheus.alertmanager = { 9 enable = true; 10 logLevel = "debug"; 11 port = 9093; 12 openFirewall = true; 13 configuration = { 14 global = { 15 resolve_timeout = "1m"; 16 }; 17 route = { 18 # Root route node 19 receiver = "test"; 20 group_by = [ "..." ]; 21 continue = false; 22 group_wait = "1s"; 23 group_interval = "15s"; 24 repeat_interval = "24h"; 25 }; 26 receivers = [ 27 { 28 name = "test"; 29 webhook_configs = [ 30 { 31 url = "http://localhost:1234"; 32 send_resolved = true; 33 max_alerts = 0; 34 } 35 ]; 36 } 37 ]; 38 }; 39 }; 40 services.karma = { 41 enable = true; 42 openFirewall = true; 43 settings = { 44 listen = { 45 address = "0.0.0.0"; 46 port = 8081; 47 }; 48 alertmanager = { 49 servers = [ 50 { 51 name = "alertmanager"; 52 uri = "https://127.0.0.1:9093"; 53 } 54 ]; 55 }; 56 karma.name = "test-dashboard"; 57 log.config = true; 58 log.requests = true; 59 log.timestamp = true; 60 }; 61 }; 62 }; 63 }; 64 65 testScript = '' 66 start_all() 67 68 with subtest("Wait for server to come up"): 69 70 server.wait_for_unit("alertmanager.service") 71 server.wait_for_unit("karma.service") 72 73 server.sleep(5) # wait for both services to settle 74 75 server.wait_for_open_port(9093) 76 server.wait_for_open_port(8081) 77 78 with subtest("Test alertmanager readiness"): 79 server.succeed("curl -s http://127.0.0.1:9093/-/ready") 80 81 # Karma only starts serving the dashboard once it has established connectivity to all alertmanagers in its config 82 # Therefore, this will fail if karma isn't able to reach alertmanager 83 server.succeed("curl -s http://127.0.0.1:8081") 84 85 server.shutdown() 86 ''; 87}