1 # Licensed under the Apache License, Version 2.0 (the "License");
2 # you may not use this file except in compliance with the License.
3 # You may obtain a copy of the License at
5 # http://www.apache.org/licenses/LICENSE-2.0
7 # Unless required by applicable law or agreed to in writing, software
8 # distributed under the License is distributed on an "AS IS" BASIS,
9 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 # See the License for the specific language governing permissions and
11 # limitations under the License.
14 Documentation Library to obtain metrics from Prometheus.
18 Library RequestsLibrary
24 ${prometheus_host} %{PROMETHEUS_HOSTNAME}
25 ${prometheus_port} 9090
26 ${prometheus_user} %{PROMETHEUS_USER}
27 ${prometheus_password} %{PROMETHEUS_PASSWORD}
31 Set Testsuite Prometheus Variables
32 [Documentation] Set Testsuite Prometheus Variables to be used in subsequent test cases
34 ${prometheus_port} Set Variable If '${prometheus_host}'=='${EMPTY}' 9091
35 Log ${prometheus_port}
36 ${prometheus_host} Set Variable If '${prometheus_host}'=='${EMPTY}' %{OSM_HOSTNAME}
37 Log ${prometheus_host}
38 Log ${prometheus_user}
39 Log ${prometheus_password}
40 Set Suite Variable ${prometheus_host}
41 Set Suite Variable ${prometheus_port}
42 Set Suite Variable ${prometheus_user}
43 Set Suite Variable ${prometheus_password}
47 [Documentation] Get the instant value of a metric from Prometheus using multiple filter parameters.
48 ... The filter parameters are given to this function in key=value format (one argument per key/value pair).
49 ... Fails if the metric is not found or has multiple values.
50 ... Examples of execution:
51 ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} ${prometheus_password} \${metric}
52 ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} ${prometheus_password} \${metric} \${param1}=\${value1} \${param2}=\${value2}
54 [Arguments] ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric} @{filter_parameters}
56 ${filter}= Set Variable ${EMPTY}
57 FOR ${param} IN @{filter_parameters}
58 ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in filter parameters
59 ${filter}= Catenate SEPARATOR= ${filter} ${param_name}="${param_value}",
61 ${resp}= Execute Prometheus Instant Query ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} query=${metric}{${filter}}
62 ${result_list}= Convert To List ${resp["data"]["result"]}
63 ${results}= Get Length ${result_list}
64 Should Not Be Equal As Numbers 0 ${results} msg=Metric ${metric} not found values=false
65 Should Be Equal As Integers 1 ${results} msg=Metric ${metric} with multiple values values=false
66 [Return] ${result_list[0]["value"][1]}
69 Execute Prometheus Instant Query
70 [Documentation] Execute a Prometheus Instant Query using HTTP API.
71 ... Return an inline json with the result of the query.
72 ... The requested URL is the next: http://\${prometheus_ip}:\${prometheus_port}/api/v1/query?\${querystring}
74 [Arguments] ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${querystring}
75 ${auth}= IF '${prometheus_password}'!='${EMPTY}' Create List ${prometheus_user} ${prometheus_password} ELSE Set Variable None
76 Create Session prometheus http://${prometheus_ip}:${prometheus_port} timeout=${timeout} max_retries=${max_retries} verify=false auth=${auth}
77 ${resp}= GET On Session prometheus /api/v1/query?${querystring} timeout=${timeout}
78 Status Should Be 200 ${resp}
79 [Return] ${resp.json()}