Skip to content
Snippets Groups Projects
ceilometer 3.65 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/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()