diff --git a/tcp_tests/managers/clients/__init__.py b/tcp_tests/managers/clients/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tcp_tests/managers/clients/__init__.py
diff --git a/tcp_tests/managers/clients/http_client.py b/tcp_tests/managers/clients/http_client.py
new file mode 100644
index 0000000..5453141
--- /dev/null
+++ b/tcp_tests/managers/clients/http_client.py
@@ -0,0 +1,49 @@
+import logging
+import urlparse
+
+import requests
+
+from tcp_tests import logger
+
+LOG = logger.logger
+
+logger = logging.getLogger(__name__)
+
+
+class HttpClient(object):
+    def __init__(self, base_url=None, user=None, password=None):
+        self.base_url = base_url
+        self.kwargs = {}
+        if user and password:
+            self.kwargs.update({"auth": (user, password)})
+
+    def set_base_url(self, base_url):
+        self.base_url = base_url
+
+    def request(self, url, method, headers=None, body=None, **kwargs):
+        logger.debug(
+            "Sending request to: {}, body: {}, headers: {}, kwargs: {}".format(
+                url, body, headers, kwargs))
+        if headers is None:
+            headers = {'Content-Type': 'application/json'}
+
+        kwargs.update(self.kwargs)
+        r = requests.request(method, urlparse.urljoin(self.base_url, url),
+                             headers=headers, data=body, **kwargs)
+
+        if not r.ok:
+            raise requests.HTTPError(r.content)
+        logger.debug(r.content)
+        return r.headers, r.content
+
+    def post(self, url, body=None, **kwargs):
+        return self.request(url, "POST", body=body, **kwargs)
+
+    def get(self, url, **kwargs):
+        return self.request(url, "GET", **kwargs)
+
+    def put(self, url, body=None, **kwargs):
+        return self.request(url, "PUT", body=body, **kwargs)
+
+    def delete(self, url, **kwargs):
+        return self.request(url, "DELETE", **kwargs)
diff --git a/tcp_tests/managers/clients/prometheus/__init__.py b/tcp_tests/managers/clients/prometheus/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tcp_tests/managers/clients/prometheus/__init__.py
diff --git a/tcp_tests/managers/clients/prometheus/prometheus_client.py b/tcp_tests/managers/clients/prometheus/prometheus_client.py
new file mode 100644
index 0000000..bf748af
--- /dev/null
+++ b/tcp_tests/managers/clients/prometheus/prometheus_client.py
@@ -0,0 +1,31 @@
+import json
+
+from tcp_tests.managers.clients import http_client
+
+
+class PrometheusClient(object):
+    def __init__(self, host, port, proto):
+        self.url = '{0}://{1}:{2}'.format(proto, host, port)
+        self.client = http_client.HttpClient(base_url=self.url)
+
+    def get_targets(self):
+        _, resp = self.client.get("/api/v1/targets")
+        targets = json.loads(resp)
+        return targets["data"]["activeTargets"]
+
+    def get_query(self, query, timestamp=None):
+        params = {
+            "query": query
+        }
+
+        if timestamp is not None:
+            params.update({"time": timestamp})
+
+        _, resp = self.client.get("/api/v1/query", params=params)
+
+        query_result = json.loads(resp)
+        if query_result["status"] != "success":
+            raise Exception("Failed resp: {}".format(resp))
+
+        if query_result["data"]["resultType"] == "vector":
+            return query_result["data"]["result"]
