示例#1
0
def _extract_attributes(
    attrs: types.Attributes,
    num_attrs_limit: int,
    add_agent_attr: bool = False,
) -> ProtoSpan.Attributes:
    """Convert span.attributes to dict."""
    attributes_dict = BoundedDict(
        num_attrs_limit)  # type: BoundedDict[str, AttributeValue]
    invalid_value_dropped_count = 0
    for key, value in attrs.items() if attrs else []:
        key = _truncate_str(key, 128)[0]
        if key in LABELS_MAPPING:  # pylint: disable=consider-using-get
            key = LABELS_MAPPING[key]
        value = _format_attribute_value(value)

        if value:
            attributes_dict[key] = value
        else:
            invalid_value_dropped_count += 1
    if add_agent_attr:
        attributes_dict["g.co/agent"] = _format_attribute_value(
            "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
                _strip_characters(
                    pkg_resources.get_distribution(
                        "opentelemetry-sdk").version),
                _strip_characters(google_ext_version),
            ))
    return ProtoSpan.Attributes(
        attribute_map=attributes_dict,
        dropped_attributes_count=attributes_dict.
        dropped  # type: ignore[attr-defined]
        + invalid_value_dropped_count,
    )
示例#2
0
def _extract_attributes(
    attrs: types.Attributes,
    num_attrs_limit: int,
    add_agent_attr: bool = False,
) -> ProtoSpan.Attributes:
    """Convert span.attributes to dict."""
    attributes_dict = BoundedDict(num_attrs_limit)
    invalid_value_dropped_count = 0
    for key, value in attrs.items():
        key = _truncate_str(key, 128)[0]
        value = _format_attribute_value(value)

        if value:
            attributes_dict[key] = value
        else:
            invalid_value_dropped_count += 1
    if add_agent_attr:
        attributes_dict["g.co/agent"] = _format_attribute_value(
            "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
                _strip_characters(
                    pkg_resources.get_distribution(
                        "opentelemetry-sdk").version),
                _strip_characters(google_ext_version),
            ))
    return ProtoSpan.Attributes(
        attribute_map=attributes_dict,
        dropped_attributes_count=attributes_dict.dropped +
        invalid_value_dropped_count,
    )
def _filter_attribute_values(attributes: types.Attributes):
    if attributes:
        for attr_key, attr_value in list(attributes.items()):
            if _is_valid_attribute_value(attr_value):
                if isinstance(attr_value, MutableSequence):
                    attributes[attr_key] = tuple(attr_value)
            else:
                attributes.pop(attr_key)
示例#4
0
def _encode_attributes(
    attributes: Attributes,
) -> Optional[List[PB2KeyValue]]:
    if attributes:
        pb2_attributes = []
        for key, value in attributes.items():
            try:
                pb2_attributes.append(_encode_key_value(key, value))
            except Exception as error:  # pylint: disable=broad-except
                _logger.exception(error)
    else:
        pb2_attributes = None
    return pb2_attributes
示例#5
0
def _extract_attributes(attrs: types.Attributes,
                        num_attrs_limit: int) -> ProtoSpan.Attributes:
    """Convert span.attributes to dict."""
    attributes_dict = BoundedDict(num_attrs_limit)

    for key, value in attrs.items():
        key = _truncate_str(key, 128)[0]
        value = _format_attribute_value(value)

        if value is not None:
            attributes_dict[key] = value
    return ProtoSpan.Attributes(
        attribute_map=attributes_dict,
        dropped_attributes_count=len(attrs) - len(attributes_dict),
    )