From 2bf2cb123e9e1183ea3ed6bd6894316c636548b5 Mon Sep 17 00:00:00 2001 From: Oleg Strizhechenko Date: Mon, 18 Dec 2017 23:53:40 +0500 Subject: [PATCH] Adding dmidecode support in server-info for better view of memory subsystem (#178) * Added(server-info): reminder about installation pcituils and dmidecode. * Added(server-info): using dmidecode memory data file (type, speed and size). for -show and -rate * Added(test-data): server-info archive from cheapest vscale CentOS 7 * Added(assessor): Grade by known values * Fixed(test-data): server-info show expected output changed * Refactoring(dmi): parser complexity fighting * Refactoring(parsers): provide optional simplier way of initialisation for any Parser-based class * Incremented version https://github.com/strizhechenko/netutils-linux/issues/37 --- netutils_linux_hardware/assessor.py | 25 +++++++++- netutils_linux_hardware/grade.py | 4 ++ netutils_linux_hardware/parsers.py | 46 ++++++++++++++++++- netutils_linux_hardware/reader.py | 14 ++++-- setup.py | 2 +- .../expected_output | 10 ++-- .../expected_output | 4 +- .../expected_output | 4 +- .../expected_output | 4 +- .../expected_output | 4 +- .../expected_output | 10 ++-- .../expected_output | 4 +- .../expected_output | 4 +- .../expected_output | 4 +- .../kvm.l3.masterconf/expected_output | 4 +- .../server-info-show.tests/vscale-vm/cpuinfo | 26 +++++++++++ .../vscale-vm/disks_types | 1 + .../vscale-vm/dmidecode | 27 +++++++++++ .../vscale-vm/ethtool/g/eth0 | 12 +++++ .../vscale-vm/ethtool/i/eth0 | 10 ++++ .../vscale-vm/interrupts | 34 ++++++++++++++ .../vscale-vm/lsblk_models | 2 + .../vscale-vm/lsblk_sizes | 2 + .../vscale-vm/lscpu_info | 25 ++++++++++ .../vscale-vm/lscpu_layout | 1 + tests/server-info-show.tests/vscale-vm/lspci | 9 ++++ .../server-info-show.tests/vscale-vm/meminfo | 44 ++++++++++++++++++ .../vscale-vm/network-scripts/ifcfg-eth0 | 0 tests/server-info-show.tests/vscale-vm/scsi | 1 + utils/server-info | 2 +- utils/server-info-collect | 10 +++- 31 files changed, 321 insertions(+), 28 deletions(-) create mode 100644 tests/server-info-show.tests/vscale-vm/cpuinfo create mode 100644 tests/server-info-show.tests/vscale-vm/disks_types create mode 100644 tests/server-info-show.tests/vscale-vm/dmidecode create mode 100644 tests/server-info-show.tests/vscale-vm/ethtool/g/eth0 create mode 100644 tests/server-info-show.tests/vscale-vm/ethtool/i/eth0 create mode 100644 tests/server-info-show.tests/vscale-vm/interrupts create mode 100644 tests/server-info-show.tests/vscale-vm/lsblk_models create mode 100644 tests/server-info-show.tests/vscale-vm/lsblk_sizes create mode 100644 tests/server-info-show.tests/vscale-vm/lscpu_info create mode 100644 tests/server-info-show.tests/vscale-vm/lscpu_layout create mode 100644 tests/server-info-show.tests/vscale-vm/lspci create mode 100644 tests/server-info-show.tests/vscale-vm/meminfo create mode 100644 tests/server-info-show.tests/vscale-vm/network-scripts/ifcfg-eth0 create mode 100644 tests/server-info-show.tests/vscale-vm/scsi diff --git a/netutils_linux_hardware/assessor.py b/netutils_linux_hardware/assessor.py index ed4fc81..97844cc 100644 --- a/netutils_linux_hardware/assessor.py +++ b/netutils_linux_hardware/assessor.py @@ -39,12 +39,33 @@ def assess_cpu(self): 'Vendor ID': Grade.str(cpuinfo.get('Vendor ID'), good=['GenuineIntel']), } + def assess_memory_device(self, device): + return { + 'size': Grade.int(device.get('size', 0), 512, 8196), + 'type': Grade.known_values(device.get('type', 'RAM'), { + 'DDR1': 2, + 'DDR2': 3, + 'DDR3': 6, + 'DDR4': 10, + }), + 'speed': Grade.int(device.get('speed', 0), 200, 4000), + } + + def assess_memory_devices(self, devices): + return dict((handle, self.assess_memory_device(device)) for handle, device in devices.items()) + + def assess_memory_size(self, size): + return { + 'MemTotal': Grade.int(size.get('MemTotal'), 2 * (1024 ** 2), 16 * (1024 ** 2)), + 'SwapTotal': Grade.int(size.get('SwapTotal'), 512 * 1024, 4 * (1024 ** 2)), + } + def assess_memory(self): meminfo = self.data.get('memory') if meminfo: return { - 'MemTotal': Grade.int(meminfo.get('MemTotal'), 2 * (1024 ** 2), 16 * (1024 ** 2)), - 'SwapTotal': Grade.int(meminfo.get('SwapTotal'), 512 * 1024, 4 * (1024 ** 2)), + 'devices': self.assess_memory_devices(meminfo.get('devices')), + 'size': self.assess_memory_size(meminfo.get('size')), } def assess_system(self): diff --git a/netutils_linux_hardware/grade.py b/netutils_linux_hardware/grade.py index da43f72..23fb4a2 100644 --- a/netutils_linux_hardware/grade.py +++ b/netutils_linux_hardware/grade.py @@ -18,3 +18,7 @@ def str(value, good=None, bad=None): @staticmethod def fact(value, mode=False): return 10 if (value is None) != mode else 1 + + @staticmethod + def known_values(value, _dict): + return _dict.get(value, 1) diff --git a/netutils_linux_hardware/parsers.py b/netutils_linux_hardware/parsers.py index 5f0cfcd..8ce7bf8 100644 --- a/netutils_linux_hardware/parsers.py +++ b/netutils_linux_hardware/parsers.py @@ -8,7 +8,9 @@ class Parser(object): - @staticmethod + def __init__(self, filepath=None): + self.result = self.parse_file_safe(filepath) if filepath else None + def parse(text, **kwargs): raise NotImplementedError @@ -122,6 +124,48 @@ def parse(self, text): return dict((k, int(v.replace(' kB', ''))) for k, v in iteritems(yaml.load(text)) if k in self.keys_required) +class MemInfoDMIDevice(object): + def __init__(self, text): + self.data = { + 'speed': 0, + 'type': 'RAM', + 'size': 0, + } + self.type = 'RAM' + self.handle = None + self.size = 0 + self.parse_text(text) + + def parse_text(self, text): + """ Разбор описания плашки памяти от dmidecode """ + for line in map(str.strip, text.split('\n')): + self.parse_line(line) + + def parse_line(self, line): + for key in ('Speed', 'Type', 'Size'): + if line.startswith(key + ':'): + self.data[key.lower()] = line.split()[1] + break + if line.startswith('Handle'): + self.handle = line.split(' ')[1].strip(',') + + +class MemInfoDMI(Parser): + @staticmethod + def parse(text): + """ Разбор всего вывода dmidecode --type memory """ + return MemInfoDMI.__parse(text.split('\n\n')) if text else None + + @staticmethod + def __parse(devices): + output = dict() + for device in devices: + if 'Memory Device' in device: + mem_dev = MemInfoDMIDevice(device) + output[mem_dev.handle] = mem_dev + return output + + class CPULayout(Parser): @staticmethod def parse(text): diff --git a/netutils_linux_hardware/reader.py b/netutils_linux_hardware/reader.py index bd2ad21..b5e6dc7 100644 --- a/netutils_linux_hardware/reader.py +++ b/netutils_linux_hardware/reader.py @@ -2,13 +2,14 @@ # pylint: disable=C0111, C0103 import os + import yaml -from netutils_linux_hardware.parsers import YAMLLike, CPULayout, DiskInfo, MemInfo + from netutils_linux_hardware.netdev import ReaderNet +from netutils_linux_hardware.parsers import YAMLLike, CPULayout, DiskInfo, MemInfo, MemInfoDMI class Reader(object): - info = None def __init__(self, datadir): @@ -25,12 +26,15 @@ def gather_info(self): self.info = { 'cpu': { - 'info': YAMLLike().parse_file_safe(self.path('lscpu_info')), - 'layout': CPULayout().parse_file_safe(self.path('lscpu_layout')), + 'info': YAMLLike(self.path('lscpu_info')).result, + 'layout': CPULayout(self.path('lscpu_layout')).result, }, 'net': ReaderNet(self.datadir, self.path).netdevs, 'disk': DiskInfo().parse(self.path('disks_types'), self.path('lsblk_sizes'), self.path('lsblk_models')), - 'memory': MemInfo().parse_file_safe(self.path('meminfo')), + 'memory': { + 'size': MemInfo(self.path('meminfo')).result, + 'devices': MemInfoDMI(self.path('dmidecode')).result, + }, } for key in ('CPU MHz', 'BogoMIPS'): if self.info.get('cpu', {}).get('info', {}).get(key): diff --git a/setup.py b/setup.py index e2a324b..61c7ec2 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def read(*paths): setuptools.setup( name='netutils-linux', - version='2.5.2', + version='2.6.1', author='Oleg Strizhechenko', author_email='oleg.strizhechenko@gmail.com', license='MIT', diff --git a/tests/server-info-show.tests/1xE3-1271.I217_and_X710.L2_mixed.masterconf/expected_output b/tests/server-info-show.tests/1xE3-1271.I217_and_X710.L2_mixed.masterconf/expected_output index b980a81..7a1c323 100644 --- a/tests/server-info-show.tests/1xE3-1271.I217_and_X710.L2_mixed.masterconf/expected_output +++ b/tests/server-info-show.tests/1xE3-1271.I217_and_X710.L2_mixed.masterconf/expected_output @@ -33,10 +33,12 @@ disk: size: 120034123776 type: SSD memory: - MemFree: 14142256 - MemTotal: 16290904 - SwapFree: 8216572 - SwapTotal: 8216572 + devices: null + size: + MemFree: 14142256 + MemTotal: 16290904 + SwapFree: 8216572 + SwapTotal: 8216572 net: eth0: buffers: diff --git a/tests/server-info-show.tests/1xE31240.2x82576.L2.manual/expected_output b/tests/server-info-show.tests/1xE31240.2x82576.L2.manual/expected_output index 234efb6..a7d702b 100644 --- a/tests/server-info-show.tests/1xE31240.2x82576.L2.manual/expected_output +++ b/tests/server-info-show.tests/1xE31240.2x82576.L2.manual/expected_output @@ -31,7 +31,9 @@ cpu: '6': '0' '7': '0' disk: null -memory: null +memory: + devices: null + size: null net: eth0: buffers: diff --git a/tests/server-info-show.tests/1xE5200.82571EB_and_AR8121.L2.manual/expected_output b/tests/server-info-show.tests/1xE5200.82571EB_and_AR8121.L2.manual/expected_output index 18f4730..f6f22fb 100644 --- a/tests/server-info-show.tests/1xE5200.82571EB_and_AR8121.L2.manual/expected_output +++ b/tests/server-info-show.tests/1xE5200.82571EB_and_AR8121.L2.manual/expected_output @@ -24,7 +24,9 @@ cpu: '0': '0' '1': '0' disk: null -memory: null +memory: + devices: null + size: null net: eth1: buffers: diff --git a/tests/server-info-show.tests/1xi3.single_i350.l2_mixed.manual/expected_output b/tests/server-info-show.tests/1xi3.single_i350.l2_mixed.manual/expected_output index b40bb45..e1c5bc5 100644 --- a/tests/server-info-show.tests/1xi3.single_i350.l2_mixed.manual/expected_output +++ b/tests/server-info-show.tests/1xi3.single_i350.l2_mixed.manual/expected_output @@ -28,7 +28,9 @@ cpu: '2': '0' '3': '0' disk: null -memory: null +memory: + devices: null + size: null net: eth6: buffers: diff --git a/tests/server-info-show.tests/1xi7-4770K.1x82541PI.L2.manual/expected_output b/tests/server-info-show.tests/1xi7-4770K.1x82541PI.L2.manual/expected_output index 3265b83..d3e07a5 100644 --- a/tests/server-info-show.tests/1xi7-4770K.1x82541PI.L2.manual/expected_output +++ b/tests/server-info-show.tests/1xi7-4770K.1x82541PI.L2.manual/expected_output @@ -32,7 +32,9 @@ cpu: '6': '0' '7': '0' disk: null -memory: null +memory: + devices: null + size: null net: eth0: buffers: diff --git a/tests/server-info-show.tests/2xE5-2640.i350_and_82599ES.l2_mixed.masterconf/expected_output b/tests/server-info-show.tests/2xE5-2640.i350_and_82599ES.l2_mixed.masterconf/expected_output index 47d48a3..734ab42 100644 --- a/tests/server-info-show.tests/2xE5-2640.i350_and_82599ES.l2_mixed.masterconf/expected_output +++ b/tests/server-info-show.tests/2xE5-2640.i350_and_82599ES.l2_mixed.masterconf/expected_output @@ -65,10 +65,12 @@ disk: size: 1000204886016 type: HDD memory: - MemFree: 432940 - MemTotal: 32843852 - SwapFree: 16490492 - SwapTotal: 16490492 + devices: null + size: + MemFree: 432940 + MemTotal: 32843852 + SwapFree: 16490492 + SwapTotal: 16490492 net: eth1: buffers: diff --git a/tests/server-info-show.tests/2xE5530.82576_and_82574L.l2_mixed.manual/expected_output b/tests/server-info-show.tests/2xE5530.82576_and_82574L.l2_mixed.manual/expected_output index 768e5ad..a73b748 100644 --- a/tests/server-info-show.tests/2xE5530.82576_and_82574L.l2_mixed.manual/expected_output +++ b/tests/server-info-show.tests/2xE5530.82576_and_82574L.l2_mixed.manual/expected_output @@ -39,7 +39,9 @@ cpu: '8': '0' '9': '1' disk: null -memory: null +memory: + devices: null + size: null net: eth1: buffers: diff --git a/tests/server-info-show.tests/2xL5520.1x82576.L2_mixed.manual/expected_output b/tests/server-info-show.tests/2xL5520.1x82576.L2_mixed.manual/expected_output index 5e5be60..6a2355f 100644 --- a/tests/server-info-show.tests/2xL5520.1x82576.L2_mixed.manual/expected_output +++ b/tests/server-info-show.tests/2xL5520.1x82576.L2_mixed.manual/expected_output @@ -40,7 +40,9 @@ cpu: '8': '0' '9': '0' disk: null -memory: null +memory: + devices: null + size: null net: em2: buffers: diff --git a/tests/server-info-show.tests/2xX5650.BCM5709_and_MT27520.L2.manual/expected_output b/tests/server-info-show.tests/2xX5650.BCM5709_and_MT27520.L2.manual/expected_output index 8020e21..b5777cb 100644 --- a/tests/server-info-show.tests/2xX5650.BCM5709_and_MT27520.L2.manual/expected_output +++ b/tests/server-info-show.tests/2xX5650.BCM5709_and_MT27520.L2.manual/expected_output @@ -36,7 +36,9 @@ cpu: '8': '0' '9': '1' disk: null -memory: null +memory: + devices: null + size: null net: eth1: buffers: diff --git a/tests/server-info-show.tests/kvm.l3.masterconf/expected_output b/tests/server-info-show.tests/kvm.l3.masterconf/expected_output index 71a6563..73579d7 100644 --- a/tests/server-info-show.tests/kvm.l3.masterconf/expected_output +++ b/tests/server-info-show.tests/kvm.l3.masterconf/expected_output @@ -26,7 +26,9 @@ cpu: '0': '0' '1': '1' disk: null -memory: null +memory: + devices: null + size: null net: eth1: buffers: diff --git a/tests/server-info-show.tests/vscale-vm/cpuinfo b/tests/server-info-show.tests/vscale-vm/cpuinfo new file mode 100644 index 0000000..c650e8e --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/cpuinfo @@ -0,0 +1,26 @@ +processor : 0 +vendor_id : GenuineIntel +cpu family : 6 +model : 79 +model name : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz +stepping : 1 +microcode : 0x1 +cpu MHz : 2199.986 +cache size : 25600 KB +physical id : 0 +siblings : 1 +core id : 0 +cpu cores : 1 +apicid : 0 +initial apicid : 0 +fpu : yes +fpu_exception : yes +cpuid level : 13 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat +bogomips : 4399.97 +clflush size : 64 +cache_alignment : 64 +address sizes : 40 bits physical, 48 bits virtual +power management: + diff --git a/tests/server-info-show.tests/vscale-vm/disks_types b/tests/server-info-show.tests/vscale-vm/disks_types new file mode 100644 index 0000000..c407f62 --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/disks_types @@ -0,0 +1 @@ +/sys/block/vda/queue/rotational:1 diff --git a/tests/server-info-show.tests/vscale-vm/dmidecode b/tests/server-info-show.tests/vscale-vm/dmidecode new file mode 100644 index 0000000..9743daa --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/dmidecode @@ -0,0 +1,27 @@ +# dmidecode 3.0 +Getting SMBIOS data from sysfs. +SMBIOS 2.4 present. + +Handle 0x1000, DMI type 16, 15 bytes +Physical Memory Array + Location: Other + Use: System Memory + Error Correction Type: Multi-bit ECC + Maximum Capacity: 512 MB + Error Information Handle: Not Provided + Number Of Devices: 1 + +Handle 0x1100, DMI type 17, 21 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: 0x0000 + Total Width: 64 bits + Data Width: 64 bits + Size: 512 MB + Form Factor: DIMM + Set: None + Locator: DIMM 0 + Bank Locator: Not Specified + Type: RAM + Type Detail: None + diff --git a/tests/server-info-show.tests/vscale-vm/ethtool/g/eth0 b/tests/server-info-show.tests/vscale-vm/ethtool/g/eth0 new file mode 100644 index 0000000..3c77f40 --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/ethtool/g/eth0 @@ -0,0 +1,12 @@ +Ring parameters for eth0: +Pre-set maximums: +RX: 256 +RX Mini: 0 +RX Jumbo: 0 +TX: 256 +Current hardware settings: +RX: 256 +RX Mini: 0 +RX Jumbo: 0 +TX: 256 + diff --git a/tests/server-info-show.tests/vscale-vm/ethtool/i/eth0 b/tests/server-info-show.tests/vscale-vm/ethtool/i/eth0 new file mode 100644 index 0000000..90d7223 --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/ethtool/i/eth0 @@ -0,0 +1,10 @@ +driver: virtio_net +version: 1.0.0 +firmware-version: +expansion-rom-version: +bus-info: 0000:00:03.0 +supports-statistics: no +supports-test: no +supports-eeprom-access: no +supports-register-dump: no +supports-priv-flags: no diff --git a/tests/server-info-show.tests/vscale-vm/interrupts b/tests/server-info-show.tests/vscale-vm/interrupts new file mode 100644 index 0000000..1295a0e --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/interrupts @@ -0,0 +1,34 @@ + CPU0 + 0: 24 IO-APIC-edge timer + 1: 10 IO-APIC-edge i8042 + 6: 3 IO-APIC-edge floppy + 8: 1 IO-APIC-edge rtc0 + 9: 0 IO-APIC-fasteoi acpi + 10: 0 IO-APIC-fasteoi virtio2 + 11: 0 IO-APIC-fasteoi uhci_hcd:usb1 + 12: 15 IO-APIC-edge i8042 + 14: 0 IO-APIC-edge ata_piix + 15: 0 IO-APIC-edge ata_piix + 24: 0 PCI-MSI-edge virtio1-config + 25: 607727 PCI-MSI-edge virtio1-req.0 + 26: 0 PCI-MSI-edge virtio0-config + 27: 6070473 PCI-MSI-edge virtio0-input.0 + 28: 17 PCI-MSI-edge virtio0-output.0 +NMI: 0 Non-maskable interrupts +LOC: 45350286 Local timer interrupts +SPU: 0 Spurious interrupts +PMI: 0 Performance monitoring interrupts +IWI: 4143286 IRQ work interrupts +RTR: 0 APIC ICR read retries +RES: 0 Rescheduling interrupts +CAL: 0 Function call interrupts +TLB: 0 TLB shootdowns +TRM: 0 Thermal event interrupts +THR: 0 Threshold APIC interrupts +DFR: 0 Deferred Error APIC interrupts +MCE: 0 Machine check exceptions +MCP: 3760 Machine check polls +ERR: 0 +MIS: 0 +PIN: 0 Posted-interrupt notification event +PIW: 0 Posted-interrupt wakeup event diff --git a/tests/server-info-show.tests/vscale-vm/lsblk_models b/tests/server-info-show.tests/vscale-vm/lsblk_models new file mode 100644 index 0000000..566f275 --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/lsblk_models @@ -0,0 +1,2 @@ +NAME MODEL +vda diff --git a/tests/server-info-show.tests/vscale-vm/lsblk_sizes b/tests/server-info-show.tests/vscale-vm/lsblk_sizes new file mode 100644 index 0000000..1e89d5e --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/lsblk_sizes @@ -0,0 +1,2 @@ +21474836480 vda +21473771008 / vda1 diff --git a/tests/server-info-show.tests/vscale-vm/lscpu_info b/tests/server-info-show.tests/vscale-vm/lscpu_info new file mode 100644 index 0000000..514522b --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/lscpu_info @@ -0,0 +1,25 @@ +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Byte Order: Little Endian +CPU(s): 1 +On-line CPU(s) list: 0 +Thread(s) per core: 1 +Core(s) per socket: 1 +Socket(s): 1 +NUMA node(s): 1 +Vendor ID: GenuineIntel +CPU family: 6 +Model: 79 +Model name: Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz +Stepping: 1 +CPU MHz: 2199.986 +BogoMIPS: 4399.97 +Virtualization: VT-x +Hypervisor vendor: KVM +Virtualization type: full +L1d cache: 32K +L1i cache: 32K +L2 cache: 256K +L3 cache: 25600K +NUMA node0 CPU(s): 0 +Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat diff --git a/tests/server-info-show.tests/vscale-vm/lscpu_layout b/tests/server-info-show.tests/vscale-vm/lscpu_layout new file mode 100644 index 0000000..b748e2d --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/lscpu_layout @@ -0,0 +1 @@ +0 0 diff --git a/tests/server-info-show.tests/vscale-vm/lspci b/tests/server-info-show.tests/vscale-vm/lspci new file mode 100644 index 0000000..e40d992 --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/lspci @@ -0,0 +1,9 @@ +00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) +00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] +00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] +00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) +00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) +00:02.0 VGA compatible controller: Cirrus Logic GD 5446 +00:03.0 Ethernet controller: Red Hat, Inc Virtio network device +00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device +00:05.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon diff --git a/tests/server-info-show.tests/vscale-vm/meminfo b/tests/server-info-show.tests/vscale-vm/meminfo new file mode 100644 index 0000000..2dff03c --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/meminfo @@ -0,0 +1,44 @@ +MemTotal: 500196 kB +MemFree: 78272 kB +MemAvailable: 244516 kB +Buffers: 12476 kB +Cached: 182816 kB +SwapCached: 0 kB +Active: 280112 kB +Inactive: 73088 kB +Active(anon): 169404 kB +Inactive(anon): 23084 kB +Active(file): 110708 kB +Inactive(file): 50004 kB +Unevictable: 0 kB +Mlocked: 0 kB +SwapTotal: 0 kB +SwapFree: 0 kB +Dirty: 2552 kB +Writeback: 0 kB +AnonPages: 157956 kB +Mapped: 20892 kB +Shmem: 34580 kB +Slab: 42348 kB +SReclaimable: 18672 kB +SUnreclaim: 23676 kB +KernelStack: 1760 kB +PageTables: 12144 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 250096 kB +Committed_AS: 1101672 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 3268 kB +VmallocChunk: 34359725676 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 57324 kB +DirectMap2M: 466944 kB +DirectMap1G: 0 kB diff --git a/tests/server-info-show.tests/vscale-vm/network-scripts/ifcfg-eth0 b/tests/server-info-show.tests/vscale-vm/network-scripts/ifcfg-eth0 new file mode 100644 index 0000000..e69de29 diff --git a/tests/server-info-show.tests/vscale-vm/scsi b/tests/server-info-show.tests/vscale-vm/scsi new file mode 100644 index 0000000..f801cbc --- /dev/null +++ b/tests/server-info-show.tests/vscale-vm/scsi @@ -0,0 +1 @@ +Attached devices: diff --git a/utils/server-info b/utils/server-info index bbb32cb..2ad6f19 100755 --- a/utils/server-info +++ b/utils/server-info @@ -6,7 +6,7 @@ if [ "$1" != 'show' ] && [ "$1" != 'rate' ]; then echo "Usage $0 [show|rate]" exit 1 fi -server-info-collect server &>/dev/null +server-info-collect server cd /root/ tar xfz server.tar.gz cd /root/server/ diff --git a/utils/server-info-collect b/utils/server-info-collect index 2238788..d4f1358 100755 --- a/utils/server-info-collect +++ b/utils/server-info-collect @@ -16,9 +16,16 @@ server_info() { cat /proc/scsi/scsi > $TMPDIR/scsi LANG= lsblk -d --output=NAME,MODEL > $TMPDIR/lsblk_models LANG= lsblk -nlb --output SIZE,MOUNTPOINT,NAME > $TMPDIR/lsblk_sizes - LANG= lspci > $TMPDIR/lspci || true + if ! LANG= lspci 2>/dev/null > $TMPDIR/lspci; then + echo "Consider install lspci" >&2 + echo " yum -y install pciutils" >&2 + fi LANG= lscpu > $TMPDIR/lscpu_info LANG= lscpu -p | grep -v '^#' | awk -F ',' '{print $1" "$3}' > $TMPDIR/lscpu_layout + if ! LANG= dmidecode --type memory 2>/dev/null > $TMPDIR/dmidecode; then + echo "Consider installing dmidecode:" >&2 + echo " yum -y install dmidecode" >&2 + fi fgrep -H '' /sys/block/*/queue/rotational | egrep -v '[0-9]+/' > $TMPDIR/disks_types || true } @@ -60,7 +67,6 @@ make_archive() { cd /tmp/ tar cfz "$output" "$1" rm -rf $TMPDIR - echo "$output" } main() {