+*** Comments ***
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+*** Settings ***
+Documentation Library to obtain metrics from Prometheus.
+
+Library String
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+
+
+*** Variables ***
+${TIMEOUT} 30
+${MAX_RETRIES} 1
+${PROMETHEUS_HOST} %{PROMETHEUS_HOSTNAME=UNKNOWN}
+${PROMETHEUS_PORT} %{PROMETHEUS_PORT=9090}
+${PROMETHEUS_USER} %{PROMETHEUS_USER=""}
+${PROMETHEUS_PASSWORD} %{PROMETHEUS_PASSWORD=""}
+
+
+*** Keywords ***
+Set Testsuite Prometheus Variables
+ [Documentation] Set Testsuite Prometheus Variables to be used in subsequent test cases
+
+ IF ${PROMETHEUS_HOST} == 'UNKNOWN'
+ ${local_prometheus_host}= Get Environment Variable OSM_HOSTNAME
+ Set Suite Variable ${PROMETHEUS_HOST} ${local_prometheus_host}
+ Set Suite Variable ${PROMETHEUS_HOST} 9091
+ END
+ Log ${PROMETHEUS_PORT}
+ Log ${PROMETHEUS_HOST}
+ Log ${PROMETHEUS_USER}
+ Log ${PROMETHEUS_PASSWORD}
+
+Get Metric
+ [Documentation] Get the instant value of a metric from Prometheus using multiple filter parameters.
+ ... The filter parameters are given to this function in key=value format (one argument per key/value pair).
+ ... Fails if the metric is not found or has multiple values.
+ ... Examples of execution:
+ ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} ${prometheus_password} \${metric}
+ ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} ${prometheus_password} \${metric} \${param1}=\${value1} \${param2}=\${value2}
+ [Arguments] ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric} @{filter_parameters}
+ ${filter}= Set Variable ${EMPTY}
+ FOR ${param} IN @{filter_parameters}
+ ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in filter parameters
+ Log ${match},${param_name},${param_value}
+ ${filter}= Catenate SEPARATOR= ${filter} ${param_name}="${param_value}",
+ END
+ ${resp}= Execute Prometheus Instant Query ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} query=${metric}{${filter}}
+ ${result_list}= Convert To List ${resp["data"]["result"]}
+ ${results}= Get Length ${result_list}
+ Should Not Be Equal As Numbers 0 ${results} msg=Metric ${metric} not found values=false
+ Should Be Equal As Integers 1 ${results} msg=Metric ${metric} with multiple values values=false
+ RETURN ${result_list[0]["value"][1]}
+
+Execute Prometheus Instant Query
+ [Documentation] Execute a Prometheus Instant Query using HTTP API.
+ ... Return an inline json with the result of the query.
+ ... The requested URL is the next: http://\${prometheus_ip}:\${prometheus_port}/api/v1/query?\${querystring}
+ [Arguments] ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${querystring}
+ ${auth}= IF '${prometheus_password}' != '${EMPTY}' Create List ${prometheus_user} ${prometheus_password} ELSE Set Variable None
+ Create Session prometheus http://${prometheus_ip}:${prometheus_port} timeout=${TIMEOUT} max_retries=${MAX_RETRIES} verify=false auth=${auth}
+ ${resp}= GET On Session prometheus /api/v1/query?${querystring} timeout=${TIMEOUT}
+ Status Should Be 200 ${resp}
+ RETURN ${resp.json()}