Exemple #1
0
    def test_get_local_node__ok(self):
        node = self.mocker.mock()
        node.get_hostname()
        self.mocker.result(socket.gethostname())
        self.mocker.replay()
        self.cluster.nodes = {socket.gethostname(): node}

        self.assertEqual(self.cluster.get_local_node().get_hostname(), socket.gethostname())
Exemple #2
0
    def test_activate_vm__runing(self):
        vmname = "test1.home.net"

        node = self.mocker.mock()
        node.is_vm_started(vmname)
        self.mocker.result(True)
        node.get_hostname()
        self.mocker.result(socket.gethostname())
        self.mocker.replay()
        self.cluster.nodes = {socket.gethostname(): node}

        self.assertRaises(cxm.node.RunningVmError, self.cluster.activate_vm, node, vmname)
Exemple #3
0
    def test_start_vm__ram_error(self):
        vmname = "test1.home.net"

        node = self.mocker.mock()
        node.metrics.get_free_ram()
        self.mocker.result(64)
        self.mocker.count(1, None)
        node.get_hostname()
        self.mocker.result(socket.gethostname())
        self.mocker.replay()

        self.cluster.nodes = {socket.gethostname(): node}

        self.assertRaises(cxm.node.NotEnoughRamError, self.cluster.start_vm, node, vmname, False)
Exemple #4
0
def main():
	"""Feed the snmp_xen MIB tree and start listening for snmp's passpersist"""
	global pp
	global node

	syslog.openlog(sys.argv[0],syslog.LOG_PID)
	
	retry_timestamp=int(time.time())
	retry_counter=MAX_RETRY
	while retry_counter>0:
		try:
			syslog.syslog(syslog.LOG_INFO,"Starting Xen monitoring...")

			# Load helpers
			pp=snmp.PassPersist(OID_BASE)
			node=cxm.node.Node(platform.node())

			# Set statics data
			pp.add_str('1.1.0',node.get_hostname())
			pp.add_gau('1.2.0',int(node.metrics.get_host_nr_cpus()))
			oid=pp.encode("Domain-0")
			pp.add_str('1.9.1.' + oid,'Domain-0')
			pp.add_int('1.9.2.' + oid,0)
			pp.add_gau('1.9.4.' + oid,2) # Always 2 VPCU for Dom0 (TODO: ask the Xen-API)
			
			pp.start(update_data,POOLING_INTERVAL) # Should'nt return (except if updater thread has died)

		except IOError, e:
			if e.errno == errno.EPIPE:
				syslog.syslog(syslog.LOG_INFO,"Snmpd had close the pipe, exiting...")
				sys.exit(0)
		except Exception, e:
			syslog.syslog(syslog.LOG_WARNING,"Main thread as died: %s" % (e))
Exemple #5
0
def main():
    """Feed the snmp_xen MIB tree and start listening for snmp's passpersist"""
    global pp
    global node

    syslog.openlog(sys.argv[0], syslog.LOG_PID)

    retry_timestamp = int(time.time())
    retry_counter = MAX_RETRY
    while retry_counter > 0:
        try:
            syslog.syslog(syslog.LOG_INFO, "Starting Xen monitoring...")

            # Load helpers
            pp = snmp.PassPersist(OID_BASE)
            node = cxm.node.Node(platform.node())

            # Set statics data
            pp.add_str('1.1.0', node.get_hostname())
            pp.add_gau('1.2.0', int(node.metrics.get_host_nr_cpus()))
            oid = pp.encode("Domain-0")
            pp.add_str('1.9.1.' + oid, 'Domain-0')
            pp.add_int('1.9.2.' + oid, 0)
            pp.add_gau('1.9.4.' + oid,
                       2)  # Always 2 VPCU for Dom0 (TODO: ask the Xen-API)

            pp.start(update_data, POOLING_INTERVAL
                     )  # Should'nt return (except if updater thread has died)

        except IOError, e:
            if e.errno == errno.EPIPE:
                syslog.syslog(syslog.LOG_INFO,
                              "Snmpd had close the pipe, exiting...")
                sys.exit(0)
        except Exception, e:
            syslog.syslog(syslog.LOG_WARNING, "Main thread as died: %s" % (e))
Exemple #6
0
def update_data():
	"""Update snmp's data from cxm API"""
	global pp
	global node
	global nr_cpu

	# Load all stats once
	vms=node.get_vms()
	ram=node.metrics.get_ram_infos()
	vgs_io=node.metrics.get_host_vgs_io()
	net_io=node.metrics.get_host_net_io()
	vms_stat=node.metrics.get_vms_record()

	# Node infos
	pp.add_str('1.1.0',node.get_hostname())
	pp.add_gau('1.2.0',nr_cpu)

	# Number of VM
	pp.add_gau('1.3.0',len(vms))

	# Number of used IRQ
	pp.add_gau('1.4.0',node.metrics.get_used_irq())

	# Ram infos
	pp.add_gau('1.5.1.0',ram['used'])
	pp.add_gau('1.5.2.0',ram['free'])

	# Disk's IO
	for name in vgs_io.keys():
		oid=pp.encode(name)
		pp.add_str('1.6.1.'+oid,name)
		pp.add_cnt_32bit('1.6.2.'+oid,vgs_io[name]['Read'])
		pp.add_cnt_32bit('1.6.3.'+oid,vgs_io[name]['Write'])

	# Network's IO
	for name in net_io['bridges'].keys():
		oid=pp.encode(name)
		pp.add_str('1.7.1.'+oid,name)
		pp.add_cnt_32bit('1.7.2.'+oid,net_io['bridges'][name]['Rx'])
		pp.add_cnt_32bit('1.7.3.'+oid,net_io['bridges'][name]['Tx'])

	for name in net_io['vlans'].keys():
		oid=pp.encode(name)
		pp.add_str('1.8.1.'+oid,name)
		pp.add_cnt_32bit('1.8.2.'+oid,net_io['vlans'][name]['Rx'])
		pp.add_cnt_32bit('1.8.3.'+oid,net_io['vlans'][name]['Tx'])

	# For each VM
	for vm in vms:
		oid=pp.encode(vm.name)
		pp.add_str('1.9.1.'+oid,vm.name)
		pp.add_int('1.9.2.'+oid,vm.id)
		pp.add_gau('1.9.4.'+oid,vm.get_vcpu())
		pp.add_gau('1.9.5.'+oid,vm.get_ram())

		try:
			# CPU Percentage relative to the host capacity and *100 to pass decimal through snmpd
			pp.add_gau('1.9.3.'+oid,"%d" % (round(vms_stat[vm.name]['cpu']/nr_cpu,2)*100)) 
			pp.add_cnt_32bit('1.9.6.'+oid,vms_stat[vm.name]['disk']['Read'])
			pp.add_cnt_32bit('1.9.7.'+oid,vms_stat[vm.name]['disk']['Write'])
			pp.add_cnt_32bit('1.9.8.'+oid,sum([ vif['Rx'] for vif in vms_stat[vm.name]['net'] ]))
			pp.add_cnt_32bit('1.9.9.'+oid,sum([ vif['Tx'] for vif in vms_stat[vm.name]['net'] ]))
		except KeyError, TypeError:
			# If a VM has disappeared
			continue