| limon | 7b58bc1 | 2020-05-14 18:32:51 +0200 | [diff] [blame] | 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 |
| 4 | # |
| 5 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 6 | # |
| 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. |
| 12 | |
| 13 | *** Settings *** |
| 14 | Documentation Library to obtain metrics from Prometheus. |
| 15 | |
| 16 | Library String |
| 17 | Library Collections |
| 18 | Library RequestsLibrary |
| 19 | |
| 20 | |
| 21 | *** Variables *** |
| 22 | ${timeout} 1000 |
| 23 | ${max_retries} 1 |
| 24 | |
| 25 | |
| 26 | *** Keywords *** |
| 27 | Get Metric |
| 28 | [Documentation] Get the instant value of a metric from Prometheus using multiple filter parameters. |
| 29 | ... The filter parameters are given to this function in key=value format (one argument per key/value pair). |
| 30 | ... Fails if the metric is not found or has multiple values. |
| 31 | ... Examples of execution: |
| 32 | ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} \${metric} |
| 33 | ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} \${metric} \${param1}=\${value1} \${param2}=\${value2} |
| 34 | |
| 35 | [Arguments] ${prometheus_ip} ${prometheus_port} ${metric} @{filter_parameters} |
| 36 | |
| 37 | ${filter}= Set Variable ${EMPTY} |
| 38 | FOR ${param} IN @{filter_parameters} |
| 39 | ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in filter parameters |
| 40 | ${filter}= Catenate SEPARATOR= ${filter} ${param_name}="${param_value}", |
| 41 | END |
| 42 | ${resp}= Execute Prometheus Instant Query ${prometheus_host} ${prometheus_port} query=${metric}{${filter}} |
| 43 | ${result_list}= Convert To List ${resp["data"]["result"]} |
| 44 | ${results}= Get Length ${result_list} |
| 45 | Should Not Be Equal As Numbers 0 ${results} msg=Metric ${metric} not found values=false |
| 46 | Should Be Equal As Integers 1 ${results} msg=Metric ${metric} with multiple values values=false |
| 47 | [Return] ${result_list[0]["value"][1]} |
| 48 | |
| 49 | |
| 50 | Execute Prometheus Instant Query |
| 51 | [Documentation] Execute a Prometheus Instant Query using HTTP API. |
| 52 | ... Return an inline json with the result of the query. |
| 53 | ... The requested URL is the next: http://\${prometheus_ip}:\${prometheus_port}/api/v1/query?\${querystring} |
| 54 | |
| 55 | [Arguments] ${prometheus_ip} ${prometheus_port} ${querystring} |
| 56 | |
| 57 | Create Session prometheus http://${prometheus_ip}:${prometheus_port} timeout=${timeout} max_retries=${max_retries} |
| 58 | ${resp}= Get Request prometheus /api/v1/query?${querystring} timeout=${timeout} |
| 59 | Status Should Be 200 ${resp} |
| 60 | [Return] ${resp.json()} |