Skip to content
Snippets Groups Projects
Commit 128e0cf8 authored by Matteo Pergolesi's avatar Matteo Pergolesi
Browse files

Committing cheanges made by INFN PG (2).

parent d5dcb4f1
No related branches found
No related tags found
No related merge requests found
ceilometer 100644 → 100755
#!/usr/bin/env python #!/usr/bin/env python
import optparse import calendar
import ConfigParser
import httplib import httplib
import json import json
import time import math
import optparse
import os import os
import sys import sys
import math import time
from filelock import FileLock
class api_response(): class api_response():
__status = None __status = None
__data = None __data = None
__msg = None __msg = None
def __init__(self, status, data, msg): def __init__(self, status, data, msg):
self.setStatus(status) self.setStatus(status)
self.setData(data) self.setData(data)
self.setMsg(msg) self.setMsg(msg)
def setStatus(self, status): def setStatus(self, status):
self.__status = status self.__status = status
def getStatus(self): def getStatus(self):
return self.__status return self.__status
def setData(self, data): def setData(self, data):
self.__data = data self.__data = data
def getData(self): def getData(self):
return self.__data return self.__data
def setMsg(self, msg): def setMsg(self, msg):
self.__msg = msg self.__msg = msg
def getMsg(self): def getMsg(self):
return self.__msg return self.__msg
class api_request(): class api_request():
@staticmethod @staticmethod
def httpGet(url, host, port, header): def httpGet(url, host, port, header):
conn = httplib.HTTPConnection(host, port) conn = httplib.HTTPConnection(host, port)
conn.request("GET", url, headers = header) conn.request("GET", url, headers = header)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
@staticmethod @staticmethod
def httpsGet(url, host, port, header): def httpsGet(url, host, port, header):
conn = httplib.HTTPSConnection(host, port) conn = httplib.HTTPSConnection(host, port)
conn.request("GET", url, headers = header) conn.request("GET", url, headers = header)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
@staticmethod @staticmethod
def httpPost(url, host, port, params, headers): def httpPost(url, host, port, params, headers):
conn = httplib.HTTPConnection(host, port) conn = httplib.HTTPConnection(host, port)
conn.request("POST", url, params, headers) conn.request("POST", url, params, headers)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
@staticmethod @staticmethod
def httpsPost(url, host, port, params, headers): def httpsPost(url, host, port, params, headers):
conn = httplib.HTTPSConnection(host, port) conn = httplib.HTTPSConnection(host, port)
conn.request("POST", url, params, headers) conn.request("POST", url, params, headers)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
class Ceilometer: def getMeter(token_id, server, meter, resource_id):
if meter in ('cpu', 'cpu_util', 'disk.ephemeral.size', 'disk.root.size', 'memory', 'vcpus'):
__username = '' url = "/v2/meters/%s?q.field=resource_id&q.op=eq&q.value=%s&limit=1" % (meter, resource_id)
__tenant = '' elif meter in ('network.incoming.bytes', 'network.outgoing.bytes'):
__token = '' url = "/v2/meters/%s?q.field=metadata.instance_id&q.op=eq&q.value=%s&limit=1" % (meter, resource_id)
__password = '' else:
__tenantID = None return "Error: unknown meter!"
__server = ''
res_json = json.loads(api_request.httpGet(url, server, 8777, {"X-Auth-Token": token_id}).getData())
def __init__(self, tenant, username, password, server, port):
auth = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % (tenant, username, password) return res_json[0]['counter_volume']
header = {"Content-Type": "application/json", "Accept": "application/json"}
res = api_request.httpsPost('/v2.0/tokens', server, port, auth, header) def getToken(server, tenant, username, password, port):
res_json = json.loads(res.getData()) token_file_path = os.path.join(os.path.dirname(__file__), 'token_backup')
# print json.dumps(res_json, sort_keys=True, indent=4) parser_token = ConfigParser.SafeConfigParser()
self.setUsername(username)
self.setTenant(tenant) with FileLock(token_file_path):
self.setTenantID(res_json['access']['token']['tenant']['id']) parser_token.readfp(open(token_file_path))
self.setToken(res_json['access']['token']['id'])
self.setPassword(password) if (not parser_token.get('token', 'expires')) or (int(float(parser_token.get('token', 'expires')) - time.time()) <= 0):
self.__server=server auth = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % (tenant, username, password)
header = {"Content-Type": "application/json", "Accept": "application/json"}
def setUsername(self, username): res = api_request.httpPost('/v2.0/tokens', server, port, auth, header)
self.__username = username res_json = json.loads(res.getData())
def setPassword(self, password): timestamp = calendar.timegm(time.strptime(res_json['access']['token']['expires'],"%Y-%m-%dT%H:%M:%SZ"))
self.__password = password
parser_token.set('token', 'id', res_json['access']['token']['id'])
def setTenant(self, tenant): parser_token.set('token', 'expires', str(timestamp))
self.__tenant = tenant
with FileLock(token_file_path):
def getTenant(self): with open(token_file_path, 'w') as configfile:
return self.__tenant parser_token.write(configfile)
def setTenantID(self, tenantID): return parser_token.get('token', 'id')
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(): def main():
ceilometer=Ceilometer('service', 'ceilometer', 'PASSWORD', 'prisma-cloud.ba.infn.it', 5000) config_file_path = os.path.join(os.path.dirname(__file__), 'proxy.conf')
# print ceilometer.getMeter('cpu_util', '407480dd-7ba2-40d2-8686-2be78c93c6d6') parser_config = ConfigParser.SafeConfigParser()
print ceilometer.getMeter(sys.argv[1], sys.argv[2]) parser_config.readfp(open(config_file_path))
server = parser_config.get('ceilometer', 'server')
tenant = parser_config.get('ceilometer', 'tenant')
username = parser_config.get('ceilometer', 'username')
password = parser_config.get('ceilometer', 'password')
port = parser_config.get('ceilometer', 'port')
token_id = getToken(server, tenant, username, password, port)
print getMeter(token_id, server, sys.argv[1], sys.argv[2])
if __name__ == "__main__": if __name__ == "__main__":
main() main()
ceilometer.sh 100644 → 100755
#!/bin/bash #!/bin/bash
python /usr/lib/zabbix/externalscripts/ceilometer $1 $2 python /usr/lib/zabbix/externalscripts/ceilometer $1 $2
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment