Skip to content
Snippets Groups Projects
Commit baa5cbfe authored by Michele Grandolfo's avatar Michele Grandolfo
Browse files
parents 4a76a692 18d2d55e
No related branches found
No related tags found
1 merge request!1Zabbix external script dev + alert script
File mode changed from 100644 to 100755
#!/bin/bash #!/bin/bash
python "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/hypervisor-show #python "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/hypervisor-show
python /usr/lib/zabbix/externalscripts/zabbix-external-scripts/hypervisor-show
...@@ -14,351 +14,358 @@ from filelock import FileLock ...@@ -14,351 +14,358 @@ 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
def httpsGet(url, host, port, header): @staticmethod
conn = httplib.HTTPSConnection(host, port) def httpsGet(url, host, port, header):
conn.request("GET", url, headers = header) conn = httplib.HTTPSConnection(host, port)
res = conn.getresponse() conn.request("GET", url, headers = header)
response = api_response(res.status, res.read(), res.msg) res = conn.getresponse()
return response response = api_response(res.status, res.read(), res.msg)
@staticmethod return response
def httpPost(url, host, port, params, headers):
conn = httplib.HTTPConnection(host, port) @staticmethod
conn.request("POST", url, params, headers) def httpPost(url, host, port, params, headers):
res = conn.getresponse() conn = httplib.HTTPConnection(host, port)
response = api_response(res.status, res.read(), res.msg) conn.request("POST", url, params, headers)
return response res = conn.getresponse()
@staticmethod response = api_response(res.status, res.read(), res.msg)
def httpsPost(url, host, port, params, headers): return response
conn = httplib.HTTPSConnection(host, port)
conn.request("POST", url, params, headers) @staticmethod
res = conn.getresponse() def httpsPost(url, host, port, params, headers):
response = api_response(res.status, res.read(), res.msg) conn = httplib.HTTPSConnection(host, port)
return response conn.request("POST", url, params, headers)
res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg)
return response
def add_service_to_host(struct, host, service, state): def add_service_to_host(struct, host, service, state):
find = 0 find = 0
if 'hosts' not in struct.keys(): if 'hosts' not in struct.keys():
struct['hosts'] = [] struct['hosts'] = []
for h in iter(struct['hosts']): for h in iter(struct['hosts']):
if h['host'] == host: if h['host'] == host:
h['services'][service] = state h['services'][service] = state
find = 1 find = 1
else: else:
continue continue
if find == 0: if find == 0:
struct['hosts'].append({'host' : host, 'services' : {service : state}}) struct['hosts'].append({'host' : host, 'services' : {service : state}})
def add_service(struct, service, state): def add_service(struct, service, state):
struct[service] = state struct[service] = state
class Prisma: class Prisma:
__username = '' __username = ''
__tenant = '' __tenant = ''
__token = '' __token = ''
__password = '' __password = ''
__protocol = 'http' __protocol = 'http'
__server = '' __server = ''
__port = None __port = None
__tenantID = None __tenantID = None
def __init__(self, protocol, server, port, username, tenant, password): def __init__(self, protocol, server, port, username, tenant, password):
self.setUsername(username) self.setUsername(username)
self.setTenant(tenant) self.setTenant(tenant)
self.setPassword(password) self.setPassword(password)
self.setProtocol(protocol) self.setProtocol(protocol)
self.setServer(server) self.setServer(server)
self.setPort(port) self.setPort(port)
self.getToken() self.getToken()
def setUsername(self, username): def setUsername(self, username):
self.__username = username self.__username = username
def getUsername(self): def getUsername(self):
return self.__username return self.__username
def setPassword(self, password): def setPassword(self, password):
self.__password = password self.__password = password
def getPassword(self): def getPassword(self):
return self.__password return self.__password
def setTenant(self, tenant): def setTenant(self, tenant):
self.__tenant = tenant self.__tenant = tenant
def getTenant(self): def getTenant(self):
return self.__tenant return self.__tenant
def setTenantID(self, tenantID): def setTenantID(self, tenantID):
self.__tenantID = tenantID self.__tenantID = tenantID
def getTenantID(self): def getTenantID(self):
return self.__tenantID return self.__tenantID
def setProtocol(self, protocol): def setProtocol(self, protocol):
self.__protocol = protocol self.__protocol = protocol
def getProtocol(self): def getProtocol(self):
return self.__protocol return self.__protocol
def setServer(self, server): def setServer(self, server):
self.__server = server self.__server = server
def setPort(self, port): def setPort(self, port):
self.__port = port self.__port = port
def getPort(self): def getPort(self):
return self.__port return self.__port
def getServer(self): def getServer(self):
return self.__server return self.__server
def setToken(self, token): def setToken(self, token):
self.__token = token self.__token = token
def getToken(self): def getToken(self):
token_file_path = os.path.join(os.path.dirname(__file__), 'token_backup') token_file_path = os.path.join(os.path.dirname(__file__), 'token_backup')
parser_token = ConfigParser.SafeConfigParser() parser_token = ConfigParser.SafeConfigParser()
with FileLock(token_file_path): with FileLock(token_file_path):
parser_token.readfp(open(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): 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"}}}' % (self.getTenant(), self.getUsername(), self.getPassword()) auth = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % (self.getTenant(), self.getUsername(), self.getPassword())
header = {"Content-Type": "application/json", "Accept": "application/json"} header = {"Content-Type": "application/json", "Accept": "application/json"}
if self.getProtocol() == 'http': if self.getProtocol() == 'http':
res = api_request.httpPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header) res = api_request.httpPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header)
else: else:
res = api_request.httpsPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header) res = api_request.httpsPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header)
res_json = json.loads(res.getData()) res_json = json.loads(res.getData())
timestamp = calendar.timegm(time.strptime(res_json['access']['token']['expires'],"%Y-%m-%dT%H:%M:%SZ")) 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', 'id', res_json['access']['token']['id'])
parser_token.set('token', 'expires', str(timestamp)) parser_token.set('token', 'expires', str(timestamp))
parser_token.set('tenant', 'id', res_json['access']['token']['tenant']['id']) parser_token.set('tenant', 'id', res_json['access']['token']['tenant']['id'])
with FileLock(token_file_path): with FileLock(token_file_path):
with open(token_file_path, 'w') as configfile: with open(token_file_path, 'w') as configfile:
parser_token.write(configfile) parser_token.write(configfile)
self.setToken(parser_token.get('token', 'id')) self.setToken(parser_token.get('token', 'id'))
self.setTenantID(parser_token.get('tenant','id')) self.setTenantID(parser_token.get('tenant','id'))
return self.__token return self.__token
def getAuth(self): def getAuth(self):
return {"X-Auth-Token": self.getToken()} return {"X-Auth-Token": self.getToken()}
def nova_service_list(self): def nova_service_list(self):
service = None service = None
res = api_request.httpGet("/v2/%s/os-services" % (self.getTenantID()), self.getServer(), 8774, self.getAuth()) res = api_request.httpGet("/v2/%s/os-services" % (self.getTenantID()), self.getServer(), 8774, self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
service = json.loads(res.getData()) service = json.loads(res.getData())
return service return service
def neutron_agent_list(self): def neutron_agent_list(self):
agent = None agent = None
res = api_request.httpGet('/v2.0/agents.json', self.getServer(), 9696, self.getAuth()) res = api_request.httpGet('/v2.0/agents.json', self.getServer(), 9696, self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
agent = json.loads(res.getData()) agent = json.loads(res.getData())
return agent return agent
def glance_images(self): def glance_images(self):
images = None images = None
res = api_request.httpGet('/v1.1/images', self.getServer(), '9292', self.getAuth()) res = api_request.httpGet('/v1.1/images', self.getServer(), '9292', self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
images = json.loads(res.getData()) images = json.loads(res.getData())
return images return images
def cinder_blocks_list(self): def cinder_blocks_list(self):
blocks = None blocks = None
res = api_request.httpGet('/v2/%s/os-services' % (self.getTenantID()), self.getServer(), '8776', self.getAuth()) res = api_request.httpGet('/v2/%s/os-services' % (self.getTenantID()), self.getServer(), '8776', self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
blocks = json.loads(res.getData()) blocks = json.loads(res.getData())
return blocks return blocks
def swift_blocks_list(self): def swift_blocks_list(self):
blocks = None blocks = None
res = api_request.httpsGet('/v1/AUTH_%s?format=json' % (self.getTenantID()), self.getServer(), '8080', self.getAuth()) res = api_request.httpsGet('/v1/AUTH_%s?format=json' % (self.getTenantID()), self.getServer(), '8080', self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
blocks = json.loads(res.getData()) blocks = json.loads(res.getData())
return blocks return blocks
def encode(): def encode():
struct = {} struct = {}
config_file_path = os.path.join(os.path.dirname(__file__), 'credentials.conf') config_file_path = os.path.join(os.path.dirname(__file__), 'credentials.conf')
parser_config = ConfigParser.SafeConfigParser() parser_config = ConfigParser.SafeConfigParser()
parser_config.readfp(open(config_file_path)) parser_config.readfp(open(config_file_path))
prisma = Prisma( prisma = Prisma(
parser_config.get('keystone', 'protocol'), parser_config.get('keystone', 'protocol'),
parser_config.get('keystone', 'server'), parser_config.get('keystone', 'server'),
parser_config.get('keystone', 'port'), parser_config.get('keystone', 'port'),
parser_config.get('keystone', 'username'), parser_config.get('keystone', 'username'),
parser_config.get('keystone', 'tenant'), parser_config.get('keystone', 'tenant'),
parser_config.get('keystone', 'password') parser_config.get('keystone', 'password')
) )
#keystone #keystone
keystone = prisma.getTenantID() keystone = prisma.getTenantID()
# print keystone #print keystone
if keystone != None: if keystone != None:
add_service(struct, 'keystone', 1) add_service(struct, 'keystone', 1)
else: else:
add_service(struct, 'keystone', 0) add_service(struct, 'keystone', 0)
#nova #nova
nova = prisma.nova_service_list() nova = prisma.nova_service_list()
compute = 0 compute = 0
if nova != None: if nova != None:
add_service(struct, 'nova', 1) add_service(struct, 'nova', 1)
for i in iter(nova['services']): for i in iter(nova['services']):
if i['status'] == 'enabled': if i['status'] == 'enabled':
add_service_to_host(struct, i['host'], i['binary'],0 if i['state'] == 'down' else 1) add_service_to_host(struct, i['host'], i['binary'],0 if i['state'] == 'down' else 1)
else: else:
add_service(struct, 'nova', 0) add_service(struct, 'nova', 0)
#neutron #neutron
neutron = prisma.neutron_agent_list() neutron = prisma.neutron_agent_list()
if neutron != None: if neutron != None:
add_service(struct, 'neutron', 1) add_service(struct, 'neutron', 1)
for i in iter(neutron['agents']): for i in iter(neutron['agents']):
add_service_to_host(struct, i['host'], i['binary'],0 if i['alive'] == 'false' else 1) add_service_to_host(struct, i['host'], i['binary'],0 if i['alive'] == 'false' else 1)
else: else:
add_service(struct, 'neutron', 0) add_service(struct, 'neutron', 0)
#glance #glance
# glance = prisma.glance_images() # glance = prisma.glance_images()
# if glance != None: # if glance != None:
# add_service(struct, 'glance', 1) # add_service(struct, 'glance', 1)
# else: # else:
# add_service(struct, 'glance', 0) # add_service(struct, 'glance', 0)
#cinder #cinder
cinder = prisma.cinder_blocks_list() cinder = prisma.cinder_blocks_list()
if cinder != None: if cinder != None:
add_service(struct, 'cinder', 1) add_service(struct, 'cinder', 1)
else: else:
add_service(struct, 'cinder', 0) add_service(struct, 'cinder', 0)
#swift #swift
# swift = prisma.swift_blocks_list() # swift = prisma.swift_blocks_list()
# if swift != None: # if swift != None:
# add_service(struct, 'swift', 1) # add_service(struct, 'swift', 1)
# else: # else:
# add_service(struct, 'swift', 0) # add_service(struct, 'swift', 0)
# print struct # print struct
return struct return struct
def check( test_json): def check( test_json):
try:
keystone = test_json["keystone"]
except:
print "keystone"
return
#nova
controller_dic = {'nova-cert': 0, 'nova-consoleauth': 0, 'nova-scheduler': 0, 'nova-conductor': 0}
nova = test_json["nova"]
for host in iter(test_json["hosts"]):
for i in iter(host["services"]):
try:
controller_dic[i]|=host["services"][i]
except:
continue
for i in iter(controller_dic):
nova &= controller_dic[i]
#neutron
network_dic = {'neutron-metadata-agent': 0, 'neutron-dhcp-agent': 0, 'neutron-linuxbridge-agent': 0}
neutron = test_json["neutron"]
for host in iter(test_json["hosts"]):
for i in iter(host["services"]):
try:
network_dic[i]|=host["services"][i]
except:
continue
for i in iter(network_dic):
neutron &= network_dic[i]
#cinder
cinder = test_json["cinder"]
#glance
# glance = test_json["glance"]
#compute
computerun = 0
computecount = 0
compute = 1
for host in iter(test_json["hosts"]):
test = 0
try: try:
keystone = test_json["keystone"] if 'nova-compute' in host["services"].keys():
computecount += 1
if host["services"]["nova-compute"] & host["services"]["neutron-linuxbridge-agent"]:
computerun += 1
if host["services"]["nova-compute"] == 1 and host["services"]["neutron-linuxbridge-agent"] == 0:
compute = 0
except: except:
print "keystone" continue
return
status = {}
#nova
controller_dic = {'nova-cert': 0, 'nova-consoleauth': 0, 'nova-scheduler': 0, 'nova-conductor': 0} if cinder == 1:
nova = test_json["nova"] add_service(status, 'storage', 'OK')
for host in iter(test_json["hosts"]): else:
for i in iter(host["services"]): add_service(status, 'storage', 'KO')
try: if neutron == 1:
controller_dic[i]|=host["services"][i] add_service(status, 'network', 'OK')
except: else:
continue add_service(status, 'network', 'KO')
for i in iter(controller_dic): if compute == 1:
nova &= controller_dic[i] add_service(status, 'available_nodes', computerun)
add_service(status, 'total_nodes', computecount)
#neutron else:
network_dic = {'neutron-metadata-agent': 0, 'neutron-dhcp-agent': 0, 'neutron-linuxbridge-agent': 0} add_service(status, 'available_nodes', 0)
neutron = test_json["neutron"] add_service(status, 'total_nodes', computecount)
for host in iter(test_json["hosts"]):
for i in iter(host["services"]): return json.dumps(status, sort_keys=False, indent=4)
try:
network_dic[i]|=host["services"][i] # return status
except: # return keystone & compute & nova & neutron & cinder & glance
continue
for i in iter(network_dic):
neutron &= network_dic[i]
#cinder
cinder = test_json["cinder"]
#glance
# glance = test_json["glance"]
#compute
computerun = 0
computecount = 0
compute = 1
for host in iter(test_json["hosts"]):
test = 0
try:
if 'nova-compute' in host["services"].keys():
computecount += 1
if host["services"]["nova-compute"] & host["services"]["neutron-linuxbridge-agent"]:
computerun += 1
if host["services"]["nova-compute"] == 1 and host["services"]["neutron-linuxbridge-agent"] == 0:
compute = 0
except:
continue
status = {}
if cinder == 1:
add_service(status, 'storage', 'OK')
else
add_service(status, 'storage', 'KO')
if neutron == 1:
add_service(status, 'network', 'OK')
else add_service(status, 'network', 'KO')
if compute == 1:
add_service(status, 'available_nodes', computerun)
add_service(status, 'total_nodes', computecount)
else:
add_service(status, 'available_nodes', 0)
add_service(status, 'total_nodes', computecount)
return json.dumps(status, sort_keys=False, indent=4)
# return status
# return keystone & compute & nova & neutron & cinder & glance
def main(): def main():
struct = encode() struct = encode()
status = check(struct) status = check(struct)
print status print status
if __name__ == "__main__": if __name__ == "__main__":
main() main()
#!/bin/bash #!/bin/bash
python "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/prisma-iaas #python "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/prisma-iaas
python /usr/lib/zabbix/externalscripts/zabbix-external-scripts/prisma-iaas
[token] [token]
id = id =
expires = expires =
[tenant]
id =
expires =
File mode changed from 100644 to 100755
#!/bin/bash #!/bin/bash
for i in {1..500} for i in {1..500}
do do
python "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/ceilometer $1 $2 python /usr/lib/zabbix/externalscripts/zabbix-external-scripts/ceilometer $1 $2
#sleep `perl -e 'printf("%.2f\n", rand())'` #sleep `perl -e 'printf("%.2f\n", rand())'`
done done
wait wait
File mode changed from 100644 to 100755
#!/bin/bash #!/bin/bash
python "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/ceilometer-mock $1 $2 python /usr/lib/zabbix/externalscripts/zabbix-external-scripts/ceilometer-mock $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