blob: e497bc354d537b8cd9330ce822f1220973d5e21e [file] [log] [blame]
hongyu24200d32015-01-08 15:13:49 -08001/*
2 *
David Garcia Quintas3598d442016-03-15 14:53:05 -07003 * Copyright 2015-2016, Google Inc.
hongyu24200d32015-01-08 15:13:49 -08004 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
Craig Tiller9a4dddd2016-03-25 17:08:13 -070034#ifndef GRPC_CORE_LIB_STATISTICS_CENSUS_TRACING_H
35#define GRPC_CORE_LIB_STATISTICS_CENSUS_TRACING_H
hongyu24200d32015-01-08 15:13:49 -080036
Hongyu Chen1ef06e62015-02-04 10:36:04 -080037#include <grpc/support/time.h>
38#include "src/core/statistics/census_rpc_stats.h"
39
40/* WARNING: The data structures and APIs provided by this file are for GRPC
41 library's internal use ONLY. They might be changed in backward-incompatible
42 ways and are not subject to any deprecation policy.
43 They are not recommended for external use.
44 */
Hongyu Chen29569942015-01-22 16:57:36 -080045#ifdef __cplusplus
Craig Tillera82950e2015-09-22 12:33:20 -070046extern "C" {
Hongyu Chen29569942015-01-22 16:57:36 -080047#endif
48
Hongyu Chen1ef06e62015-02-04 10:36:04 -080049/* Struct for a trace annotation. */
Craig Tillera82950e2015-09-22 12:33:20 -070050typedef struct census_trace_annotation {
51 gpr_timespec ts; /* timestamp of the annotation */
52 char txt[CENSUS_MAX_ANNOTATION_LENGTH + 1]; /* actual txt annotation */
53 struct census_trace_annotation *next;
54} census_trace_annotation;
Hongyu Chen1ef06e62015-02-04 10:36:04 -080055
Craig Tillera82950e2015-09-22 12:33:20 -070056typedef struct census_trace_obj {
57 census_op_id id;
58 gpr_timespec ts;
59 census_rpc_stats rpc_stats;
60 char *method;
61 census_trace_annotation *annotations;
62} census_trace_obj;
Hongyu Chen1ef06e62015-02-04 10:36:04 -080063
64/* Deletes trace object. */
Craig Tillera82950e2015-09-22 12:33:20 -070065void census_trace_obj_destroy(census_trace_obj *obj);
hongyu24200d32015-01-08 15:13:49 -080066
67/* Initializes trace store. This function is thread safe. */
Craig Tillera82950e2015-09-22 12:33:20 -070068void census_tracing_init(void);
hongyu24200d32015-01-08 15:13:49 -080069
70/* Shutsdown trace store. This function is thread safe. */
Craig Tillera82950e2015-09-22 12:33:20 -070071void census_tracing_shutdown(void);
hongyu24200d32015-01-08 15:13:49 -080072
73/* Gets trace obj corresponding to the input op_id. Returns NULL if trace store
74 is not initialized or trace obj is not found. Requires trace store being
75 locked before calling this function. */
Craig Tillera82950e2015-09-22 12:33:20 -070076census_trace_obj *census_get_trace_obj_locked(census_op_id op_id);
hongyu24200d32015-01-08 15:13:49 -080077
78/* The following two functions acquire and release the trace store global lock.
79 They are for census internal use only. */
Craig Tillera82950e2015-09-22 12:33:20 -070080void census_internal_lock_trace_store(void);
81void census_internal_unlock_trace_store(void);
hongyu24200d32015-01-08 15:13:49 -080082
Alistair Veitch46c3be02015-02-05 11:41:01 -080083/* Gets method name associated with the input trace object. */
Craig Tillera82950e2015-09-22 12:33:20 -070084const char *census_get_trace_method_name(const census_trace_obj *trace);
hongyu24200d32015-01-08 15:13:49 -080085
Hongyu Chen1ef06e62015-02-04 10:36:04 -080086/* Returns an array of pointers to trace objects of currently active operations
Alistair Veitch46c3be02015-02-05 11:41:01 -080087 and fills in number of active operations. Returns NULL if there are no active
Hongyu Chen1ef06e62015-02-04 10:36:04 -080088 operations.
89 Caller owns the returned objects. */
Craig Tillera82950e2015-09-22 12:33:20 -070090census_trace_obj **census_get_active_ops(int *num_active_ops);
Hongyu Chen1ef06e62015-02-04 10:36:04 -080091
Hongyu Chen29569942015-01-22 16:57:36 -080092#ifdef __cplusplus
93}
94#endif
95
Craig Tiller9a4dddd2016-03-25 17:08:13 -070096#endif /* GRPC_CORE_LIB_STATISTICS_CENSUS_TRACING_H */