summaryrefslogtreecommitdiff
path: root/src/op_mode/show_cpu.py
blob: 0040e950da491a65571b3b7d255d6bfcf4379201 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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)