diff options
| -rw-r--r-- | op-mode-definitions/show-system.xml | 6 | ||||
| -rw-r--r-- | python/vyos/version.py | 28 | ||||
| -rwxr-xr-x | src/op_mode/show_cpu.py | 61 | ||||
| -rwxr-xr-x | src/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") | 
