1 /* 2 * Copyright 2015 MongoDB, Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef MONGOC_APM_H 18 #define MONGOC_APM_H 19 20 #if !defined(MONGOC_INSIDE) && !defined(MONGOC_COMPILATION) 21 #error "Only <mongoc.h> can be included directly." 22 #endif 23 24 #include <bson.h> 25 26 #include "mongoc-macros.h" 27 #include "mongoc-host-list.h" 28 #include "mongoc-server-description.h" 29 #include "mongoc-topology-description.h" 30 31 BSON_BEGIN_DECLS 32 33 /* 34 * Application Performance Management (APM) interface, complies with two specs. 35 * MongoDB's Command Monitoring Spec: 36 * 37 * https://github.com/mongodb/specifications/tree/master/source/command-monitoring 38 * 39 * MongoDB's Spec for Monitoring Server Discovery and Monitoring (SDAM) events: 40 * 41 * https://github.com/mongodb/specifications/tree/master/source/server-discovery-and-monitoring 42 * 43 */ 44 45 /* 46 * callbacks to receive APM events 47 */ 48 49 typedef struct _mongoc_apm_callbacks_t mongoc_apm_callbacks_t; 50 51 52 /* 53 * command monitoring events 54 */ 55 56 typedef struct _mongoc_apm_command_started_t mongoc_apm_command_started_t; 57 typedef struct _mongoc_apm_command_succeeded_t mongoc_apm_command_succeeded_t; 58 typedef struct _mongoc_apm_command_failed_t mongoc_apm_command_failed_t; 59 60 61 /* 62 * SDAM monitoring events 63 */ 64 65 typedef struct _mongoc_apm_server_changed_t mongoc_apm_server_changed_t; 66 typedef struct _mongoc_apm_server_opening_t mongoc_apm_server_opening_t; 67 typedef struct _mongoc_apm_server_closed_t mongoc_apm_server_closed_t; 68 typedef struct _mongoc_apm_topology_changed_t mongoc_apm_topology_changed_t; 69 typedef struct _mongoc_apm_topology_opening_t mongoc_apm_topology_opening_t; 70 typedef struct _mongoc_apm_topology_closed_t mongoc_apm_topology_closed_t; 71 typedef struct _mongoc_apm_server_heartbeat_started_t 72 mongoc_apm_server_heartbeat_started_t; 73 typedef struct _mongoc_apm_server_heartbeat_succeeded_t 74 mongoc_apm_server_heartbeat_succeeded_t; 75 typedef struct _mongoc_apm_server_heartbeat_failed_t 76 mongoc_apm_server_heartbeat_failed_t; 77 78 /* 79 * event field accessors 80 */ 81 82 /* command-started event fields */ 83 84 MONGOC_EXPORT (const bson_t *) 85 mongoc_apm_command_started_get_command ( 86 const mongoc_apm_command_started_t *event); 87 MONGOC_EXPORT (const char *) 88 mongoc_apm_command_started_get_database_name ( 89 const mongoc_apm_command_started_t *event); 90 MONGOC_EXPORT (const char *) 91 mongoc_apm_command_started_get_command_name ( 92 const mongoc_apm_command_started_t *event); 93 MONGOC_EXPORT (int64_t) 94 mongoc_apm_command_started_get_request_id ( 95 const mongoc_apm_command_started_t *event); 96 MONGOC_EXPORT (int64_t) 97 mongoc_apm_command_started_get_operation_id ( 98 const mongoc_apm_command_started_t *event); 99 MONGOC_EXPORT (const mongoc_host_list_t *) 100 mongoc_apm_command_started_get_host (const mongoc_apm_command_started_t *event); 101 MONGOC_EXPORT (uint32_t) 102 mongoc_apm_command_started_get_server_id ( 103 const mongoc_apm_command_started_t *event); 104 MONGOC_EXPORT (void *) 105 mongoc_apm_command_started_get_context ( 106 const mongoc_apm_command_started_t *event); 107 108 /* command-succeeded event fields */ 109 110 MONGOC_EXPORT (int64_t) 111 mongoc_apm_command_succeeded_get_duration ( 112 const mongoc_apm_command_succeeded_t *event); 113 MONGOC_EXPORT (const bson_t *) 114 mongoc_apm_command_succeeded_get_reply ( 115 const mongoc_apm_command_succeeded_t *event); 116 MONGOC_EXPORT (const char *) 117 mongoc_apm_command_succeeded_get_command_name ( 118 const mongoc_apm_command_succeeded_t *event); 119 MONGOC_EXPORT (int64_t) 120 mongoc_apm_command_succeeded_get_request_id ( 121 const mongoc_apm_command_succeeded_t *event); 122 MONGOC_EXPORT (int64_t) 123 mongoc_apm_command_succeeded_get_operation_id ( 124 const mongoc_apm_command_succeeded_t *event); 125 MONGOC_EXPORT (const mongoc_host_list_t *) 126 mongoc_apm_command_succeeded_get_host ( 127 const mongoc_apm_command_succeeded_t *event); 128 MONGOC_EXPORT (uint32_t) 129 mongoc_apm_command_succeeded_get_server_id ( 130 const mongoc_apm_command_succeeded_t *event); 131 MONGOC_EXPORT (void *) 132 mongoc_apm_command_succeeded_get_context ( 133 const mongoc_apm_command_succeeded_t *event); 134 135 /* command-failed event fields */ 136 137 MONGOC_EXPORT (int64_t) 138 mongoc_apm_command_failed_get_duration ( 139 const mongoc_apm_command_failed_t *event); 140 MONGOC_EXPORT (const char *) 141 mongoc_apm_command_failed_get_command_name ( 142 const mongoc_apm_command_failed_t *event); 143 /* retrieve the error by filling out the passed-in "error" struct */ 144 MONGOC_EXPORT (void) 145 mongoc_apm_command_failed_get_error (const mongoc_apm_command_failed_t *event, 146 bson_error_t *error); 147 MONGOC_EXPORT (int64_t) 148 mongoc_apm_command_failed_get_request_id ( 149 const mongoc_apm_command_failed_t *event); 150 MONGOC_EXPORT (int64_t) 151 mongoc_apm_command_failed_get_operation_id ( 152 const mongoc_apm_command_failed_t *event); 153 MONGOC_EXPORT (const mongoc_host_list_t *) 154 mongoc_apm_command_failed_get_host (const mongoc_apm_command_failed_t *event); 155 MONGOC_EXPORT (uint32_t) 156 mongoc_apm_command_failed_get_server_id ( 157 const mongoc_apm_command_failed_t *event); 158 MONGOC_EXPORT (void *) 159 mongoc_apm_command_failed_get_context ( 160 const mongoc_apm_command_failed_t *event); 161 162 /* server-changed event fields */ 163 164 MONGOC_EXPORT (const mongoc_host_list_t *) 165 mongoc_apm_server_changed_get_host (const mongoc_apm_server_changed_t *event); 166 MONGOC_EXPORT (void) 167 mongoc_apm_server_changed_get_topology_id ( 168 const mongoc_apm_server_changed_t *event, bson_oid_t *topology_id); 169 MONGOC_EXPORT (const mongoc_server_description_t *) 170 mongoc_apm_server_changed_get_previous_description ( 171 const mongoc_apm_server_changed_t *event); 172 MONGOC_EXPORT (const mongoc_server_description_t *) 173 mongoc_apm_server_changed_get_new_description ( 174 const mongoc_apm_server_changed_t *event); 175 MONGOC_EXPORT (void *) 176 mongoc_apm_server_changed_get_context ( 177 const mongoc_apm_server_changed_t *event); 178 179 /* server-opening event fields */ 180 181 MONGOC_EXPORT (const mongoc_host_list_t *) 182 mongoc_apm_server_opening_get_host (const mongoc_apm_server_opening_t *event); 183 MONGOC_EXPORT (void) 184 mongoc_apm_server_opening_get_topology_id ( 185 const mongoc_apm_server_opening_t *event, bson_oid_t *topology_id); 186 MONGOC_EXPORT (void *) 187 mongoc_apm_server_opening_get_context ( 188 const mongoc_apm_server_opening_t *event); 189 190 /* server-closed event fields */ 191 192 MONGOC_EXPORT (const mongoc_host_list_t *) 193 mongoc_apm_server_closed_get_host (const mongoc_apm_server_closed_t *event); 194 MONGOC_EXPORT (void) 195 mongoc_apm_server_closed_get_topology_id ( 196 const mongoc_apm_server_closed_t *event, bson_oid_t *topology_id); 197 MONGOC_EXPORT (void *) 198 mongoc_apm_server_closed_get_context (const mongoc_apm_server_closed_t *event); 199 200 /* topology-changed event fields */ 201 202 MONGOC_EXPORT (void) 203 mongoc_apm_topology_changed_get_topology_id ( 204 const mongoc_apm_topology_changed_t *event, bson_oid_t *topology_id); 205 MONGOC_EXPORT (const mongoc_topology_description_t *) 206 mongoc_apm_topology_changed_get_previous_description ( 207 const mongoc_apm_topology_changed_t *event); 208 MONGOC_EXPORT (const mongoc_topology_description_t *) 209 mongoc_apm_topology_changed_get_new_description ( 210 const mongoc_apm_topology_changed_t *event); 211 MONGOC_EXPORT (void *) 212 mongoc_apm_topology_changed_get_context ( 213 const mongoc_apm_topology_changed_t *event); 214 215 /* topology-opening event field */ 216 217 MONGOC_EXPORT (void) 218 mongoc_apm_topology_opening_get_topology_id ( 219 const mongoc_apm_topology_opening_t *event, bson_oid_t *topology_id); 220 MONGOC_EXPORT (void *) 221 mongoc_apm_topology_opening_get_context ( 222 const mongoc_apm_topology_opening_t *event); 223 224 /* topology-closed event field */ 225 226 MONGOC_EXPORT (void) 227 mongoc_apm_topology_closed_get_topology_id ( 228 const mongoc_apm_topology_closed_t *event, bson_oid_t *topology_id); 229 MONGOC_EXPORT (void *) 230 mongoc_apm_topology_closed_get_context ( 231 const mongoc_apm_topology_closed_t *event); 232 233 /* heartbeat-started event field */ 234 235 MONGOC_EXPORT (const mongoc_host_list_t *) 236 mongoc_apm_server_heartbeat_started_get_host ( 237 const mongoc_apm_server_heartbeat_started_t *event); 238 MONGOC_EXPORT (void *) 239 mongoc_apm_server_heartbeat_started_get_context ( 240 const mongoc_apm_server_heartbeat_started_t *event); 241 242 /* heartbeat-succeeded event fields */ 243 244 MONGOC_EXPORT (int64_t) 245 mongoc_apm_server_heartbeat_succeeded_get_duration ( 246 const mongoc_apm_server_heartbeat_succeeded_t *event); 247 MONGOC_EXPORT (const bson_t *) 248 mongoc_apm_server_heartbeat_succeeded_get_reply ( 249 const mongoc_apm_server_heartbeat_succeeded_t *event); 250 MONGOC_EXPORT (const mongoc_host_list_t *) 251 mongoc_apm_server_heartbeat_succeeded_get_host ( 252 const mongoc_apm_server_heartbeat_succeeded_t *event); 253 MONGOC_EXPORT (void *) 254 mongoc_apm_server_heartbeat_succeeded_get_context ( 255 const mongoc_apm_server_heartbeat_succeeded_t *event); 256 257 /* heartbeat-failed event fields */ 258 259 MONGOC_EXPORT (int64_t) 260 mongoc_apm_server_heartbeat_failed_get_duration ( 261 const mongoc_apm_server_heartbeat_failed_t *event); 262 MONGOC_EXPORT (void) 263 mongoc_apm_server_heartbeat_failed_get_error ( 264 const mongoc_apm_server_heartbeat_failed_t *event, bson_error_t *error); 265 MONGOC_EXPORT (const mongoc_host_list_t *) 266 mongoc_apm_server_heartbeat_failed_get_host ( 267 const mongoc_apm_server_heartbeat_failed_t *event); 268 MONGOC_EXPORT (void *) 269 mongoc_apm_server_heartbeat_failed_get_context ( 270 const mongoc_apm_server_heartbeat_failed_t *event); 271 272 273 /* 274 * callbacks 275 */ 276 277 typedef void (*mongoc_apm_command_started_cb_t) ( 278 const mongoc_apm_command_started_t *event); 279 typedef void (*mongoc_apm_command_succeeded_cb_t) ( 280 const mongoc_apm_command_succeeded_t *event); 281 typedef void (*mongoc_apm_command_failed_cb_t) ( 282 const mongoc_apm_command_failed_t *event); 283 typedef void (*mongoc_apm_server_changed_cb_t) ( 284 const mongoc_apm_server_changed_t *event); 285 typedef void (*mongoc_apm_server_opening_cb_t) ( 286 const mongoc_apm_server_opening_t *event); 287 typedef void (*mongoc_apm_server_closed_cb_t) ( 288 const mongoc_apm_server_closed_t *event); 289 typedef void (*mongoc_apm_topology_changed_cb_t) ( 290 const mongoc_apm_topology_changed_t *event); 291 typedef void (*mongoc_apm_topology_opening_cb_t) ( 292 const mongoc_apm_topology_opening_t *event); 293 typedef void (*mongoc_apm_topology_closed_cb_t) ( 294 const mongoc_apm_topology_closed_t *event); 295 typedef void (*mongoc_apm_server_heartbeat_started_cb_t) ( 296 const mongoc_apm_server_heartbeat_started_t *event); 297 typedef void (*mongoc_apm_server_heartbeat_succeeded_cb_t) ( 298 const mongoc_apm_server_heartbeat_succeeded_t *event); 299 typedef void (*mongoc_apm_server_heartbeat_failed_cb_t) ( 300 const mongoc_apm_server_heartbeat_failed_t *event); 301 302 /* 303 * registering callbacks 304 */ 305 306 MONGOC_EXPORT (mongoc_apm_callbacks_t *) 307 mongoc_apm_callbacks_new (void); 308 MONGOC_EXPORT (void) 309 mongoc_apm_callbacks_destroy (mongoc_apm_callbacks_t *callbacks); 310 MONGOC_EXPORT (void) 311 mongoc_apm_set_command_started_cb (mongoc_apm_callbacks_t *callbacks, 312 mongoc_apm_command_started_cb_t cb); 313 MONGOC_EXPORT (void) 314 mongoc_apm_set_command_succeeded_cb (mongoc_apm_callbacks_t *callbacks, 315 mongoc_apm_command_succeeded_cb_t cb); 316 MONGOC_EXPORT (void) 317 mongoc_apm_set_command_failed_cb (mongoc_apm_callbacks_t *callbacks, 318 mongoc_apm_command_failed_cb_t cb); 319 MONGOC_EXPORT (void) 320 mongoc_apm_set_server_changed_cb (mongoc_apm_callbacks_t *callbacks, 321 mongoc_apm_server_changed_cb_t cb); 322 MONGOC_EXPORT (void) 323 mongoc_apm_set_server_opening_cb (mongoc_apm_callbacks_t *callbacks, 324 mongoc_apm_server_opening_cb_t cb); 325 MONGOC_EXPORT (void) 326 mongoc_apm_set_server_closed_cb (mongoc_apm_callbacks_t *callbacks, 327 mongoc_apm_server_closed_cb_t cb); 328 MONGOC_EXPORT (void) 329 mongoc_apm_set_topology_changed_cb (mongoc_apm_callbacks_t *callbacks, 330 mongoc_apm_topology_changed_cb_t cb); 331 MONGOC_EXPORT (void) 332 mongoc_apm_set_topology_opening_cb (mongoc_apm_callbacks_t *callbacks, 333 mongoc_apm_topology_opening_cb_t cb); 334 MONGOC_EXPORT (void) 335 mongoc_apm_set_topology_closed_cb (mongoc_apm_callbacks_t *callbacks, 336 mongoc_apm_topology_closed_cb_t cb); 337 MONGOC_EXPORT (void) 338 mongoc_apm_set_server_heartbeat_started_cb ( 339 mongoc_apm_callbacks_t *callbacks, 340 mongoc_apm_server_heartbeat_started_cb_t cb); 341 MONGOC_EXPORT (void) 342 mongoc_apm_set_server_heartbeat_succeeded_cb ( 343 mongoc_apm_callbacks_t *callbacks, 344 mongoc_apm_server_heartbeat_succeeded_cb_t cb); 345 MONGOC_EXPORT (void) 346 mongoc_apm_set_server_heartbeat_failed_cb ( 347 mongoc_apm_callbacks_t *callbacks, 348 mongoc_apm_server_heartbeat_failed_cb_t cb); 349 BSON_END_DECLS 350 351 #endif /* MONGOC_APM_H */ 352