All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
as_metrics.h
Go to the documentation of this file.
1/*
2 * Copyright 2008-2024 Aerospike, Inc.
3 *
4 * Portions may be licensed to Aerospike, Inc. under one or more contributor
5 * license agreements.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
8 * use this file except in compliance with the License. You may obtain a copy of
9 * the License at http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 * License for the specific language governing permissions and limitations under
15 * the License.
16 */
17#pragma once
18
19#include <stddef.h>
20#include <stdint.h>
21#include <stdio.h>
22#include <aerospike/aerospike.h>
23#include <aerospike/as_error.h>
24#include <aerospike/as_string.h>
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30//---------------------------------
31// Types
32//---------------------------------
33
34struct as_policy_metrics_s;
35struct as_node_s;
36struct as_cluster_s;
37
38/**
39 * Callbacks for metrics listener operations.
40 */
41typedef as_status(*as_metrics_enable_listener)(as_error* err, void* udata);
42
43typedef as_status(*as_metrics_snapshot_listener)(as_error* err, struct as_cluster_s* cluster, void* udata);
44
45typedef as_status(*as_metrics_node_close_listener)(as_error* err, struct as_node_s* node, void* udata);
46
47typedef as_status(*as_metrics_disable_listener)(as_error* err, struct as_cluster_s* cluster, void* udata);
48
49/**
50 * Metrics listener callbacks.
51 */
52typedef struct as_metrics_listeners_s {
53 /**
54 * Periodic extended metrics has been enabled for the given cluster.
55 */
57
58 /**
59 * A metrics snapshot has been requested for the given cluster.
60 */
62
63 /**
64 * A node is being dropped from the cluster.
65 */
67
68 /**
69 * Periodic extended metrics has been disabled for the given cluster.
70 */
72
73 /**
74 * User defined data.
75 */
76 void* udata;
78
79/**
80 * Client periodic metrics configuration.
81 */
82typedef struct as_metrics_policy_s {
83 /**
84 * Listeners that handles metrics notification events. The default listener implementation
85 * writes the metrics snapshot to a file which will later be read and forwarded to
86 * OpenTelemetry by a separate offline application.
87 *
88 * The listener could be overridden to send the metrics snapshot directly to OpenTelemetry.
89 */
91
92 /**
93 * Directory path to write metrics log files for listeners that write logs.
94 *
95 * Default: . (current directory)
96 */
97 char report_dir[256];
98
99 /**
100 * Metrics file size soft limit in bytes for listeners that write logs.
101 *
102 * When report_size_limit is reached or exceeded, the current metrics file is closed and a new
103 * metrics file is created with a new timestamp. If report_size_limit is zero, the metrics file
104 * size is unbounded and the file will only be closed when aerospike_disable_metrics() or
105 * aerospike_close() is called.
106 *
107 * Default: 0
108 */
110
111 /**
112 * Number of cluster tend iterations between metrics notification events. One tend iteration
113 * is defined as as_config.tender_interval (default 1 second) plus the time to tend all
114 * nodes.
115 *
116 * Default: 30
117 */
118 uint32_t interval;
119
120 /**
121 * Number of elapsed time range buckets in latency histograms.
122 *
123 * Default: 7
124 */
126
127 /**
128 * Power of 2 multiple between each range bucket in latency histograms starting at column 3. The bucket units
129 * are in milliseconds. The first 2 buckets are "<=1ms" and ">1ms". Examples:
130 *
131 * ~~~~~~~~~~{.c}
132 * // latencyColumns=7 latencyShift=1
133 * <=1ms >1ms >2ms >4ms >8ms >16ms >32ms
134 *
135 * // latencyColumns=5 latencyShift=3
136 * <=1ms >1ms >8ms >64ms >512ms
137 * ~~~~~~~~~~
138 *
139 * Default: 1
140 */
143
144//---------------------------------
145// Functions
146//---------------------------------
147
148/**
149 * Initalize metrics policy
150 */
151AS_EXTERN void
153
154/**
155 * Initalize metrics policy
156 */
157static inline void
159{
160 as_strncpy(policy->report_dir, report_dir, sizeof(policy->report_dir));
161}
162
163static inline void
167 as_metrics_snapshot_listener snapshot, void* udata
168 )
169{
170 policy->metrics_listeners.enable_listener = enable;
171 policy->metrics_listeners.disable_listener = disable;
172 policy->metrics_listeners.node_close_listener = node_close;
173 policy->metrics_listeners.snapshot_listener = snapshot;
174 policy->metrics_listeners.udata = udata;
175}
176
177/**
178 * Enable extended periodic cluster and node latency metrics.
179 */
182
183/**
184 * Disable extended periodic cluster and node latency metrics.
185 */
188
189#ifdef __cplusplus
190} // end extern "C"
191#endif
as_status(* as_metrics_snapshot_listener)(as_error *err, struct as_cluster_s *cluster, void *udata)
Definition as_metrics.h:43
as_status(* as_metrics_disable_listener)(as_error *err, struct as_cluster_s *cluster, void *udata)
Definition as_metrics.h:47
AS_EXTERN as_status aerospike_enable_metrics(aerospike *as, as_error *err, as_metrics_policy *policy)
as_status(* as_metrics_enable_listener)(as_error *err, void *udata)
Definition as_metrics.h:41
AS_EXTERN as_status aerospike_disable_metrics(aerospike *as, as_error *err)
static void as_metrics_policy_set_listeners(as_metrics_policy *policy, as_metrics_enable_listener enable, as_metrics_disable_listener disable, as_metrics_node_close_listener node_close, as_metrics_snapshot_listener snapshot, void *udata)
Definition as_metrics.h:164
static void as_metrics_policy_set_report_dir(as_metrics_policy *policy, const char *report_dir)
Definition as_metrics.h:158
AS_EXTERN void as_metrics_policy_init(as_metrics_policy *policy)
as_status(* as_metrics_node_close_listener)(as_error *err, struct as_node_s *node, void *udata)
Definition as_metrics.h:45
as_status
Definition as_status.h:30
#define AS_EXTERN
Definition as_std.h:25
AS_EXTERN bool as_strncpy(char *trg, const char *src, int size)
as_metrics_disable_listener disable_listener
Definition as_metrics.h:71
as_metrics_snapshot_listener snapshot_listener
Definition as_metrics.h:61
as_metrics_enable_listener enable_listener
Definition as_metrics.h:56
as_metrics_node_close_listener node_close_listener
Definition as_metrics.h:66
uint32_t latency_shift
Definition as_metrics.h:141
uint32_t latency_columns
Definition as_metrics.h:125
as_metrics_listeners metrics_listeners
Definition as_metrics.h:90
uint64_t report_size_limit
Definition as_metrics.h:109
char report_dir[256]
Definition as_metrics.h:97