#!/usr/bin/env python import optparse import httplib import json import time import os import sys import math class api_response(): __status = None __data = None __msg = None def __init__(self, status, data, msg): self.setStatus(status) self.setData(data) self.setMsg(msg) def setStatus(self, status): self.__status = status def getStatus(self): return self.__status def setData(self, data): self.__data = data def getData(self): return self.__data def setMsg(self, msg): self.__msg = msg def getMsg(self): return self.__msg class api_request(): @staticmethod def httpGet(url, host, port, header): conn = httplib.HTTPConnection(host, port) conn.request("GET", url, headers = header) res = conn.getresponse() response = api_response(res.status, res.read(), res.msg) return response @staticmethod def httpsGet(url, host, port, header): conn = httplib.HTTPSConnection(host, port) conn.request("GET", url, headers = header) res = conn.getresponse() response = api_response(res.status, res.read(), res.msg) return response @staticmethod def httpPost(url, host, port, params, headers): conn = httplib.HTTPConnection(host, port) conn.request("POST", url, params, headers) res = conn.getresponse() response = api_response(res.status, res.read(), res.msg) return response @staticmethod def httpsPost(url, host, port, params, headers): conn = httplib.HTTPSConnection(host, port) conn.request("POST", url, params, headers) res = conn.getresponse() response = api_response(res.status, res.read(), res.msg) return response class Ceilometer: __username = '' __tenant = '' __token = '' __password = '' __tenantID = None __server = '' def __init__(self, tenant, username, password, server, port): auth = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % (tenant, username, password) header = {"Content-Type": "application/json", "Accept": "application/json"} res = api_request.httpsPost('/v2.0/tokens', server, port, auth, header) res_json = json.loads(res.getData()) # print json.dumps(res_json, sort_keys=True, indent=4) self.setUsername(username) self.setTenant(tenant) self.setTenantID(res_json['access']['token']['tenant']['id']) self.setToken(res_json['access']['token']['id']) self.setPassword(password) self.__server=server def setUsername(self, username): self.__username = username def setPassword(self, password): self.__password = password def setTenant(self, tenant): self.__tenant = tenant def getTenant(self): return self.__tenant def setTenantID(self, tenantID): self.__tenantID = tenantID def getTenantID(self): return self.__tenantID def setToken(self, token): self.__token = token def getToken(self): return self.__token def getAuth(self): return {"X-Auth-Token": self.__token} def getMeter(self, meter, resource_id): url = "/v2/meters/%s?q.field=resource_id&q.op=eq&q.value=%s&limit=1" % (meter, resource_id ) res = api_request.httpGet(url, self.__server, 8777, self.getAuth()) # print res.getStatus(), res.getMsg() res_json = json.loads(res.getData()) # print json.dumps(res_json, sort_keys=True, indent=4) # return res_json[0]['counter_volume'] meter = res_json[0]['counter_volume'] # if type(meter) is float: # meter = math.floor(meter) return meter def main(): ceilometer=Ceilometer('service', 'ceilometer', 'PASSWORD', 'prisma-cloud.ba.infn.it', 5000) # print ceilometer.getMeter('cpu_util', '407480dd-7ba2-40d2-8686-2be78c93c6d6') print ceilometer.getMeter(sys.argv[1], sys.argv[2]) if __name__ == "__main__": main()