added disk collector

probably for seperate template as it slows zabbix agent too much
This commit is contained in:
Miłosz Stocki 2019-01-22 12:06:21 +01:00
parent fbf27eecd0
commit c7bb74ce69
Signed by: osiu97
GPG Key ID: E3D1D83FA04F51D6
3 changed files with 64 additions and 10 deletions

View File

@ -5,7 +5,6 @@ from VM import VM
from Storage import Storage
USERNAME = "zabbix@pve"
# TODO change password to example zabbix
PASSWORD = "zabbix"
HOST = "172.16.3.11:8006"
@ -14,11 +13,12 @@ nodelist = conn.get_node_list()
parser = ArgumentParser()
parser.add_argument("node", help="Enter node name")
parser.add_argument("type", choices=['vm', 'storage'], help='categories')
parser.add_argument("type", choices=['vm', 'storage', 'disk'], help='categories')
parser.add_argument("-l", "--list", dest='listing', action='store_true')
parser.add_argument("-n", "--name", dest='name')
parser.add_argument("-d", "--details", dest='details', action='store_true')
parser.add_argument("-p", "--param", dest='param')
parser.add_argument("-b", "--disk", dest='disk')
args = parser.parse_args()
NODE = next((n for n in nodelist if n.name == args.node), None)
@ -26,8 +26,6 @@ if NODE is None:
raise ValueError("No such Node found", "Valid nodes:", nodelist)
def exec_vm(**kwargs):
"""
Handles vm positional parameter
@ -71,9 +69,37 @@ def exec_storage(**kwargs):
Storage.get_storagenames(NODE, name=kwargs['name'], listing=kwargs['listing']))
def exec_disk(**kwargs):
"""
Handles vm positional parameter
:param kwargs: handle cmd parametres
:return:
"""
# Initiate instances
if kwargs['details'] is True:
vms = conn.get_cluster_vmlist(nodelist, detailed=True)
else:
vms = conn.get_cluster_vmlist(nodelist)
if kwargs['name'] is not None and kwargs['listing'] is False and kwargs['disk'] is not None:
try:
vm = next(v for v in vms if v.name == kwargs['name'])
print vm.get_diskvminfo(kwargs['disk'], kwargs['param'])
except StopIteration:
print "No such VM found. Possible VMs: " + str(VM.get_vmnames(NODE))
else:
try:
vm = next(v for v in vms if v.name == kwargs['name'])
print listofdicts_to_zabbix_json(vm.get_diskvmlist())
except StopIteration:
print "No such VM found. Possible VMs: " + str(VM.get_vmnames(NODE))
if args.type == "vm":
exec_vm(listing=args.listing, name=args.name, param=args.param, details=args.details)
elif args.type == "storage":
exec_storage(listing=args.listing, name=args.name, param=args.param)
elif args.type == "disk":
exec_disk(listing=args.listing, name=args.name, param=args.param, details=True, disk=args.disk)
else:
print args

34
VM.py
View File

@ -29,7 +29,6 @@ class VM(object):
self.maxdisk = maxdisk
self.maxmem = maxmem
self.__url = url
self.__dic = kwargs
def __repr__(self):
return "<%s-%s:%s>" % (self.node, self.vmid, self.name)
@ -71,6 +70,35 @@ class VM(object):
vm_params.append({'#' + param.upper(): self.__getattribute__(param)})
return listofdicts_to_zabbix_json(vm_params)
def get_diskvmlist(self):
"""
Gets list of dicts blockdevices configured in VM for use in Zabbix Discovery
:return: list of dicts blockdevices
"""
blockdevices = list()
try:
for disk in self.det_blockstat.keys():
blockdevices.append({'#DISKNAME': disk})
except AttributeError:
print "Could not find disks for machine "
return blockdevices
def get_detailedvminfo(self):
print self.__dic
def get_diskvminfo(self, disk, parameter=None):
"""
Gets VM blockdevice stats
:param disk: disk name in vm
:param parameter: if specified get specific param
:return: list of dicts with params or just param value for specific element
"""
if parameter is not None:
for diskname, param in self.det_blockstat.items():
if diskname == disk:
for p, v in param.iteritems():
if p == parameter:
return v
else:
disk_params = list()
for diskname, param in self.det_blockstat.items():
if diskname == disk:
disk_params.append(param)
return listofdicts_to_zabbix_json(disk_params)