nova/nova/objects/diagnostics.py

172 lines
6.6 KiB
Python

# Copyright (c) 2014 VMware, Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from nova.objects import base
from nova.objects import fields
@base.NovaObjectRegistry.register
class CpuDiagnostics(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.IntegerField(nullable=True),
'time': fields.IntegerField(nullable=True),
'utilisation': fields.IntegerField(nullable=True),
}
@base.NovaObjectRegistry.register
class NicDiagnostics(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'mac_address': fields.MACAddressField(nullable=True),
'rx_octets': fields.IntegerField(nullable=True),
'rx_errors': fields.IntegerField(nullable=True),
'rx_drop': fields.IntegerField(nullable=True),
'rx_packets': fields.IntegerField(nullable=True),
'rx_rate': fields.IntegerField(nullable=True),
'tx_octets': fields.IntegerField(nullable=True),
'tx_errors': fields.IntegerField(nullable=True),
'tx_drop': fields.IntegerField(nullable=True),
'tx_packets': fields.IntegerField(nullable=True),
'tx_rate': fields.IntegerField(nullable=True)
}
@base.NovaObjectRegistry.register
class DiskDiagnostics(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'read_bytes': fields.IntegerField(nullable=True),
'read_requests': fields.IntegerField(nullable=True),
'write_bytes': fields.IntegerField(nullable=True),
'write_requests': fields.IntegerField(nullable=True),
'errors_count': fields.IntegerField(nullable=True)
}
@base.NovaObjectRegistry.register
class MemoryDiagnostics(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'maximum': fields.IntegerField(nullable=True),
'used': fields.IntegerField(nullable=True)
}
@base.NovaObjectRegistry.register
class Diagnostics(base.NovaEphemeralObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'state': fields.InstancePowerStateField(),
'driver': fields.HypervisorDriverField(),
'hypervisor': fields.StringField(nullable=True),
'hypervisor_os': fields.StringField(nullable=True),
'uptime': fields.IntegerField(nullable=True),
'config_drive': fields.BooleanField(),
'memory_details': fields.ObjectField('MemoryDiagnostics',
default=MemoryDiagnostics()),
'cpu_details': fields.ListOfObjectsField('CpuDiagnostics', default=[]),
'nic_details': fields.ListOfObjectsField('NicDiagnostics', default=[]),
'disk_details': fields.ListOfObjectsField('DiskDiagnostics',
default=[]),
'num_cpus': fields.IntegerField(),
'num_nics': fields.IntegerField(),
'num_disks': fields.IntegerField()
}
def __init__(self, *args, **kwargs):
super(Diagnostics, self).__init__(*args, **kwargs)
self.num_cpus = len(self.cpu_details)
self.num_nics = len(self.nic_details)
self.num_disks = len(self.disk_details)
def add_cpu(self, id=None, time=None, utilisation=None):
"""Add a new CpuDiagnostics object
:param id: The virtual cpu number (Integer)
:param time: CPU Time in nano seconds (Integer)
:param utilisation: CPU utilisation in percentages (Integer)
"""
self.num_cpus += 1
self.cpu_details.append(
CpuDiagnostics(id=id, time=time, utilisation=utilisation))
def add_nic(self, mac_address=None, rx_octets=None, rx_errors=None,
rx_drop=None, rx_packets=None, rx_rate=None, tx_octets=None,
tx_errors=None, tx_drop=None, tx_packets=None, tx_rate=None):
"""Add a new NicDiagnostics object
:param mac_address: Mac address of the interface (String)
:param rx_octets: Received octets (Integer)
:param rx_errors: Received errors (Integer)
:param rx_drop: Received packets dropped (Integer)
:param rx_packets: Received packets (Integer)
:param rx_rate: Receive rate (Integer)
:param tx_octets: Transmitted Octets (Integer)
:param tx_errors: Transmit errors (Integer)
:param tx_drop: Transmit dropped packets (Integer)
:param tx_packets: Transmit packets (Integer)
:param tx_rate: Transmit rate (Integer)
"""
self.num_nics += 1
self.nic_details.append(NicDiagnostics(mac_address=mac_address,
rx_octets=rx_octets,
rx_errors=rx_errors,
rx_drop=rx_drop,
rx_packets=rx_packets,
rx_rate=rx_rate,
tx_octets=tx_octets,
tx_errors=tx_errors,
tx_drop=tx_drop,
tx_packets=tx_packets,
tx_rate=tx_rate))
def add_disk(self, read_bytes=None, read_requests=None, write_bytes=None,
write_requests=None, errors_count=None):
"""Create a new DiskDiagnostics object
:param read_bytes: Disk reads in bytes(Integer)
:param read_requests: Read requests (Integer)
:param write_bytes: Disk writes in bytes (Integer)
:param write_requests: Write requests (Integer)
:param errors_count: Disk errors (Integer)
"""
self.num_disks += 1
self.disk_details.append(DiskDiagnostics(read_bytes=read_bytes,
read_requests=read_requests,
write_bytes=write_bytes,
write_requests=write_requests,
errors_count=errors_count))