Skip to content

Commit 7106bad

Browse files
committed
refactor package version metric creation
If possible, use version from php_package added to txn->php_packages without addional hashmap lookup.
1 parent d028397 commit 7106bad

File tree

13 files changed

+166
-110
lines changed

13 files changed

+166
-110
lines changed

agent/fw_drupal8.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,7 @@ NR_PHP_WRAPPER_END
669669
void nr_drupal_version() {
670670
zval* zval_version = NULL;
671671
zend_class_entry* class_entry = NULL;
672+
nr_php_package_t* p = NULL;
672673

673674
class_entry = nr_php_find_class("drupal");
674675
if (NULL == class_entry) {
@@ -687,10 +688,10 @@ void nr_drupal_version() {
687688
if (nr_php_is_zval_valid_string(zval_version)) {
688689
char* version = Z_STRVAL_P(zval_version);
689690
if (NRINI(vulnerability_management_package_detection_enabled)) {
690-
nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
691+
p = nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
691692
}
692-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
693-
version, nr_fw_support_add_package_supportability_metric);
693+
nr_fw_support_add_package_supportability_metric(
694+
NRPRG(txn), PHP_PACKAGE_NAME, version, p);
694695
}
695696

696697
nr_php_zval_free(&zval_version);

agent/fw_laravel.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,7 @@ NR_PHP_WRAPPER(nr_laravel_application_construct) {
949949
zval* this_var = nr_php_scope_get(NR_EXECUTE_ORIG_ARGS TSRMLS_CC);
950950
;
951951
char* version = NULL;
952+
nr_php_package_t* p = NULL;
952953

953954
NR_UNUSED_SPECIALFN;
954955
(void)wraprec;
@@ -961,10 +962,10 @@ NR_PHP_WRAPPER(nr_laravel_application_construct) {
961962

962963
if (NRINI(vulnerability_management_package_detection_enabled)) {
963964
// Add php package to transaction
964-
nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
965+
p = nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
965966
}
966-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
967-
version, nr_fw_support_add_package_supportability_metric);
967+
nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
968+
version, p);
968969

969970
if (version) {
970971
nrl_debug(NRL_FRAMEWORK, "Laravel version is " NRP_FMT, NRP_PHP(version));

agent/fw_slim.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ NR_PHP_WRAPPER_END
152152
NR_PHP_WRAPPER(nr_slim_application_construct) {
153153
zval* this_var = nr_php_scope_get(NR_EXECUTE_ORIG_ARGS);
154154
char* version = NULL;
155+
nr_php_package_t* p = NULL;
155156

156157
NR_UNUSED_SPECIALFN;
157158
(void)wraprec;
@@ -160,11 +161,11 @@ NR_PHP_WRAPPER(nr_slim_application_construct) {
160161

161162
if (NRINI(vulnerability_management_package_detection_enabled)) {
162163
// Add php package to transaction
163-
nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
164+
p = nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
164165
}
165166

166-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
167-
version, nr_fw_support_add_package_supportability_metric);
167+
nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
168+
version, p);
168169

169170
nr_free(version);
170171
nr_php_scope_release(&this_var);

agent/fw_support.c

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,23 +58,36 @@ void nr_fw_support_add_logging_supportability_metric(nrtxn_t* txn,
5858
void nr_fw_support_add_package_supportability_metric(
5959
nrtxn_t* txn,
6060
const char* package_name,
61-
const char* package_version) {
62-
if (NULL == txn || NULL == package_name || NULL == package_version) {
61+
const char* package_version,
62+
nr_php_package_t* p) {
63+
if (NULL == txn || NULL == package_name) {
6364
return;
6465
}
6566

6667
char* metname = NULL;
6768
char major_version[MAJOR_VERSION_LENGTH] = {0};
69+
const char* version = package_version;
70+
71+
// override provided package_version only if:
72+
// - php_package is provided
73+
// - its version is not NULL
74+
if (NULL != p && NULL != p->package_version) {
75+
version = p->package_version;
76+
}
77+
78+
if (NULL == version) {
79+
return;
80+
}
6881

6982
/* The below for loop checks if the major version of the package is more than
7083
* one digit and keeps looping until a '.' is encountered or one of the
7184
* conditions is met.
7285
*/
73-
for (int i = 0; package_version[i] && i < MAJOR_VERSION_LENGTH - 1; i++) {
74-
if ('.' == package_version[i]) {
86+
for (int i = 0; version[i] && i < MAJOR_VERSION_LENGTH - 1; i++) {
87+
if ('.' == version[i]) {
7588
break;
7689
}
77-
major_version[i] = package_version[i];
90+
major_version[i] = version[i];
7891
}
7992

8093
if (NR_FW_UNSET == NRINI(force_framework)) {

agent/fw_support.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define FW_SUPPORT_HDR
99

1010
#include "php_user_instrument.h"
11+
#include "nr_php_packages.h"
1112

1213
extern void nr_php_framework_add_supportability_metric(
1314
const char* framework_name,
@@ -44,11 +45,13 @@ extern void nr_fw_support_add_logging_supportability_metric(
4445
* Params : 1. Transaction object
4546
* 2. Package name
4647
* 3. Package version
48+
* 4. PHP package reported for vulnerability management
4749
*
4850
*/
4951
extern void nr_fw_support_add_package_supportability_metric(
5052
nrtxn_t* txn,
5153
const char* package_name,
52-
const char* package_version);
54+
const char* package_version,
55+
nr_php_package_t* p);
5356

5457
#endif /* FW_SUPPORT_HDR */

agent/fw_wordpress.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -806,15 +806,16 @@ void nr_wordpress_version() {
806806
zval retval;
807807
int result
808808
= zend_eval_string(func_string, &retval, "Get Wordpress Version");
809+
nr_php_package_t* p = NULL;
809810
// Add php package to transaction
810811
if (SUCCESS == result) {
811812
if (nr_php_is_zval_valid_string(&retval)) {
812813
char* version = Z_STRVAL(retval);
813814
if (NRINI(vulnerability_management_package_detection_enabled)) {
814-
nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
815+
p = nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
815816
}
816-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
817-
version, nr_fw_support_add_package_supportability_metric);
817+
nr_fw_support_add_package_supportability_metric(
818+
NRPRG(txn), PHP_PACKAGE_NAME, version, p);
818819
}
819820
zval_dtor(&retval);
820821
}

agent/lib_aws_sdk_php.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ void nr_lib_aws_sdk_php_handle_version() {
5656
zval* zval_version = NULL;
5757
zend_class_entry* class_entry = NULL;
5858
char* version = NULL;
59+
nr_php_package_t* p = NULL;
5960

6061
class_entry = nr_php_find_class("aws\\sdk");
6162
if (NULL != class_entry) {
@@ -67,10 +68,10 @@ void nr_lib_aws_sdk_php_handle_version() {
6768
}
6869
if (NRINI(vulnerability_management_package_detection_enabled)) {
6970
/* Add php package to transaction */
70-
nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
71+
p = nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
7172
}
72-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
73-
version, nr_fw_support_add_package_supportability_metric);
73+
nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
74+
version, p);
7475
nr_php_zval_free(&zval_version);
7576
}
7677

agent/lib_guzzle6.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -352,10 +352,11 @@ NR_PHP_WRAPPER_START(nr_guzzle6_client_construct) {
352352
zval* this_var = nr_php_scope_get(NR_EXECUTE_ORIG_ARGS);
353353

354354
char* version = nr_php_get_object_constant(this_var, "VERSION");
355+
nr_php_package_t* p = NULL;
355356

356357
if (NRINI(vulnerability_management_package_detection_enabled)) {
357358
// Add php package to transaction
358-
nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
359+
p = nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
359360
}
360361

361362
/*
@@ -366,8 +367,8 @@ NR_PHP_WRAPPER_START(nr_guzzle6_client_construct) {
366367
if (NULL == version) {
367368
version = nr_php_get_object_constant(this_var, "MAJOR_VERSION");
368369
}
369-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
370-
version, nr_fw_support_add_package_supportability_metric);
370+
nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
371+
version, p);
371372
nr_free(version);
372373

373374
(void)wraprec;

agent/lib_monolog.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,8 +378,10 @@ NR_PHP_WRAPPER(nr_monolog_logger_addrecord) {
378378
= nr_monolog_get_timestamp(api, argc, NR_EXECUTE_ORIG_ARGS TSRMLS_CC);
379379
char version[MAJOR_VERSION_LENGTH];
380380
snprintf(version, sizeof(version), "%d", api);
381-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn),
382-
PHP_PACKAGE_NAME, version, nr_fw_support_add_package_supportability_metric);
381+
nr_fw_support_add_package_supportability_metric(
382+
NRPRG(txn), PHP_PACKAGE_NAME, version,
383+
nr_php_packages_get_package(NRPRG(txn)->php_packages,
384+
PHP_PACKAGE_NAME));
383385
}
384386

385387
/* Record the log event */

agent/lib_predis.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,7 @@ NR_PHP_WRAPPER(nr_predis_client_construct) {
644644
zval* conn = NULL;
645645
zval* params = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS TSRMLS_CC);
646646
zval* scope = nr_php_scope_get(NR_EXECUTE_ORIG_ARGS TSRMLS_CC);
647+
nr_php_package_t* p = NULL;
647648

648649
(void)wraprec;
649650

@@ -652,9 +653,10 @@ NR_PHP_WRAPPER(nr_predis_client_construct) {
652653
char* version = nr_php_get_object_constant(scope, "VERSION");
653654
if (NRINI(vulnerability_management_package_detection_enabled)) {
654655
// Add php package to transaction
655-
nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
656+
p = nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version);
656657
}
657-
nr_txn_add_package_major_version_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, version, nr_fw_support_add_package_supportability_metric);
658+
nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME,
659+
version, p);
658660
nr_free(version);
659661

660662
/*

0 commit comments

Comments
 (0)