github.com/crowdsecurity/crowdsec@v1.6.1/test/bats/08_metrics.bats (about) 1 #!/usr/bin/env bats 2 # vim: ft=bats:list:ts=8:sts=4:sw=4:et:ai:si: 3 4 set -u 5 6 setup_file() { 7 load "../lib/setup_file.sh" 8 } 9 10 teardown_file() { 11 load "../lib/teardown_file.sh" 12 } 13 14 setup() { 15 load "../lib/setup.sh" 16 ./instance-data load 17 } 18 19 teardown() { 20 ./instance-crowdsec stop 21 } 22 23 #---------- 24 25 @test "cscli metrics (crowdsec not running)" { 26 rune -1 cscli metrics 27 # crowdsec is down 28 assert_stderr --partial 'failed to fetch metrics: executing GET request for URL \"http://127.0.0.1:6060/metrics\" failed: Get \"http://127.0.0.1:6060/metrics\": dial tcp 127.0.0.1:6060: connect: connection refused' 29 } 30 31 @test "cscli metrics (bad configuration)" { 32 config_set '.prometheus.foo="bar"' 33 rune -1 cscli metrics 34 assert_stderr --partial "field foo not found in type csconfig.PrometheusCfg" 35 } 36 37 @test "cscli metrics (.prometheus.enabled=false)" { 38 config_set '.prometheus.enabled=false' 39 rune -1 cscli metrics 40 assert_stderr --partial "prometheus is not enabled, can't show metrics" 41 } 42 43 @test "cscli metrics (missing listen_addr)" { 44 config_set 'del(.prometheus.listen_addr)' 45 rune -0 ./instance-crowdsec start 46 rune -0 cscli metrics --debug 47 assert_stderr --partial "prometheus.listen_addr is empty, defaulting to 127.0.0.1" 48 } 49 50 @test "cscli metrics (missing listen_port)" { 51 config_set 'del(.prometheus.listen_port)' 52 rune -0 ./instance-crowdsec start 53 rune -0 cscli metrics --debug 54 assert_stderr --partial "prometheus.listen_port is empty or zero, defaulting to 6060" 55 } 56 57 @test "cscli metrics (missing prometheus section)" { 58 config_set 'del(.prometheus)' 59 rune -1 cscli metrics 60 assert_stderr --partial "prometheus is not enabled, can't show metrics" 61 } 62 63 @test "cscli metrics" { 64 rune -0 ./instance-crowdsec start 65 rune -0 cscli lapi status 66 rune -0 cscli metrics 67 assert_output --partial "Route" 68 assert_output --partial '/v1/watchers/login' 69 assert_output --partial "Local API Metrics:" 70 71 rune -0 cscli metrics -o json 72 rune -0 jq 'keys' <(output) 73 assert_output --partial '"alerts",' 74 assert_output --partial '"parsers",' 75 76 rune -0 cscli metrics -o raw 77 assert_output --partial 'alerts: {}' 78 assert_output --partial 'parsers: {}' 79 } 80 81 @test "cscli metrics list" { 82 rune -0 cscli metrics list 83 assert_output --regexp "Type.*Title.*Description" 84 85 rune -0 cscli metrics list -o json 86 rune -0 jq -c '.[] | [.type,.title]' <(output) 87 assert_line '["acquisition","Acquisition Metrics"]' 88 89 rune -0 cscli metrics list -o raw 90 assert_line "- type: acquisition" 91 assert_line " title: Acquisition Metrics" 92 } 93 94 @test "cscli metrics show" { 95 rune -0 ./instance-crowdsec start 96 rune -0 cscli lapi status 97 98 assert_equal "$(cscli metrics)" "$(cscli metrics show)" 99 100 rune -1 cscli metrics show foobar 101 assert_stderr --partial "unknown metrics type: foobar" 102 103 rune -0 cscli metrics show lapi 104 assert_output --partial "Local API Metrics:" 105 assert_output --regexp "Route.*Method.*Hits" 106 assert_output --regexp "/v1/watchers/login.*POST" 107 108 rune -0 cscli metrics show lapi -o json 109 rune -0 jq -c '.lapi."/v1/watchers/login" | keys' <(output) 110 assert_json '["POST"]' 111 112 rune -0 cscli metrics show lapi -o raw 113 assert_line 'lapi:' 114 assert_line ' /v1/watchers/login:' 115 }