Commit bcd890f4 authored by Thibault VINCENT's avatar Thibault VINCENT
Browse files

add tags for arch, load, uptime, etc... fix contants

parent a4c3bf31
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -53,12 +53,13 @@ HV_TAG_HELPER_LIST = [
VM_TAG_WRAP_MAP = {
    'h'         : 'get_name',
    'vm'        : 'get_name',
    'hv'        : 'get_hv_name',
    #'hv'        : 'get_hv_name',
    'arch'      : 'get_arch',
    'cpu'       : 'get_cpu',
    'status'    : 'get_status',
    'mem'       : 'get_mem',
    'memused'   : 'get_mem_used',
    'memfree'   : 'get_mem_free',
    'memused'   : 'get_memused',
    'memfree'   : 'get_memfree',
}

VM_TAG_HELPER_LIST = [
+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ class KvmHypervisor(LibvirtHypervisor):

    def __init__(self):
        super(KvmHypervisor, self).__init__('kvm')
        self.hv_type = 'KVM/QEMU'
        self.hv_type = 'kvm'
    
    def __new__(cls, *args, **kwargs):
        '''
+81 −18
Original line number Diff line number Diff line
@@ -5,6 +5,9 @@ import sys
# we use psutils to get host informations we can't get with
# libvirt
import psutil
import multiprocessing
import os
import re
from interface import *
from exceptions import *
from time import sleep
@@ -26,9 +29,16 @@ XEN_LIBVIRT_SESSION = 'xen:///'
## States
#########

# Hypervisor

HV_ARCH_MAP = {
    'i686'      : 'x86',
    'x86_64'    : 'x64',
}

# Virtual Machines

VM_STATUS = (
VM_LIBVIRT_STATUS = (
    'No state',
    'Running',
    'Blocked on resource',
@@ -38,6 +48,16 @@ VM_STATUS = (
    'Crashed'
    )

VM_STATUS = {
    0 : 'stopped',
    1 : 'running',
    2 : 'running',
    3 : 'paused',
    4 : 'running',
    5 : 'shutdown',
    6 : 'shutdown',
}

VM_START_STATES = {
    'running': 1,
    'paused' : 0
@@ -132,16 +152,16 @@ class LibvirtVm(VM):
    def get_hv_name(self):
        return self._hypervisor.get_name()

    def get_used_mem(self):
        return self._domain.info()[2] / KILOBYTE_DIV
    def get_mem_used(self):
        return self._domain.info()[2] * KILOBYTE_DIV
    
    def get_total_mem(self):
        return self._domain.info()[1] / KILOBYTE_DIV
    def get_mem(self):
        return self._domain.info()[1] * KILOBYTE_DIV
    
    def get_free_mem(self):
        return (self.get_total_mem() - self.get_used_mem()) / KILOBYTE_DIV
    def get_mem_free(self):
        return (self.get_total_mem() - self.get_used_mem()) * KILOBYTE_DIV
    
    def get_vcpu(self):
    def get_cpu(self):
        return self._domain.info()[3]
    
    def get_cpu_percent(self):
@@ -185,6 +205,20 @@ class LibvirtVm(VM):
                                d['size'] = sto.get_volume_capacity(pool, vol_name)                    
                result.append(d)
        return result
    
    def get_arch(self):
        result = None
        try:
            xml_string = self._domain.XMLDesc(libvirt.VIR_DOMAIN_XML_INACTIVE)
            xroot = xml.dom.minidom.parseString(xml_string)
            xdomain = xroot.getElementsByTagName('domain').pop()
            xos = xdomain.getElementsByTagName('os').pop()
            xtype = xos.getElementsByTagName('type').pop()
            arch = xtype.getAttribute('arch')
            if arch in HV_ARCH_MAP:
                result = HV_ARCH_MAP[arch]
        except:
            pass
        return result
    
    def get_status(self):
@@ -282,7 +316,29 @@ class LibvirtHypervisor(Hypervisor):
        return self.hv_type

    def get_hv_version(self):
        return self._con_handle.getVersion()
        return str(self._con_handle.getVersion())

    def get_uname(self):
        return ' '.join(os.uname())
    
    def get_uptime(self):
        result = None
        try:
            f = open("/proc/uptime")
            data = f.read().split()
            f.close()
            result = str(int(float(data[0])))
        except:
            pass
        return result 
    
    def get_loadavg(self):
        result = None
        try:
            result = ' '.join('%.2f' % load for load in os.getloadavg())
        except:
            pass
        return result

    def _build_vm_list(self):
        '''
@@ -314,7 +370,11 @@ class LibvirtHypervisor(Hypervisor):
        '''
        Get archetcture type of hypervisor
        '''
        return self._con_handle.getInfo()[0]
        result = None
        arch = self._con_handle.getInfo()[0]
        if arch in HV_ARCH_MAP:
            result = HV_ARCH_MAP[arch]
        return result

    def get_nb_cpu(self):
        '''
@@ -326,7 +386,7 @@ class LibvirtHypervisor(Hypervisor):
        '''
        Returns the frequency in MHZ of cpus in the hypervisor
        '''
        return self._con_handle.getInfo()[3]
        return str(self._con_handle.getInfo()[3])

    def get_nb_threads(self):
        '''
@@ -335,16 +395,19 @@ class LibvirtHypervisor(Hypervisor):
        return self._con_handle.getInfo()[7]
    
    def get_mem(self):
        return (psutil.avail_phymem() + psutil.used_phymem())
        return str(psutil.avail_phymem() + psutil.used_phymem())
    
    def get_mem_free(self):
        return psutil.avail_phymem()
        return str(psutil.avail_phymem())

    def get_mem_used(self):
        return psutil.used_phymem()
        return str(psutil.used_phymem())
    
    def get_cpu_percent(self):
        return '%2.0f' % psutil.cpu_percent()
        return str(int(psutil.cpu_percent()))
    
    def get_cpu(self):
        return str(multiprocessing.cpu_count())
    
    def get_disks(self):
        result = {}
@@ -373,7 +436,7 @@ class LibvirtHypervisor(Hypervisor):
            # get the capacity of a specific pool
            capacity = self._storage.get_pool_space_total(
                                            self._storage.get_pools()[pool])
        return capacity
        return str(capacity)
    
    def get_storage_used(self, pool=None):
        used = 0       
@@ -385,7 +448,7 @@ class LibvirtHypervisor(Hypervisor):
            # get the used space of a specific pool
            used = self._storage.get_pool_space_used(
                                            self._storage.get_pools()[pool])
        return used
        return str(used)
    
    def get_storage_free(self, pool=None):
        free = 0
@@ -397,7 +460,7 @@ class LibvirtHypervisor(Hypervisor):
            # get the free space of a specific pool
            free = self._storage.get_pool_space_available(
                                            self._storage.get_pools()[pool])
        return free
        return str(free)
    
    def get_storage_type(self, pool_name):
        result = None