|
|
|
@ -159,7 +159,7 @@ int census_tag_set_next(census_tag_set_iterator *it, census_tag_const *tag); |
|
|
|
|
invalidated, and should not be used once close is called. */ |
|
|
|
|
void census_tag_set_close(census_tag_set_iterator *it); |
|
|
|
|
|
|
|
|
|
/* Core stats collection API's. There following concepts are used:
|
|
|
|
|
/* Core stats collection API's. The following concepts are used:
|
|
|
|
|
* Aggregation: A collection of values. Census supports the following |
|
|
|
|
aggregation types: |
|
|
|
|
Scalar - a single scalar value. Typically used for keeping (e.g.) |
|
|
|
@ -174,18 +174,18 @@ void census_tag_set_close(census_tag_set_iterator *it); |
|
|
|
|
* Metric: Each measurement is for a single metric. Examples include RPC |
|
|
|
|
latency, CPU seconds consumed, and bytes transmitted. |
|
|
|
|
* View: A view is a tag set, in which the tag values are regular expressions, |
|
|
|
|
combined with an arbitrary number of aggregations and their initialization |
|
|
|
|
parameters. |
|
|
|
|
combined with a metric and an arbitrary number of aggregations and their |
|
|
|
|
initialization parameters. |
|
|
|
|
|
|
|
|
|
Each metric can have an arbitrary number of views by which it will be |
|
|
|
|
broken down. For every measurement recorded, they are broken down by |
|
|
|
|
unique tag combinations, and recorded in each matvhing view/aggregation. |
|
|
|
|
unique tag combinations, and recorded in each matching view/aggregation. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/* A single value to be recorded comprises two parts: an ID for the particular
|
|
|
|
|
* metric and the value to be recorded against it. */ |
|
|
|
|
typedef struct { |
|
|
|
|
gpr_int32 metric_id; |
|
|
|
|
gpr_uint32 metric_id; |
|
|
|
|
double value; |
|
|
|
|
} census_value; |
|
|
|
|
|
|
|
|
@ -210,25 +210,30 @@ typedef struct { |
|
|
|
|
void (*free_data)(const void *data); |
|
|
|
|
/* Reset an aggregation to default (zero) values. */ |
|
|
|
|
void (*reset)(void *aggregation); |
|
|
|
|
/* Merge 'from' aggregation into 'to'. Both aggregations must be compatible */ |
|
|
|
|
void (*merge)(void *to, const void *from); |
|
|
|
|
/* Fill buffer with printable string version of aggregation contents. For
|
|
|
|
|
* debugging only. */ |
|
|
|
|
void (*print)(const void *aggregation, char *buffer, size_t n); |
|
|
|
|
} census_aggregation_descriptor; |
|
|
|
|
|
|
|
|
|
/** Register a new aggregation type.
|
|
|
|
|
@param descriptor Describes aggregation |
|
|
|
|
@return An identifier that can be used to identify the aggregation in other |
|
|
|
|
census functions. */ |
|
|
|
|
gpr_int32 census_register_aggregation( |
|
|
|
|
gpr_uint32 census_register_aggregation( |
|
|
|
|
const census_aggregation_descriptor *descriptor); |
|
|
|
|
|
|
|
|
|
/* Aggregation Identifiers for built-in census aggregations. */ |
|
|
|
|
#define CENSUS_AGGREGATION_ID_SCALAR ((gpr_int32)0) |
|
|
|
|
#define CENSUS_AGGREGATION_ID_DISTRIBUTION ((gpr_int32)1) |
|
|
|
|
#define CENSUS_AGGREGATION_ID_HISTOGRAM ((gpr_int32)2) |
|
|
|
|
#define CENSUS_AGGREGATION_ID_WINDOW ((gpr_int32)3) |
|
|
|
|
#define CENSUS_AGGREGATION_ID_SCALAR ((gpr_uint32)0) |
|
|
|
|
#define CENSUS_AGGREGATION_ID_DISTRIBUTION ((gpr_uint32)1) |
|
|
|
|
#define CENSUS_AGGREGATION_ID_HISTOGRAM ((gpr_uint32)2) |
|
|
|
|
#define CENSUS_AGGREGATION_ID_WINDOW ((gpr_uint32)3) |
|
|
|
|
|
|
|
|
|
/** Information needed to instantiate a new aggregation. Used in view
|
|
|
|
|
construction via census_define_view(). */ |
|
|
|
|
typedef struct { |
|
|
|
|
gpr_int32 id; /* aggregation ID */ |
|
|
|
|
gpr_uint32 id; /* aggregation ID */ |
|
|
|
|
const void |
|
|
|
|
*create_arg; /* Argument to be used for aggregation initialization. */ |
|
|
|
|
} census_aggregation; |
|
|
|
@ -237,16 +242,21 @@ typedef struct { |
|
|
|
|
typedef struct census_view census_view; |
|
|
|
|
|
|
|
|
|
/** Create a new view.
|
|
|
|
|
@param metric_id Metric with which this view is associated. |
|
|
|
|
@param tags tags that define the view |
|
|
|
|
@param aggregations aggregations to associate with the view |
|
|
|
|
@param naggregations number of aggregations |
|
|
|
|
|
|
|
|
|
@return A new census view |
|
|
|
|
*/ |
|
|
|
|
const census_view *census_define_view(const census_tag_set *tags, |
|
|
|
|
const census_view *census_define_view(gpr_uint32 metric_id, |
|
|
|
|
const census_tag_set *tags, |
|
|
|
|
const census_aggregation *aggregations, |
|
|
|
|
size_t naggregations); |
|
|
|
|
|
|
|
|
|
/** Metric ID associated with a view */ |
|
|
|
|
size_t census_view_metric(const census_view *view); |
|
|
|
|
|
|
|
|
|
/** Number of aggregations associated with view. */ |
|
|
|
|
size_t census_view_naggregations(const census_view *view); |
|
|
|
|
|
|
|
|
@ -256,15 +266,6 @@ const census_tag_set *census_view_tags(const census_view *view); |
|
|
|
|
/** Get aggregations associated with a view. */ |
|
|
|
|
const census_aggregation *census_view_aggregrations(const census_view *view); |
|
|
|
|
|
|
|
|
|
/** Associate a given view with a metric. Every metric can have many different
|
|
|
|
|
views. |
|
|
|
|
@param metric_id Identifier of metric with which to attah the view |
|
|
|
|
@param view View to attach to the metric |
|
|
|
|
@return A view identifier: can be used to retrieve aggregation data from |
|
|
|
|
the view using census_view_data(). |
|
|
|
|
*/ |
|
|
|
|
gpr_int64 census_attach_view(gpr_int32 metric_id, const census_view *view); |
|
|
|
|
|
|
|
|
|
/** Holds aggregation data, as it applies to a particular view. This structure
|
|
|
|
|
is used as one component of the data returned from census_get_view_data(). */ |
|
|
|
|
typedef struct { |
|
|
|
@ -288,25 +289,23 @@ typedef struct { |
|
|
|
|
|
|
|
|
|
/** Census view data as returned by census_get_view_data(). */ |
|
|
|
|
typedef struct { |
|
|
|
|
const census_view *view; /* Original view */ |
|
|
|
|
size_t n_tag_sets; /* Number of unique tag sets that matched view. */ |
|
|
|
|
size_t n_tag_sets; /* Number of unique tag sets that matched view. */ |
|
|
|
|
const census_view_aggregation_data *data; /* n_tag_sets entries */ |
|
|
|
|
} census_view_data; |
|
|
|
|
|
|
|
|
|
/** Get data from aggregations associated with a view.
|
|
|
|
|
@param view_id View identifier returned from census_attach_view |
|
|
|
|
@param aggregation_indices Indexes of aggregations (relative to original view) |
|
|
|
|
for which to return current data. This parameter is ignored if |
|
|
|
|
nindices == 0. |
|
|
|
|
@param view View from which to get data. |
|
|
|
|
@param aggregation_indices Indexes of view aggregations for which to return |
|
|
|
|
current data. This parameter is ignored if nindices == 0. |
|
|
|
|
@param nindices. Number of entries in aggregation_indices. If this is set to |
|
|
|
|
0, then all aggregations for the current view are returned. |
|
|
|
|
0, then all aggregations are returned. |
|
|
|
|
*/ |
|
|
|
|
const census_view_data *census_get_view_data(gpr_int64 view_id, |
|
|
|
|
const census_view_data *census_get_view_data(census_view *view, |
|
|
|
|
size_t *aggregation_indices, |
|
|
|
|
size_t nindices); |
|
|
|
|
|
|
|
|
|
/** Reset all view data to zero for the specified view id. */ |
|
|
|
|
void census_reset_view_data(gpr_int64 view_id); |
|
|
|
|
void census_reset_view_data(gpr_uint64 view_id); |
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
} |
|
|
|
|