Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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,
    )
Ejemplo n.º 4
0
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(),
    )
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 def _collect_infos(self, collectors: Collectors) -> DiagnosticsElementJSONResult:
     version_infos = cmk_version.get_general_version_infos()
     version_infos["arch"] = platform.machine()
     return version_infos