update
This commit is contained in:
parent
a52c262acc
commit
2b939832d5
5
BUILD
5
BUILD
|
|
@ -284,6 +284,11 @@ grpc_cc_library(
|
|||
"src/core/ext/census/resource.h",
|
||||
"src/core/ext/census/rpc_metric_id.h",
|
||||
"src/core/ext/census/trace_context.h",
|
||||
"src/core/ext/census/trace_label.h",
|
||||
"src/core/ext/census/trace_propagation.h",
|
||||
"src/core/ext/census/trace_status.h",
|
||||
"src/core/ext/census/trace_string.h",
|
||||
"src/core/ext/census/tracing.h",
|
||||
],
|
||||
external_deps = [
|
||||
"nanopb",
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@ filegroups:
|
|||
- src/core/ext/census/resource.h
|
||||
- src/core/ext/census/rpc_metric_id.h
|
||||
- src/core/ext/census/trace_context.h
|
||||
- src/core/ext/census/trace_label.h
|
||||
- src/core/ext/census/trace_propagation.h
|
||||
- src/core/ext/census/trace_status.h
|
||||
- src/core/ext/census/trace_string.h
|
||||
- src/core/ext/census/tracing.h
|
||||
src:
|
||||
- src/core/ext/census/base_resources.c
|
||||
- src/core/ext/census/context.c
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_CENSUS_TRACE_LABEL_H
|
||||
#define GRPC_CORE_EXT_CENSUS_TRACE_LABEL_H
|
||||
|
||||
#include "src/core/ext/census/trace_string.h"
|
||||
|
||||
/* Trace label (key/value pair) stores a label name and the label value. */
|
||||
typedef struct trace_label {
|
||||
trace_string key;
|
||||
enum label_type {
|
||||
/* A string value */
|
||||
LABEL_STRING = 1,
|
||||
/* An integer value. */
|
||||
LABEL_INT = 2,
|
||||
/* A boolean value. */
|
||||
LABEL_BOOL = 3,
|
||||
} value_type;
|
||||
|
||||
union value {
|
||||
trace_string label_str;
|
||||
int64_t label_int;
|
||||
bool label_bool;
|
||||
} value;
|
||||
size_t val_len;
|
||||
} trace_label;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_CENSUS_TRACE_PROPAGATION_H
|
||||
#define GRPC_CORE_EXT_CENSUS_TRACE_PROPAGATION_H
|
||||
|
||||
#include "src/core/ext/census/tracing.h"
|
||||
|
||||
/* Encoding and decoding functions for receiving and sending propagating data
|
||||
over the wire. Only RPC libraries should be calling these
|
||||
functions. These functions return the number of bytes encoded/decoded
|
||||
(0 if a failure has occurred). buf_size indicates the size of the
|
||||
input/output buffer. trace_span_context is a struct that includes the
|
||||
trace ID, span ID, and a set of option flags (is_sampled, etc.). */
|
||||
|
||||
/* Converts a span context to a binary byte buffer. */
|
||||
size_t trace_span_context_to_binary(const trace_span_context *ctxt, char *buf,
|
||||
size_t buf_size);
|
||||
|
||||
/* Reads a binary byte buffer and populates a span context structure. */
|
||||
size_t binary_to_trace_span_context(const char *buf, size_t buf_size,
|
||||
trace_span_context *ctxt);
|
||||
|
||||
/* Converts a span context to a http format buffer. */
|
||||
size_t trace_span_context_to_http_format(const trace_span_context *ctxt,
|
||||
char *buf, size_t buf_size);
|
||||
|
||||
/* Reads a http format buffer and populates a span context structure. */
|
||||
size_t http_format_to_trace_span_context(const char *buf, size_t buf_size,
|
||||
trace_span_context *ctxt);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_CENSUS_TRACE_STATUS_H
|
||||
#define GRPC_CORE_EXT_CENSUS_TRACE_STATUS_H
|
||||
|
||||
#include "src/core/ext/census/trace_string.h"
|
||||
|
||||
/* Stores a status code and status message for a trace. */
|
||||
typedef struct trace_status {
|
||||
int errorCode;
|
||||
trace_string errorMessage;
|
||||
} trace_status;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_CENSUS_TRACE_STRING_H
|
||||
#define GRPC_CORE_EXT_CENSUS_TRACE_STRING_H
|
||||
|
||||
#include <grpc/slice.h>
|
||||
|
||||
/* String struct for tracing messages. Since this is a C API, we do not have
|
||||
access to a string class. This is intended for use by higher level
|
||||
languages which wrap around the C API, as most of them have a string class.
|
||||
This will also be more efficient when copying, as we have an explicitly
|
||||
specified length. Also, grpc_slice has reference counting which allows for
|
||||
interning. */
|
||||
typedef struct trace_string { grpc_slice string_slice; } trace_string;
|
||||
|
||||
#endif
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2015, Google Inc.
|
||||
* Copyright 2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
|
@ -31,21 +31,40 @@
|
|||
*
|
||||
*/
|
||||
|
||||
//#include "src/core/ext/census/tracing.h"
|
||||
|
||||
#include "src/core/ext/census/tracing.h"
|
||||
#include <grpc/census.h>
|
||||
#include <stdlib.h>
|
||||
#include <grpc/support/alloc.h>
|
||||
#include <grpc/support/log.h>
|
||||
#include <openssl/rand.h>
|
||||
#include "src/core/ext/census/mlog.h"
|
||||
|
||||
/* TODO(aveitch): These are all placeholder implementations. */
|
||||
|
||||
int census_trace_mask(const census_context *context) {
|
||||
abort();
|
||||
return CENSUS_TRACE_MASK_NONE;
|
||||
void trace_start_span(const trace_span_context *span_ctxt,
|
||||
const trace_string name, const start_span_options *opts,
|
||||
trace_span_context *new_span_ctxt,
|
||||
bool has_remote_parent) {
|
||||
// Noop implementation.
|
||||
}
|
||||
|
||||
void census_set_trace_mask(int trace_mask) { abort(); }
|
||||
|
||||
void census_trace_print(census_context *context, uint32_t type,
|
||||
const char *buffer, size_t n) {
|
||||
abort();
|
||||
void trace_add_span_annotation(const trace_string description,
|
||||
const trace_label *labels, const size_t n_labels,
|
||||
trace_span_context *span_ctxt) {
|
||||
// Noop implementation.
|
||||
}
|
||||
|
||||
void trace_add_span_network_event_annotation(const trace_string description,
|
||||
const trace_label *labels,
|
||||
const size_t n_labels,
|
||||
const gpr_timespec timestamp,
|
||||
bool sent, uint64_t id,
|
||||
trace_span_context *span_ctxt) {
|
||||
// Noop implementation.
|
||||
}
|
||||
|
||||
void trace_add_span_labels(const trace_label *labels, const size_t n_labels,
|
||||
trace_span_context *span_ctxt) {
|
||||
// Noop implementation.
|
||||
}
|
||||
|
||||
void trace_end_span(const trace_status *status, trace_span_context *span_ctxt) {
|
||||
// Noop implementation.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_CENSUS_TRACING_H
|
||||
#define GRPC_CORE_EXT_CENSUS_TRACING_H
|
||||
|
||||
#include <grpc/support/time.h>
|
||||
#include <stdbool.h>
|
||||
#include "src/core/ext/census/trace_context.h"
|
||||
#include "src/core/ext/census/trace_label.h"
|
||||
#include "src/core/ext/census/trace_status.h"
|
||||
|
||||
/* The tracing level. */
|
||||
public
|
||||
enum TraceLevel {
|
||||
/* Annotations on this context will be silently discarded. */
|
||||
NO_TRACING = 0,
|
||||
/* Annotations will not be saved to a persistent store. They will be
|
||||
available via local APIs only. It is not propagated to the child. */
|
||||
TRANSIENT_TRACING = 1,
|
||||
/* Annotations are recorded for the entire distributed trace and they are
|
||||
saved to a persistent store. It is propagated to the child. */
|
||||
PERSISTENT_TRACING = 2,
|
||||
}
|
||||
|
||||
typedef struct trace_span_context {
|
||||
/* Trace span context stores Span ID, Trace ID, and option flags. */
|
||||
uint64_t trace_id_hi;
|
||||
uint64_t trace_id_lo;
|
||||
uint64_t span_id;
|
||||
uint32_t span_options;
|
||||
} trace_span_context;
|
||||
|
||||
typedef struct start_span_options {
|
||||
/* If set, this will override the Span.local_start_time for the Span. */
|
||||
gpr_timespec local_start_timestamp;
|
||||
|
||||
/* If set, the Spans are linked to the created Span. */
|
||||
trace_span_context *linked_spans;
|
||||
/* The number of linked spans. */
|
||||
size_t n_linked_spans;
|
||||
} start_span_options;
|
||||
|
||||
/* Create a new child Span (or root if parent is NULL), with parent being the
|
||||
designated Span. The child span will have the provided name and starting
|
||||
span options (optional). The bool has_remote_parent marks whether the
|
||||
context refers to a remote parent span or not. */
|
||||
void trace_start_span(const trace_span_context *span_ctxt,
|
||||
const trace_string name, const start_span_options *opts,
|
||||
trace_span_context *new_span_ctxt,
|
||||
bool has_remote_parent);
|
||||
|
||||
/* Add a new Annotation to the Span. The description corresponds to
|
||||
Span->annotations[].description. */
|
||||
void trace_add_span_annotation(const trace_string description,
|
||||
const trace_label *labels, const size_t n_labels,
|
||||
trace_span_context *span_ctxt);
|
||||
|
||||
/* Add a new NetworkEvent annotation to a Span. This function is only intended
|
||||
to be used by RPC systems (either client or server), not by higher level
|
||||
applications. The timestamp type will be system-defined, the sent argument
|
||||
designates whether this is a network send event (client request, server
|
||||
reply)or receive (server request, client reply). The id argument corresponds
|
||||
to Span.Annotation.NetworkEvent.id from the data model, and serves to uniquely
|
||||
identify each network message. */
|
||||
void trace_add_span_network_event(const trace_string description,
|
||||
const trace_label *labels,
|
||||
const size_t n_labels,
|
||||
const gpr_timespec timestamp, bool sent,
|
||||
uint64_t id, trace_span_context *span_ctxt);
|
||||
|
||||
/* Add a set of labels to the Span. These will correspond to the field
|
||||
Span.labels in the data model. */
|
||||
void trace_add_span_labels(const trace_label *labels, const size_t n_labels,
|
||||
trace_span_context *span_ctxt);
|
||||
|
||||
/* Mark the end of Span Execution with the given status. Only the timing of the
|
||||
first EndSpan call for a given Span will be recorded, and implementations are
|
||||
free to ignore all further calls using the Span. EndSpanOptions can
|
||||
optionally be NULL. */
|
||||
void trace_end_span(const trace_status *status, trace_span_context *span_ctxt);
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue