135 lines
4.3 KiB
Diff
135 lines
4.3 KiB
Diff
From 53cbfd342bcc39a98f0be257a70fefde3fe404eb Mon Sep 17 00:00:00 2001
|
|
From: gongzt <gong_zhengtang@163.com>
|
|
Date: Wed, 18 Oct 2023 17:22:26 +0800
|
|
Subject: fix python3-prometheus-api-client import error
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
---
|
|
vulcanus/database/proxy.py | 101 -------------------------------------
|
|
1 file changed, 101 deletions(-)
|
|
|
|
diff --git a/vulcanus/database/proxy.py b/vulcanus/database/proxy.py
|
|
index 94e9883..c1ff0fe 100644
|
|
--- a/vulcanus/database/proxy.py
|
|
+++ b/vulcanus/database/proxy.py
|
|
@@ -24,7 +24,6 @@ import sqlalchemy
|
|
from sqlalchemy.exc import SQLAlchemyError, DisconnectionError
|
|
from sqlalchemy.orm import sessionmaker
|
|
from elasticsearch import Elasticsearch, ElasticsearchException, helpers, TransportError, NotFoundError
|
|
-from prometheus_api_client import PrometheusConnect, PrometheusApiClientException
|
|
import redis
|
|
from redis import Redis, ConnectionPool
|
|
from vulcanus.log.log import LOGGER
|
|
@@ -516,106 +515,6 @@ class ElasticsearchProxy(DataBaseProxy):
|
|
return query_body
|
|
|
|
|
|
-class PromDbProxy(DataBaseProxy):
|
|
- """
|
|
- Proxy of prometheus time series database
|
|
- """
|
|
-
|
|
- def __init__(self, host=None, port=None):
|
|
- """
|
|
- Init Prometheus time series database proxy
|
|
-
|
|
- Args:
|
|
- host (str)
|
|
- port (int)
|
|
- """
|
|
- self._host = host or configuration.prometheus.get('IP')
|
|
- self._port = port or configuration.prometheus.get('PORT')
|
|
- self._prom = PrometheusConnect(url="http://%s:%s" % (self._host, self._port), disable_ssl=True)
|
|
- if not self.connected:
|
|
- raise DatabaseConnectionFailed("Promethus connection failed.")
|
|
-
|
|
- @property
|
|
- def connected(self):
|
|
- """
|
|
- Make a connect to database connection pool
|
|
-
|
|
- Returns:
|
|
- bool: connect succeed or fail
|
|
- """
|
|
-
|
|
- return self._prom.check_prometheus_connection()
|
|
-
|
|
- def query(self, host, time_range, metric, label_config=None):
|
|
- """
|
|
- query a metric's data of a host during a time range
|
|
- Args:
|
|
- host (str): host ip
|
|
- time_range (list): list of datetime.datetime
|
|
- metric (str): data type of prometheus
|
|
- label_config (dict): label config of metric
|
|
-
|
|
- Returns:
|
|
- tuple: (bool, dict)
|
|
- """
|
|
- start_time = datetime.fromtimestamp(time_range[0])
|
|
- end_time = datetime.fromtimestamp(time_range[1])
|
|
-
|
|
- # metric of a host's all exporters
|
|
- # e.g. metric "up" of localhost: up{instance=127.0.0.1\\d{1,5}}
|
|
- host_condition = 'instance=~"%s:\\\\d{1,5}"' % host
|
|
- combined_condition = PromDbProxy._combine_condition(label_config, host_condition)
|
|
-
|
|
- metric_with_condition = metric + combined_condition
|
|
-
|
|
- try:
|
|
- data = self._prom.get_metric_range_data(
|
|
- metric_name=metric_with_condition,
|
|
- start_time=start_time,
|
|
- end_time=end_time,
|
|
- )
|
|
-
|
|
- if not data:
|
|
- LOGGER.warning(
|
|
- "Query result is empty. Exporter of host %s doesn't record the " "metric '%s' during [%s, %s].",
|
|
- host,
|
|
- metric,
|
|
- start_time,
|
|
- end_time,
|
|
- )
|
|
-
|
|
- return True, data
|
|
-
|
|
- except (ValueError, TypeError, PrometheusApiClientException) as error:
|
|
- LOGGER.error("Prometheus query failed. %s", error)
|
|
- failed_item = {
|
|
- "host_id": host,
|
|
- "name": metric,
|
|
- "label": label_config,
|
|
- }
|
|
- return False, [failed_item]
|
|
-
|
|
- @staticmethod
|
|
- def _combine_condition(label_config, *args):
|
|
- """
|
|
- Combine condition together
|
|
- Args:
|
|
- label_config: label config of metric
|
|
- *args (str/list): one or multiple string of condition
|
|
-
|
|
- Returns:
|
|
- str
|
|
- """
|
|
- condition_list = list(args)
|
|
-
|
|
- if label_config:
|
|
- for key, value in label_config.items():
|
|
- condition_list.append(str(key) + "=" + '"' + value + '"')
|
|
-
|
|
- combined_condition = "{" + ",".join(condition_list) + "}"
|
|
- return combined_condition
|
|
-
|
|
-
|
|
@singleton
|
|
class RedisProxy(DataBaseProxy):
|
|
"""
|
|
--
|
|
2.33.0
|
|
|