Skip to content

Commit 3185437

Browse files
committed
Add metric for extension connections
1 parent 01a8843 commit 3185437

4 files changed

Lines changed: 51 additions & 0 deletions

File tree

appsec/src/extension/configuration.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ extern bool runtime_config_first_init;
4141
SYSCFG(BOOL, DD_APPSEC_TESTING, "false") \
4242
SYSCFG(BOOL, DD_APPSEC_TESTING_ABORT_RINIT, "false") \
4343
SYSCFG(BOOL, DD_APPSEC_TESTING_RAW_BODY, "false") \
44+
SYSCFG(BOOL, DD_APPSEC_TESTING_HELPER_METRICS, "false") \
4445
CONFIG(CUSTOM(INT), DD_APPSEC_LOG_LEVEL, "warn", .parser = dd_parse_log_level) \
4546
SYSCFG(STRING, DD_APPSEC_LOG_FILE, "php_error_reporting") \
4647
SYSCFG(BOOL, DD_APPSEC_HELPER_LAUNCH, "true") \

appsec/src/extension/helper_process.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "network.h"
2222
#include "php_compat.h"
2323
#include "php_objects.h"
24+
#include "telemetry.h"
2425
#include "version.h"
2526

2627
#define MAX_WAIT_TIME_MS (1ULL << 55)
@@ -151,11 +152,13 @@ dd_conn *nullable dd_helper_mgr_acquire_conn(
151152

152153
_mgr.connected_this_req = true;
153154
_release_shared_state_lock(&_mgr.hss);
155+
dd_telemetry_helper_conn_success(_mgr.socket_path);
154156

155157
return conn;
156158

157159
error:
158160
_inc_failed_counter(&_mgr.hss);
161+
dd_telemetry_helper_conn_error(_mgr.socket_path);
159162
return NULL;
160163
}
161164

@@ -262,6 +265,8 @@ void dd_helper_close_conn(void)
262265
mlog_err(dd_log_warning, "Error closing connection to helper");
263266
}
264267

268+
dd_telemetry_helper_conn_close(_mgr.socket_path);
269+
265270
/* we treat closing the connection on the request it was opened a failure
266271
* for the purposes of the connection backoff */
267272
if (_mgr.connected_this_req && _shared_state) {

appsec/src/extension/telemetry.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "telemetry.h"
2+
#include "configuration.h"
23
#include "ddtrace.h"
34
#include "logging.h"
45
#include "php_compat.h"
@@ -8,9 +9,19 @@
89
#define DD_SDK_EVENT "sdk.event"
910
static zend_string *_dd_sdk_event_zstr;
1011

12+
static zend_string *_dd_helper_conn_error_zstr;
13+
static zend_string *_dd_helper_conn_success_zstr;
14+
static zend_string *_dd_helper_conn_close_zstr;
15+
1116
void dd_telemetry_startup(void)
1217
{
1318
_dd_sdk_event_zstr = zend_string_init_interned(LSTRARG(DD_SDK_EVENT), 1);
19+
_dd_helper_conn_error_zstr =
20+
zend_string_init_interned(LSTRARG("helper.connection_error"), 1);
21+
_dd_helper_conn_success_zstr =
22+
zend_string_init_interned(LSTRARG("helper.connection_success"), 1);
23+
_dd_helper_conn_close_zstr =
24+
zend_string_init_interned(LSTRARG("helper.connection_close"), 1);
1425
}
1526

1627
void dd_telemetry_add_metric(zend_string *nonnull name_zstr, double value,
@@ -37,3 +48,33 @@ void dd_telemetry_add_sdk_event(char *nonnull event_type, size_t event_type_len)
3748

3849
free(tags);
3950
}
51+
52+
static void _add_helper_conn_metric(
53+
zend_string *nonnull name_zstr, const char *nonnull socket_path)
54+
{
55+
if (get_global_DD_APPSEC_TESTING() &&
56+
!get_global_DD_APPSEC_TESTING_HELPER_METRICS()) {
57+
return;
58+
}
59+
char *tags = NULL;
60+
size_t tags_len = spprintf(&tags, 0, "socket:%s", socket_path);
61+
zend_string *tags_zstr = zend_string_init(tags, tags_len, 0);
62+
dd_telemetry_add_metric(name_zstr, 1, tags_zstr, DDTRACE_METRIC_TYPE_COUNT);
63+
zend_string_release(tags_zstr);
64+
efree(tags);
65+
}
66+
67+
void dd_telemetry_helper_conn_error(const char *nonnull socket_path)
68+
{
69+
_add_helper_conn_metric(_dd_helper_conn_error_zstr, socket_path);
70+
}
71+
72+
void dd_telemetry_helper_conn_success(const char *nonnull socket_path)
73+
{
74+
_add_helper_conn_metric(_dd_helper_conn_success_zstr, socket_path);
75+
}
76+
77+
void dd_telemetry_helper_conn_close(const char *nonnull socket_path)
78+
{
79+
_add_helper_conn_metric(_dd_helper_conn_close_zstr, socket_path);
80+
}

appsec/src/extension/telemetry.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ void dd_telemetry_add_metric(zend_string *nonnull name_zstr, double value,
1313

1414
void dd_telemetry_add_sdk_event(char *nonnull event_type, size_t event_type_len);
1515
void dd_telemetry_startup(void);
16+
17+
void dd_telemetry_helper_conn_error(const char *nonnull socket_path);
18+
void dd_telemetry_helper_conn_success(const char *nonnull socket_path);
19+
void dd_telemetry_helper_conn_close(const char *nonnull socket_path);

0 commit comments

Comments
 (0)