コード例 #1
0
    def trace_and_record_stats(self, method_name, fn, *args, **kwargs):
        __TRACER = execution_context.get_opencensus_tracer() or noop_tracer.NoopTracer()
        __STATS_RECORDER = stats.Stats().stats_recorder

        start_time = time.time()

        tags = tag_map_module.TagMap()
        tags.insert(key_method, tag_value_module.TagValue(method_name))
        mm = __STATS_RECORDER.new_measurement_map()

        with __TRACER.span(name=method_name) as span:
            try:
                return fn(*args, **kwargs)
            except Exception as e: # an error to record
                span.status = Status.from_exception(e)
                # TODO: (@odeke-em) perhaps shorten the exception when added as a tag here?
                tags.insert(key_error, e.__str__())
                # Then finally after recording the exception, re-raise it.
                raise e
            else: # Success
                tags.insert(key_status, "ok")
            finally:
                latency_ms = (time.time() - start_time) * 1000
                mm.measure_float_put(m_latency_ms, latency_ms)
                mm.measure_int_put(m_calls, 1)
                mm.record(tags)
コード例 #2
0
def trace_and_record_stats_with_key_and_value(method_name, fn, key, value,
                                              *args, **kwargs):
    __TRACER = execution_context.get_opencensus_tracer(
    ) or noop_tracer.NoopTracer()
    __STATS_RECORDER = stats.stats.stats_recorder

    start_time = time.time()
    tags = tag_map.TagMap()
    tags.insert(key_method, tag_value.TagValue(method_name))
    mm = __STATS_RECORDER.new_measurement_map()

    with __TRACER.span(name=method_name) as span:
        try:
            return fn(*args, **kwargs)

        except Exception as e:
            span.status = Status.from_exception(e)
            tags.insert(key_status, "ERROR")
            tags.insert(key_error, e.__str__())
            # Re-raise that exception after we've extracted the error.
            raise e

        else:
            tags.insert(key_status, "OK")

        finally:
            latency_ms = (time.time() - start_time) * 1e3
            mm.measure_float_put(m_latency_ms, latency_ms)
            key_lengths = heuristical_lengths(key)
            value_lengths = heuristical_lengths(value)

            for key_length in key_lengths:
                mm.measure_int_put(m_key_length, key_length)

            for value_length in value_lengths:
                mm.measure_int_put(m_value_length, value_length)

            mm.record(tags)
コード例 #3
0
def unknown(exception):
    return Status.from_exception(exception)