����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 216.73.216.82 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /opt/cloudlinux/venv/lib64/python3.11/site-packages/cl_plus/collectors/ |
Upload File : |
# coding=utf-8 # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2020 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENCE.TXT # import os from .collector_base import CollectorBase import json import time from clcommon.utils import get_file_lines class LveStatsCollector(CollectorBase): def __init__(self, _logger): super(LveStatsCollector, self).__init__(_logger) self._lve_stats_data_file = "/var/lve/cm_lve.json" self._labels = ["ep", "pmem", "nproc", "iops", "cpu", "io"] self._mysql_labels = ["cpu", "io"] self._types = {"usage": "a", "limits": "l", "faults": "f"} self._cl_errors = {"not_found": False, "external_error": False, "command_error": False, "json_error": False, "file_error": False, "file_too_old": False, "file_empty": False} def init(self): """ Initialize lve stats collector :return: None """ self._aggregated_data = [] self._logger.info("Lve stats collector init") def get_averages(self): """ Get collector's averages data :return: dict { "lve_stats": [ { "lve_id": 1024, "cpu": {"l": 20.0, "a": 19.89, "f": 2}, "mysql_cpu": {"l": 20.0, "a": 20.0}, "io": {"l": 1048576, "a": 0.0, "f": 0}, "mysql_io": {"l": 20.0, "a": 20.0}, "iops": {"l": 1024, "a": 0.0, "f": 0}, "ep": {"l": 20, "a": 0.0, "f": 0}, "nproc": {"l": 100, "a": 6, "f": 0}, "pmem": {"l": 1073741824, "a": 0.0, "f": 0}, "username": "cltest1", "domain": "cltest1.com" } ] } or None if can't get data """ if not os.path.isfile(self._lve_stats_data_file): if not self._cl_errors["not_found"]: self._logger.warn("lve-stats data file %s absent. lve-stats collector will not work", self._lve_stats_data_file) self._cl_errors["not_found"] = True return None self._cl_errors["not_found"] = False # Read lve-stats data file try: # Remove lve-stats data file if it older then 10 min m_dt_ts = os.path.getmtime(self._lve_stats_data_file) if time.time() - m_dt_ts > 600: if not self._cl_errors["file_too_old"]: self._logger.warn("lve-stats data file %s too old, please check lve-stats is working", self._lve_stats_data_file) self._cl_errors["file_too_old"] = True return None self._cl_errors["file_too_old"] = False f_lines = get_file_lines(self._lve_stats_data_file) except (OSError, IOError) as e: if not self._cl_errors["file_error"]: self._logger.warn("lve-stats data file %s read error, lve-stats data will not be sent. The reason is: %s", (self._lve_stats_data_file, str(e))) self._cl_errors["file_error"] = True return None else: self._cl_errors["file_error"] = False try: json_data = json.loads(''.join(f_lines)) self._aggregated_data = json_data['lve_stats'] if not self._aggregated_data: if not self._cl_errors["file_empty"]: self._logger.warn("lve-stats data in file empty, will not be sent.") self._cl_errors["file_empty"] = True return None self._cl_errors["file_empty"] = False except (KeyError, ValueError, TypeError, json.decoder.JSONDecodeError) as e: if not self._cl_errors["json_error"]: self._logger.warn("Data in file corrupted, lve-stats data will not be sent. The reason is: %s", str(e)) self._cl_errors["json_error"] = True return None self._cl_errors["json_error"] = False return {"lve_stats": self._aggregated_data}