First instance of the gnocchi plugin
[osm/MON.git] / plugins / OpenStack / common.py
diff --git a/plugins/OpenStack/common.py b/plugins/OpenStack/common.py
new file mode 100644 (file)
index 0000000..d706456
--- /dev/null
@@ -0,0 +1,86 @@
+"""Common methods for the Aodh Sender/Receiver."""
+
+import logging as log
+
+from keystoneclient.v3 import client
+
+from plugins.OpenStack.settings import Config
+
+import requests
+
+# from keystoneauth1.identity.v3 import AuthMethod
+# from keystoneclient.service_catalog import ServiceCatalog
+
+
+class Common(object):
+    """Common calls for Gnocchi/Aodh plugins."""
+
+    def __init__(self):
+        """Create the common instance."""
+        self._auth_token = None
+        self._endpoint = None
+        self._ks = None
+
+    def _authenticate(self, tenant_id):
+        """Authenticate and/or renew the authentication token."""
+        if self._auth_token is not None:
+            return self._auth_token
+
+        try:
+            cfg = Config.instance()
+            self._ks = client.Client(auth_url=cfg.OS_AUTH_URL,
+                                     username=cfg.OS_USERNAME,
+                                     password=cfg.OS_PASSWORD,
+                                     tenant_name=cfg.OS_TENANT_NAME)
+            self._auth_token = self._ks.auth_token
+        except Exception as exc:
+
+            log.warn("Authentication failed with the following exception: %s",
+                     exc)
+            self._auth_token = None
+
+        return self._auth_token
+
+    def get_endpoint(self, service_type):
+        """Get the endpoint for Gnocchi/Aodh."""
+        try:
+            return self._ks.service_catalog.url_for(
+                service_type=service_type,
+                endpoint_type='internalURL',
+                region_name='RegionOne')
+        except Exception as exc:
+            log.warning("Failed to retreive endpoint for Aodh due to: %s",
+                        exc)
+        return None
+
+    @classmethod
+    def _perform_request(cls, url, auth_token,
+                         req_type=None, payload=None, params=None):
+        """Perform the POST/PUT/GET/DELETE request."""
+        # request headers
+        headers = {'X-Auth-Token': auth_token,
+                   'Content-type': 'application/json'}
+        # perform request and return its result
+        response = None
+        try:
+            if req_type == "put":
+                response = requests.put(
+                    url, data=payload, headers=headers,
+                    timeout=1)
+            elif req_type == "post":
+                response = requests.post(
+                    url, data=payload, headers=headers,
+                    timeout=1)
+            elif req_type == "get":
+                response = requests.get(
+                    url, params=params, headers=headers, timeout=1)
+            elif req_type == "delete":
+                response = requests.delete(
+                    url, headers=headers, timeout=1)
+            else:
+                log.warn("Invalid request type")
+
+        except Exception as e:
+            log.warn("Exception thrown on request", e)
+
+        return response