#!/usr/bin/env python3 # # Copyright (C) 2022 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 sys import vyos.opmode 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