def _collect_infos(self, collectors: Collectors) -> DiagnosticsElementJSONResult: version_infos = cmk_version.get_general_version_infos() version_infos["arch"] = platform.machine() time_obj = datetime.fromtimestamp(version_infos.get("time", 0)) version_infos["time_human_readable"] = time_obj.isoformat(sep=" ") return version_infos
def _get_generic_crash_info(type_name, details): # type: (Text, Dict) -> Dict """Produces the crash info data structure. The top level keys of the crash info dict are standardized and need to be set for all crash reports.""" exc_type, exc_value, exc_traceback = sys.exc_info() tb_list = traceback.extract_tb(exc_traceback) # TODO: This ma be cleaned up by using reraising with python 3 # MKParseFunctionError() are re raised exceptions originating from the # parse functions of checks. They have the original traceback object saved. # The formated stack of these tracebacks is somehow relative to the calling # function. To get the full stack trace instead of this relative one we need # to concatenate the traceback of the MKParseFunctionError() and the original # exception. # Re-raising exceptions will be much easier with Python 3.x. if exc_type and exc_value and exc_type.__name__ == "MKParseFunctionError": tb_list += traceback.extract_tb( exc_value.exc_info()[2]) # type: ignore[attr-defined] # Unify different string types from exception messages to a unicode string # HACK: copy-n-paste from cmk.utils.exception.MKException.__str__ below. # Remove this after migration... if exc_value is None or not exc_value.args: exc_txt = six.text_type("") elif len(exc_value.args) == 1 and isinstance(exc_value.args[0], six.binary_type): try: exc_txt = exc_value.args[0].decode("utf-8") except UnicodeDecodeError: exc_txt = u"b%s" % repr(exc_value.args[0]) elif len(exc_value.args) == 1: exc_txt = six.text_type(exc_value.args[0]) else: exc_txt = six.text_type(exc_value.args) infos = cmk_version.get_general_version_infos() infos.update({ "id": str(uuid.uuid1()), "crash_type": type_name, "exc_type": exc_type.__name__ if exc_type else None, "exc_value": exc_txt, # Py3: Make traceback.FrameSummary serializable "exc_traceback": [tuple(e) for e in tb_list], "local_vars": _get_local_vars_of_last_exception(), "details": details, }) return infos
def _create_sample() -> LicenseUsageSample: query = "GET status\nColumns: num_hosts num_services\n" try: num_hosts, num_services = livestatus.LocalConnection().query(query)[0] except (livestatus.MKLivestatusSocketError, livestatus.MKLivestatusNotFoundError) as e: logger.debug("Livestatus error: %s", e) num_hosts, num_services = 0, 0 general_infos = cmk_version.get_general_version_infos() return LicenseUsageSample( version=cmk_version.omd_version(), edition=general_infos['edition'], platform=general_infos['os'], is_cma=cmk_version.is_cma(), num_hosts=num_hosts, num_services=num_services, sample_time=int(time.time()), timezone=time.localtime().tm_zone, )
def _create_sample() -> Optional[LicenseUsageSample]: hosts_counter = _get_hosts_counter() services_counter = _get_services_counter() if (hosts_counter.included == 0 and hosts_counter.excluded == 0 and services_counter.included == 0 and services_counter.excluded == 0): return None general_infos = cmk_version.get_general_version_infos() return LicenseUsageSample( version=cmk_version.omd_version(), edition=general_infos['edition'], platform=general_infos['os'], is_cma=cmk_version.is_cma(), num_hosts=hosts_counter.included, num_hosts_excluded=hosts_counter.excluded, num_services=services_counter.included, num_services_excluded=services_counter.excluded, sample_time=int(time.time()), timezone=time.localtime().tm_zone, extensions=_get_extensions(), )
def add_or_get_file(self, tmp_dump_folder): # type: (Path) -> Optional[Path] filepath = tmp_dump_folder.joinpath(self.ident).with_suffix(".json") store.save_text_to_file( filepath, json.dumps(cmk_version.get_general_version_infos())) return filepath
def _collect_infos(self, collectors: Collectors) -> DiagnosticsElementJSONResult: version_infos = cmk_version.get_general_version_infos() version_infos["arch"] = platform.machine() return version_infos