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
import optparse
import calendar
import ConfigParser
import httplib
import json
import time
import math
import optparse
import os
import sys
import math
import time
from filelock import FileLock
class api_response():
__status = None
__data = None
__msg = None
__status = None
__data = None
__msg = None
def __init__(self, status, data, msg):
self.setStatus(status)
self.setData(data)
self.setMsg(msg)
def __init__(self, status, data, msg):
self.setStatus(status)
self.setData(data)
self.setMsg(msg)
def setStatus(self, status):
self.__status = status
def setStatus(self, status):
self.__status = status
def getStatus(self):
return self.__status
def getStatus(self):
return self.__status
def setData(self, data):
self.__data = data
def setData(self, data):
self.__data = data
def getData(self):
return self.__data
def getData(self):
return self.__data
def setMsg(self, msg):
self.__msg = msg
def setMsg(self, msg):
self.__msg = msg
def getMsg(self):
return self.__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
@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
def getMeter(token_id, server, meter, resource_id):
if meter in ('cpu', 'cpu_util', 'disk.ephemeral.size', 'disk.root.size', 'memory', 'vcpus'):
url = "/v2/meters/%s?q.field=resource_id&q.op=eq&q.value=%s&limit=1" % (meter, resource_id)
elif meter in ('network.incoming.bytes', 'network.outgoing.bytes'):
url = "/v2/meters/%s?q.field=metadata.instance_id&q.op=eq&q.value=%s&limit=1" % (meter, resource_id)
else:
return "Error: unknown meter!"
res_json = json.loads(api_request.httpGet(url, server, 8777, {"X-Auth-Token": token_id}).getData())
return res_json[0]['counter_volume']
def getToken(server, tenant, username, password, port):
token_file_path = os.path.join(os.path.dirname(__file__), 'token_backup')
parser_token = ConfigParser.SafeConfigParser()
with FileLock(token_file_path):
parser_token.readfp(open(token_file_path))
if (not parser_token.get('token', 'expires')) or (int(float(parser_token.get('token', 'expires')) - time.time()) <= 0):
auth = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % (tenant, username, password)
header = {"Content-Type": "application/json", "Accept": "application/json"}
res = api_request.httpPost('/v2.0/tokens', server, port, auth, header)
res_json = json.loads(res.getData())
timestamp = calendar.timegm(time.strptime(res_json['access']['token']['expires'],"%Y-%m-%dT%H:%M:%SZ"))
parser_token.set('token', 'id', res_json['access']['token']['id'])
parser_token.set('token', 'expires', str(timestamp))
with FileLock(token_file_path):
with open(token_file_path, 'w') as configfile:
parser_token.write(configfile)
return parser_token.get('token', 'id')
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])
config_file_path = os.path.join(os.path.dirname(__file__), 'proxy.conf')
parser_config = ConfigParser.SafeConfigParser()
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__":
main()
main()
ceilometer.sh 100644 → 100755
#!/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