summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-06-07 22:49:02 +0200
committerChristian Poessinger <christian@poessinger.com>2020-06-07 22:49:04 +0200
commitdec99e036a466fbdba2faa17002707b920933db3 (patch)
tree0f6d5edf8af6119848360052870d09d66e64e8b4
parentcfeebf30947f70d92ea24bd5962b3092f7db8341 (diff)
downloadvyos-1x-dec99e036a466fbdba2faa17002707b920933db3.tar.gz
vyos-1x-dec99e036a466fbdba2faa17002707b920933db3.zip
op-mode: T2558: version: split out CPU info
Instead of using "show version" as catch-all command for information rather add "show system cpu" op-mode command which is analogous to "show system memory" which deals with RAM.
-rw-r--r--op-mode-definitions/show-system.xml6
-rw-r--r--python/vyos/version.py28
-rwxr-xr-xsrc/op_mode/show_cpu.py61
-rwxr-xr-xsrc/op_mode/show_version.py (renamed from src/op_mode/version.py)25
4 files changed, 74 insertions, 46 deletions
diff --git a/op-mode-definitions/show-system.xml b/op-mode-definitions/show-system.xml
index b7f56ae20..a39d9b481 100644
--- a/op-mode-definitions/show-system.xml
+++ b/op-mode-definitions/show-system.xml
@@ -49,6 +49,12 @@
</node>
</children>
</node>
+ <leafNode name="cpu">
+ <properties>
+ <help>Show CPU information</help>
+ </properties>
+ <command>${vyos_op_scripts_dir}/show_cpu.py</command>
+ </leafNode>
<leafNode name= "integrity">
<properties>
<help>Checks overall system integrity</help>
diff --git a/python/vyos/version.py b/python/vyos/version.py
index f5eac5a58..871bb0f1b 100644
--- a/python/vyos/version.py
+++ b/python/vyos/version.py
@@ -1,4 +1,4 @@
-# Copyright 2017 VyOS maintainers and contributors <maintainers@vyos.io>
+# Copyright 2017-2020 VyOS maintainers and contributors <maintainers@vyos.io>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -31,8 +31,6 @@ Example of the version data dict::
import os
import json
-import logging
-
import vyos.defaults
from vyos.util import read_file
@@ -43,7 +41,7 @@ from vyos.util import DEVNULL
version_file = os.path.join(vyos.defaults.directories['data'], 'version.json')
-
+
def get_version_data(fname=version_file):
"""
@@ -77,28 +75,6 @@ def get_full_version_data(fname=version_file):
# Get system architecture (well, kernel architecture rather)
version_data['system_arch'], _ = popen('uname -m', stderr=DEVNULL)
- cpu_json,code = popen('lscpu -J',stderr=DEVNULL)
-
- cpu = {}
- if code == 0:
- cpu_info = json.loads(cpu_json)
- if len(cpu_info) > 0 and 'lscpu' in cpu_info:
- for prop in cpu_info['lscpu']:
- if (prop['field'].find('Thread(s)') > -1): cpu['threads'] = prop['data']
- if (prop['field'].find('Core(s)')) > -1: cpu['cores'] = prop['data']
- if (prop['field'].find('Socket(s)')) > -1: cpu['sockets'] = prop['data']
- if (prop['field'].find('CPU(s):')) > -1: cpu['cpus'] = prop['data']
- if (prop['field'].find('CPU MHz')) > -1: cpu['mhz'] = prop['data']
- if (prop['field'].find('CPU min MHz')) > -1: cpu['mhz_min'] = prop['data']
- if (prop['field'].find('CPU max MHz')) > -1: cpu['mhz_max'] = prop['data']
- if (prop['field'].find('Vendor ID')) > -1: cpu['vendor'] = prop['data']
- if (prop['field'].find('Model name')) > -1: cpu['model'] = prop['data']
-
- if len(cpu) > 0:
- version_data['cpu'] = cpu
-
-
-
hypervisor,code = popen('hvinfo', stderr=DEVNULL)
if code == 1:
# hvinfo returns 1 if it cannot detect any hypervisor
diff --git a/src/op_mode/show_cpu.py b/src/op_mode/show_cpu.py
new file mode 100755
index 000000000..0a540da1d
--- /dev/null
+++ b/src/op_mode/show_cpu.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2016-2020 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import json
+
+from jinja2 import Template
+from sys import exit
+from vyos.util import popen, DEVNULL
+
+OUT_TMPL_SRC = """
+{%- if cpu -%}
+{% if 'vendor' in cpu %}CPU Vendor: {{cpu.vendor}}{%- endif %}
+{% if 'model' in cpu %}Model: {{cpu.model}}{%- endif %}
+{% if 'cpus' in cpu %}Total CPUs: {{cpu.cpus}}{%- endif %}
+{% if 'sockets' in cpu %}Sockets: {{cpu.sockets}}{%- endif %}
+{% if 'cores' in cpu %}Cores: {{cpu.cores}}{%- endif %}
+{% if 'threads' in cpu %}Threads: {{cpu.threads}}{%- endif %}
+{% if 'mhz' in cpu %}Current MHz: {{cpu.mhz}}{%- endif %}
+{% if 'mhz_min' in cpu %}Minimum MHz: {{cpu.mhz_min}}{%- endif %}
+{% if 'mhz_max' in cpu %}Maximum MHz: {{cpu.mhz_max}}{%- endif %}
+{% endif %}
+"""
+
+cpu = {}
+cpu_json, code = popen('lscpu -J', stderr=DEVNULL)
+
+if code == 0:
+ cpu_info = json.loads(cpu_json)
+ if len(cpu_info) > 0 and 'lscpu' in cpu_info:
+ for prop in cpu_info['lscpu']:
+ if (prop['field'].find('Thread(s)') > -1): cpu['threads'] = prop['data']
+ if (prop['field'].find('Core(s)')) > -1: cpu['cores'] = prop['data']
+ if (prop['field'].find('Socket(s)')) > -1: cpu['sockets'] = prop['data']
+ if (prop['field'].find('CPU(s):')) > -1: cpu['cpus'] = prop['data']
+ if (prop['field'].find('CPU MHz')) > -1: cpu['mhz'] = prop['data']
+ if (prop['field'].find('CPU min MHz')) > -1: cpu['mhz_min'] = prop['data']
+ if (prop['field'].find('CPU max MHz')) > -1: cpu['mhz_max'] = prop['data']
+ if (prop['field'].find('Vendor ID')) > -1: cpu['vendor'] = prop['data']
+ if (prop['field'].find('Model name')) > -1: cpu['model'] = prop['data']
+
+if len(cpu) > 0:
+ tmp = { 'cpu':cpu }
+ tmpl = Template(OUT_TMPL_SRC)
+ print(tmpl.render(tmp))
+ exit(0)
+else:
+ print('CPU information could not be determined\n')
+ exit(1)
diff --git a/src/op_mode/version.py b/src/op_mode/show_version.py
index 160aa9f26..d0d5c6785 100755
--- a/src/op_mode/version.py
+++ b/src/op_mode/show_version.py
@@ -18,14 +18,12 @@
# Displays image version and system information.
# Used by the "run show version" command.
-import sys
import argparse
-import json
-import jinja2
-
import vyos.version
import vyos.limericks
+from jinja2 import Template
+from sys import exit
from vyos.util import call
parser = argparse.ArgumentParser()
@@ -45,18 +43,6 @@ Build Commit ID: {{build_git}}
Architecture: {{system_arch}}
Boot via: {{boot_via}}
System type: {{system_type}}
-{% if cpu %}
-
-{% if 'vendor' in cpu %}CPU Vendor: {{cpu.vendor}}{% endif %}
-{% if 'model' in cpu %}Model: {{cpu.model}}{% endif %}
-{% if 'cpus' in cpu %}Total CPUs: {{cpu.cpus}}{% endif %}
-{% if 'sockets' in cpu %}Sockets: {{cpu.sockets}}{% endif %}
-{% if 'cores' in cpu %}Cores: {{cpu.cores}}{% endif %}
-{% if 'threads' in cpu %}Threads: {{cpu.threads}}{% endif %}
-{% if 'mhz' in cpu %}Current MHz: {{cpu.mhz}}{% endif %}
-{% if 'mhz_min' in cpu %}Minimum MHz: {{cpu.mhz_min}}{% endif %}
-{% if 'mhz_max' in cpu %}Maximum MHz: {{cpu.mhz_max}}{% endif %}
-{% endif %}
Hardware vendor: {{hardware_vendor}}
Hardware model: {{hardware_model}}
@@ -72,14 +58,13 @@ if __name__ == '__main__':
version_data = vyos.version.get_full_version_data()
if args.json:
+ import json
print(json.dumps(version_data))
- sys.exit(0)
+ exit(0)
- tmpl = jinja2.Template(version_output_tmpl)
+ tmpl = Template(version_output_tmpl)
print(tmpl.render(version_data))
- #print(version_output_tmpl.format(**version_data).strip())
-
if args.all:
print("Package versions:")
call("dpkg -l")