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())
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)
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)
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))
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))
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