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
62
63
64
65
66
67
68
69
70
71
72
|
#!/usr/bin/env python3
#
# Copyright (C) 2022-2024 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/>.
from vyos.utils.process import rc_cmd
def get_server_statistics(accel_statistics, pattern, sep=':') -> dict:
import re
stat_dict = {'sessions': {}}
cpu = re.search(r'cpu(.*)', accel_statistics).group(0)
# Find all lines with pattern, for example 'sstp:'
data = re.search(rf'{pattern}(.*)', accel_statistics, re.DOTALL).group(0)
session_starting = re.search(r'starting(.*)', data).group(0)
session_active = re.search(r'active(.*)', data).group(0)
for entry in {cpu, session_starting, session_active}:
if sep in entry:
key, value = entry.split(sep)
if key in ['starting', 'active', 'finishing']:
stat_dict['sessions'][key] = value.strip()
continue
if key == 'cpu':
stat_dict['cpu_load_percentage'] = int(re.sub(r'%', '', value.strip()))
continue
stat_dict[key] = value.strip()
return stat_dict
def accel_cmd(port: int, command: str) -> str:
_, output = rc_cmd(f'/usr/bin/accel-cmd -p{port} {command}')
return output
def accel_out_parse(accel_output: list[str]) -> list[dict[str, str]]:
""" Parse accel-cmd show sessions output """
data_list: list[dict[str, str]] = list()
field_names: list[str] = list()
field_names_unstripped: list[str] = accel_output.pop(0).split('|')
for field_name in field_names_unstripped:
field_names.append(field_name.strip())
while accel_output:
if '|' not in accel_output[0]:
accel_output.pop(0)
continue
current_item: list[str] = accel_output.pop(0).split('|')
item_dict: dict[str, str] = {}
for field_index in range(len(current_item)):
field_name: str = field_names[field_index]
field_value: str = current_item[field_index].strip()
item_dict[field_name] = field_value
data_list.append(item_dict)
return data_list
|