From f000c13c849afe340362772e147711ae7f80c2a4 Mon Sep 17 00:00:00 2001 From: ZNeumann Date: Mon, 20 May 2024 10:47:39 -0600 Subject: [PATCH 01/62] chore(version): bump 10.22 (#902) --- VERSION | 2 +- axiom/nr_version.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index b61c07ffd..b7604b0c8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.21.0 +10.22.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 18d948754..0000847fd 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -23,7 +23,6 @@ /* * Current version naming scheme is flowers * - * buttercup 26Apr2022 (9.21) * cosmos 29Jun2022 (10.0) * dahlia 19Sep2022 (10.1) * echinacea 03Oct2022 (10.2) @@ -45,8 +44,9 @@ * ulmus 04Mar2024 (10.18) * viburnum 18Mar2024 (10.19) * wallflower 06May2024 (10.20) + * xerophyllum 20May2024 (10.21) */ -#define NR_CODENAME "xerophyllum" +#define NR_CODENAME "yarrow" const char* nr_version(void) { return NR_STR2(NR_VERSION); From 8ff820d52c7cea7a78095ee46f08cc5d740b26dd Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Thu, 23 May 2024 10:05:38 -0400 Subject: [PATCH 02/62] fix(tests): Fixes package-name-only test case (#903) The PHP package test was not being correctly checked for the case where the package was specified as `package_name_only` and a version was actually created for the package. --- daemon/internal/newrelic/integration/test.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index 0f5a23aea..4a52f31a3 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -604,7 +604,17 @@ func (t *Test) comparePhpPackages(harvest *newrelic.Harvest) { expected_version = override_version.(string) } - if testPackageNameOnly || expected_version == actualPackages[i].Version { + if testPackageNameOnly { + if " " != actualPackages[i].Version { + t.Fail(fmt.Errorf("Expected no package version and a package version was detected - expected \" \" actual %+v. ", + actualPackages[i].Version)) + return + } else { + continue + } + } + + if expected_version == actualPackages[i].Version { continue } } From 68046f3102e0e11525993ee8f4f7775ac356d1d8 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Thu, 23 May 2024 07:39:12 -0700 Subject: [PATCH 03/62] fix(agent): Don't send only major version to vm package (#904) Guzzle 7+ was sending only the major version to the vm package If only major version is available, it should not be sent. However, we can still use major version for the supportability metric. --- agent/lib_guzzle6.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/agent/lib_guzzle6.c b/agent/lib_guzzle6.c index a106eac71..d9003545c 100644 --- a/agent/lib_guzzle6.c +++ b/agent/lib_guzzle6.c @@ -352,14 +352,20 @@ NR_PHP_WRAPPER_START(nr_guzzle6_client_construct) { zval* this_var = nr_php_scope_get(NR_EXECUTE_ORIG_ARGS); char* version = nr_php_get_object_constant(this_var, "VERSION"); - if (NULL == version) { - version = nr_php_get_object_constant(this_var, "MAJOR_VERSION"); - } if (NRINI(vulnerability_management_package_detection_enabled)) { // Add php package to transaction nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); } + + /* + * If we were unable to get the full version before, at least we can extract + * the major version to send to the supportability metric. + * This is relevant to guzzle7+ which no longer supplies full version. + */ + if (NULL == version) { + version = nr_php_get_object_constant(this_var, "MAJOR_VERSION"); + } nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, version); nr_free(version); From bc0766be7b8ce2091456ed3a4cdcaa20fbada4ab Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Mon, 10 Jun 2024 10:59:35 -0400 Subject: [PATCH 04/62] fix: install correctly on bare bones OSs (#913) Some OSs stripped down to bare bones (like base OS container images) don't have all directories needed by the installer (e.g. /etc/init.d). Package installers simply create these directories. Make tarball installer behave similar to package installer and create required directories. --------- Co-authored-by: Zach Neumann --- agent/newrelic-install.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/agent/newrelic-install.sh b/agent/newrelic-install.sh index 68c2d1c45..3d0637dc0 100755 --- a/agent/newrelic-install.sh +++ b/agent/newrelic-install.sh @@ -852,8 +852,8 @@ disp_get_php_list() { set_osdifile() { osdifile= - if [ -n "${NR_INSTALL_INITFILE}" ]; then - osdifile="${NR_INSTALL_INITFILE}" + if [ -n "${NR_INSTALL_INITSCRIPT}" ]; then + osdifile="${NR_INSTALL_INITSCRIPT}" fi if [ "${ostype}" = "darwin" ]; then : ${osdifile:=/usr/bin/newrelic-daemon-service} @@ -1780,6 +1780,10 @@ EOF set_osdifile if [ -z "${ispkg}" ]; then + # ensure target directory exists + if [ ! -d "$(dirname ${osdifile})" ]; then + logcmd mkdir -p -m 0755 "$(dirname ${osdifile})" + fi if logcmd cp -f "${ilibdir}/scripts/init.${ostype}" "${osdifile}"; then logcmd chmod 755 "${osdifile}" || { fatal "failed to set permissions on ${osdifile}" @@ -1798,6 +1802,10 @@ EOF fi if [ -n "${sysconf}" -a ! -f "${sysconf}" ]; then + # ensure target directory exists + if [ ! -d "$(dirname ${sysconf})" ]; then + logcmd mkdir -p -m 0755 "$(dirname ${sysconf})" + fi if logcmd cp -f "${ilibdir}/scripts/newrelic.sysconfig" "${sysconf}"; then logcmd chmod 755 "${sysconf}" || { fatal "failed to set permissions on ${sysconf}" From 287e6a8691af5b9cab36ef218795d070e4648f88 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Thu, 13 Jun 2024 18:34:20 -0400 Subject: [PATCH 05/62] feat: deprecate PHPs 7.0 and 7.1 (#914) Have the newrelic-install script log warning when it detects deprecated PHPs. --- agent/newrelic-install.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/agent/newrelic-install.sh b/agent/newrelic-install.sh index 3d0637dc0..d61137721 100755 --- a/agent/newrelic-install.sh +++ b/agent/newrelic-install.sh @@ -1038,9 +1038,19 @@ for this copy of PHP. We apologize for the inconvenience. case "${pi_ver}" in 7.0.*) + warning_message="${pdir}: Support for PHP '${pi_ver}' in the New Relic PHP agent is deprecated." + if [ -z "${NR_INSTALL_SILENT}" ]; then + echo $warning_message + fi + log $warning_message ;; 7.1.*) + warning_message="${pdir}: Support for PHP '${pi_ver}' in the New Relic PHP agent is deprecated." + if [ -z "${NR_INSTALL_SILENT}" ]; then + echo $warning_message + fi + log $warning_message ;; 7.2.*) From cf3b2c36ce60ad6bbbfea0c911a7df200143cd56 Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Fri, 14 Jun 2024 12:26:36 -0400 Subject: [PATCH 06/62] fix(agent): Fixes Doctrine 2.18+ detection (#916) Addresses changes in Doctrine 2.18+ (but not 3.x) that affected detection. There was a [commit](https://github.com/doctrine/orm/commit/073f2aa891249e582e63320cab34b035b591cf22) for Doctrine 2.18 that reworked the directory structure of the Doctrine library. This PR adds another file for Doctrine to allow it to be auto-detected. --- agent/php_execute.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/agent/php_execute.c b/agent/php_execute.c index e4300d902..80ad27bdf 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -484,7 +484,11 @@ typedef struct _nr_library_table_t { */ // clang-format: off static nr_library_table_t libraries[] = { + /* Doctrine < 2.18 */ {"Doctrine 2", NR_PSTR("doctrine/orm/query.php"), nr_doctrine2_enable}, + /* Doctrine 2.18 reworked the directory structure */ + {"Doctrine 2", NR_PSTR("doctrine/orm/src/query.php"), nr_doctrine2_enable}, + {"Guzzle 3", NR_PSTR("guzzle/http/client.php"), nr_guzzle3_enable}, {"Guzzle 4-5", NR_PSTR("hasemitterinterface.php"), nr_guzzle4_enable}, {"Guzzle 6", NR_PSTR("guzzle/src/functions_include.php"), nr_guzzle6_enable}, From 8c16b708acb84bb4e7862829b83583ae16aa3158 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Fri, 14 Jun 2024 11:19:35 -0700 Subject: [PATCH 07/62] fix(agent): Slim txn naming updates (#917) 1) the scheme for route run to correlate with proper OAPI naming was incorrectly listed and therefore txn naming precedence was incorrectly handled 2) this PR kept same naming scheme in route:run putting it before wrapper_call and saying ok to overwrite (instead of after and not ok to overwrite) 3) number 2 needed to incorporate fallback naming scheme 4) added fallback naming scheme (since some errors and middleware intervention give the wrong txn name) using dispatcher:dispatch. When there is an exception thrown in a route that is handled by the slim routing and error middleware, it is superseded by: Uncaught exception 'Slim\\Exception\\HttpNotFoundException' with message 'Not found.' and transformed into an http 404 error and is shown in the http.statuscode field as 404. If the middleware isn't loaded, it is recorded as an uncaught exception and status code is 200. Wrap function Slim\\Routing\\Dispatcher::dispatch It will name set the txn_name in case we hit an error and Slim\\Routing\\Route::run isn't called. It is set to be overwritable do that if we encounter Slim\\Routing\\Route::run, it can overwrite with the most accurate info (this is only relevant in the case of redirects). This allows us to give the txn_name even in error cases when Slim\\Routing\\Route::run isn't called. Corresponds with multiverse updates which passed against this branch. --- agent/fw_slim.c | 77 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/agent/fw_slim.c b/agent/fw_slim.c index 493e325a8..a70323459 100644 --- a/agent/fw_slim.c +++ b/agent/fw_slim.c @@ -81,28 +81,65 @@ NR_PHP_WRAPPER(nr_slim2_route_dispatch) { NR_PHP_WRAPPER_END /* - * Wrap the \Slim\Route::run method, which is the happy path for Slim routing. + * Wrap the Slim 3\Slim\Route::run method + * and + * Slim 4 Slim\\Routing\\Route::run + * which are the happy paths for Slim 3/4 routing. * i.e. The router has succesfully matched the URL and dispatched the request * to a route. * - * In this case, `nr_txn_set_path` is called after `NR_PHP_WRAPPER_CALL` with - * `NR_OK_TO_OVERWRITE` and as this corresponds to calling the wrapped function - * in func_end no change is needed to ensure OAPI compatibility as it will use - * the default func_end after callback. This entails that the first wrapped - * function call of this type gets to name the txn. + * In this case, `nr_txn_set_path` is called before `NR_PHP_WRAPPER_CALL` with + * `NR_OK_TO_OVERWRITE` and as this corresponds to calling the last wrapped + * function call of this type gets to name the txn; therefore needs a before + * call for OAPI. */ NR_PHP_WRAPPER(nr_slim3_4_route_run) { zval* this_var = NULL; char* txn_name = NULL; (void)wraprec; + NR_PHP_WRAPPER_REQUIRE_FRAMEWORK(NR_FW_SLIM); this_var = nr_php_scope_get(NR_EXECUTE_ORIG_ARGS TSRMLS_CC); txn_name = nr_slim_path_from_route(this_var TSRMLS_CC); nr_php_scope_release(&this_var); + if (txn_name) { + nr_txn_set_path("Slim", NRPRG(txn), txn_name, NR_PATH_TYPE_ACTION, + NR_OK_TO_OVERWRITE); + nr_free(txn_name); + } + NR_PHP_WRAPPER_CALL; +} +NR_PHP_WRAPPER_END + +/* + * public function dispatch(string $method, string $uri): RoutingResults + * This is fallback naming mechanism for Slim 4 routing when the Slim 4 + * Slim\\Routing\\Route::run does not run due middlware intervening on + * certain errors. + * In this case, `nr_txn_set_path` is called before `NR_PHP_WRAPPER_CALL` with + * `NR_NOT_OK_TO_OVERWRITE` and as this corresponds to calling the first wrapped + * function in func_begin. + */ +NR_PHP_WRAPPER(nr_slim4_route_dispatch) { + char* txn_name = NULL; + zval* route_name = NULL; + + (void)wraprec; + + NR_PHP_WRAPPER_REQUIRE_FRAMEWORK(NR_FW_SLIM); + + /* Get the route name. The first arg is the method, 2nd arg is routename. */ + route_name = nr_php_arg_get(2, NR_EXECUTE_ORIG_ARGS); + + if (nr_php_is_zval_valid_string(route_name)) { + txn_name = nr_strndup(Z_STRVAL_P(route_name), Z_STRLEN_P(route_name)); + } + + nr_php_arg_release(&route_name); if (txn_name) { nr_txn_set_path("Slim", NRPRG(txn), txn_name, NR_PATH_TYPE_ACTION, @@ -120,7 +157,7 @@ NR_PHP_WRAPPER(nr_slim_application_construct) { (void)wraprec; version = nr_php_get_object_constant(this_var, "VERSION"); - + if (NRINI(vulnerability_management_package_detection_enabled)) { // Add php package to transaction nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); @@ -139,12 +176,34 @@ void nr_slim_enable(TSRMLS_D) { nr_php_wrap_user_function(NR_PSTR("Slim\\Route::dispatch"), nr_slim2_route_dispatch TSRMLS_CC); + +#if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO \ + && !defined OVERWRITE_ZEND_EXECUTE_DATA + /* Slim 3 */ - nr_php_wrap_user_function(NR_PSTR("Slim\\Route::run"), - nr_slim3_4_route_run TSRMLS_CC); + nr_php_wrap_user_function_before_after_clean( + NR_PSTR("Slim\\Route::run"), nr_slim3_4_route_run, NULL, NULL); + /* Slim 4 */ + nr_php_wrap_user_function_before_after_clean( + NR_PSTR("Slim\\Routing\\Route::run"), nr_slim3_4_route_run, NULL, NULL); + + /* Slim 4 */ + nr_php_wrap_user_function_before_after_clean( + NR_PSTR("Slim\\Routing\\Dispatcher::dispatch"), nr_slim4_route_dispatch, + NULL, NULL); +#else + /* Slim 4*/ nr_php_wrap_user_function(NR_PSTR("Slim\\Routing\\Route::run"), nr_slim3_4_route_run TSRMLS_CC); + /* Slim 4 */ + nr_php_wrap_user_function(NR_PSTR("Slim\\Routing\\Dispatcher::dispatch"), + nr_slim4_route_dispatch TSRMLS_CC); + + /* Slim 3 */ + nr_php_wrap_user_function(NR_PSTR("Slim\\Route::run"), + nr_slim3_4_route_run TSRMLS_CC); +#endif /* Slim 2 does not have the same path as Slim 3/4 which is why we need to separate these*/ From 756c1aa06ee889292911614fa30b863973fd7646 Mon Sep 17 00:00:00 2001 From: ZNeumann Date: Tue, 18 Jun 2024 13:43:44 -0600 Subject: [PATCH 08/62] fix(scripts): fix rhel and alpine init scripts (#919) Systemd systems may not have access to the functions file provided by initscripts. The code from initscripts is provided under the GNU v2 license and will not be pulled in. Additionally, a header comment block must be added, using https://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html for specs --------- Co-authored-by: Michal Nowacki --- agent/scripts/init.alpine | 3 +-- agent/scripts/init.rhel | 47 +++++++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/agent/scripts/init.alpine b/agent/scripts/init.alpine index 63d143e66..0fc717dbc 100755 --- a/agent/scripts/init.alpine +++ b/agent/scripts/init.alpine @@ -1,10 +1,9 @@ +#!/sbin/openrc-run # # Copyright 2020 New Relic Corporation. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # -#!/sbin/openrc-run - description="New Relic Daemon" command="${nrdaemon:-/usr/bin/newrelic-daemon}" command_args= diff --git a/agent/scripts/init.rhel b/agent/scripts/init.rhel index 82f43608c..2e88a6307 100644 --- a/agent/scripts/init.rhel +++ b/agent/scripts/init.rhel @@ -10,6 +10,15 @@ # processname: newrelic-daemon # config: /etc/newrelic/newrelic.cfg # +### BEGIN INIT INFO +# Provides: newrelic-daemon +# Required-Start: $all +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Description: The New Relic Daemon is used by the New Relic PHP Agent to communicate +# with the New Relic Backend +### END INIT INFO LANG=C NAME=newrelic-daemon @@ -18,7 +27,11 @@ DESC="New Relic Daemon" # # Source function library. # -. /etc/init.d/functions +has_initd_functions=0 +if [ -f /etc/init.d/functions ]; then + . /etc/init.d/functions + has_initd_functions=1 +fi ulimit -n 2048 > /dev/null 2>&1 @@ -223,14 +236,22 @@ EOF if running ; then if [ -z "${NR_SILENT}" -a -z "${SILENT}" ]; then - success - echo + if [ $has_initd_functions -eq 1 ]; then + success + echo + else + echo " [ OK ]" + fi fi return 0 else if [ -z "${NR_SILENT}" -a -z "${SILENT}" ]; then - failure - echo + if [ $has_initd_functions -eq 1 ]; then + failure + echo + else + echo " [FAILED]" + fi fi return 1 fi @@ -274,14 +295,22 @@ stop() { if running ; then if [ -z "${NR_SILENT}" -a -z "${SILENT}" ]; then - failure - echo + if [ $has_initd_functions -eq 1 ]; then + failure + echo + else + echo " [FAILED]" + fi fi return 1 else if [ -z "${NR_SILENT}" -a -z "${SILENT}" ]; then - success - echo + if [ $has_initd_functions -eq 1 ]; then + success + echo + else + echo " [ OK ]" + fi fi return 0 fi From a8663c7f800db92139647b2297d28db82db4e364 Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Fri, 21 Jun 2024 12:36:22 -0500 Subject: [PATCH 09/62] fix(agent): fix mongodb instrumentation for PHP 8.0+ (#878) - split mongodb instrumentation into before/after inline with OAPI paradigm. - remove broken integration tests in favor of Multiverse tests --- agent/lib_mongodb.c | 168 +++++++++++++++++- agent/php_wrapper.c | 21 +++ agent/php_wrapper.h | 8 + docker-compose.yaml | 9 - tests/include/config.php | 8 - tests/integration/mongo/mongo.inc | 14 -- tests/integration/mongo/skipif.inc | 18 -- tests/integration/mongo/test_execute.php | 55 ------ .../mongo/test_execute_logging_off.php | 56 ------ tests/integration/mongo/test_find.php | 71 -------- 10 files changed, 196 insertions(+), 232 deletions(-) delete mode 100644 tests/integration/mongo/mongo.inc delete mode 100644 tests/integration/mongo/skipif.inc delete mode 100644 tests/integration/mongo/test_execute.php delete mode 100644 tests/integration/mongo/test_execute_logging_off.php delete mode 100644 tests/integration/mongo/test_find.php diff --git a/agent/lib_mongodb.c b/agent/lib_mongodb.c index 51e979abd..9b5ca9c99 100644 --- a/agent/lib_mongodb.c +++ b/agent/lib_mongodb.c @@ -108,6 +108,8 @@ void nr_mongodb_get_host_and_port_path_or_id(zval* server, } } +#if ZEND_MODULE_API_NO < ZEND_8_0_X_API_NO \ + || defined OVERWRITE_ZEND_EXECUTE_DATA NR_PHP_WRAPPER(nr_mongodb_operation) { const char* this_klass = "MongoDB\\Operation\\Executable"; zval* collection = NULL; @@ -173,7 +175,169 @@ NR_PHP_WRAPPER(nr_mongodb_operation) { } NR_PHP_WRAPPER_END -void nr_mongodb_enable(TSRMLS_D) { +#else + +NR_PHP_WRAPPER(nr_mongodb_operation_before) { + (void)wraprec; + nr_segment_t* segment = NULL; + segment = nr_segment_start(NRPRG(txn), NULL, NULL); + if (NULL != segment) { + segment->wraprec = auto_segment->wraprec; + } +} +NR_PHP_WRAPPER_END + +NR_PHP_WRAPPER(nr_mongodb_operation_after) { + const char* this_klass = "MongoDB\\Operation\\Executable"; + zval* collection = NULL; + zval* database = NULL; + zval* server = NULL; + zval* this_var = NULL; + bool discard_segment = false; + nr_datastore_instance_t instance = { + .host = NULL, + .port_path_or_id = NULL, + .database_name = NULL, + }; + + // tell the compiler to ignore the cast from const char * to char * + // to save having to do a strdup operation +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + nr_segment_datastore_params_t params = { + .collection = NULL, + .datastore = { + .type = NR_DATASTORE_MONGODB, + }, + .operation = (char *)wraprec->extra, + .instance = &instance, + .callbacks = { + .backtrace = nr_php_backtrace_callback, + }, + }; +#pragma GCC diagnostic pop + /* + * We check for the interface all Collection operations extend, rather than + * their specific class. Not all operations have the properties we need but + * the ones we hook do (as of mongo-php-library v.1.1). + */ + this_var = nr_php_scope_get(NR_EXECUTE_ORIG_ARGS); + if (!nr_php_object_instanceof_class(this_var, this_klass)) { + nrl_verbosedebug(NRL_FRAMEWORK, "%s: operation is not %s", __func__, + this_klass); + discard_segment = true; + goto leave; + } + + collection = nr_php_get_zval_object_property(this_var, "collectionName"); + if (nr_php_is_zval_valid_string(collection)) { + params.collection = Z_STRVAL_P(collection); + } + + database = nr_php_get_zval_object_property(this_var, "databaseName"); + if (nr_php_is_zval_valid_string(database)) { + instance.database_name = Z_STRVAL_P(database); + } + + server = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS); + nr_mongodb_get_host_and_port_path_or_id(server, &instance.host, + &instance.port_path_or_id); + +leave: + if (discard_segment) { + nr_segment_discard(&auto_segment); + } else { + nr_segment_datastore_end(&auto_segment, ¶ms); + } + nr_php_arg_release(&server); + nr_php_scope_release(&this_var); + nr_free(instance.host); + nr_free(instance.port_path_or_id); +} +NR_PHP_WRAPPER_END + +#endif /* OAPI */ + +void nr_mongodb_enable() { +#if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO \ + && !defined OVERWRITE_ZEND_EXECUTE_DATA + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\Aggregate::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "aggregate"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\BulkWrite::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "bulkWrite"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\Count::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "count"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\CreateIndexes::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "createIndexes"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\Delete::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "delete"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\Distinct::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "distinct"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\DropCollection::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "dropCollection"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\DropIndexes::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "dropIndexes"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\Find::execute"), nr_mongodb_operation_before, + nr_mongodb_operation_after, nr_mongodb_operation_after, "find"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\FindAndModify::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "findAndModify"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\InsertMany::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "insertMany"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\InsertOne::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "insertOne"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\ListIndexes::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "listIndexes"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\Update::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "update"); + + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\DatabaseCommand::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "databaseCommand"); + +#else /* Non-OAPI */ + /* * We instrument interesting methods on the MongoDB\Collection class via their * associated MongoDB\Operation classes. @@ -265,6 +429,8 @@ void nr_mongodb_enable(TSRMLS_D) { NR_PSTR("MongoDB\\Operation\\DatabaseCommand::execute"), nr_mongodb_operation, "databaseCommand" TSRMLS_CC); +#endif /* OAPI */ + if (NRINI(vulnerability_management_package_detection_enabled)) { nr_txn_add_php_package(NRPRG(txn), "mongodb/mongodb", PHP_PACKAGE_VERSION_UNKNOWN); diff --git a/agent/php_wrapper.c b/agent/php_wrapper.c index daa01bb4f..6631c06d2 100644 --- a/agent/php_wrapper.c +++ b/agent/php_wrapper.c @@ -73,6 +73,27 @@ nruserfn_t* nr_php_wrap_user_function_before_after_clean( return wraprec; } +nruserfn_t* nr_php_wrap_user_function_before_after_clean_extra( + const char* name, + size_t namelen, + nrspecialfn_t before_callback, + nrspecialfn_t after_callback, + nrspecialfn_t clean_callback, + const char* extra) { + nruserfn_t* wraprec = nr_php_wrap_user_function_before_after_clean( + name, namelen, before_callback, after_callback, clean_callback); + + if (nrunlikely(NULL == wraprec)) { + nrl_warning(NRL_INSTRUMENT, "%s: unable to wrap '%s'", __func__, + NRSAFESTR(name)); + return wraprec; + } + + wraprec->extra = extra; + + return wraprec; +} + nruserfn_t* nr_php_wrap_callable_before_after_clean( zend_function* callable, nrspecialfn_t before_callback, diff --git a/agent/php_wrapper.h b/agent/php_wrapper.h index 27e0dba91..058e06e08 100644 --- a/agent/php_wrapper.h +++ b/agent/php_wrapper.h @@ -150,6 +150,14 @@ extern nruserfn_t* nr_php_wrap_callable_before_after_clean( nrspecialfn_t before_callback, nrspecialfn_t after_callback, nrspecialfn_t clean_callback); + +extern nruserfn_t* nr_php_wrap_user_function_before_after_clean_extra( + const char* name, + size_t namelen, + nrspecialfn_t before_callback, + nrspecialfn_t after_callback, + nrspecialfn_t clean_callback, + const char* extra); #endif extern nruserfn_t* nr_php_wrap_user_function(const char* name, size_t namelen, diff --git a/docker-compose.yaml b/docker-compose.yaml index 4626f2523..4d57753ff 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -36,11 +36,6 @@ services: ports: - "11211:11211" container_name: memcached -# mongodb: -# image: mongo:latest -# restart: always -# ports: -# - "27019:27019" postgres: image: postgres restart: always @@ -57,8 +52,6 @@ services: environment: MEMCACHE_HOST: memcached -# MONGO_HOST: mongodb - MYSQL_DB: database MYSQL_USER: admin MYSQL_PASSWD: admin @@ -86,8 +79,6 @@ services: environment: MEMCACHE_HOST: memcached -# MONGO_HOST: mongodb - MYSQL_DB: database MYSQL_USER: admin MYSQL_PASSWD: admin diff --git a/tests/include/config.php b/tests/include/config.php index 8f29f3faf..4cde7cfb2 100644 --- a/tests/include/config.php +++ b/tests/include/config.php @@ -24,14 +24,6 @@ function isset_or($check, $alternate = NULL) $MYSQL_SERVER = $MYSQL_HOST . ":" . $MYSQL_PORT; } -if (class_exists('MongoClient')) { - $MONGO_HOST = isset_or('MONGO_HOST', MongoClient::DEFAULT_HOST); - $MONGO_PORT = isset_or('MONGO_PORT', MongoClient::DEFAULT_PORT); -} else { - $MONGO_HOST = null; - $MONGO_PORT = null; -} - $MEMCACHE_HOST = isset_or('MEMCACHE_HOST', '127.0.0.1'); $MEMCACHE_PORT = isset_or('MEMCACHE_PORT', '11211'); diff --git a/tests/integration/mongo/mongo.inc b/tests/integration/mongo/mongo.inc deleted file mode 100644 index ddc83282f..000000000 --- a/tests/integration/mongo/mongo.inc +++ /dev/null @@ -1,14 +0,0 @@ -close(); -} catch (MongoConnectionException $e) { - die('skip: ' . $e->getMessage() . "\n"); -} diff --git a/tests/integration/mongo/test_execute.php b/tests/integration/mongo/test_execute.php deleted file mode 100644 index 245e92036..000000000 --- a/tests/integration/mongo/test_execute.php +++ /dev/null @@ -1,55 +0,0 @@ - -*/ - -/*INI -*/ - -/*EXPECT_METRICS -[ - "?? agent run id", - "?? start time", - "?? stop time", - [ - [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/MongoDB/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/MongoDB/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/operation/MongoDB/execute"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/operation/MongoDB/execute", - "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransaction/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]] - ] -] -*/ - - - - -/*EXPECT_TRACED_ERRORS -null -*/ - -require_once(realpath(dirname(__FILE__ )) . '/mongo.inc'); - -$client = new MongoClient(mongo_server()); -$db = $client->selectDB('test'); -$db->execute("17.0;"); diff --git a/tests/integration/mongo/test_execute_logging_off.php b/tests/integration/mongo/test_execute_logging_off.php deleted file mode 100644 index 29661c7c7..000000000 --- a/tests/integration/mongo/test_execute_logging_off.php +++ /dev/null @@ -1,56 +0,0 @@ - -*/ - -/*INI -newrelic.application_logging.enabled = false -newrelic.application_logging.forwarding.enabled = false -newrelic.application_logging.metrics.enabled = false -*/ - -/*EXPECT_METRICS -[ - "?? agent run id", - "?? start time", - "?? stop time", - [ - [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/MongoDB/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/MongoDB/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/operation/MongoDB/execute"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/operation/MongoDB/execute", - "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransaction/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/Forwarding/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/Metrics/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]] - ] -] -*/ - - -/*EXPECT_TRACED_ERRORS -null -*/ - -require_once(realpath(dirname(__FILE__ )) . '/mongo.inc'); - -$client = new MongoClient(mongo_server()); -$db = $client->selectDB('test'); -$db->execute("17.0;"); diff --git a/tests/integration/mongo/test_find.php b/tests/integration/mongo/test_find.php deleted file mode 100644 index 00d023364..000000000 --- a/tests/integration/mongo/test_find.php +++ /dev/null @@ -1,71 +0,0 @@ - -*/ - -/*INI -*/ - -/*EXPECT_METRICS -[ - "?? agent run id", - "?? start time", - "?? stop time", - [ - [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/MongoDB/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/MongoDB/allOther"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/operation/MongoDB/find"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/statement/MongoDB/test.produce/find"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Datastore/statement/MongoDB/test.produce/find", - "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransaction/all"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name":"Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]] - ] -] -*/ - - - - -/*EXPECT_TRACED_ERRORS -null -*/ - -require_once(realpath (dirname ( __FILE__ )) . '/mongo.inc'); - -/* See http://php.net/manual/en/mongocollection.find.php */ -function test_find($db) { - $produce = new MongoCollection($db, 'produce'); - $fruitQuery = array('Type' => 'Fruit'); - $cursor = $produce->find($fruitQuery); - foreach ($cursor as $doc) { - var_dump($doc); - } -} - -function main() { - $client = new MongoClient(mongo_server()); - $db = $client->selectDB('test'); - - test_find($db); -} - -main(); From 46d9eb5beca7d40013df7792bc27c428761725eb Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Fri, 21 Jun 2024 13:06:13 -0500 Subject: [PATCH 10/62] feat(agent): add mongodb countDocuments instrumentation (#924) --- agent/lib_mongodb.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent/lib_mongodb.c b/agent/lib_mongodb.c index 9b5ca9c99..ad1786373 100644 --- a/agent/lib_mongodb.c +++ b/agent/lib_mongodb.c @@ -277,6 +277,11 @@ void nr_mongodb_enable() { nr_mongodb_operation_before, nr_mongodb_operation_after, nr_mongodb_operation_after, "count"); + nr_php_wrap_user_function_before_after_clean_extra( + NR_PSTR("MongoDB\\Operation\\CountDocuments::execute"), + nr_mongodb_operation_before, nr_mongodb_operation_after, + nr_mongodb_operation_after, "countDocuments"); + nr_php_wrap_user_function_before_after_clean_extra( NR_PSTR("MongoDB\\Operation\\CreateIndexes::execute"), nr_mongodb_operation_before, nr_mongodb_operation_after, From 5154931a3245cd4161eb5c924a52a253a4d21960 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Fri, 21 Jun 2024 11:31:52 -0700 Subject: [PATCH 11/62] fix(agent): NULL check before accessing segment wraprec (#923) --- agent/fw_drupal.c | 4 +++- agent/lib_predis.c | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/agent/fw_drupal.c b/agent/fw_drupal.c index 67efc1dab..12e43b5cf 100644 --- a/agent/fw_drupal.c +++ b/agent/fw_drupal.c @@ -265,7 +265,9 @@ NR_PHP_WRAPPER(nr_drupal_http_request_before) { * fcall_end is able to properly dispatch to the after wrapper, as * this new segment is now at the top of the segment stack. */ - NRPRG(drupal_http_request_segment)->wraprec = auto_segment->wraprec; + if (NULL != NRPRG(drupal_http_request_segment)) { + NRPRG(drupal_http_request_segment)->wraprec = auto_segment->wraprec; + } } } NR_PHP_WRAPPER_END diff --git a/agent/lib_predis.c b/agent/lib_predis.c index 862649d3b..b299c5595 100644 --- a/agent/lib_predis.c +++ b/agent/lib_predis.c @@ -764,7 +764,9 @@ NR_PHP_WRAPPER(nr_predis_webdisconnection_executeCommand_before) { nr_segment_t* segment = NULL; segment = nr_segment_start(NRPRG(txn), NULL, NULL); - segment->wraprec = auto_segment->wraprec; + if (NULL != segment) { + segment->wraprec = auto_segment->wraprec; + } } NR_PHP_WRAPPER_END @@ -894,5 +896,4 @@ void nr_predis_enable(TSRMLS_D) { NR_PSTR("Predis\\Connection\\WebdisConnection::executeCommand"), nr_predis_webdisconnection_executeCommand TSRMLS_CC); #endif /* OAPI */ - } From c1a48d05ecc3e4d7442ac91156a25926ee2f8259 Mon Sep 17 00:00:00 2001 From: Hitesh Ahuja <108540135+hahuja2@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:00:49 -0700 Subject: [PATCH 12/62] chore(version): bump 10.23 (#927) --- VERSION | 2 +- axiom/nr_version.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index b7604b0c8..ea711f111 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.22.0 +10.23.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 0000847fd..8f4a3646d 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -45,8 +45,9 @@ * viburnum 18Mar2024 (10.19) * wallflower 06May2024 (10.20) * xerophyllum 20May2024 (10.21) + * yarrow 26Jun2024 (10.22) */ -#define NR_CODENAME "yarrow" +#define NR_CODENAME "zinnia" const char* nr_version(void) { return NR_STR2(NR_VERSION); From 7d43f5f238b04e8e8d28308bae88ee65319293ab Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Thu, 27 Jun 2024 14:29:02 -0500 Subject: [PATCH 13/62] fix(agent): add countDocuments to non-oapi mongodb instrumentation (#926) --- agent/lib_mongodb.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/agent/lib_mongodb.c b/agent/lib_mongodb.c index ad1786373..c21e1e01b 100644 --- a/agent/lib_mongodb.c +++ b/agent/lib_mongodb.c @@ -356,6 +356,14 @@ void nr_mongodb_enable() { nr_php_wrap_user_function_extra(NR_PSTR("MongoDB\\Operation\\Count::execute"), nr_mongodb_operation, "count" TSRMLS_CC); + /* + * `count` has been deprecated in later versions of mongodb and replaced by + * `countDocuments` + */ + nr_php_wrap_user_function_extra( + NR_PSTR("MongoDB\\Operation\\CountDocuments::execute"), + nr_mongodb_operation, "countDocuments"); + /* * This also catches MongoDB\Collection::createIndex */ From b53fdb7f477d5f6db10b5e43009b71d6d28b60df Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Fri, 28 Jun 2024 15:21:12 -0400 Subject: [PATCH 14/62] ci: add gofmt check to test-agent workflow (#928) Add gofmt check to test-agent workflow which will check pull request for daemon's code formatting deviations from go code formatting standards. --- .github/workflows/test-agent.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.github/workflows/test-agent.yml b/.github/workflows/test-agent.yml index d40384e13..9bbd3593a 100644 --- a/.github/workflows/test-agent.yml +++ b/.github/workflows/test-agent.yml @@ -19,6 +19,31 @@ on: pull_request: jobs: + gofmt-check: + runs-on: ubuntu-latest + continue-on-error: true + steps: + - name: Checkout newrelic-php-agent code + uses: actions/checkout@v4 + with: + path: php-agent + - name: Setup go + uses: actions/setup-go@v5 + with: + go-version-file: ./php-agent/daemon/go.mod + cache: false + - name: Display go version + run: | + go version + - name: Run gofmt + run: | + GOFMT_REPORTED_FILES="$(gofmt -l -e ./php-agent/daemon)" + if [ ! -z "$GOFMT_REPORTED_FILES" ]; then + gofmt -d -e ./php-agent/daemon + echo "### gofmt violations found in $(echo "$GOFMT_REPORTED_FILES" | wc -l) files" >> $GITHUB_STEP_SUMMARY + echo "$GOFMT_REPORTED_FILES" >> $GITHUB_STEP_SUMMARY + exit 1 + fi daemon-unit-tests: runs-on: ubuntu-latest env: From 0df855178ad3200d44be13a74c479292456f4941 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Fri, 28 Jun 2024 16:17:17 -0400 Subject: [PATCH 15/62] style(daemon): gofmt daemon module (#930) Apply `gofmt` suggestions preserving semantics of comments. go1.19 changed how `gofmt` formats Go Doc Comments therefore some doc strings needed small adjustments from what `gofmt` suggested. --- daemon/cmd/daemon/main.go | 9 +++--- daemon/cmd/stressor/main.go | 4 +-- daemon/internal/flatbuffersdata/data_test.go | 18 +++++------ daemon/internal/newrelic/collector/client.go | 17 +++++----- daemon/internal/newrelic/config/config.go | 14 ++++---- daemon/internal/newrelic/harvest_trigger.go | 16 +++++----- daemon/internal/newrelic/integration/parse.go | 1 - .../newrelic/integration/php_packages.go | 17 +++++----- daemon/internal/newrelic/processor_test.go | 8 ++--- .../newrelic/utilization/utilization_hash.go | 32 +++++++++---------- 10 files changed, 67 insertions(+), 69 deletions(-) diff --git a/daemon/cmd/daemon/main.go b/daemon/cmd/daemon/main.go index e48dd2f7d..d3d8f977b 100644 --- a/daemon/cmd/daemon/main.go +++ b/daemon/cmd/daemon/main.go @@ -371,7 +371,7 @@ func main() { proxy = false } else { log.Debugf("ARGV[%d]: %s", i, os.Args[i]) - if ("--proxy" == os.Args[i]) { + if "--proxy" == os.Args[i] { proxy = true } } @@ -570,10 +570,9 @@ func (env *Environment) Set(key, value string) { // initLog opens the daemon log based on the current configuration settings. // If no log has been specified, initLog will try the following standard -// locations. -// -// /var/log/newrelic/newrelic-daemon.log -// /var/log/newrelic-daemon.log +// locations: +// - /var/log/newrelic/newrelic-daemon.log +// - /var/log/newrelic-daemon.log // // If no suitable location can be found, a generic error is returned. func initLog(cfg *Config) error { diff --git a/daemon/cmd/stressor/main.go b/daemon/cmd/stressor/main.go index 20616bb4c..0782dc9d0 100644 --- a/daemon/cmd/stressor/main.go +++ b/daemon/cmd/stressor/main.go @@ -122,8 +122,8 @@ const DaemonSampleRate = 3 * time.Second // Application Behavior Constants // In order to roughly mimic the PHP agent, these should settings match -// NR_APP_UNKNOWN_QUERY_BACKOFF_LIMIT_SECONDS -// NR_APP_REFRESH_QUERY_PERIOD_SECONDS +// - NR_APP_UNKNOWN_QUERY_BACKOFF_LIMIT_SECONDS +// - NR_APP_REFRESH_QUERY_PERIOD_SECONDS const ( connectedAppInfoPeriod = 20 * time.Second unconnectedAppInfoPeriod = 5 * time.Second diff --git a/daemon/internal/flatbuffersdata/data_test.go b/daemon/internal/flatbuffersdata/data_test.go index b2778f1e4..a9a3a9354 100644 --- a/daemon/internal/flatbuffersdata/data_test.go +++ b/daemon/internal/flatbuffersdata/data_test.go @@ -150,15 +150,15 @@ func TestFlatbuffersTxnData(t *testing.T) { // compilation to handle this rather than the flakier runtime.Version() // string. expect := `[` + - `{"name":"Supportability/TxnData/CustomEvents","forced":true,"data":[1,3,0,3,3,9]},` + - `{"name":"Supportability/TxnData/Metrics","forced":true,"data":[1,2,0,2,2,4]},` + - `{"name":"Supportability/TxnData/Size","forced":true,"data":[1,1408,0,1408,1408,1982464]},` + - `{"name":"Supportability/TxnData/SlowSQL","forced":true,"data":[1,1,0,1,1,1]},` + - `{"name":"Supportability/TxnData/TraceSize","forced":true,"data":[1,2,0,2,2,4]},` + - `{"name":"forced","forced":true,"data":[6,5,4,3,2,1]},` + - `{"name":"scoped","forced":false,"data":[1,2,3,4,5,6]},` + - `{"name":"scoped","forced":false,"data":[1,2,3,4,5,6]}` + - `]` + `{"name":"Supportability/TxnData/CustomEvents","forced":true,"data":[1,3,0,3,3,9]},` + + `{"name":"Supportability/TxnData/Metrics","forced":true,"data":[1,2,0,2,2,4]},` + + `{"name":"Supportability/TxnData/Size","forced":true,"data":[1,1408,0,1408,1408,1982464]},` + + `{"name":"Supportability/TxnData/SlowSQL","forced":true,"data":[1,1,0,1,1,1]},` + + `{"name":"Supportability/TxnData/TraceSize","forced":true,"data":[1,2,0,2,2,4]},` + + `{"name":"forced","forced":true,"data":[6,5,4,3,2,1]},` + + `{"name":"scoped","forced":false,"data":[1,2,3,4,5,6]},` + + `{"name":"scoped","forced":false,"data":[1,2,3,4,5,6]}` + + `]` if s != expect { t.Fatal(s, expect) diff --git a/daemon/internal/newrelic/collector/client.go b/daemon/internal/newrelic/collector/client.go index 6693e962b..7fb10326c 100644 --- a/daemon/internal/newrelic/collector/client.go +++ b/daemon/internal/newrelic/collector/client.go @@ -58,15 +58,15 @@ type RpmControls struct { // Agent Behavior Summary: // // on connect/preconnect: -// 410 means shutdown -// 200, 202 mean success (start run) -// all other response codes and errors mean try after backoff +// - 410 means shutdown +// - 200, 202 mean success (start run) +// - all other response codes and errors mean try after backoff // // on harvest: -// 410 means shutdown -// 401, 409 mean restart run -// 408, 429, 500, 503 mean save data for next harvest -// all other response codes and errors discard the data and continue the current harvest +// - 410 means shutdown +// - 401, 409 mean restart run +// - 408, 429, 500, 503 mean save data for next harvest +// - all other response codes and errors discard the data and continue the current harvest type RPMResponse struct { StatusCode int Body []byte @@ -97,7 +97,6 @@ func removeURLFromError(err error) error { ue.URL = "**REDACTED-URL**" } - return err } @@ -116,7 +115,7 @@ func (resp RPMResponse) IsDisconnect() bool { // IsRestartException indicates that the agent should restart. // 401 (License Exception) is considered a restart exception according to the spec, -// and is included here as such, however the PHP agent will not restart on a 401 and instead stop +// and is included here as such, however the PHP agent will not restart on a 401 and instead stop func (resp RPMResponse) IsRestartException() bool { return resp.StatusCode == 401 || resp.StatusCode == 409 } diff --git a/daemon/internal/newrelic/config/config.go b/daemon/internal/newrelic/config/config.go index 739a78d25..b34bf41b1 100644 --- a/daemon/internal/newrelic/config/config.go +++ b/daemon/internal/newrelic/config/config.go @@ -65,13 +65,13 @@ func NewDecoder(r io.Reader) *Decoder { // // Decode implements the following PEG. // -// INI = ((KEYWORD WS* '=' WS* VALUE) / COMMENT / WS)* -// KEYWORD = ALPHA (ALPHA / NUMERIC / '_' / '.')* -// VALUE = QUOTED / DQUOTED / RAW -// QUOTED = '\'' .* '\'' -// DQUOTED = '"' .* '"' -// RAW = .* EOL -// COMMENT = ('#' / ';') .* EOL +// INI = ((KEYWORD WS* '=' WS* VALUE) / COMMENT / WS)* +// KEYWORD = ALPHA (ALPHA / NUMERIC / '_' / '.')* +// VALUE = QUOTED / DQUOTED / RAW +// QUOTED = '\'' .* '\'' +// DQUOTED = '"' .* '"' +// RAW = .* EOL +// COMMENT = ('#' / ';') .* EOL func (d *Decoder) Decode(v interface{}) (err error) { val := reflect.ValueOf(v) if val.Kind() != reflect.Ptr { diff --git a/daemon/internal/newrelic/harvest_trigger.go b/daemon/internal/newrelic/harvest_trigger.go index 88cd9d109..3da02051d 100644 --- a/daemon/internal/newrelic/harvest_trigger.go +++ b/daemon/internal/newrelic/harvest_trigger.go @@ -65,10 +65,10 @@ func triggerBuilder(t HarvestType, duration time.Duration) HarvestTriggerFunc { // To create a group of goroutines that may be cancelled by sending a single // message on a single channel, this function: -// - Creates a cancel channel for the goroutine function f. -// - Starts the goroutine. -// - Returns the newly-created cancel channel so that it may be added to a -// broadcast group. +// - Creates a cancel channel for the goroutine function f. +// - Starts the goroutine. +// - Returns the newly-created cancel channel so that it may be added to a +// broadcast group. func startGroupMember(f HarvestTriggerFunc, trigger chan HarvestType) chan bool { cancel := make(chan bool) go f(trigger, cancel) @@ -144,10 +144,10 @@ func customTriggerBuilder(reply *ConnectReply) HarvestTriggerFunc { // This function returns the harvest trigger function that should be used for // this agent. In priority order: -// 1. Either it uses the ConnectReply to build custom triggers as specified by -// the New Relic server-side collector. -// 2. Or it creates a default harvest trigger, harvesting all data at the -// default period. +// 1. Either it uses the ConnectReply to build custom triggers as specified by +// the New Relic server-side collector. +// 2. Or it creates a default harvest trigger, harvesting all data at the +// default period. func getHarvestTrigger(key collector.LicenseKey, reply *ConnectReply) HarvestTriggerFunc { // Build a trigger from the server-side collector configuration. if reply.isHarvestAll() { diff --git a/daemon/internal/newrelic/integration/parse.go b/daemon/internal/newrelic/integration/parse.go index 5e0f57fc8..a033a33c1 100644 --- a/daemon/internal/newrelic/integration/parse.go +++ b/daemon/internal/newrelic/integration/parse.go @@ -228,7 +228,6 @@ func parsePHPModules(t *Test, content []byte) error { return nil } - func parseAnalyticEvents(test *Test, content []byte) error { test.analyticEvents = content return nil diff --git a/daemon/internal/newrelic/integration/php_packages.go b/daemon/internal/newrelic/integration/php_packages.go index 5151359d9..375954b0d 100644 --- a/daemon/internal/newrelic/integration/php_packages.go +++ b/daemon/internal/newrelic/integration/php_packages.go @@ -51,13 +51,14 @@ type ComposerJSON struct { Installed []ComposerPackage } -// // Given a JSON harvest payload, extract the PHP packages // -// Params 1 : JSON byte string containing update_loaded_modules endpoint data +// Params 1: +// - JSON byte string containing update_loaded_modules endpoint data // -// Returns : []PhpPackage with extracted package info, sorted by package name -// nil upon error processing JSON +// Returns: +// - []PhpPackage with extracted package info, sorted by package name +// - nil upon error processing JSON func GetPhpPackagesFromData(data []byte) ([]PhpPackage, error) { var pkgs []PhpPackage var x []interface{} @@ -279,11 +280,11 @@ func (pkgs *PhpPackagesCollection) OverrideVersionsFile() string { // Detects installed PHP packages // -// Returns : []PhpPackage with extracted package info, sorted by package name -// nil upon error processing JSON -// -// Notes : Currently only supports an application created with composer +// Returns: +// - []PhpPackage with extracted package info, sorted by package name +// - nil upon error processing JSON // +// Notes: Currently only supports an application created with composer func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, error) { var err error diff --git a/daemon/internal/newrelic/processor_test.go b/daemon/internal/newrelic/processor_test.go index 4910535ab..1c07ea331 100644 --- a/daemon/internal/newrelic/processor_test.go +++ b/daemon/internal/newrelic/processor_test.go @@ -1473,11 +1473,11 @@ func TestShouldConnect(t *testing.T) { } } -// runs a mocked test of resolution of agent harvest limit request and value returned by collector +// Runs a mocked test of resolution of agent harvest limit request and value returned by collector. // Notes: -// eventType: "log_event_data" or "custom_event_data" (no others supported currently) -// agentLimit: Harvest limit from agent (INI file) for a 60 second harvest period -// collectorLimit: Harvest limit sent from collector for a 5 second harvest period +// - eventType: "log_event_data" or "custom_event_data" (no others supported currently) +// - agentLimit: Harvest limit from agent (INI file) for a 60 second harvest period +// - collectorLimit: Harvest limit sent from collector for a 5 second harvest period // // Be aware the agentLimit will be scaled down by 12 (60/5) before being compared to the // collectorLimit. diff --git a/daemon/internal/newrelic/utilization/utilization_hash.go b/daemon/internal/newrelic/utilization/utilization_hash.go index 7791dfee8..1046f84ed 100644 --- a/daemon/internal/newrelic/utilization/utilization_hash.go +++ b/daemon/internal/newrelic/utilization/utilization_hash.go @@ -207,8 +207,8 @@ func OverrideDockerId(util *Data, id string) error { if nil == util.Vendors { util.Vendors = &vendors{} } - util.Vendors.Docker = &docker{ID: id} - return nil + util.Vendors.Docker = &docker{ID: id} + return nil } func OverrideVendors(util *Data) { @@ -222,20 +222,20 @@ func OverrideVendors(util *Data) { } func GetDockerId(util *Data) (string, error) { - id := "" - if nil == util { - return id, fmt.Errorf("Util is nil") - } - if util.Vendors.isEmpty() { - return id, fmt.Errorf("Vendors structure is empty") - } - if nil == util.Vendors.Docker { - return id, fmt.Errorf("Docker structure is empty") - } - - id = util.Vendors.Docker.ID - - return id, nil + id := "" + if nil == util { + return id, fmt.Errorf("Util is nil") + } + if util.Vendors.isEmpty() { + return id, fmt.Errorf("Vendors structure is empty") + } + if nil == util.Vendors.Docker { + return id, fmt.Errorf("Docker structure is empty") + } + + id = util.Vendors.Docker.ID + + return id, nil } func GatherMemory(util *Data) error { From f8ec25e5a0f25be0d1391a679f52277de714c5e2 Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:22:57 -0400 Subject: [PATCH 16/62] tests: enhance `EXPECT_METRICS_EXIST` directive (#921) This PR adds an optional count to the `EXPECT_METRICS_EXIST` test - the format is: ``` /*EXPECT_METRICS_EXIST // OLD form - just tests metric is present w/o checking count , // NEW OPTIONAL form - tests that exactly exist */ ``` A `count` value of `"??"` is treated as a wildcard for count number. --------- Co-authored-by: Michal Nowacki --- daemon/internal/newrelic/integration/test.go | 121 +++++++++++++++++-- 1 file changed, 112 insertions(+), 9 deletions(-) diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index 4a52f31a3..da8ca9879 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -10,10 +10,12 @@ import ( "encoding/json" "errors" "fmt" + "math" "net/http" "os" "path/filepath" "regexp" + "strconv" "strings" "time" @@ -456,6 +458,115 @@ func (t *Test) compareSpanEventsLike(harvest *newrelic.Harvest) { } } +// Handles EXPECT_METRICS_EXIST +func (t *Test) compareMetricsExist(harvest *newrelic.Harvest) { + for _, spec := range strings.Split(strings.TrimSpace(string(t.subEnvVars(t.metricsExist))), "\n") { + var err error + var count int64 + + fields := strings.Split(spec, ",") + name := fields[0] + name = strings.TrimSpace(name) + + // -1 means just test for existence without forcing an exact count + count = -1 + if len(fields) == 2 { + countStr := strings.TrimSpace(fields[1]) + if len(countStr) > 0 { + // is it "??" - with or without quotes + match, _ := regexp.MatchString("^\"*\\?\\?\"*$", countStr) + if !match { + count, err = strconv.ParseInt(countStr, 10, 64) + if nil != err { + t.Fail(fmt.Errorf("EXPECT_METRICS_EXIST has unparsable count: %s", spec)) + } + } + } + } + expected := strings.Replace(name, "__FILE__", t.Path, -1) + + id := newrelic.AgentRunID("?? agent run id") + actualJSON, _ := newrelic.IntegrationData(harvest.Metrics, id, time.Now()) + + actualPretty := bytes.Buffer{} + json.Indent(&actualPretty, actualJSON, "", " ") + + // scrub actual spans + scrubjson := ScrubLineNumbers(actualJSON) + scrubjson = ScrubFilename(scrubjson, t.Path) + scrubjson = ScrubHost(scrubjson) + + // parse actual JSON to internal format since we can't get the actual count from + // the MetricTable type + var x1 interface{} + if err := json.Unmarshal(scrubjson, &x1); nil != err { + t.Fatal(fmt.Errorf("unable to parse actual metric like json for fuzzy matching: %v"+ + "actual metric table: %s", err, actualPretty.String())) + return + } + + // expect x1 to be of type "[]interface {}" which wraps the entire metric event data + // within this generic array there will be: + // - a string of the form "?? agent run id" + // - a timestamp + // - another timestamp + // - an array of all metrics + // - an array for a single metric + // - map containing key for the metric name - can include scope + // - array of length 6 containing metric data values + + // test initial type is as expected + switch x1.(type) { + case []interface{}: + default: + t.Fatal(errors.New("metric event data json doesnt match expected format")) + return + } + + // expect array of len 4 + v2, _ := x1.([]interface{}) + if len(v2) != 4 { + t.Fatal(errors.New("metric event data json doesnt match expected format - expected 4 elements")) + return + } + + // get array of actual metric from 4th element + actual := v2[3].([]interface{}) + found := false + for i := 0; i < len(actual); i++ { + actualName := actual[i].([]interface{})[0].(map[string]interface{}) + act1 := actualName["name"] + act2 := actualName["scope"] + + // only support an empty scope for now + if act1 == expected && act2 == nil { + // compare count + actualData := actual[i].([]interface{})[1] + actualCount := int64(math.Round(actualData.([]interface{})[0].(float64))) + + metricPasses := false + if (count == -1 && actualCount > 0) || (actualCount == count) { + metricPasses = true + } + + if !metricPasses { + t.Fail(fmt.Errorf("metric count does not match for %s: expected = %d actual = %d\n"+ + "actual metric table: %s", expected, count, actualCount, actualPretty.String())) + return + } + + found = true + break + } + } + + if !found { + t.Fail(fmt.Errorf("metric %s not found, actual metric table: %s", expected, actualPretty.String())) + return + } + } +} + func (t *Test) comparePayload(expected json.RawMessage, pc newrelic.PayloadCreator, isMetrics bool) { if nil == expected { // No expected output has been specified: Anything passes. @@ -694,15 +805,7 @@ func (t *Test) Compare(harvest *newrelic.Harvest) { } if nil != t.metricsExist { - for _, name := range strings.Split(strings.TrimSpace(string(t.subEnvVars(t.metricsExist))), "\n") { - name = strings.TrimSpace(name) - expected := strings.Replace(name, "__FILE__", t.Path, -1) - if !harvest.Metrics.Has(expected) { - actualPretty := bytes.Buffer{} - json.Indent(&actualPretty, []byte(harvest.Metrics.DebugJSON()), "", " ") - t.Fail(fmt.Errorf("metric does not exist: %s\n\nactual metric table: %s", expected, actualPretty.String())) - } - } + t.compareMetricsExist(harvest) } if nil != t.metricsDontExist { From 9f27ce937be90f7e92e809e5419b99fe87b3ce19 Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Mon, 15 Jul 2024 09:22:21 -0500 Subject: [PATCH 17/62] fix(ci): correct trigger-test-suite name and description (#935) Corrects the name and description for trigger-test-suite to reflect the test suite workflow rather than just multiverse. --- .github/workflows/trigger-test-suite.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/trigger-test-suite.yml b/.github/workflows/trigger-test-suite.yml index f141241b7..1671ae46d 100644 --- a/.github/workflows/trigger-test-suite.yml +++ b/.github/workflows/trigger-test-suite.yml @@ -8,11 +8,11 @@ on: pull_request: jobs: - trigger-multiverse-tests: + trigger-test-suite: runs-on: ubuntu-latest env: GH_TOKEN: ${{ secrets.TEST_SUITE_REPO_GH_TOKEN }} steps: - - name: Trigger Multiverse Test Suite + - name: Trigger Test Suite run: | gh workflow run -R ${{ secrets.TEST_SUITE_REPO }} ${{ secrets.TEST_SUITE_WORKFLOW }} -f agent_git_ref=${{ github.head_ref }} -f pr-number=${{ github.event.number }} From 06824b7682366fa5aabbff5ab2d14a5719edfc4c Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:35:37 -0400 Subject: [PATCH 18/62] fix(testing): Handles __FILE__ correctly for EXPECT_METRICS_EXIST (#939) The logic for handling "__FILE__" was reversed and this PR fixes it. The idea is that the actual JSON harvest will have the file name replaced with "__FILE__" and so the expected string should contain "__FILE__" and not have the actual file name inserted as the old code did. --- daemon/internal/newrelic/integration/test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index da8ca9879..0f9342030 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -465,8 +465,8 @@ func (t *Test) compareMetricsExist(harvest *newrelic.Harvest) { var count int64 fields := strings.Split(spec, ",") - name := fields[0] - name = strings.TrimSpace(name) + expected := fields[0] + expected = strings.TrimSpace(expected) // -1 means just test for existence without forcing an exact count count = -1 @@ -483,7 +483,6 @@ func (t *Test) compareMetricsExist(harvest *newrelic.Harvest) { } } } - expected := strings.Replace(name, "__FILE__", t.Path, -1) id := newrelic.AgentRunID("?? agent run id") actualJSON, _ := newrelic.IntegrationData(harvest.Metrics, id, time.Now()) From 8fd160282fc5a9d393804af4825ccf790059a869 Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:22:48 -0500 Subject: [PATCH 19/62] feat(agent): remove support for PHPs 7.0 and 7.1 (#907) EOL PHP 7.0 & 7.1 Support. --- .github/workflows/code-coverage-baseline.yml | 4 +-- .github/workflows/test-agent.yml | 16 ++--------- agent/newrelic-install.sh | 30 ++------------------ docs/development.md | 2 +- make/php_versions.mk | 2 +- make/release.mk | 2 -- 6 files changed, 9 insertions(+), 47 deletions(-) diff --git a/.github/workflows/code-coverage-baseline.yml b/.github/workflows/code-coverage-baseline.yml index dcef64963..ab5b213f8 100644 --- a/.github/workflows/code-coverage-baseline.yml +++ b/.github/workflows/code-coverage-baseline.yml @@ -69,7 +69,7 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64] - php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] include: - codecov: 0 - platform: gnu @@ -147,7 +147,7 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64] - php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] include: - codecov: 0 - platform: gnu diff --git a/.github/workflows/test-agent.yml b/.github/workflows/test-agent.yml index 9bbd3593a..78a27ee41 100644 --- a/.github/workflows/test-agent.yml +++ b/.github/workflows/test-agent.yml @@ -97,12 +97,8 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64, arm64] - php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] exclude: - - arch: arm64 - php: '7.0' - - arch: arm64 - php: '7.1' - arch: arm64 php: '7.2' - arch: arm64 @@ -142,9 +138,7 @@ jobs: echo "AGENT_CHECK_VARIANT=check" >> $GITHUB_OUTPUT elif [[ ${{ matrix.platform }} = 'gnu' ]]; then echo "AGENT_CHECK_VARIANT=valgrind" >> $GITHUB_OUTPUT - elif [[ ${{matrix.php}} = '7.0' || ${{matrix.php}} = '7.1' ]]; then - echo "AGENT_CHECK_VARIANT=check" >> $GITHUB_OUTPUT - else + else echo "AGENT_CHECK_VARIANT=valgrind" >> $GITHUB_OUTPUT fi - name: Build axiom @@ -208,12 +202,8 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64, arm64] - php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] exclude: - - arch: arm64 - php: '7.0' - - arch: arm64 - php: '7.1' - arch: arm64 php: '7.2' - arch: arm64 diff --git a/agent/newrelic-install.sh b/agent/newrelic-install.sh index d61137721..d0959b252 100755 --- a/agent/newrelic-install.sh +++ b/agent/newrelic-install.sh @@ -327,10 +327,10 @@ check_file "${ilibdir}/scripts/newrelic.ini.template" # MAKE SURE TO UPDATE THIS LIST WHENEVER SUPPORT IS ADDED OR REMOVED # FOR A PHP VERSION # Currently supported versions: -# (7.0, 7.1, 7.2, 7.3, 7.4) +# (7.2, 7.3, 7.4) # for x64 if [ ${arch} = x64 ]; then -for pmv in "20151012" "20160303" "20170718" "20180731" "20190902"; do +for pmv in "20170718" "20180731" "20190902"; do check_file "${ilibdir}/agent/${arch}/newrelic-${pmv}.so" done fi @@ -535,8 +535,6 @@ add_to_path /usr/local/php add_to_path /usr/local/php/bin add_to_path /usr/local/zend/bin -add_to_path /usr/local/php-7.0/bin -add_to_path /usr/local/php-7.1/bin add_to_path /usr/local/php-7.2/bin add_to_path /usr/local/php-7.3/bin add_to_path /usr/local/php-7.4/bin @@ -548,8 +546,6 @@ add_to_path /usr/local/php-8.3/bin add_to_path /opt/local/bin add_to_path /usr/php/bin -add_to_path /usr/php-7.0/bin -add_to_path /usr/php-7.1/bin add_to_path /usr/php-7.2/bin add_to_path /usr/php-7.3/bin add_to_path /usr/php-7.4/bin @@ -558,8 +554,6 @@ add_to_path /usr/php-8.1/bin add_to_path /usr/php-8.2/bin add_to_path /usr/php-8.3/bin -add_to_path /usr/php/7.0/bin -add_to_path /usr/php/7.1/bin add_to_path /usr/php/7.2/bin add_to_path /usr/php/7.3/bin add_to_path /usr/php/7.4/bin @@ -571,8 +565,6 @@ add_to_path /usr/php/8.3/bin add_to_path /opt/php/bin add_to_path /opt/zend/bin -add_to_path /opt/php-7.0/bin -add_to_path /opt/php-7.1/bin add_to_path /opt/php-7.2/bin add_to_path /opt/php-7.3/bin add_to_path /opt/php-7.4/bin @@ -1037,22 +1029,6 @@ for this copy of PHP. We apologize for the inconvenience. fi case "${pi_ver}" in - 7.0.*) - warning_message="${pdir}: Support for PHP '${pi_ver}' in the New Relic PHP agent is deprecated." - if [ -z "${NR_INSTALL_SILENT}" ]; then - echo $warning_message - fi - log $warning_message - ;; - - 7.1.*) - warning_message="${pdir}: Support for PHP '${pi_ver}' in the New Relic PHP agent is deprecated." - if [ -z "${NR_INSTALL_SILENT}" ]; then - echo $warning_message - fi - log $warning_message - ;; - 7.2.*) ;; @@ -1249,8 +1225,6 @@ does not exist. This particular instance of PHP will be skipped. # pi_modver= case "${pi_ver}" in - 7.0.*) pi_modver="20151012" ;; - 7.1.*) pi_modver="20160303" ;; 7.2.*) pi_modver="20170718" ;; 7.3.*) pi_modver="20180731" ;; 7.4.*) pi_modver="20190902" ;; diff --git a/docs/development.md b/docs/development.md index c85755903..11700cdee 100644 --- a/docs/development.md +++ b/docs/development.md @@ -58,7 +58,7 @@ _(most operating systems package these with `-dev` or `-devel` suffixes)_ ### PHP -The PHP agent supports PHP versions `7.0`, `7.1`, `7.2`, `7.3`, `7.4`,`8.0`, `8.1`, '8.2', and `8.3`. +The PHP agent supports PHP versions `7.2`, `7.3`, `7.4`,`8.0`, `8.1`, '8.2', and `8.3`. ## Build the PHP Agent diff --git a/make/php_versions.mk b/make/php_versions.mk index 0629bfabd..e0a63e9b9 100644 --- a/make/php_versions.mk +++ b/make/php_versions.mk @@ -3,4 +3,4 @@ # SPDX-License-Identifier: Apache-2.0 # -PHP_VERSION_LIST=$${PHPS:-8.3 8.2 8.1 8.0 7.4 7.3 7.2 7.1 7.0} +PHP_VERSION_LIST=$${PHPS:-8.3 8.2 8.1 8.0 7.4 7.3 7.2} diff --git a/make/release.mk b/make/release.mk index 6bb9eba61..8eee97388 100644 --- a/make/release.mk +++ b/make/release.mk @@ -170,8 +170,6 @@ $(eval $(call RELEASE_AGENT_TARGET,8.0,20200930)) $(eval $(call RELEASE_AGENT_TARGET,7.4,20190902)) $(eval $(call RELEASE_AGENT_TARGET,7.3,20180731)) $(eval $(call RELEASE_AGENT_TARGET,7.2,20170718)) -$(eval $(call RELEASE_AGENT_TARGET,7.1,20160303)) -$(eval $(call RELEASE_AGENT_TARGET,7.0,20151012)) # From 6500c76c7515468e61ef634c2a466344bce6cf53 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Mon, 22 Jul 2024 06:38:46 -0700 Subject: [PATCH 20/62] feat(agent): Add basic aws-sdk-php intrumentation (#932) 1) Detects the use of aws-sdk-php 3 library with a magic file 2) wraps a function to extract version number 3) Sends a supportability metric for the library and package 4) Sends PHP Package info for version 5) Multiverse tests were added in support of this further updated to: 1. added unit tests 2. created a wrapped function that will create a metric for all detected service names. as soon as the client is initialized, the metric is automatically created. Then the metric is generated as seen in the associated multiverse tests. Please see the challenge with instrumenting for PHP 8.2+ and various options that were considered below. Option 2 is the currently chosen method due to lower risk, complexity, and overhead. Challenges: Php8.2+ and composer autoload leads to the main magic file being optimized directly to opcache. Options considered: 1) for PHP8.2, and only optimizable libraries, when encountering autoload.php files, ask the file what includes it added and check against only the optimizable library. Small overhead incurred when encountering an autoload file. summary: Magic file = `{"AWS-SDK-PHP", NR_PSTR("aws-sdk-php/src/functions.php"), nr_aws_sdk_php_enable, true},` Requires bool added to library structure: ``` typedef struct _nr_library_table_t { const char* library_name; const char* file_to_check; size_t file_to_check_len; nr_library_enable_fn_t enable; bool optimizable; } nr_library_table_t; ``` ``` Additional complexity in `nr_execute_handle_library #if amber && ZEND_MODULE_API_NO >= ZEND_8_2_X_API_NO /* * Only check if files have been optimized out for PHP 8.2+ and if we know the file is optimizable. * It's basically preloading things into the opcache without setting the preload flag that * we check to see if we need to check the opcache. * In this case, we need to check the PHP list of files that are included to see if our magic * file is there. We further limit overhead by only checking when it is an autoload file. */ if ((libraries[i].optimizable) && (nr_striendswith(STR_AND_LEN(filename), "autoload.php", 12)) ) { zend_string *zstring_fname; if (NULL != &EG(included_files)) { ZEND_HASH_MAP_FOREACH_STR_KEY(&EG(included_files), zstring_fname) { if (nr_striendswith(ZEND_STRING_VALUE(zstring_fname), ZEND_STRING_LEN(zstring_fname) , STR_AND_LEN(libraries[i].file_to_check))) { nrl_debug(NRL_INSTRUMENT, "detected library=%s", libraries[i].library_name); nr_fw_support_add_library_supportability_metric(NRPRG(txn), libraries[i].library_name); if (NULL != libraries[i].enable) { libraries[i].enable(); } } } ZEND_HASH_FOREACH_END(); } #endif // PHP 8.2+ ``` ` 2) use a file that gets called later and only when AwsClient.php file file is called. It's called later and we'll miss some instrumentation, but if we're only ever going to be interested in `Client` calls anyway, maybe that's ok? Doesn't detect Sdk.php (optimized out) so when customers only use that or when they use it first, we will not instrument it. This only detects when a Client is called to use a service so potentially misses out on other instrumentation and misses out when customers use the aws-sdk-php but use non-SDK way to interact with the service (possibly with redis/memcached). This way is definitely the least complex and lowest overhead and less complexity means lower risk as well. 3) Just directly add the wrappers to the hash map. With potentially 50ish clients to wrap, this will add overhead to every hash map lookup. --- agent/Makefile.frag | 1 + agent/config.m4 | 2 +- agent/fw_hooks.h | 1 + agent/lib_aws_sdk_php.c | 177 +++++++++++++++++++++++++++++ agent/lib_aws_sdk_php.h | 23 ++++ agent/php_execute.c | 3 + agent/tests/test_lib_aws_sdk_php.c | 176 ++++++++++++++++++++++++++++ 7 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 agent/lib_aws_sdk_php.c create mode 100644 agent/lib_aws_sdk_php.h create mode 100644 agent/tests/test_lib_aws_sdk_php.c diff --git a/agent/Makefile.frag b/agent/Makefile.frag index f11dfbf75..def094486 100644 --- a/agent/Makefile.frag +++ b/agent/Makefile.frag @@ -88,6 +88,7 @@ TEST_BINARIES = \ tests/test_globals \ tests/test_internal_instrument \ tests/test_hash \ + tests/test_lib_aws_sdk_php \ tests/test_mongodb \ tests/test_monolog \ tests/test_mysql \ diff --git a/agent/config.m4 b/agent/config.m4 index 8d9e42b24..a77122c37 100644 --- a/agent/config.m4 +++ b/agent/config.m4 @@ -228,7 +228,7 @@ if test "$PHP_NEWRELIC" = "yes"; then fw_silex.c fw_slim.c fw_support.c fw_symfony4.c fw_symfony2.c \ fw_symfony.c fw_symfony_common.c fw_wordpress.c fw_yii.c \ fw_zend2.c fw_zend.c" - LIBRARIES="lib_monolog.c lib_doctrine2.c lib_guzzle3.c \ + LIBRARIES="lib_aws_sdk_php.c lib_monolog.c lib_doctrine2.c lib_guzzle3.c \ lib_guzzle4.c lib_guzzle6.c lib_guzzle_common.c \ lib_mongodb.c lib_phpunit.c lib_predis.c lib_zend_http.c" PHP_NEW_EXTENSION(newrelic, $FRAMEWORKS $LIBRARIES $NEWRELIC_AGENT, $ext_shared,, \\$(NEWRELIC_CFLAGS)) diff --git a/agent/fw_hooks.h b/agent/fw_hooks.h index baaf400c7..e78f65cbd 100644 --- a/agent/fw_hooks.h +++ b/agent/fw_hooks.h @@ -45,6 +45,7 @@ extern void nr_zend_enable(TSRMLS_D); extern void nr_fw_zend2_enable(TSRMLS_D); /* Libraries. */ +extern void nr_aws_sdk_php_enable(); extern void nr_doctrine2_enable(TSRMLS_D); extern void nr_guzzle3_enable(TSRMLS_D); extern void nr_guzzle4_enable(TSRMLS_D); diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c new file mode 100644 index 000000000..d9055690d --- /dev/null +++ b/agent/lib_aws_sdk_php.c @@ -0,0 +1,177 @@ +/* + * Copyright 2024 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * Functions relating to instrumenting the AWS-SDK-PHP. + * https://github.com/aws/aws-sdk-php + */ +#include "php_agent.h" +#include "php_call.h" +#include "php_hash.h" +#include "php_wrapper.h" +#include "fw_hooks.h" +#include "fw_support.h" +#include "util_logging.h" +#include "lib_aws_sdk_php.h" + +#define PHP_PACKAGE_NAME "aws/aws-sdk-php" + +/* + * In a normal course of events, the following line will always work + * zend_eval_string("Aws\\Sdk::VERSION;", &retval, "Get AWS Version") + * By the time we have detected the existence of the aws-sdk-php and with + * default composer profject settings, it callable even from + * nr_aws_sdk_php_enable which will automatically load the class if it isn't + * loaded yet and then evaluate the string. However, in the rare case that files + * are not loaded via autoloader and/or have non-default composer classload + * settings, if the class is not found, PHP 8.2+ will generate a fatal + * unrecoverable uncatchable error error whenever it cannot find a class. While + * calling this from nr_aws_sdk_php_enable would have been great and would allow + * the sdk version value to be set only once, to avoid the very unlikely but not + * impossible fatal error, this will be called from the + * "Aws\\ClientResolver::_apply_user_agent" wrapper which GUARANTEES that + * aws/sdk exists and is already loaded. + * + * + * Additionally given that aws-sdk-php is currently detected from the + * AwsClient.php file, this method will always be called when a client is + * created unlike Sdk::construct which doesn't show with PHP 8.2+. + * + * Using Aws/Sdk::__construct for version is currently nonviable as it is + * unreliable as a version determiner. + * Having separate functionality to extract from Aws/Sdk::__construct + * is both not required and is redundant and causes additional overhead and + * so only one function is needed to extract version. + * + * Aws\\ClientResolver::_apply_user_agent a reliable function as it is + * always called on client initialization since it is key to populating + * the request headers, and it loads Sdk by default. + * + * Concerns about future/past proofing to the checking prioritized the following + * implementation vs using the eval method. + */ +void nr_lib_aws_sdk_php_handle_version() { + zval* zval_version = NULL; + zend_class_entry* class_entry = NULL; + char* version = NULL; + + class_entry = nr_php_find_class("aws\\sdk"); + if (NULL != class_entry) { + zval_version = nr_php_get_class_constant(class_entry, "VERSION"); + + if (nr_php_is_zval_non_empty_string(zval_version)) { + version = Z_STRVAL_P(zval_version); + } + } + if (NRINI(vulnerability_management_package_detection_enabled)) { + /* Add php package to transaction */ + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); + } + nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); + nr_php_zval_free(&zval_version); +} + +void nr_lib_aws_sdk_php_add_supportability_service_metric( + const char* service_name) { + /* total MAX metric name length per agent-specs */ + char buf[MAX_METRIC_NAME_LEN]; + char* cp = NULL; + + if (nr_strempty(service_name)) { + return; + } + if (NULL == NRPRG(txn)) { + return; + } + + cp = buf; + strcpy(cp, PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX); + cp += PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX_LEN - 1; + strlcpy(cp, service_name, MAX_AWS_SERVICE_NAME_LEN); + nrm_force_add(NRPRG(txn) ? NRTXN(unscoped_metrics) : 0, buf, 0); +} + +NR_PHP_WRAPPER(nr_create_aws_sdk_version_metrics) { + (void)wraprec; + NR_PHP_WRAPPER_CALL; + nr_lib_aws_sdk_php_handle_version(); +} +NR_PHP_WRAPPER_END + +/* + * AwsClient::parseClass + * This is called from the base AwsClient class for every client associated + * with a service during client initialization. + * parseClass already computes the service name for internal use, so we don't + * need to store it, we just need to snag it from the return value as it goes + * through the client initialization process. + */ +NR_PHP_WRAPPER(nr_create_aws_service_metric) { + (void)wraprec; + + zval** ret_val_ptr = NULL; + ret_val_ptr = NR_GET_RETURN_VALUE_PTR; + + NR_PHP_WRAPPER_CALL; + + if (NULL != ret_val_ptr && nr_php_is_zval_valid_array(*ret_val_ptr)) { + /* obtain ret_val_ptr[0] which contains the service name */ + zval* service_name + = nr_php_zend_hash_index_find(Z_ARRVAL_P(*ret_val_ptr), 0); + if (nr_php_is_zval_non_empty_string(service_name)) { + nr_lib_aws_sdk_php_add_supportability_service_metric( + Z_STRVAL_P(service_name)); + } + } +} +NR_PHP_WRAPPER_END + +/* + * The ideal file to begin immediate detection of the aws-sdk is: + * aws-sdk-php/src/functions.php + * Unfortunately, Php8.2+ and composer autoload leads to the + * file being optimized directly and not loaded. + * + * Options considered: + * + * 1. for PHP8.2, and only optimizable libraries, when encountering autoload.php + * files, ask the file what includes it added and check against only the + * optimizable library. Small overhead incurred when encountering an autoload + * file, but detects aws-sdk-php immediately before any sdk code executes + * (changes needed for this are detailed in the original PR) + * 2. use a file that gets called later and only when AwsClient.php file file is + * called. It's called later and we'll miss some instrumentation, but if we're + * only ever going to be interested in Client calls anyway, maybe that's ok? + * Doesn't detect Sdk.php (optimized out) so when customers only use that or + * when they use it first, we will not instrument it. This only detects when a + * Client is called to use a service so potentially misses out on other + * instrumentation and misses out when customers use the aws-sdk-php but use + * non-SDK way to interact with the service (possibly with redis/memcached). + * This way is definitely the least complex and lowest overhead and less + * complexity means lower risk as well. + * 3. Directly add the wrappers to the hash map. With potentially 50ish clients + * to wrap, this will add overhead to every hash map lookup. Currently + * implemented option is 2, use the AwsClient.php as this is our main focus. + * This means until a call to an Aws/AwsClient function, + * all calls including aws\sdk calls are ignored. Version detection will be + * tied to Aws/ClientResolver::_apply_user_agent which is ALWAYS called when + * dealing with aws clients. It will not be computed from + * Aws/Sdk::__constructor which would at best be duplicate info and worst would + * never be ignored until a client is called. + */ +void nr_aws_sdk_php_enable() { + /* This will be used to extract the version. */ + nr_php_wrap_user_function(NR_PSTR("Aws\\ClientResolver::_apply_user_agent"), + nr_create_aws_sdk_version_metrics); + /* Called when initializing all other Clients */ + nr_php_wrap_user_function(NR_PSTR("Aws\\AwsClient::parseClass"), + nr_create_aws_service_metric); + + if (NRINI(vulnerability_management_package_detection_enabled)) { + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + } +} diff --git a/agent/lib_aws_sdk_php.h b/agent/lib_aws_sdk_php.h new file mode 100644 index 000000000..11ffcd7aa --- /dev/null +++ b/agent/lib_aws_sdk_php.h @@ -0,0 +1,23 @@ +/* + * Copyright 2024 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Functions relating to instrumenting AWS-SDK-PHP. + */ +#ifndef LIB_AWS_SDK_PHP_HDR +#define LIB_AWS_SDK_PHP_HDR + +#define PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX \ + "Supportability/PHP/AWS/Services/" +#define MAX_METRIC_NAME_LEN 256 +#define PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX_LEN \ + sizeof(PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX) +#define MAX_AWS_SERVICE_NAME_LEN \ + (MAX_METRIC_NAME_LEN - PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX_LEN) + +extern void nr_aws_sdk_php_enable(); +extern void nr_lib_aws_sdk_php_handle_version(); +extern void nr_lib_aws_sdk_php_add_supportability_service_metric( + const char* service_name); + +#endif /* LIB_AWS_SDK_PHP_HDR */ diff --git a/agent/php_execute.c b/agent/php_execute.c index 80ad27bdf..3ecb33100 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -484,6 +484,9 @@ typedef struct _nr_library_table_t { */ // clang-format: off static nr_library_table_t libraries[] = { + /* AWS-SDK-PHP 3 */ + {"AWS-SDK-PHP", NR_PSTR("aws-sdk-php/src/awsclient.php"), nr_aws_sdk_php_enable}, + /* Doctrine < 2.18 */ {"Doctrine 2", NR_PSTR("doctrine/orm/query.php"), nr_doctrine2_enable}, /* Doctrine 2.18 reworked the directory structure */ diff --git a/agent/tests/test_lib_aws_sdk_php.c b/agent/tests/test_lib_aws_sdk_php.c new file mode 100644 index 000000000..8ddffce9d --- /dev/null +++ b/agent/tests/test_lib_aws_sdk_php.c @@ -0,0 +1,176 @@ +/* + * Copyright 2024 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "tlib_php.h" + +#include "php_agent.h" +#include "lib_aws_sdk_php.h" +#include "fw_support.h" + +tlib_parallel_info_t parallel_info + = {.suggested_nthreads = -1, .state_size = 0}; + +#if ZEND_MODULE_API_NO > ZEND_7_1_X_API_NO + +static void declare_aws_sdk_class(const char* ns, + const char* klass, + const char* sdk_version) { + char* source = nr_formatf( + "namespace %s;" + "class %s{" + "const VERSION = '%s';" + "}", + ns, klass, sdk_version); + + tlib_php_request_eval(source); + + nr_free(source); +} + +static void test_nr_lib_aws_sdk_php_add_supportability_service_metric(void) { + /* + * Should return aws metric with classname + */ + tlib_php_request_start(); + + int num_metrics = nrm_table_size(NRPRG(txn)->unscoped_metrics); + nr_lib_aws_sdk_php_add_supportability_service_metric(NULL); + tlib_pass_if_int_equal( + "aws supportability metric 0: metric not created in NULL metrics", + num_metrics, nrm_table_size(NRPRG(txn)->unscoped_metrics)); + + nr_lib_aws_sdk_php_add_supportability_service_metric("one\\two"); + tlib_pass_if_not_null( + "aws supportability metric 1: service/client metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, + PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX "one\\two")); + + nr_lib_aws_sdk_php_add_supportability_service_metric("three\\four"); + tlib_pass_if_not_null( + "aws supportability metric 2: service/client metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, + PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX "three\\four")); + + nr_lib_aws_sdk_php_add_supportability_service_metric("three\\four\\five"); + tlib_pass_if_not_null( + "aws supportability metric 3: service/client metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, + PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX "three\\four\\five")); + + nr_lib_aws_sdk_php_add_supportability_service_metric("three\\"); + tlib_pass_if_not_null( + "aws supportability metric 4: service/client metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, + PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX "three\\")); + nr_lib_aws_sdk_php_add_supportability_service_metric("\\four"); + tlib_pass_if_not_null( + "aws supportability metric 5: service/client metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, + PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX "\\four")); + nr_lib_aws_sdk_php_add_supportability_service_metric("five"); + tlib_pass_if_not_null( + "aws supportability metric 6: service/client metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, + PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX "five")); + + tlib_php_request_end(); +} + +static void test_nr_lib_aws_sdk_php_handle_version(void) { +#define LIBRARY_NAME "aws/aws-sdk-php" +#define LIBRARY_MAJOR_VERSION "7" +#define LIBRARY_MAJOR_VERSION_2 "10" +#define LIBRARY_MAJOR_VERSION_3 "100" +#define LIBRARY_MAJOR_VERSION_4 "4.23" +#define LIBRARY_MAJOR_VERSION_55 "55.34" +#define LIBRARY_MAJOR_VERSION_6123 "6123.45" +#define LIBRARY_MAJOR_VERSION_0 "0.4.5" +#define PACKAGE_METRIC "Supportability/PHP/package/" LIBRARY_NAME + + /* + * If lib_aws_sdk_php_handle_version function is ever called, we have already + * detected the aws-sdk-php library. + */ + + /* + * Aws/Sdk exists. Should return aws package metric with + * version + */ + tlib_php_request_start(); + declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_not_null("version test 1: package metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC + "/" LIBRARY_MAJOR_VERSION "/detected")); + tlib_php_request_end(); + + tlib_php_request_start(); + declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_2); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_not_null("version test 2: package metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC + "/" LIBRARY_MAJOR_VERSION_2 "/detected")); + tlib_php_request_end(); + + tlib_php_request_start(); + declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_3); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_not_null("version test 3: package metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC + "/" LIBRARY_MAJOR_VERSION_3 "/detected")); + tlib_php_request_end(); + + tlib_php_request_start(); + declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_4); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_not_null( + "version test 4: package metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/4/detected")); + tlib_php_request_end(); + + tlib_php_request_start(); + declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_55); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_not_null( + "version test 5: package metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/55/detected")); + tlib_php_request_end(); + + tlib_php_request_start(); + declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_6123); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_not_null( + "version test 6: package metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/6123/detected")); + tlib_php_request_end(); + + tlib_php_request_start(); + declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_0); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_not_null( + "version test 7: package metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/0/detected")); + tlib_php_request_end(); + + /* + * Aws/Sdk does not exist, should not return package metric if no version + * This case should never happen in real situations. + */ + tlib_php_request_start(); + nr_lib_aws_sdk_php_handle_version(); + tlib_pass_if_null("aws library metric created", + nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC)); + tlib_php_request_end(); +} + +void test_main(void* p NRUNUSED) { + tlib_php_engine_create(""); + test_nr_lib_aws_sdk_php_add_supportability_service_metric(); + test_nr_lib_aws_sdk_php_handle_version(); + tlib_php_engine_destroy(); +} +#else +void test_main(void* p NRUNUSED) {} +#endif From b4609dbe9b62cb8bca5e091f5715b6cf7ed86287 Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Tue, 23 Jul 2024 10:38:49 -0400 Subject: [PATCH 21/62] security(daemon): upgrade golang to 1.22.5 (#940) Bump golang used for building daemon to 1.22.5. --- daemon/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/go.mod b/daemon/go.mod index 41f8c79ed..a7354c622 100644 --- a/daemon/go.mod +++ b/daemon/go.mod @@ -1,7 +1,7 @@ module github.com/newrelic/newrelic-php-agent/daemon go 1.21 -toolchain go1.22.3 +toolchain go1.22.5 require ( github.com/golang/protobuf v1.5.3 From e87c38afce9a12d2a7d6e2b0d2606f07986f9c2a Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Thu, 25 Jul 2024 05:55:12 -0700 Subject: [PATCH 22/62] chore: bump version to 11.0 (#943) Version bump to 11.0.0 for next release --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index ea711f111..4a68b557e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.23.0 +11.0.0 \ No newline at end of file From bd4922f7e3c03de03c141354b3635a28b31872c8 Mon Sep 17 00:00:00 2001 From: ZNeumann Date: Fri, 26 Jul 2024 14:47:03 -0600 Subject: [PATCH 23/62] feat(agent): optionally pad agent generated trace_ids (#929) When the agent generates trace id based on the information it received in HTTP headers, trace id will have 32 characters. However when the agent generates the trace id for internal use only, the trace id has 16 characters. This PR adds an INI setting that when set, the agent will left pad its internally used trace id with '0' so that the trace id has 32 characters. --------- Co-authored-by: Michal Nowacki --- agent/php_newrelic.h | 2 + agent/php_nrini.c | 15 +++++++ agent/php_txn.c | 2 + agent/scripts/newrelic.ini.private.template | 11 +++++ axiom/nr_distributed_trace.c | 20 ++++++++- axiom/nr_distributed_trace.h | 8 +++- axiom/nr_txn.c | 3 +- axiom/nr_txn.h | 3 ++ axiom/tests/test_distributed_trace.c | 42 +++++++++++++++++++ axiom/tests/test_txn.c | 42 +++++++++++++++++-- .../newrelic/test_default_trace_id.php | 30 +++++++++++++ .../newrelic/test_full_trace_id.php | 32 ++++++++++++++ .../test_span_events_max_samples_stored5.php | 2 +- 13 files changed, 204 insertions(+), 8 deletions(-) create mode 100644 tests/integration/distributed_tracing/newrelic/test_default_trace_id.php create mode 100644 tests/integration/distributed_tracing/newrelic/test_full_trace_id.php diff --git a/agent/php_newrelic.h b/agent/php_newrelic.h index e114a6464..04ebd1ad2 100644 --- a/agent/php_newrelic.h +++ b/agent/php_newrelic.h @@ -542,6 +542,8 @@ nrinibool_t nrinibool_t distributed_tracing_exclude_newrelic_header; /* newrelic.distributed_tracing_exclude_newrelic_header */ +nrinibool_t + distributed_tracing_pad_trace_id; /* newrelic.distributed_tracing.pad_trace_id */ nrinibool_t span_events_enabled; /* newrelic.span_events_enabled */ nriniuint_t span_events_max_samples_stored; /* newrelic.span_events.max_samples_stored diff --git a/agent/php_nrini.c b/agent/php_nrini.c index 2ed62eb10..6fdd898d3 100644 --- a/agent/php_nrini.c +++ b/agent/php_nrini.c @@ -2879,6 +2879,21 @@ STD_PHP_INI_ENTRY_EX("newrelic.distributed_tracing_exclude_newrelic_header", newrelic_globals, 0) +/* + * This setting is not documented and affects the length of the interally used + * trace id. This INI setting should not be modified unless requested by + * customer. + */ +STD_PHP_INI_ENTRY_EX("newrelic.distributed_tracing.pad_trace_id", + "", // default is false represented as an empty string - + // see notes about PHP INI parser + NR_PHP_REQUEST, + nr_boolean_mh, + distributed_tracing_pad_trace_id, + zend_newrelic_globals, + newrelic_globals, + nr_enabled_disabled_dh) + /** * Flag to turn the span events on/off * When on, the agent will create span events. Span events require that diff --git a/agent/php_txn.c b/agent/php_txn.c index 7e445c762..cdfa1269f 100644 --- a/agent/php_txn.c +++ b/agent/php_txn.c @@ -748,6 +748,8 @@ nr_status_t nr_php_txn_begin(const char* appnames, opts.allow_raw_exception_messages = NRINI(allow_raw_exception_messages); opts.custom_parameters_enabled = NRINI(custom_parameters_enabled); opts.distributed_tracing_enabled = NRINI(distributed_tracing_enabled); + opts.distributed_tracing_pad_trace_id + = NRINI(distributed_tracing_pad_trace_id); opts.distributed_tracing_exclude_newrelic_header = NRINI(distributed_tracing_exclude_newrelic_header); opts.span_events_enabled = NRINI(span_events_enabled); diff --git a/agent/scripts/newrelic.ini.private.template b/agent/scripts/newrelic.ini.private.template index 67175b6b8..92f4546f7 100644 --- a/agent/scripts/newrelic.ini.private.template +++ b/agent/scripts/newrelic.ini.private.template @@ -193,3 +193,14 @@ ; hooks instrumented. ; ;newrelic.framework.wordpress.hooks_skip_filename="" + +; Setting: newrelic.distributed_tracing.pad_trace_id +; Type : bool +; Scope : per-directory +; Default: false +; Info : If set to true, the distributed trace's id generated by the agent, +; which is only meant to be used internally by New Relic, will be left +; padded with '0's to have the length of 32 characters. This will increase +; the amount of data sent to New Relic. +; +;newrelic.distributed_tracing.pad_trace_id = false diff --git a/axiom/nr_distributed_trace.c b/axiom/nr_distributed_trace.c index 151ae6406..bdc587e24 100644 --- a/axiom/nr_distributed_trace.c +++ b/axiom/nr_distributed_trace.c @@ -481,14 +481,30 @@ void nr_distributed_trace_set_app_id(nr_distributed_trace_t* dt, } void nr_distributed_trace_set_trace_id(nr_distributed_trace_t* dt, - const char* trace_id) { + const char* trace_id, + bool do_padding) { if (NULL == dt) { return; } nr_free(dt->trace_id); if (trace_id) { - dt->trace_id = nr_strdup(trace_id); + if (nrunlikely(do_padding)) { + int len = nr_strlen(trace_id); + if (len < NR_TRACE_ID_MAX_SIZE) { + int padding = NR_TRACE_ID_MAX_SIZE - len; + char* dest = (char*)nr_malloc(NR_TRACE_ID_MAX_SIZE + 1); + for (int i = 0; i < padding; i++) { + dest[i] = '0'; + } + strcpy(dest + padding, trace_id); + dt->trace_id = dest; + } else { + dt->trace_id = nr_strdup(trace_id); + } + } else { + dt->trace_id = nr_strdup(trace_id); + } } } diff --git a/axiom/nr_distributed_trace.h b/axiom/nr_distributed_trace.h index c84010dfa..f59d7ae24 100644 --- a/axiom/nr_distributed_trace.h +++ b/axiom/nr_distributed_trace.h @@ -12,6 +12,9 @@ #include "util_time.h" #include "util_object.h" +/* This is the maximum size of trace id that the backend will accept */ +#define NR_TRACE_ID_MAX_SIZE 32 + static const char NR_DISTRIBUTED_TRACE_ACCEPT_SUCCESS[] = "Supportability/DistributedTrace/AcceptPayload/Success"; static const char NR_DISTRIBUTED_TRACE_ACCEPT_EXCEPTION[] @@ -242,9 +245,12 @@ extern void nr_distributed_trace_set_app_id(nr_distributed_trace_t* dt, * * Params : 1. The distributed trace. * 2. The trace id. + * 3. Bool where true indicates to left pad the trace_id + * with '0's to make it NR_TRACE_ID_MAX_SIZE characters */ void nr_distributed_trace_set_trace_id(nr_distributed_trace_t* dt, - const char* trace_id); + const char* trace_id, + bool do_padding); /* * Purpose : Set the distributed trace priority. diff --git a/axiom/nr_txn.c b/axiom/nr_txn.c index 2ea39bb26..c3667db81 100644 --- a/axiom/nr_txn.c +++ b/axiom/nr_txn.c @@ -633,7 +633,8 @@ nrtxn_t* nr_txn_begin(nrapp_t* app, */ guid = nr_guid_create(app->rnd); nr_distributed_trace_set_txn_id(nt->distributed_trace, guid); - nr_distributed_trace_set_trace_id(nt->distributed_trace, guid); + nr_distributed_trace_set_trace_id(nt->distributed_trace, guid, + opts->distributed_tracing_pad_trace_id); nr_distributed_trace_set_trusted_key( nt->distributed_trace, diff --git a/axiom/nr_txn.h b/axiom/nr_txn.h index dc2cf014b..a6f942f66 100644 --- a/axiom/nr_txn.h +++ b/axiom/nr_txn.h @@ -91,6 +91,9 @@ typedef struct _nrtxnopt_t { int distributed_tracing_enabled; /* Whether distributed tracing functionality is enabled */ + bool distributed_tracing_pad_trace_id; /* whether to pad internally generated + trace_id to NR_TRACE_ID_MAX_SIZE + characters */ bool distributed_tracing_exclude_newrelic_header; /* Whether distributed tracing outbound headers should omit newrelic diff --git a/axiom/tests/test_distributed_trace.c b/axiom/tests/test_distributed_trace.c index c74d549f5..008aea768 100644 --- a/axiom/tests/test_distributed_trace.c +++ b/axiom/tests/test_distributed_trace.c @@ -1670,6 +1670,46 @@ static void test_distributed_trace_create_trace_parent_header(void) { nr_free(actual); } +static void test_distributed_trace_set_trace_id(const bool pad_trace_id) { + nr_distributed_trace_t dt = {0}; + // clang-format off + const char* t_input[] = { + "", // empty string + "1234567890", // 10 characters + "1234567890abcdef", // 16 characters + "1234567890abcdef1234567890abcdef", // 32 characters + "1234567890123456789012345678901234567890123456789012345678901234567890" // 64 characters + }; + const char* t_padded[] = { + "00000000000000000000000000000000", // empty string lpadded to NR_TRACE_ID_MAX_SIZE with '0' + "00000000000000000000001234567890", // 10 characters lpadded to NR_TRACE_ID_MAX_SIZE with '0' + "00000000000000001234567890abcdef", // 16 characters lpadded to NR_TRACE_ID_MAX_SIZE with '0' + "1234567890abcdef1234567890abcdef", // 32 characters - no padding done + "1234567890123456789012345678901234567890123456789012345678901234567890" // 64 characters - no padding + }; + // clang-format on + + /* + * Test : NULL input => no trace id generated + */ + nr_distributed_trace_set_trace_id(&dt, NULL, pad_trace_id); + tlib_pass_if_null("NULL trace id", dt.trace_id); + + /* + * Test : valid input => trace id generated + */ + for (long unsigned int i = 0; i < sizeof(t_input) / sizeof(t_input[0]); i++) { + const char* expected = t_input[i]; + if (pad_trace_id) { + expected = t_padded[i]; + } + nr_distributed_trace_set_trace_id(&dt, t_input[i], pad_trace_id); + tlib_pass_if_not_null("trace id is set", dt.trace_id); + tlib_pass_if_str_equal("trace id has correct value", dt.trace_id, expected); + nr_free(dt.trace_id); + } +} + tlib_parallel_info_t parallel_info = {.suggested_nthreads = 2, .state_size = 0}; void test_main(void* p NRUNUSED) { @@ -1707,4 +1747,6 @@ void test_main(void* p NRUNUSED) { test_create_trace_state_header(); test_distributed_trace_create_trace_parent_header(); + test_distributed_trace_set_trace_id(false); + test_distributed_trace_set_trace_id(true); } diff --git a/axiom/tests/test_txn.c b/axiom/tests/test_txn.c index 905189c2a..59b19f9b0 100644 --- a/axiom/tests/test_txn.c +++ b/axiom/tests/test_txn.c @@ -1705,6 +1705,7 @@ static void test_begin(void) { opts->max_segments = 0; opts->span_queue_batch_size = 1000; opts->span_queue_batch_timeout = 1 * NR_TIME_DIVISOR; + opts->distributed_tracing_pad_trace_id = false; app->rnd = nr_random_create(); nr_random_seed(app->rnd, 345345); @@ -5940,6 +5941,10 @@ static void test_create_w3c_traceparent_header(void) { nr_memset(&txn, 0, sizeof(nrtxn_t)); txn.options.span_events_enabled = true; + // default value for padding can be used for this test, because other + // test (test_distributed_trace_create_trace_parent_header) already + // covers using trace_id of different lengths when w3c header is created. + txn.options.distributed_tracing_pad_trace_id = false; txn.status.recording = true; txn.rnd = nr_random_create(); txn.status.recording = 1; @@ -5969,7 +5974,9 @@ static void test_create_w3c_traceparent_header(void) { /* * Test : valid string random guid */ - nr_distributed_trace_set_trace_id(txn.distributed_trace, "meatballs!"); + nr_distributed_trace_set_trace_id( + txn.distributed_trace, "meatballs!", + txn.options.distributed_tracing_pad_trace_id); actual = nr_txn_create_w3c_traceparent_header(&txn, segment); expected = "00-0000000000000000000000meatballs!-"; tlib_pass_if_not_null("random guid", nr_strstr(actual, expected)); @@ -6280,6 +6287,10 @@ static void test_txn_accept_distributed_trace_payload_w3c(void) { txn.app_connect_reply = nro_new_hash(); txn.unscoped_metrics = nrm_table_create(0); nro_set_hash_string(txn.app_connect_reply, "trusted_account_key", "123"); + // default value for padding can be used for this test, because other + // test (test_distributed_trace_create_trace_parent_header) already + // covers using trace_id of different lengths when w3c header is created. + txn.options.distributed_tracing_pad_trace_id = false; #define TEST_TXN_ACCEPT_DT_PAYLOAD_RESET \ txn.distributed_trace->inbound.set = 0; \ @@ -6725,7 +6736,9 @@ static void test_txn_accept_distributed_trace_payload_w3c(void) { TEST_TXN_ACCEPT_DT_PAYLOAD_RESET nr_distributed_trace_destroy(&txn.distributed_trace); txn.distributed_trace = nr_distributed_trace_create(); - nr_distributed_trace_set_trace_id(txn.distributed_trace, "35ff77"); + nr_distributed_trace_set_trace_id( + txn.distributed_trace, "35ff77", + txn.options.distributed_tracing_pad_trace_id); traceparent = nr_txn_create_w3c_traceparent_header(&txn, NULL); nr_free(traceparent); @@ -7525,6 +7538,7 @@ static void test_get_current_trace_id(void) { char* trace_id; nrtxn_t* txn; const char* txn_id; + const char* dt_trace_id; /* setup and start txn */ nr_memset(&app, 0, sizeof(app)); @@ -7540,7 +7554,7 @@ static void test_get_current_trace_id(void) { nr_txn_get_current_trace_id(NULL)); /* - * Test : Correct trace id + * Test : trace id == txn_id with default pad_trace_id setting - no padding */ txn_id = nr_txn_get_guid(txn); trace_id = nr_txn_get_current_trace_id(txn); @@ -7564,6 +7578,28 @@ static void test_get_current_trace_id(void) { nr_txn_get_current_trace_id(txn)); nr_txn_destroy(&txn); + + /* setup and start txn */ + nr_memset(&app, 0, sizeof(app)); + nr_memset(&opts, 0, sizeof(opts)); + app.state = NR_APP_OK; + opts.distributed_tracing_enabled = 1; + opts.distributed_tracing_pad_trace_id = true; + txn = nr_txn_begin(&app, &opts, NULL); + /* + * Test : trace id != txn_id with trace_id padding enabled + */ + txn_id = nr_txn_get_guid(txn); + trace_id = nr_txn_get_current_trace_id(txn); + dt_trace_id = nr_distributed_trace_get_trace_id(txn->distributed_trace); + tlib_fail_if_null("txn id", txn_id); + tlib_fail_if_str_equal("txn_id != trace_id", txn_id, trace_id); + tlib_pass_if_str_equal("txn_id = ltrim(trace_id)", txn_id, + trace_id + (nr_strlen(trace_id) - NR_GUID_SIZE)); + tlib_pass_if_str_equal("trace_id = dt_trace_id", trace_id, dt_trace_id); + nr_free(trace_id); + + nr_txn_destroy(&txn); } static void test_get_current_span_id(void) { diff --git a/tests/integration/distributed_tracing/newrelic/test_default_trace_id.php b/tests/integration/distributed_tracing/newrelic/test_default_trace_id.php new file mode 100644 index 000000000..e0e027972 --- /dev/null +++ b/tests/integration/distributed_tracing/newrelic/test_default_trace_id.php @@ -0,0 +1,30 @@ + 7000, infinite tracing NEEDS to be enabled; otherwise, the daemon will error out with the following type message: `Error: listener: closing connection: maximum message size exceeded, (2886388 > 2097152)` From 1291a76ff1281c200de07a230c329a4ab12ff8fd Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Tue, 6 Aug 2024 07:50:10 -0700 Subject: [PATCH 24/62] chore: Bump version to 11.1 (#945) --- VERSION | 2 +- axiom/nr_version.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 4a68b557e..68d8f15e2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.0.0 \ No newline at end of file +11.1.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 8f4a3646d..018770a1a 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -46,8 +46,9 @@ * wallflower 06May2024 (10.20) * xerophyllum 20May2024 (10.21) * yarrow 26Jun2024 (10.22) + * zinnia 30Jul2024 (11.0) */ -#define NR_CODENAME "zinnia" +#define NR_CODENAME "amethyst" const char* nr_version(void) { return NR_STR2(NR_VERSION); From a95eb5120aab89b7ea075adb9009fc11ee095610 Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Tue, 6 Aug 2024 12:46:56 -0400 Subject: [PATCH 25/62] fix(testing): Fixes count check for apdex metrics (#946) The current code for EXPECT_METRICS_EXIST would verify the count of any metric was >0 before passing the test. However, with apdex metrics the first field is not the count of metrics but the count of the number of times the transaction time was less than apdex_t. This change allows for the count to be 0 for apdex metrics. --- daemon/internal/newrelic/integration/test.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index 0f9342030..f80b3e986 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -544,7 +544,12 @@ func (t *Test) compareMetricsExist(harvest *newrelic.Harvest) { actualCount := int64(math.Round(actualData.([]interface{})[0].(float64))) metricPasses := false - if (count == -1 && actualCount > 0) || (actualCount == count) { + + // apdex metrics can have a count of 0 since the count field is + // actually the "satisfied" count, not a total count of metric + // as it is for other types of metrics + apdex_metric := strings.HasPrefix(expected, "Apdex/") + if (count == -1 && (apdex_metric || actualCount > 0)) || (actualCount == count) { metricPasses = true } From 010f1f19f4a32bd19b58e113bd98b0accd76ea63 Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:41:19 -0400 Subject: [PATCH 26/62] chore(agent): Changes code to use NR string routines (#949) Switches to use nr_strlcpy and nr_strcpy instead of libc versions for better platform generality. --- agent/lib_aws_sdk_php.c | 4 ++-- axiom/nr_distributed_trace.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c index d9055690d..cff08dbfd 100644 --- a/agent/lib_aws_sdk_php.c +++ b/agent/lib_aws_sdk_php.c @@ -88,9 +88,9 @@ void nr_lib_aws_sdk_php_add_supportability_service_metric( } cp = buf; - strcpy(cp, PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX); + nr_strcpy(cp, PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX); cp += PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX_LEN - 1; - strlcpy(cp, service_name, MAX_AWS_SERVICE_NAME_LEN); + nr_strlcpy(cp, service_name, MAX_AWS_SERVICE_NAME_LEN); nrm_force_add(NRPRG(txn) ? NRTXN(unscoped_metrics) : 0, buf, 0); } diff --git a/axiom/nr_distributed_trace.c b/axiom/nr_distributed_trace.c index bdc587e24..25fcd27d5 100644 --- a/axiom/nr_distributed_trace.c +++ b/axiom/nr_distributed_trace.c @@ -497,7 +497,7 @@ void nr_distributed_trace_set_trace_id(nr_distributed_trace_t* dt, for (int i = 0; i < padding; i++) { dest[i] = '0'; } - strcpy(dest + padding, trace_id); + nr_strcpy(dest + padding, trace_id); dt->trace_id = dest; } else { dt->trace_id = nr_strdup(trace_id); From 0ba870b7b7f434884c9f863668cc53f9e7c0de02 Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:47:04 -0400 Subject: [PATCH 27/62] feat(agent): Adds supportability metrics for PHP and agent version (#947) Adds supportability metrics for the agent and PHP version. I did clean up some ZTS macros as well but I think it is obvious what is a real change and what isnt. --------- Co-authored-by: Michal Nowacki --- agent/Makefile.frag | 12 +- agent/php_newrelic.c | 5 +- agent/php_txn.c | 45 ++++++ agent/php_txn_private.h | 29 ++++ agent/tests/test_txn.c | 136 +++++++++++++++++- daemon/cmd/integration_runner/main.go | 8 ++ daemon/internal/newrelic/integration/test.go | 2 + daemon/internal/newrelic/integration/util.go | 33 +++++ .../test_php_and_agent_version_metrics.php | 27 ++++ 9 files changed, 290 insertions(+), 7 deletions(-) create mode 100644 daemon/internal/newrelic/integration/util.go create mode 100644 tests/integration/supportability/test_php_and_agent_version_metrics.php diff --git a/agent/Makefile.frag b/agent/Makefile.frag index def094486..1cfe1606c 100644 --- a/agent/Makefile.frag +++ b/agent/Makefile.frag @@ -49,13 +49,17 @@ $(PHP_MODULES): .libs/deps.mk newrelic.la: $(PHP_AXIOM)/libaxiom.a # -# The version number is needed by php_newrelic.c as a static string literal, +# The version number is needed by several source files as a static string literal, # so it can be placed in the module entry. # include ../make/version.mk + php_newrelic.lo: CPPFLAGS += -DNR_VERSION="\"$(AGENT_VERSION)\"" php_newrelic.lo: ../VERSION +php_txn.lo: CPPFLAGS += -DNR_VERSION="\"$(AGENT_VERSION)\"" +php_txn.lo: ../VERSION + # # Unit tests! # @@ -261,6 +265,12 @@ ifeq (/opt/nr/lamp/lib,$(findstring /opt/nr/lamp/lib,$(PHP_EMBED_LIBRARY))) endif endif +# +# Need agent version for test_txn +# +tests/test_txn.o: EXTRA_CFLAGS += -DNR_VERSION="\"$(AGENT_VERSION)\"" +tests/test_txn.o: ../VERSION + # # Used when linking test binaries. # diff --git a/agent/php_newrelic.c b/agent/php_newrelic.c index 210c04428..912dff365 100644 --- a/agent/php_newrelic.c +++ b/agent/php_newrelic.c @@ -120,8 +120,8 @@ ZEND_BEGIN_ARG_INFO_EX(newrelic_arginfo_void, 0, 0, 0) ZEND_END_ARG_INFO() #endif /* PHP 8.0+ */ -ZEND_BEGIN_ARG_INFO_EX(newrelic_get_request_metadata_arginfo, 0, 0, 0) -ZEND_ARG_INFO(0, transport) +ZEND_BEGIN_ARG_INFO_EX(newrelic_get_request_metadata_arginfo, 0, 0, 0) +ZEND_ARG_INFO(0, transport) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(newrelic_add_custom_parameter_arginfo, 0, 0, 2) @@ -223,7 +223,6 @@ ZEND_BEGIN_ARG_INFO_EX(newrelic_set_user_id_arginfo, 0, 0, 1) ZEND_ARG_INFO(0, uuid) ZEND_END_ARG_INFO() - ZEND_BEGIN_ARG_INFO_EX(newrelic_set_error_group_callback_arginfo, 0, 0, 1) ZEND_ARG_INFO(0, callback) ZEND_END_ARG_INFO() diff --git a/agent/php_txn.c b/agent/php_txn.c index cdfa1269f..785007b41 100644 --- a/agent/php_txn.c +++ b/agent/php_txn.c @@ -669,6 +669,48 @@ static void nr_php_txn_send_metrics_once(nrtxn_t* txn TSRMLS_DC) { #undef FMT_BOOL } +void nr_php_txn_create_agent_version_metric(nrtxn_t* txn) { + if (NULL == txn) { + return; + } + + nrm_force_add(NRTXN(unscoped_metrics), + "Supportability/PHP/AgentVersion/" NR_VERSION, 0); +} + +void nr_php_txn_create_php_version_metric(nrtxn_t* txn, const char* version) { + char* metric_name = NULL; + + if (NULL == txn) { + return; + } + + if (nr_strempty(version)) { + return; + } + + metric_name = nr_formatf("Supportability/PHP/Version/%s", version); + nrm_force_add(NRTXN(unscoped_metrics), metric_name, 0); + nr_free(metric_name); +} + +void nr_php_txn_create_agent_php_version_metrics(nrtxn_t* txn) { + char* version = NULL; + + if (NULL == txn) { + return; + } + nr_php_txn_create_agent_version_metric(txn); + + if (!nr_strempty(NR_PHP_PROCESS_GLOBALS(php_version))) { + version = NR_PHP_PROCESS_GLOBALS(php_version); + } else { + version = "unknown"; + } + + nr_php_txn_create_php_version_metric(txn, version); +} + nr_status_t nr_php_txn_begin(const char* appnames, const char* license TSRMLS_DC) { nrtxnopt_t opts; @@ -1120,6 +1162,9 @@ nr_status_t nr_php_txn_end(int ignoretxn, int in_post_deactivate TSRMLS_DC) { "Supportability/execute/allocated_segment_count", nr_txn_allocated_segment_count(txn)); + /* Agent and PHP version metrics*/ + nr_php_txn_create_agent_php_version_metrics(txn); + /* Add CPU and memory metrics */ nr_php_resource_usage_sampler_end(TSRMLS_C); diff --git a/agent/php_txn_private.h b/agent/php_txn_private.h index 743adc06f..bf49eb107 100644 --- a/agent/php_txn_private.h +++ b/agent/php_txn_private.h @@ -36,3 +36,32 @@ nrobj_t* nr_php_txn_get_supported_security_policy_settings(); * Params : 1. The current transaction. */ extern void nr_php_txn_handle_fpm_error(nrtxn_t* txn TSRMLS_DC); + +/* + * Purpose : Create and record metrics for the PHP and agent versions. + * + * Params : 1. The current transaction. + * + * Notes : This function relies on NR_VERSION and the value of + * NRPRG(php_version) to create the metrics. + */ +extern void nr_php_txn_create_agent_php_version_metrics(nrtxn_t* txn); + +/* + * Purpose : Create and record metric for a specific agent version. + * + * Params : 1. The current transaction. + * + * Notes : This function relies on the value of the macro NR_VERSION + * to create. + */ +extern void nr_php_txn_create_agent_version_metric(nrtxn_t* txn); + +/* + * Purpose : Create and record metric for a specific PHP version. + * + * Params : 1. The current transaction. + * 2. The PHP agent version. + */ +extern void nr_php_txn_create_php_version_metric(nrtxn_t* txn, + const char* version); diff --git a/agent/tests/test_txn.c b/agent/tests/test_txn.c index 3209e3c27..50c4ff8bc 100644 --- a/agent/tests/test_txn.c +++ b/agent/tests/test_txn.c @@ -161,6 +161,133 @@ static void test_max_segments_config_values(TSRMLS_D) { tlib_php_request_end(); } +#define PHP_VERSION_METRIC_BASE "Supportability/PHP/Version" +#define AGENT_VERSION_METRIC_BASE "Supportability/PHP/AgentVersion" + +static void test_create_php_version_metric() { + nrtxn_t* txn; + int count; + + tlib_php_request_start(); + txn = NRPRG(txn); + + count = nrm_table_size(txn->unscoped_metrics); + + /* Test invalid values are properly handled */ + nr_php_txn_create_php_version_metric(NULL, NULL); + tlib_pass_if_int_equal("PHP version metric shouldnt be created 1", count, + nrm_table_size(txn->unscoped_metrics)); + + nr_php_txn_create_php_version_metric(txn, NULL); + tlib_pass_if_int_equal("PHP version metric shouldnt be created 2", count, + nrm_table_size(txn->unscoped_metrics)); + + nr_php_txn_create_php_version_metric(NULL, "7.4.0"); + tlib_pass_if_int_equal("PHP version metric shouldnt be created 3", count, + nrm_table_size(txn->unscoped_metrics)); + + nr_php_txn_create_php_version_metric(txn, ""); + tlib_pass_if_int_equal("PHP version metric shouldnt be created 4", count, + nrm_table_size(txn->unscoped_metrics)); + + /* test valid values */ + nr_php_txn_create_php_version_metric(txn, "7.4.0"); + tlib_pass_if_int_equal("PHP version metric should be create", count + 1, + nrm_table_size(txn->unscoped_metrics)); + + const nrmetric_t* metric + = nrm_find(txn->unscoped_metrics, PHP_VERSION_METRIC_BASE "/7.4.0"); + const char* metric_name = nrm_get_name(txn->unscoped_metrics, metric); + + tlib_pass_if_not_null("PHP version metric found", metric); + tlib_pass_if_str_equal("PHP version metric name check", metric_name, + PHP_VERSION_METRIC_BASE "/7.4.0"); + + tlib_php_request_end(); +} + +static void test_create_agent_version_metric() { + nrtxn_t* txn; + int count; + + tlib_php_request_start(); + txn = NRPRG(txn); + + count = nrm_table_size(txn->unscoped_metrics); + + /* Test invalid values are properly handled */ + nr_php_txn_create_agent_version_metric(NULL); + tlib_pass_if_int_equal("Agent version metric shouldnt be created - txn is NULL", count, + nrm_table_size(txn->unscoped_metrics)); + + /* Test valid values */ + nr_php_txn_create_agent_version_metric(txn); + tlib_pass_if_int_equal("Agent version metric should be created - txn is not NULL", count + 1, + nrm_table_size(txn->unscoped_metrics)); + + const nrmetric_t* metric + = nrm_find(txn->unscoped_metrics, AGENT_VERSION_METRIC_BASE "/" NR_VERSION); + const char* metric_name = nrm_get_name(txn->unscoped_metrics, metric); + + tlib_pass_if_not_null("Agent version metric found", metric); + tlib_pass_if_str_equal("Agent version metric name check", metric_name, + AGENT_VERSION_METRIC_BASE "/" NR_VERSION); + + tlib_php_request_end(); +} + +static void test_create_agent_php_version_metrics() { + nrtxn_t* txn; + + /* + * Test : Create agent PHP version metrics. + */ + tlib_php_request_start(); + txn = NRPRG(txn); + + zval* expected_php_zval = tlib_php_request_eval_expr("phpversion();"); + + char* php_version_name = nr_formatf(PHP_VERSION_METRIC_BASE "/%s", + Z_STRVAL_P(expected_php_zval)); + + nr_php_zval_free(&expected_php_zval); + + char* agent_version_name + = nr_formatf(AGENT_VERSION_METRIC_BASE "/%s", NR_VERSION); + + nr_php_txn_create_agent_php_version_metrics(txn); + + /* Test the PHP version metric creation */ + const nrmetric_t* metric = nrm_find(txn->unscoped_metrics, php_version_name); + const char* metric_name = nrm_get_name(txn->unscoped_metrics, metric); + + tlib_pass_if_not_null("happy path: PHP version metric created", metric); + tlib_pass_if_not_null("happy path: PHP version metric name created", + metric_name); + + tlib_pass_if_str_equal("happy path: PHP version metric name check", + metric_name, php_version_name); + + /* Test the agent version metric creation*/ + metric = nrm_find(txn->unscoped_metrics, agent_version_name); + metric_name = nrm_get_name(txn->unscoped_metrics, metric); + + tlib_pass_if_not_null("happy path: Agent version metric created", metric); + tlib_pass_if_not_null("happy path: Agent version metric name created", + metric_name); + + tlib_pass_if_str_equal("happy path: Agent version metric name check", + metric_name, agent_version_name); + + nr_free(agent_version_name); + nr_free(php_version_name); + + tlib_php_request_end(); +} + +#undef PHP_VERSION_METRIC_BASE +#undef AGENT_VERSION_METRIC_BASE + tlib_parallel_info_t parallel_info = {.suggested_nthreads = 1, .state_size = 0}; void test_main(void* p NRUNUSED) { @@ -175,8 +302,11 @@ void test_main(void* p NRUNUSED) { tlib_php_engine_create( "newrelic.transaction_events.attributes.include=request.uri" PTSRMLS_CC); - test_handle_fpm_error(TSRMLS_C); - test_max_segments_config_values(TSRMLS_C); + test_handle_fpm_error(); + test_max_segments_config_values(); + test_create_php_version_metric(); + test_create_agent_version_metric(); + test_create_agent_php_version_metrics(); - tlib_php_engine_destroy(TSRMLS_C); + tlib_php_engine_destroy(); } diff --git a/daemon/cmd/integration_runner/main.go b/daemon/cmd/integration_runner/main.go index 40f472af4..f1a65a402 100644 --- a/daemon/cmd/integration_runner/main.go +++ b/daemon/cmd/integration_runner/main.go @@ -376,6 +376,14 @@ func main() { // Env vars common to all tests. ctx.Env["EXTERNAL_HOST"] = externalHost + ctx.Env["PHP_VERSION"] = integration.GetPHPVersion() + + agent_extension, ok := ctx.Settings["extension"] + if !ok { + agent_extension = "newrelic.so" + } + ctx.Env["AGENT_VERSION"] = integration.GetAgentVersion(agent_extension) + handler, err := startDaemon("unix", *flagPort, flagSecurityToken.String(), flagSecuityPolicies.String()) if err != nil { fmt.Fprintln(os.Stderr, err) diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index f80b3e986..36c21472a 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -756,6 +756,8 @@ var ( regexp.MustCompile(`^Supportability\/InstrumentedFunction`), regexp.MustCompile(`^Supportability\/TxnData\/.*`), regexp.MustCompile(`^Supportability/C/NewrelicVersion/.*`), + regexp.MustCompile(`^Supportability/PHP/Version/.*`), + regexp.MustCompile(`^Supportability/PHP/AgentVersion/.*`), } ) diff --git a/daemon/internal/newrelic/integration/util.go b/daemon/internal/newrelic/integration/util.go new file mode 100644 index 000000000..25ab9462f --- /dev/null +++ b/daemon/internal/newrelic/integration/util.go @@ -0,0 +1,33 @@ +// +// Copyright 2020 New Relic Corporation. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// + +package integration + +import ( + "fmt" + "os/exec" +) + +func GetPHPVersion() string { + cmd := exec.Command("php", "-r", "echo PHP_VERSION;") + + output, err := cmd.Output() + if err != nil { + fmt.Printf("Failed to get PHP version: %v\n", err) + return "failed" + } + + return string(output) +} + +func GetAgentVersion(agent_extension string) string { + cmd := exec.Command("php", "-d", "extension="+agent_extension, "-r", "echo phpversion('newrelic');") + + output, err := cmd.Output() + if err != nil { + return fmt.Errorf("Failed to get agent version: %v", err).Error() + } + return string(output) +} diff --git a/tests/integration/supportability/test_php_and_agent_version_metrics.php b/tests/integration/supportability/test_php_and_agent_version_metrics.php new file mode 100644 index 000000000..bc63110f8 --- /dev/null +++ b/tests/integration/supportability/test_php_and_agent_version_metrics.php @@ -0,0 +1,27 @@ + + Date: Mon, 26 Aug 2024 15:36:19 -0400 Subject: [PATCH 28/62] chore: Bumps version to 11.2.0 (#952) --- VERSION | 2 +- axiom/nr_version.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 68d8f15e2..b85c6c7b0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.1.0 +11.2.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 018770a1a..e608278e9 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -23,7 +23,6 @@ /* * Current version naming scheme is flowers * - * cosmos 29Jun2022 (10.0) * dahlia 19Sep2022 (10.1) * echinacea 03Oct2022 (10.2) * freesia 03Nov2022 (10.3) @@ -47,8 +46,9 @@ * xerophyllum 20May2024 (10.21) * yarrow 26Jun2024 (10.22) * zinnia 30Jul2024 (11.0) + * amethyst 26Aug2024 (11.1) */ -#define NR_CODENAME "amethyst" +#define NR_CODENAME "bowenite" const char* nr_version(void) { return NR_STR2(NR_VERSION); From 8a5c2f8b7e559a86f357052ba9b93772b8a317ba Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:30:23 -0400 Subject: [PATCH 29/62] fix(testing): Handles Apdex metrics count correctly (#957) The existing code did not handle an Apdex metric correctly if a count of "1" was specified. It only worked if no count was specified. This change allows either form to work. --- daemon/internal/newrelic/integration/test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index 36c21472a..631be4615 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -549,7 +549,7 @@ func (t *Test) compareMetricsExist(harvest *newrelic.Harvest) { // actually the "satisfied" count, not a total count of metric // as it is for other types of metrics apdex_metric := strings.HasPrefix(expected, "Apdex/") - if (count == -1 && (apdex_metric || actualCount > 0)) || (actualCount == count) { + if (apdex_metric || (count == -1 && actualCount > 0)) || (actualCount == count) { metricPasses = true } From 108af43cf58fb9786f6526a4a19671db188d95e4 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Tue, 10 Sep 2024 09:37:00 -0700 Subject: [PATCH 30/62] ci: fix test-pull-request workflow (#961) [`actions/upload-artifacts@v4.4.0`](https://github.com/actions/upload-artifact/releases/tag/v4.4.0) includes a breaking change of that causes hidden directories and files not being uploaded. Since code coverage artifacts are in `agent/.libs` directory, this functionality needs to disabled. Set `include-hidden-files` to true when uploading code coverage artifacts. --- .github/workflows/test-agent.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test-agent.yml b/.github/workflows/test-agent.yml index 78a27ee41..328be3a39 100644 --- a/.github/workflows/test-agent.yml +++ b/.github/workflows/test-agent.yml @@ -193,6 +193,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: agent.gcov-${{matrix.platform}}-${{matrix.arch}}-${{matrix.php}} + include-hidden-files: true path: php-agent/agent/.libs/*.gc* integration-tests: needs: [daemon-unit-tests, agent-unit-test] From 79e86d37e3cb4d911610d91d92212faf39048f60 Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:00:21 -0500 Subject: [PATCH 31/62] ci: fix issue response (#956) Fix gh command failure when no github repository can be found. --- .github/workflows/issue-comment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/issue-comment.yml b/.github/workflows/issue-comment.yml index cd72f7874..ba345e98a 100644 --- a/.github/workflows/issue-comment.yml +++ b/.github/workflows/issue-comment.yml @@ -25,4 +25,4 @@ jobs: steps: - name: respond to issue run: | - gh issue comment ${{ inputs.issue-number }} --body "${{ inputs.message }}" + gh issue -R ${{ github.repository }} comment ${{ inputs.issue-number }} --body "${{ inputs.message }}" From 8de09b010d060c22e16bf0583ac5cc25ecaff7db Mon Sep 17 00:00:00 2001 From: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:40:42 -0400 Subject: [PATCH 32/62] fix(agent): Fixes newrelic_notice_error() API for PHP 8+ (#960) Starting with PHP 8.0 the `set_error_handler()` callback function signature drops the `$errcontext` final parameter so it only contains 4 parameters. This caused using `newrelic_notice_error()` as a callback handler for PHP 8+ to not work as the API call did not accept only 4 arguments. This PR adds support for this function signature. There are also numerous tests added that will hopefully caught this kind of issue in the future. --------- Co-authored-by: Amber Sistla Co-authored-by: Hitesh Ahuja <108540135+hahuja2@users.noreply.github.com> --- agent/php_api.c | 31 +++- .../api/notice_error/test_bad_inputs.php | 13 +- .../test_good_1_arg_exception.php | 133 ++++++++++++++++ .../test_good_1_arg_exception_handler.php | 150 ++++++++++++++++++ .../notice_error/test_good_1_arg_string.php | 131 +++++++++++++++ .../api/notice_error/test_good_2_args.php | 129 +++++++++++++++ .../api/notice_error/test_good_4_args.php | 131 +++++++++++++++ .../test_good_4_args_error_handler.php | 149 +++++++++++++++++ .../api/notice_error/test_good_5_args.php | 130 +++++++++++++++ .../test_good_5_args_error_handler.php | 149 +++++++++++++++++ 10 files changed, 1141 insertions(+), 5 deletions(-) create mode 100644 tests/integration/api/notice_error/test_good_1_arg_exception.php create mode 100644 tests/integration/api/notice_error/test_good_1_arg_exception_handler.php create mode 100644 tests/integration/api/notice_error/test_good_1_arg_string.php create mode 100644 tests/integration/api/notice_error/test_good_2_args.php create mode 100644 tests/integration/api/notice_error/test_good_4_args.php create mode 100644 tests/integration/api/notice_error/test_good_4_args_error_handler.php create mode 100644 tests/integration/api/notice_error/test_good_5_args.php create mode 100644 tests/integration/api/notice_error/test_good_5_args_error_handler.php diff --git a/agent/php_api.c b/agent/php_api.c index f9dc5c903..865344442 100644 --- a/agent/php_api.c +++ b/agent/php_api.c @@ -58,10 +58,30 @@ void nr_php_api_add_supportability_metric(const char* name TSRMLS_DC) { /* * Purpose : (New Relic API) Pretend that there is an error at this exact spot. - * Useful for business logic errors. newrelic_notice_error($errstr) + * Useful for business logic errors. + * - newrelic_notice_error($errstr) + * - $errstr : string : The error message to record * - newrelic_notice_error($exception) + * - $exception : object : The exception to use to record the exception + * NOTE: This version is compatible with being a callback for set_exception_handler() * - newrelic_notice_error($errstr,$exception) + * - $errstr : string : The error message to record + * - $exception : object : The exception to use to record the exception + * NOTE: The $errstr value is ignored! Started with agent version 4.23 + * - newrelic_notice_error($errno,$errstr,$fname,$line_nr) + * - $errno : int : The error number + * - $errstr : string : The error message + * - $fname : string : The filename where the error occurred + * - $line_nr : int : The line number where the error occurred + * NOTE: This version is compatible with being a callback for set_error_handler() for PHP 8+ * - newrelic_notice_error($errno,$errstr,$fname,$line_nr,$ctx) + * - $errno : int : The error number + * - $errstr : string : The error message + * - $fname : string : The filename where the error occurred + * - $line_nr : int : The line number where the error occurred + * - $ctx : array : The context of the error + * NOTE: This version is compatible with being a callback for set_error_handler() for PHP < 8 + * The $ctx is ignored! */ #ifdef TAGS void zif_newrelic_notice_error(void); /* ctags landing pad only */ @@ -141,10 +161,15 @@ PHP_FUNCTION(newrelic_notice_error) { } break; + case 4: case 5: + /* PHP 8+ will only pass the first 4 parameters so the 5th parameter is + * declared to be optional. Also this parameter is completely ignored + * so it doesn't matter if it is passed or not. + */ if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "lsslz!", + ZEND_NUM_ARGS() TSRMLS_CC, "lssl|z!", &ignore1, &errormsgstr, &errormsglen, &ignore2, &ignore3, &ignore4, &ignore5)) { nrl_debug(NRL_API, "newrelic_notice_error: invalid five arguments"); @@ -153,7 +178,7 @@ PHP_FUNCTION(newrelic_notice_error) { break; default: - nrl_debug(NRL_API, "newrelic_notice_error: invalid number of arguments"); + nrl_debug(NRL_API, "newrelic_notice_error: invalid number of arguments: %d", ZEND_NUM_ARGS()); RETURN_NULL(); } diff --git a/tests/integration/api/notice_error/test_bad_inputs.php b/tests/integration/api/notice_error/test_bad_inputs.php index 8f72e2d25..75d582884 100644 --- a/tests/integration/api/notice_error/test_bad_inputs.php +++ b/tests/integration/api/notice_error/test_bad_inputs.php @@ -15,6 +15,9 @@ ok - 2 args ok - 3 args ok - 4 args +ok - 4 args +ok - 4 args +ok - 4 args ok - 5 args ok - 6 args */ @@ -32,9 +35,15 @@ tap_equal(null, newrelic_notice_error("", 42), "2 args"); tap_equal(null, newrelic_notice_error("", array()), "2 args"); -// Three and four argument forms are not allowed. +// Three argument forms are not allowed. tap_equal(null, newrelic_notice_error(42, "message", "file"), "3 args"); -tap_equal(null, newrelic_notice_error(42, "message", "file", __LINE__), "4 args"); + +// Four argument form requires integer, string, string, integer +// This is like the five argument form but for PHP 8+ where the context is not supplied +tap_equal(null, newrelic_notice_error("", "message", "file", __LINE__), "4 args"); +tap_equal(null, newrelic_notice_error(42, array(), "file", __LINE__), "4 args"); +tap_equal(null, newrelic_notice_error("", "message", array(), __LINE__), "4 args"); +tap_equal(null, newrelic_notice_error("", "message", "file", ""), "4 args"); // Five argument form requires second arg to be convertible to a string. tap_equal(null, newrelic_notice_error("", curl_init()), "5 args"); diff --git a/tests/integration/api/notice_error/test_good_1_arg_exception.php b/tests/integration/api/notice_error/test_good_1_arg_exception.php new file mode 100644 index 000000000..c71750439 --- /dev/null +++ b/tests/integration/api/notice_error/test_good_1_arg_exception.php @@ -0,0 +1,133 @@ + Date: Thu, 19 Sep 2024 12:46:17 -0700 Subject: [PATCH 33/62] security(daemon): upgrade golang to 1.23.1 (#964) --- daemon/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/go.mod b/daemon/go.mod index a7354c622..5fb45e76e 100644 --- a/daemon/go.mod +++ b/daemon/go.mod @@ -1,7 +1,7 @@ module github.com/newrelic/newrelic-php-agent/daemon go 1.21 -toolchain go1.22.5 +toolchain go1.23.1 require ( github.com/golang/protobuf v1.5.3 From 498b8f39dca6cf886a5d9b41d74501011ba6c586 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Thu, 26 Sep 2024 16:46:59 -0400 Subject: [PATCH 34/62] feat(agent): use composer for vuln mgmt package info (#962) If possible, use Composer's runtime API to collect information about PHP packages used by the application for New Relic Vulnerability Management. This feature is disabled by default and can be enabled by setting `newrelic.vulnerability_management.composer_detection.enabled` to `true`. --------- Co-authored-by: Hitesh Ahuja Co-authored-by: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Co-authored-by: Hitesh Ahuja <108540135+hahuja2@users.noreply.github.com> Co-authored-by: Amber Sistla Co-authored-by: Michael Fulbright <89205663+mfulb@users.noreply.github.com> --- agent/Makefile.frag | 1 + agent/config.m4 | 3 +- agent/fw_drupal.c | 10 + agent/fw_drupal8.c | 5 +- agent/fw_hooks.h | 1 + agent/fw_laminas3.c | 7 +- agent/fw_laravel.c | 5 +- agent/fw_lumen.c | 8 +- agent/fw_slim.c | 4 +- agent/fw_support.c | 26 +- agent/fw_support.h | 5 +- agent/fw_symfony4.c | 7 +- agent/fw_wordpress.c | 8 +- agent/fw_yii.c | 9 + agent/lib_aws_sdk_php.c | 6 +- agent/lib_composer.c | 272 ++++++++++++++++++ agent/lib_doctrine2.c | 7 +- agent/lib_guzzle4.c | 7 +- agent/lib_guzzle6.c | 22 +- agent/lib_mongodb.c | 7 +- agent/lib_monolog.c | 7 +- agent/lib_phpunit.c | 7 +- agent/lib_predis.c | 6 +- agent/php_execute.c | 37 ++- agent/php_newrelic.h | 2 + agent/php_nrini.c | 9 + agent/php_txn.c | 49 ++++ agent/php_txn_private.h | 21 ++ agent/scripts/newrelic.ini.template | 9 + agent/tests/test_fw_support.c | 136 +++++++-- agent/tests/test_lib_aws_sdk_php.c | 107 +++---- agent/tests/test_php_txn.c | 268 +++++++++++++++++ axiom/nr_php_packages.c | 49 +++- axiom/nr_php_packages.h | 77 ++++- axiom/nr_txn.c | 43 ++- axiom/nr_txn.h | 55 +++- axiom/tests/.gitignore | 1 + axiom/tests/test_php_packages.c | 181 +++++++++++- axiom/tests/test_txn.c | 128 +++++++++ .../newrelic/integration/php_packages.go | 66 +++-- daemon/internal/newrelic/integration/test.go | 72 ++++- .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 32 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 31 ++ .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 40 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 31 ++ .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 40 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 39 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 31 ++ .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 42 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 31 ++ .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 39 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 31 ++ .../vendor/autoload.php | 12 + .../integration/autoloader/composer-show.php | 26 ++ .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 32 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 36 +++ .../vendor/symfony/http-kernel/HttpKernel.php | 12 + .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 32 +++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 36 +++ .../src/Illuminate/Foundation/Application.php | 25 ++ .../vendor/autoload.php | 12 + .../vendor/composer/InstalledVersions.php | 51 ++++ .../vendor/composer/autoload_real.php | 9 + .../vendor/composer/installed.php | 44 +++ .../src/Illuminate/Foundation/Application.php | 25 ++ ...est_autoloader_with_broken_composer_00.php | 32 +++ ...est_autoloader_with_broken_composer_01.php | 32 +++ ...est_autoloader_with_broken_composer_02.php | 32 +++ ...test_autoloader_with_composer_disabled.php | 28 ++ .../test_autoloader_with_composer_enabled.php | 29 ++ ...ser_enabled_package_detection_disabled.php | 30 ++ ...utoloader_with_composer_throwing_error.php | 34 +++ ...oader_with_composer_throwing_exception.php | 34 +++ ...t_autoloader_without_composer_disabled.php | 23 ++ ...st_autoloader_without_composer_enabled.php | 27 ++ .../test_packages_with_broken_composer_00.php | 40 +++ .../test_packages_with_broken_composer_01.php | 41 +++ .../test_packages_with_broken_composer_02.php | 44 +++ .../logging/monolog2/test_monolog_basic.php | 4 +- .../logging/monolog2/test_monolog_cat.php | 4 +- .../monolog2/test_monolog_context_simple.php | 2 +- ...test_monolog_decoration_and_forwarding.php | 4 +- .../monolog2/test_monolog_disable_metrics.php | 4 +- .../monolog2/test_monolog_drop_empty.php | 4 +- .../test_monolog_large_message_limit.php | 4 +- ...test_monolog_large_message_limit_drops.php | 4 +- .../test_monolog_limit_log_events.php | 4 +- .../test_monolog_limit_zero_events.php | 4 +- ...log_events_max_samples_stored_invalid1.php | 4 +- ...log_events_max_samples_stored_invalid2.php | 4 +- ...log_events_max_samples_stored_invalid3.php | 4 +- ...log_events_max_samples_stored_invalid4.php | 4 +- .../test_monolog_log_level_filter.php | 4 +- .../test_monolog_log_level_filter_invalid.php | 4 +- .../logging/monolog3/test_monolog_basic.php | 4 +- .../logging/monolog3/test_monolog_cat.php | 4 +- .../monolog3/test_monolog_context_simple.php | 2 +- ...test_monolog_decoration_and_forwarding.php | 4 +- .../monolog3/test_monolog_disable_metrics.php | 4 +- .../monolog3/test_monolog_drop_empty.php | 4 +- .../test_monolog_large_message_limit.php | 4 +- ...test_monolog_large_message_limit_drops.php | 4 +- .../test_monolog_limit_log_events.php | 4 +- .../test_monolog_limit_zero_events.php | 4 +- ...log_events_max_samples_stored_invalid1.php | 4 +- ...log_events_max_samples_stored_invalid2.php | 4 +- ...log_events_max_samples_stored_invalid3.php | 4 +- ...log_events_max_samples_stored_invalid4.php | 4 +- .../test_monolog_log_level_filter.php | 4 +- .../test_monolog_log_level_filter_invalid.php | 4 +- 126 files changed, 2972 insertions(+), 235 deletions(-) create mode 100644 agent/lib_composer.c create mode 100644 agent/tests/test_php_txn.c create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-00/vendor/autoload.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-00/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-00/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-00/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-01/vendor/autoload.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-01/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-01/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-01/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-02/vendor/autoload.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-02/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/autoload-with-broken-composer-02/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-error/vendor/autoload.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-error/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-error/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-error/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/autoload.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/autoload-with-composer/vendor/autoload.php create mode 100644 tests/integration/autoloader/autoload-with-composer/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/autoload-with-composer/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/autoload-with-composer/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/autoload-without-composer/vendor/autoload.php create mode 100644 tests/integration/autoloader/composer-show.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-00/vendor/autoload.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-00/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-00/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-00/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-00/vendor/symfony/http-kernel/HttpKernel.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-01/vendor/autoload.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-01/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-01/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-01/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-01/vendor/laravel/framework/src/Illuminate/Foundation/Application.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-02/vendor/autoload.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-02/vendor/composer/InstalledVersions.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-02/vendor/composer/autoload_real.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-02/vendor/composer/installed.php create mode 100644 tests/integration/autoloader/packages-with-broken-composer-02/vendor/laravel/framework/src/Illuminate/Foundation/Application.php create mode 100644 tests/integration/autoloader/test_autoloader_with_broken_composer_00.php create mode 100644 tests/integration/autoloader/test_autoloader_with_broken_composer_01.php create mode 100644 tests/integration/autoloader/test_autoloader_with_broken_composer_02.php create mode 100644 tests/integration/autoloader/test_autoloader_with_composer_disabled.php create mode 100644 tests/integration/autoloader/test_autoloader_with_composer_enabled.php create mode 100644 tests/integration/autoloader/test_autoloader_with_composer_enabled_package_detection_disabled.php create mode 100644 tests/integration/autoloader/test_autoloader_with_composer_throwing_error.php create mode 100644 tests/integration/autoloader/test_autoloader_with_composer_throwing_exception.php create mode 100644 tests/integration/autoloader/test_autoloader_without_composer_disabled.php create mode 100644 tests/integration/autoloader/test_autoloader_without_composer_enabled.php create mode 100644 tests/integration/autoloader/test_packages_with_broken_composer_00.php create mode 100644 tests/integration/autoloader/test_packages_with_broken_composer_01.php create mode 100644 tests/integration/autoloader/test_packages_with_broken_composer_02.php diff --git a/agent/Makefile.frag b/agent/Makefile.frag index 1cfe1606c..648fc84b3 100644 --- a/agent/Makefile.frag +++ b/agent/Makefile.frag @@ -107,6 +107,7 @@ TEST_BINARIES = \ tests/test_php_minit \ tests/test_php_stack \ tests/test_php_stacked_segment \ + tests/test_php_txn \ tests/test_php_wrapper \ tests/test_predis \ tests/test_redis \ diff --git a/agent/config.m4 b/agent/config.m4 index a77122c37..ee0859e30 100644 --- a/agent/config.m4 +++ b/agent/config.m4 @@ -230,7 +230,8 @@ if test "$PHP_NEWRELIC" = "yes"; then fw_zend2.c fw_zend.c" LIBRARIES="lib_aws_sdk_php.c lib_monolog.c lib_doctrine2.c lib_guzzle3.c \ lib_guzzle4.c lib_guzzle6.c lib_guzzle_common.c \ - lib_mongodb.c lib_phpunit.c lib_predis.c lib_zend_http.c" + lib_mongodb.c lib_phpunit.c lib_predis.c lib_zend_http.c \ + lib_composer.c" PHP_NEW_EXTENSION(newrelic, $FRAMEWORKS $LIBRARIES $NEWRELIC_AGENT, $ext_shared,, \\$(NEWRELIC_CFLAGS)) PHP_SUBST(NEWRELIC_CFLAGS) diff --git a/agent/fw_drupal.c b/agent/fw_drupal.c index 12e43b5cf..3537f8b42 100644 --- a/agent/fw_drupal.c +++ b/agent/fw_drupal.c @@ -20,6 +20,8 @@ #include "util_memory.h" #include "util_strings.h" +#define PHP_PACKAGE_NAME "drupal/drupal" + /* * Set the Web Transaction (WT) name to "(cached page)" * @@ -879,4 +881,12 @@ void nr_drupal_enable(TSRMLS_D) { nr_php_user_function_add_declared_callback( NR_PSTR("drupal_http_request"), nr_drupal_replace_http_request TSRMLS_CC); #endif + + if (NRINI(vulnerability_management_package_detection_enabled)) { + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/fw_drupal8.c b/agent/fw_drupal8.c index 6593e17a8..541cb8b87 100644 --- a/agent/fw_drupal8.c +++ b/agent/fw_drupal8.c @@ -689,8 +689,6 @@ void nr_drupal_version() { if (NRINI(vulnerability_management_package_detection_enabled)) { nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); } - nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, - version); } nr_php_zval_free(&zval_version); @@ -762,4 +760,7 @@ void nr_drupal8_enable(TSRMLS_D) { nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/fw_hooks.h b/agent/fw_hooks.h index e78f65cbd..c4500aeb2 100644 --- a/agent/fw_hooks.h +++ b/agent/fw_hooks.h @@ -56,6 +56,7 @@ extern void nr_phpunit_enable(TSRMLS_D); extern void nr_predis_enable(TSRMLS_D); extern void nr_zend_http_enable(TSRMLS_D); extern void nr_monolog_enable(TSRMLS_D); +extern void nr_composer_handle_autoload(const char* filename); /* Vulnerability Management Packages */ extern void nr_drupal_version(void); diff --git a/agent/fw_laminas3.c b/agent/fw_laminas3.c index 604976bf0..a5d27de94 100644 --- a/agent/fw_laminas3.c +++ b/agent/fw_laminas3.c @@ -13,6 +13,8 @@ #include "util_logging.h" #include "util_memory.h" +#define PHP_PACKAGE_NAME "laminas/laminas-mvc" + /* * Laminas is a rebranding of Zend, but the logic remains the same, * it is simply a name change and corresponds directly to Zend 3.x. @@ -163,7 +165,10 @@ void nr_laminas3_enable(TSRMLS_D) { nr_laminas3_name_the_wt TSRMLS_CC); if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "laminas/laminas-mvc", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/fw_laravel.c b/agent/fw_laravel.c index 11718a7e6..bbac65b20 100644 --- a/agent/fw_laravel.c +++ b/agent/fw_laravel.c @@ -963,8 +963,9 @@ NR_PHP_WRAPPER(nr_laravel_application_construct) { // Add php package to transaction nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); } - nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, - version); + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); if (version) { nrl_debug(NRL_FRAMEWORK, "Laravel version is " NRP_FMT, NRP_PHP(version)); diff --git a/agent/fw_lumen.c b/agent/fw_lumen.c index 239578ae1..2d34551f0 100644 --- a/agent/fw_lumen.c +++ b/agent/fw_lumen.c @@ -11,10 +11,13 @@ #include "php_wrapper.h" #include "php_hash.h" #include "fw_hooks.h" +#include "fw_support.h" #include "util_logging.h" #include "util_memory.h" #include "util_strings.h" +#define PHP_PACKAGE_NAME "laravel/lumen-framework" + /* * Sets the web transaction name. If strip_base == true, * leading class path components will be stripped. @@ -232,7 +235,10 @@ void nr_lumen_enable(TSRMLS_D) { #endif if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "laravel/lumen-framework", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/fw_slim.c b/agent/fw_slim.c index a70323459..facaeecc1 100644 --- a/agent/fw_slim.c +++ b/agent/fw_slim.c @@ -163,8 +163,8 @@ NR_PHP_WRAPPER(nr_slim_application_construct) { nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); } - nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, - version); + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); nr_free(version); nr_php_scope_release(&this_var); diff --git a/agent/fw_support.c b/agent/fw_support.c index daff2692c..23c9c44c1 100644 --- a/agent/fw_support.c +++ b/agent/fw_support.c @@ -58,23 +58,39 @@ void nr_fw_support_add_logging_supportability_metric(nrtxn_t* txn, void nr_fw_support_add_package_supportability_metric( nrtxn_t* txn, const char* package_name, - const char* package_version) { - if (NULL == txn || NULL == package_name || NULL == package_version) { + const char* package_version, + nr_php_package_t* p) { + if (NULL == txn || NULL == package_name) { return; } char* metname = NULL; char major_version[MAJOR_VERSION_LENGTH] = {0}; + const char* version = package_version; + + // override provided package_version only if: + // - php_package is provided + // - its version is not NULL + // - its version is not PHP_PACKAGE_VERSION_UNKNOWN + if (NULL != p && NULL != p->package_version + && 0 != nr_strcmp(p->package_version, PHP_PACKAGE_VERSION_UNKNOWN)) { + version = p->package_version; + } + + // only generate metric if version is known + if (NULL == version || 0 == nr_strcmp(version, PHP_PACKAGE_VERSION_UNKNOWN)) { + return; + } /* The below for loop checks if the major version of the package is more than * one digit and keeps looping until a '.' is encountered or one of the * conditions is met. */ - for (int i = 0; package_version[i] && i < MAJOR_VERSION_LENGTH - 1; i++) { - if ('.' == package_version[i]) { + for (int i = 0; version[i] && i < MAJOR_VERSION_LENGTH - 1; i++) { + if ('.' == version[i]) { break; } - major_version[i] = package_version[i]; + major_version[i] = version[i]; } if (NR_FW_UNSET == NRINI(force_framework)) { diff --git a/agent/fw_support.h b/agent/fw_support.h index 5099a7d35..ad4b02722 100644 --- a/agent/fw_support.h +++ b/agent/fw_support.h @@ -8,6 +8,7 @@ #define FW_SUPPORT_HDR #include "php_user_instrument.h" +#include "nr_php_packages.h" extern void nr_php_framework_add_supportability_metric( const char* framework_name, @@ -44,11 +45,13 @@ extern void nr_fw_support_add_logging_supportability_metric( * Params : 1. Transaction object * 2. Package name * 3. Package version + * 4. PHP package reported for vulnerability management * */ extern void nr_fw_support_add_package_supportability_metric( nrtxn_t* txn, const char* package_name, - const char* package_version); + const char* package_version, + nr_php_package_t* p); #endif /* FW_SUPPORT_HDR */ diff --git a/agent/fw_symfony4.c b/agent/fw_symfony4.c index 6e1c9982d..8592186ac 100644 --- a/agent/fw_symfony4.c +++ b/agent/fw_symfony4.c @@ -10,6 +10,8 @@ #include "fw_support.h" #include "fw_symfony_common.h" +#define PHP_PACKAGE_NAME "symfony/http-kernel" + NR_PHP_WRAPPER(nr_symfony4_exception) { int priority = nr_php_error_get_priority(E_ERROR); zval* event = NULL; @@ -277,7 +279,10 @@ void nr_symfony4_enable(TSRMLS_D) { #endif if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "symfony/http-kernel", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/fw_wordpress.c b/agent/fw_wordpress.c index 55a0be5f0..050750f6a 100644 --- a/agent/fw_wordpress.c +++ b/agent/fw_wordpress.c @@ -804,8 +804,7 @@ void nr_wordpress_version() { "})();"; zval retval; - int result - = zend_eval_string(func_string, &retval, "Get Wordpress Version"); + int result = zend_eval_string(func_string, &retval, "Get Wordpress Version"); // Add php package to transaction if (SUCCESS == result) { if (nr_php_is_zval_valid_string(&retval)) { @@ -813,8 +812,9 @@ void nr_wordpress_version() { if (NRINI(vulnerability_management_package_detection_enabled)) { nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); } - nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, - version); + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); } zval_dtor(&retval); } diff --git a/agent/fw_yii.c b/agent/fw_yii.c index 74aa19335..0b1af7c96 100644 --- a/agent/fw_yii.c +++ b/agent/fw_yii.c @@ -14,6 +14,7 @@ #include "util_memory.h" #include "util_strings.h" +#define PHP_PACKAGE_NAME "yiisoft/yii2" /* * Yii1: Set the web transaction name from the controllerId + actionId combo. * @@ -221,4 +222,12 @@ void nr_yii2_enable(TSRMLS_D) { nr_php_wrap_user_function(NR_PSTR("yii\\base\\ErrorHandler::logException"), nr_yii2_error_handler_wrapper TSRMLS_CC); #endif + + if (NRINI(vulnerability_management_package_detection_enabled)) { + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c index cff08dbfd..ad956ac1e 100644 --- a/agent/lib_aws_sdk_php.c +++ b/agent/lib_aws_sdk_php.c @@ -69,8 +69,10 @@ void nr_lib_aws_sdk_php_handle_version() { /* Add php package to transaction */ nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); } - nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, - version); + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); + nr_php_zval_free(&zval_version); } diff --git a/agent/lib_composer.c b/agent/lib_composer.c new file mode 100644 index 000000000..f6596639a --- /dev/null +++ b/agent/lib_composer.c @@ -0,0 +1,272 @@ +/* + * Copyright 2022 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "php_agent.h" +#include "fw_hooks.h" +#include "fw_support.h" +#include "nr_txn.h" +#include "util_logging.h" +#include "util_memory.h" +#include "util_syscalls.h" + +static bool nr_execute_handle_autoload_composer_is_initialized() { + zend_class_entry* zce = NULL; + + if (NULL == (zce = nr_php_find_class("composer\\installedversions"))) { + nrl_verbosedebug(NRL_INSTRUMENT, + "Composer\\InstalledVersions class not found"); + return false; + }; + + // the class is found - there's hope! + if (NULL == nr_php_find_class_method(zce, "getallrawdata") + || NULL == nr_php_find_class_method(zce, "getrootpackage")) { + nrl_verbosedebug( + NRL_INSTRUMENT, + "Composer\\InstalledVersions class found, but methods not found"); + return false; + } + + return true; +} + +static int nr_execute_handle_autoload_composer_init(const char* vendor_path) { + char* code = NULL; + zval retval; + int result = FAILURE; + + if (nr_execute_handle_autoload_composer_is_initialized()) { + nrl_verbosedebug(NRL_INSTRUMENT, "%s: already initialized", __func__); + return NR_SUCCESS; + } + + code = nr_formatf("include_once '%s/composer/InstalledVersions.php';", + vendor_path); + + result = zend_eval_string(code, &retval, "newrelic\\init_composer_api"); + if (result != SUCCESS) { + nrl_verbosedebug(NRL_INSTRUMENT, + "%s: zend_eval_string(%s) failed, result=%d", __func__, + code, result); + nr_free(code); + return NR_FAILURE; + } + + zval_dtor(&retval); + nr_free(code); + + // Make sure runtime API is available after loading + // Composer\\InstalledVersions class: + if (!nr_execute_handle_autoload_composer_is_initialized()) { + nrl_verbosedebug(NRL_INSTRUMENT, + "%s: unable to initialize Composer runtime API", __func__); + return NR_FAILURE; + } + + return NR_SUCCESS; +} + +static void nr_execute_handle_autoload_composer_get_packages_information( + const char* vendor_path) { + zval retval; // This is used as a return value for zend_eval_string. + // It will only be set if the result of the eval is SUCCESS. + int result = FAILURE; + + // nrunlikely because this should alredy be ensured by the caller + if (nrunlikely(!NRINI(vulnerability_management_package_detection_enabled))) { + // do nothing when collecting package information for vulnerability + // management is disabled + return; + } + + // nrunlikely because this should alredy be ensured by the caller + if (nrunlikely(!NRINI(vulnerability_management_composer_api_enabled))) { + // do nothing when use of composer to collect package info is disabled + return; + } + + // clang-format off + char* getallrawdata + = "" + "(function() {" + " try {" + " $root_package = \\Composer\\InstalledVersions::getRootPackage();" + " $packages = array();" + " foreach (\\Composer\\InstalledVersions::getAllRawData() as $installed) { " + " foreach ($installed['versions'] as $packageName => $packageData) {" + " if (!is_string($packageName)) {" + " continue;" + " }" + " if (is_array($root_package) && array_key_exists('name', $root_package) && $packageName == $root_package['name']) {" + " continue;" + " }" + " if (!array_key_exists('pretty_version', $packageData)) {" + " continue;" + " }" + " $pretty_version = $packageData['pretty_version'];" + " if (is_string($pretty_version)) {" + " $packages[$packageName] = ltrim($pretty_version, 'v');" + " }" + " }" + " }" + " return $packages;" + " } catch (Throwable $e) {" + " return NULL;" + " }" + "})();"; + // clang-format on + + if (NR_SUCCESS != nr_execute_handle_autoload_composer_init(vendor_path)) { + nrl_debug(NRL_INSTRUMENT, + "%s - unable to initialize Composer runtime API - package info " + "unavailable", + __func__); + return; + } + + nrl_verbosedebug(NRL_INSTRUMENT, "%s - Composer runtime API available", + __func__); + + result + = zend_eval_string(getallrawdata, &retval, "composer_getallrawdata.php"); + if (SUCCESS != result) { + nrl_verbosedebug(NRL_INSTRUMENT, "%s - composer_getallrawdata.php failed", + __func__); + return; + } + if (IS_ARRAY == Z_TYPE(retval)) { + zend_string* package_name = NULL; + zval* package_version = NULL; + ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL(retval), package_name, + package_version) { + if (NULL == package_name || NULL == package_version) { + continue; + } + if (nr_php_is_zval_non_empty_string(package_version)) { + nrl_verbosedebug(NRL_INSTRUMENT, "package %s, version %s", + NRSAFESTR(ZSTR_VAL(package_name)), + NRSAFESTR(Z_STRVAL_P(package_version))); + nr_txn_add_php_package_from_source(NRPRG(txn), ZSTR_VAL(package_name), + Z_STRVAL_P(package_version), + NR_PHP_PACKAGE_SOURCE_COMPOSER); + } + } + ZEND_HASH_FOREACH_END(); + } else { + char strbuf[80]; + nr_format_zval_for_debug(&retval, strbuf, 0, sizeof(strbuf) - 1, 0); + nrl_verbosedebug(NRL_INSTRUMENT, + "%s - installed packages is: " NRP_FMT ", not an array", + __func__, NRP_ARGSTR(strbuf)); + } + zval_dtor(&retval); +} + +static char* nr_execute_handle_autoload_composer_get_vendor_path( + const char* filename) { + char* vendor_path = NULL; // result of dirname(filename) + char* cp = NULL; + + // nrunlikely because this should alredy be ensured by the caller + if (nrunlikely(NULL == filename)) { + nrl_verbosedebug(NRL_FRAMEWORK, "%s - filename is NULL", __func__); + return NULL; + } + + // vendor_path = dirname(filename): + // 1. copy filename to vendor_path + vendor_path = nr_strdup(filename); + // 2. // find last occurence of '/' in vendor_path + cp = nr_strrchr(vendor_path, '/'); + // 3. replace '/' with '\0' to get the directory path + if (NULL != cp) { + *cp = '\0'; + } else { + nrl_verbosedebug(NRL_FRAMEWORK, "%s - no '/' in filename '%s'", __func__, + filename); + } + + return vendor_path; +} + +static bool nr_execute_handle_autoload_composer_file_exists( + const char* vendor_path, + const char* filename) { + char* composer_magic_file = NULL; // vendor_path + filename + bool file_exists = false; + + // nrunlikely because this should alredy be ensured by the caller + if (nrunlikely(NULL == vendor_path)) { + nrl_verbosedebug(NRL_FRAMEWORK, "%s - vendor_path is NULL", __func__); + return false; + } + + // nrunlikely because this should alredy be ensured by the caller + if (nrunlikely(NULL == filename)) { + nrl_verbosedebug(NRL_FRAMEWORK, "%s - filename is NULL", __func__); + return false; + } + + composer_magic_file = nr_formatf("%s/%s", vendor_path, filename); + if (0 == nr_access(composer_magic_file, F_OK | R_OK)) { + file_exists = true; + } + nr_free(composer_magic_file); + return file_exists; +} + +void nr_composer_handle_autoload(const char* filename) { +// Composer signature file" +#define COMPOSER_MAGIC_FILE_1 "composer/autoload_real.php" +#define COMPOSER_MAGIC_FILE_1_LEN (sizeof(COMPOSER_MAGIC_FILE_1) - 1) +// Composer runtime API files: +#define COMPOSER_MAGIC_FILE_2 "composer/InstalledVersions.php" +#define COMPOSER_MAGIC_FILE_2_LEN (sizeof(COMPOSER_MAGIC_FILE_2) - 1) +#define COMPOSER_MAGIC_FILE_3 "composer/installed.php" +#define COMPOSER_MAGIC_FILE_3_LEN (sizeof(COMPOSER_MAGIC_FILE_3) - 1) + char* vendor_path = NULL; // result of dirname(filename) + + // nrunlikely because this should alredy be ensured by the caller + if (nrunlikely(NULL == filename)) { + nrl_verbosedebug(NRL_FRAMEWORK, "%s - filename is NULL", __func__); + return; + } + + vendor_path = nr_execute_handle_autoload_composer_get_vendor_path(filename); + if (NULL == vendor_path) { + nrl_verbosedebug(NRL_FRAMEWORK, "unable to get vendor path from '%s'", + filename); + return; + } + + if (!nr_execute_handle_autoload_composer_file_exists(vendor_path, + COMPOSER_MAGIC_FILE_1)) { + nrl_verbosedebug(NRL_FRAMEWORK, "'%s' not found in '%s'", + COMPOSER_MAGIC_FILE_1, vendor_path); + goto leave; + } + + if (!nr_execute_handle_autoload_composer_file_exists(vendor_path, + COMPOSER_MAGIC_FILE_2)) { + nrl_verbosedebug(NRL_FRAMEWORK, "'%s' not found in '%s'", + COMPOSER_MAGIC_FILE_2, vendor_path); + goto leave; + } + + if (!nr_execute_handle_autoload_composer_file_exists(vendor_path, + COMPOSER_MAGIC_FILE_3)) { + nrl_verbosedebug(NRL_FRAMEWORK, "'%s' not found in '%s'", + COMPOSER_MAGIC_FILE_3, vendor_path); + goto leave; + } + + nrl_verbosedebug(NRL_FRAMEWORK, "detected composer"); + NRPRG(txn)->composer_info.composer_detected = true; + nr_fw_support_add_library_supportability_metric(NRPRG(txn), "Composer"); + + nr_execute_handle_autoload_composer_get_packages_information(vendor_path); +leave: + nr_free(vendor_path); +} diff --git a/agent/lib_doctrine2.c b/agent/lib_doctrine2.c index e767d253f..8f8b8dfe3 100644 --- a/agent/lib_doctrine2.c +++ b/agent/lib_doctrine2.c @@ -16,6 +16,8 @@ #include "php_call.h" #include "lib_doctrine2.h" +#define PHP_PACKAGE_NAME "doctrine/orm" + /* * This answers the somewhat complicated question of whether we should * instrument DQL, which is dependent on the input query setting as well as SQL @@ -106,7 +108,10 @@ void nr_doctrine2_enable(TSRMLS_D) { #endif /* OAPI */ if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "doctrine/orm", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/lib_guzzle4.c b/agent/lib_guzzle4.c index f3dfc94e9..c52ddffff 100644 --- a/agent/lib_guzzle4.c +++ b/agent/lib_guzzle4.c @@ -33,6 +33,8 @@ #include "util_logging.h" #include "util_memory.h" +#define PHP_PACKAGE_NAME "guzzlehttp/guzzle" + /* * We rely on the const correctness of certain Zend functions that weren't * const correct before 5.3 and/or 5.4: since Guzzle 4 requires 5.4.0 anyway, @@ -520,9 +522,12 @@ void nr_guzzle4_enable(TSRMLS_D) { nr_guzzle_client_construct TSRMLS_CC); if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "guzzlehttp/guzzle", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } void nr_guzzle4_minit(TSRMLS_D) { diff --git a/agent/lib_guzzle6.c b/agent/lib_guzzle6.c index d9003545c..e65a684b7 100644 --- a/agent/lib_guzzle6.c +++ b/agent/lib_guzzle6.c @@ -359,15 +359,25 @@ NR_PHP_WRAPPER_START(nr_guzzle6_client_construct) { } /* - * If we were unable to get the full version before, at least we can extract - * the major version to send to the supportability metric. - * This is relevant to guzzle7+ which no longer supplies full version. - */ + * If we were unable to get the full version before, at least we can extract + * the major version to send to the supportability metric now, as + * this incomplete version will not be stored in a php package record + * and so the supportability metric cannot be created later like for + * most packages. + * + * This is relevant to guzzle7+ which no longer supplies full version. + */ if (NULL == version) { version = nr_php_get_object_constant(this_var, "MAJOR_VERSION"); } - nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, - version); + + /* if version is still NULL that is OK this next call will accept + * that value and when supportability metrics are made for + * packages if another method has determined the package version + * (composer api for example) then it will be filled in at that time + */ + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); nr_free(version); (void)wraprec; diff --git a/agent/lib_mongodb.c b/agent/lib_mongodb.c index c21e1e01b..8d129ae9d 100644 --- a/agent/lib_mongodb.c +++ b/agent/lib_mongodb.c @@ -18,6 +18,8 @@ #include "lib_mongodb_private.h" +#define PHP_PACKAGE_NAME "mongodb/mongodb" + static int nr_mongodb_is_server(const zval* obj TSRMLS_DC) { return nr_php_object_instanceof_class(obj, "MongoDB\\Driver\\Server" TSRMLS_CC); @@ -445,7 +447,10 @@ void nr_mongodb_enable() { #endif /* OAPI */ if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "mongodb/mongodb", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/lib_monolog.c b/agent/lib_monolog.c index 667e33583..fcdb1ac06 100644 --- a/agent/lib_monolog.c +++ b/agent/lib_monolog.c @@ -378,8 +378,8 @@ NR_PHP_WRAPPER(nr_monolog_logger_addrecord) { = nr_monolog_get_timestamp(api, argc, NR_EXECUTE_ORIG_ARGS TSRMLS_CC); char version[MAJOR_VERSION_LENGTH]; snprintf(version, sizeof(version), "%d", api); - nr_fw_support_add_package_supportability_metric(NRPRG(txn), - PHP_PACKAGE_NAME, version); + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); } /* Record the log event */ @@ -523,4 +523,7 @@ void nr_monolog_enable(TSRMLS_D) { nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/lib_phpunit.c b/agent/lib_phpunit.c index e41c55b29..4050bf969 100644 --- a/agent/lib_phpunit.c +++ b/agent/lib_phpunit.c @@ -14,6 +14,8 @@ #include "util_logging.h" #include "util_strings.h" +#define PHP_PACKAGE_NAME "phpunit/phpunit" + /* * PHPUnit instrumentation * ======================= @@ -697,7 +699,10 @@ void nr_phpunit_enable(TSRMLS_D) { nr_phpunit_instrument_testresult_adderror TSRMLS_CC); if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "phpunit/phpunit", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/lib_predis.c b/agent/lib_predis.c index b299c5595..607e11ed2 100644 --- a/agent/lib_predis.c +++ b/agent/lib_predis.c @@ -654,8 +654,10 @@ NR_PHP_WRAPPER(nr_predis_client_construct) { // Add php package to transaction nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); } - nr_fw_support_add_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, - version); + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); + nr_free(version); /* diff --git a/agent/php_execute.c b/agent/php_execute.c index 3ecb33100..83ff4d5a9 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -411,7 +411,7 @@ static const nr_framework_table_t all_frameworks[] = { NR_PSTR("symfony/bundle/frameworkbundle/frameworkbundle.php"), 0, nr_symfony2_enable, NR_FW_SYMFONY2}, /* also Symfony 3 */ {"Symfony4", "symfony4", NR_PSTR("http-kernel/httpkernel.php"), 0, - nr_symfony4_enable, NR_FW_SYMFONY4}, /* also Symfony 5 */ + nr_symfony4_enable, NR_FW_SYMFONY4}, /* also Symfony 5/6/7 */ {"WordPress", "wordpress", NR_PSTR("wp-config.php"), 0, nr_wordpress_enable, NR_FW_WORDPRESS}, @@ -931,6 +931,40 @@ static void nr_execute_handle_library(const char* filename, } } +static void nr_execute_handle_autoload(const char* filename, + const size_t filename_len) { +#define AUTOLOAD_MAGIC_FILE "vendor/autoload.php" +#define AUTOLOAD_MAGIC_FILE_LEN (sizeof(AUTOLOAD_MAGIC_FILE) - 1) + + if (!NRINI(vulnerability_management_package_detection_enabled)) { + // do nothing when vulnerability management package detection is disabled + return; + } + + if (!NRINI(vulnerability_management_composer_api_enabled)) { + // do nothing when use of composer to collect package info is disabled + return; + } + + if (NRPRG(txn)->composer_info.autoload_detected) { + // autoload already handled + return; + } + + if (!nr_striendswith(STR_AND_LEN(filename), AUTOLOAD_MAGIC_FILE, + AUTOLOAD_MAGIC_FILE_LEN)) { + // not an autoload file + return; + } + + nrl_debug(NRL_FRAMEWORK, "detected autoload with %s, which ends with %s", + filename, AUTOLOAD_MAGIC_FILE); + NRPRG(txn)->composer_info.autoload_detected = true; + nr_fw_support_add_library_supportability_metric(NRPRG(txn), "Autoloader"); + + nr_composer_handle_autoload(filename); +} + static void nr_execute_handle_logging_framework(const char* filename, const size_t filename_len TSRMLS_DC) { @@ -999,6 +1033,7 @@ static void nr_php_user_instrumentation_from_file(const char* filename, nr_execute_handle_framework(all_frameworks, num_all_frameworks, filename, filename_len TSRMLS_CC); nr_execute_handle_library(filename, filename_len TSRMLS_CC); + nr_execute_handle_autoload(filename, filename_len); nr_execute_handle_logging_framework(filename, filename_len TSRMLS_CC); if (NRINI(vulnerability_management_package_detection_enabled)) { nr_execute_handle_package(filename); diff --git a/agent/php_newrelic.h b/agent/php_newrelic.h index 04ebd1ad2..1860b5167 100644 --- a/agent/php_newrelic.h +++ b/agent/php_newrelic.h @@ -593,6 +593,8 @@ nrinibool_t nrinibool_t vulnerability_management_package_detection_enabled; /* newrelic.vulnerability_management.package_detection.enabled */ +nrinibool_t + vulnerability_management_composer_api_enabled; /* newrelic.vulnerability_management.composer_api.enabled */ #if ZEND_MODULE_API_NO < ZEND_7_4_X_API_NO /* diff --git a/agent/php_nrini.c b/agent/php_nrini.c index 6fdd898d3..6c21d1bdf 100644 --- a/agent/php_nrini.c +++ b/agent/php_nrini.c @@ -3091,6 +3091,15 @@ STD_PHP_INI_ENTRY_EX("newrelic.vulnerability_management.package_detection.enable newrelic_globals, nr_enabled_disabled_dh) +STD_PHP_INI_ENTRY_EX("newrelic.vulnerability_management.composer_api.enabled", + "0", + NR_PHP_REQUEST, + nr_boolean_mh, + vulnerability_management_composer_api_enabled, + zend_newrelic_globals, + newrelic_globals, + nr_enabled_disabled_dh) + PHP_INI_END() /* } */ void nr_php_register_ini_entries(int module_number TSRMLS_DC) { diff --git a/agent/php_txn.c b/agent/php_txn.c index 785007b41..b5b57975c 100644 --- a/agent/php_txn.c +++ b/agent/php_txn.c @@ -19,10 +19,12 @@ #include "nr_agent.h" #include "nr_commands.h" #include "nr_header.h" +#include "nr_php_packages.h" #include "nr_rum.h" #include "nr_segment_children.h" #include "nr_txn.h" #include "nr_version.h" +#include "fw_support.h" #include "util_labels.h" #include "util_logging.h" #include "util_memory.h" @@ -711,6 +713,50 @@ void nr_php_txn_create_agent_php_version_metrics(nrtxn_t* txn) { nr_php_txn_create_php_version_metric(txn, version); } +void nr_php_txn_php_package_create_major_metric(void* value, + const char* key, + size_t key_len, + void* user_data) { + nrtxn_t* txn = (nrtxn_t*)user_data; + nr_php_package_t* suggested = value; + nr_php_package_t* actual = NULL; + + (void)key; + (void)key_len; + + if (NULL == txn) { + return; + } + + if (NULL == suggested) { + return; + } + + /* see if the actual packages has a version we can use over the + * one provided with the suggested package + */ + actual + = nr_php_packages_get_package(txn->php_packages, suggested->package_name); + + nrl_verbosedebug( + NRL_INSTRUMENT, + "Creating PHP Package Supportability Metric for package " + "'%s', suggested version '%s', actual version '%s'", + NRSAFESTR(suggested->package_name), NRSAFESTR(suggested->package_version), + NRSAFESTR(NULL != actual ? actual->package_version : "NULL")); + nr_fw_support_add_package_supportability_metric( + txn, suggested->package_name, suggested->package_version, actual); +} + +void nr_php_txn_create_packages_major_metrics(nrtxn_t* txn) { + if (NULL == txn) { + return; + } + + nr_php_packages_iterate(txn->php_package_major_version_metrics_suggestions, + nr_php_txn_php_package_create_major_metric, txn); +} + nr_status_t nr_php_txn_begin(const char* appnames, const char* license TSRMLS_DC) { nrtxnopt_t opts; @@ -1165,6 +1211,9 @@ nr_status_t nr_php_txn_end(int ignoretxn, int in_post_deactivate TSRMLS_DC) { /* Agent and PHP version metrics*/ nr_php_txn_create_agent_php_version_metrics(txn); + /* PHP packages major version metrics */ + nr_php_txn_create_packages_major_metrics(txn); + /* Add CPU and memory metrics */ nr_php_resource_usage_sampler_end(TSRMLS_C); diff --git a/agent/php_txn_private.h b/agent/php_txn_private.h index bf49eb107..6788877ad 100644 --- a/agent/php_txn_private.h +++ b/agent/php_txn_private.h @@ -65,3 +65,24 @@ extern void nr_php_txn_create_agent_version_metric(nrtxn_t* txn); */ extern void nr_php_txn_create_php_version_metric(nrtxn_t* txn, const char* version); + +/* + * Purpose : Callback for nr_php_packages_iterate to create major + * version metrics. + * + * Params : 1. PHP suggestion package version + * 2. PHP suggestion package name + * 3. PHP suggestion package name length + * 4. The current transaction (via userdata) + */ +extern void nr_php_txn_php_package_create_major_metric(void* value, + const char* key, + size_t key_len, + void* user_data); + +/* + * Purpose : Create and record metric for a package major versions. + * + * Params : 1. The current transaction. + */ +extern void nr_php_txn_create_packages_major_metrics(nrtxn_t* txn); diff --git a/agent/scripts/newrelic.ini.template b/agent/scripts/newrelic.ini.template index 0e5da6ab3..4ed06a091 100644 --- a/agent/scripts/newrelic.ini.template +++ b/agent/scripts/newrelic.ini.template @@ -1332,3 +1332,12 @@ newrelic.daemon.logfile = "/var/log/newrelic/newrelic-daemon.log" ; for vulnerability management. ; ;newrelic.vulnerability_management.package_detection.enabled = true + +; Setting: newrelic.vulnerability_management.composer_api.enabled +; Type : boolean +; Scope : per-directory +; Default: false +; Info : Toggles whether the agent should try using Composer's runtime API +; to gather package information for vulnerability management. +; +;newrelic.vulnerability_management.composer_api.enabled = false diff --git a/agent/tests/test_fw_support.c b/agent/tests/test_fw_support.c index c8b8e021d..980dc02aa 100644 --- a/agent/tests/test_fw_support.c +++ b/agent/tests/test_fw_support.c @@ -11,7 +11,12 @@ tlib_parallel_info_t parallel_info = {.suggested_nthreads = -1, .state_size = 0}; -static void test_fw_supportability_metrics(void) { +// When package detection for vulnerability management is disabled, +// txn->php_packages is not populated and package version cannot +// be obtained from php_package. This test is to ensure that +// the package supportability metric is created in case php_package +// is not available and that fallback version is used. +static void test_fw_supportability_metrics_with_vm_disabled(void) { #define LIBRARY_NAME "php-package" #define LIBRARY_MAJOR_VERSION "7" #define LIBRARY_MAJOR_VERSION_2 "10" @@ -22,9 +27,11 @@ static void test_fw_supportability_metrics(void) { #define LIBRARY_MAJOR_VERSION_7 "0.4.5" #define LIBRARY_METRIC "Supportability/library/" LIBRARY_NAME "/detected" #define LOGGING_LIBRARY_METRIC "Supportability/Logging/PHP/" LIBRARY_NAME -#define PACKAGE_METRIC "Supportability/PHP/package/" LIBRARY_NAME +#define PACKAGE_METRIC_PREFIX "Supportability/PHP/package/" +#define PACKAGE_METRIC PACKAGE_METRIC_PREFIX LIBRARY_NAME nrtxn_t t; nrtxn_t* txn = &t; + nr_php_package_t* php_package = NULL; txn->unscoped_metrics = nrm_table_create(10); /* NULL tests - don't blow up */ @@ -44,15 +51,18 @@ static void test_fw_supportability_metrics(void) { tlib_pass_if_int_equal("NULL logging library metric not created", 0, nrm_table_size(txn->unscoped_metrics)); - nr_fw_support_add_package_supportability_metric(NULL, LIBRARY_NAME, LIBRARY_MAJOR_VERSION); + nr_fw_support_add_package_supportability_metric( + NULL, LIBRARY_NAME, LIBRARY_MAJOR_VERSION, php_package); tlib_pass_if_int_equal("package metric not created in NULL metrics", 0, nrm_table_size(txn->unscoped_metrics)); - nr_fw_support_add_package_supportability_metric(txn, NULL, LIBRARY_MAJOR_VERSION); + nr_fw_support_add_package_supportability_metric( + txn, NULL, LIBRARY_MAJOR_VERSION, php_package); tlib_pass_if_int_equal("NULL package name, metric not created", 0, nrm_table_size(txn->unscoped_metrics)); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, NULL); + nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, NULL, + php_package); tlib_pass_if_int_equal("NULL major version, metric not created", 0, nrm_table_size(txn->unscoped_metrics)); @@ -71,51 +81,51 @@ static void test_fw_supportability_metrics(void) { "happy path: logging library metric created", nrm_find(txn->unscoped_metrics, LOGGING_LIBRARY_METRIC "/disabled")); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION, php_package); tlib_pass_if_not_null("happy path test 1: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION "/detected")); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION_2); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION_2, php_package); tlib_pass_if_not_null("happy path test 2: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION_2 "/detected")); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION_3); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION_3, php_package); tlib_pass_if_not_null("happy path test 3: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION_3 "/detected")); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION_4); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION_4, php_package); tlib_pass_if_not_null( "happy path test 4: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/1/detected")); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION_5); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION_5, php_package); tlib_pass_if_not_null( "happy path test 5: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/12/detected")); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION_6); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION_6, php_package); tlib_pass_if_not_null( "happy path test 6: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/123/detected")); - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION_7); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION_7, php_package); tlib_pass_if_not_null( "happy path test 7: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/0/detected")); NRINI(force_framework) = true; - nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, - LIBRARY_MAJOR_VERSION); + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION, php_package); tlib_pass_if_not_null( "happy path test 8: package metric created", nrm_find(txn->unscoped_metrics, PACKAGE_METRIC "/7/forced")); @@ -123,6 +133,88 @@ static void test_fw_supportability_metrics(void) { nrm_table_destroy(&txn->unscoped_metrics); } +// When package detection for vulnerability management is enabled, +// txn->php_packages is populated and package version can be obtained +// from php_package stored in txn->php_packages. This test is to ensure +// that the package supportability metric is created in case php_package +// is available and that package version from php_package is used. +static void test_fw_supportability_metrics_with_vm_enabled(void) { +#define PHP_PACKAGE_MAJOR_VERSION "8" +#define PHP_PACKAGE_VERSION PHP_PACKAGE_MAJOR_VERSION ".4.0" + nrtxn_t t; + nrtxn_t* txn = &t; + nr_php_package_t php_package + = {.package_name = LIBRARY_NAME, + .package_version = PHP_PACKAGE_VERSION, + .source_priority = NR_PHP_PACKAGE_SOURCE_COMPOSER}; + nr_php_package_t php_package_null_version + = {.package_name = LIBRARY_NAME, + .package_version = NULL, + .source_priority = NR_PHP_PACKAGE_SOURCE_COMPOSER}; + nr_php_package_t php_package_unknown_version + = {.package_name = LIBRARY_NAME, + .package_version = PHP_PACKAGE_VERSION_UNKNOWN, + .source_priority = NR_PHP_PACKAGE_SOURCE_COMPOSER}; + txn->unscoped_metrics = nrm_table_create(10); + + NRINI(force_framework) = false; + nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, NULL, + &php_package_null_version); + tlib_pass_if_null( + "library major version metric not created when version is unknown - " + "version is NULL and package version is NULL", + nrm_get_metric(txn->unscoped_metrics, 0)); + + nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, + PHP_PACKAGE_VERSION_UNKNOWN, + &php_package_null_version); + tlib_pass_if_null( + "library major version metric not created when version is unknown - " + "version is PHP_PACKAGE_VERSION_UNKNOWN and package version is NULL", + nrm_get_metric(txn->unscoped_metrics, 0)); + + nr_fw_support_add_package_supportability_metric(txn, LIBRARY_NAME, NULL, + &php_package_unknown_version); + tlib_pass_if_null( + "library major version metric not created when version is unknown - " + "version is NULL and package version is PHP_PACKAGE_VERSION_UNKNOWN", + nrm_get_metric(txn->unscoped_metrics, 0)); + + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION, &php_package); + tlib_pass_if_not_null( + "php package major version is used for 'detected' metric", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" PHP_PACKAGE_MAJOR_VERSION "/detected")); + + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION, &php_package_null_version); + tlib_pass_if_not_null( + "library major version is used for 'detected' metric when php package " + "version is NULL", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION "/detected")); + + NRINI(force_framework) = true; + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION, &php_package); + tlib_pass_if_not_null( + "php package major version is used for 'detected' metric", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" PHP_PACKAGE_MAJOR_VERSION "/forced")); + + nr_fw_support_add_package_supportability_metric( + txn, LIBRARY_NAME, LIBRARY_MAJOR_VERSION, &php_package_null_version); + tlib_pass_if_not_null( + "library major version is used for 'forced' metric when php package " + "version is NULL", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION "/detected")); + + nrm_table_destroy(&txn->unscoped_metrics); +} + void test_main(void* p NRUNUSED) { - test_fw_supportability_metrics(); + test_fw_supportability_metrics_with_vm_disabled(); + test_fw_supportability_metrics_with_vm_enabled(); } diff --git a/agent/tests/test_lib_aws_sdk_php.c b/agent/tests/test_lib_aws_sdk_php.c index 8ddffce9d..91fa88b26 100644 --- a/agent/tests/test_lib_aws_sdk_php.c +++ b/agent/tests/test_lib_aws_sdk_php.c @@ -80,14 +80,14 @@ static void test_nr_lib_aws_sdk_php_add_supportability_service_metric(void) { static void test_nr_lib_aws_sdk_php_handle_version(void) { #define LIBRARY_NAME "aws/aws-sdk-php" -#define LIBRARY_MAJOR_VERSION "7" -#define LIBRARY_MAJOR_VERSION_2 "10" -#define LIBRARY_MAJOR_VERSION_3 "100" -#define LIBRARY_MAJOR_VERSION_4 "4.23" -#define LIBRARY_MAJOR_VERSION_55 "55.34" -#define LIBRARY_MAJOR_VERSION_6123 "6123.45" -#define LIBRARY_MAJOR_VERSION_0 "0.4.5" -#define PACKAGE_METRIC "Supportability/PHP/package/" LIBRARY_NAME + const char* library_versions[] + = {"7", "10", "100", "4.23", "55.34", "6123.45", "0.4.5"}; + nr_php_package_t* p = NULL; +#define TEST_DESCRIPTION_FMT \ + "nr_lib_aws_sdk_php_handle_version with library_versions[%ld]=%s: package " \ + "major version metric - %s" + char* test_description = NULL; + size_t i = 0; /* * If lib_aws_sdk_php_handle_version function is ever called, we have already @@ -95,73 +95,54 @@ static void test_nr_lib_aws_sdk_php_handle_version(void) { */ /* - * Aws/Sdk exists. Should return aws package metric with + * Aws/Sdk class exists. Should create aws package metric suggestion with * version */ - tlib_php_request_start(); - declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION); - nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_not_null("version test 1: package metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC - "/" LIBRARY_MAJOR_VERSION "/detected")); - tlib_php_request_end(); + for (i = 0; i < sizeof(library_versions) / sizeof(library_versions[0]); i++) { + tlib_php_request_start(); - tlib_php_request_start(); - declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_2); - nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_not_null("version test 2: package metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC - "/" LIBRARY_MAJOR_VERSION_2 "/detected")); - tlib_php_request_end(); + declare_aws_sdk_class("Aws", "Sdk", library_versions[i]); + nr_lib_aws_sdk_php_handle_version(); - tlib_php_request_start(); - declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_3); - nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_not_null("version test 3: package metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC - "/" LIBRARY_MAJOR_VERSION_3 "/detected")); - tlib_php_request_end(); + p = nr_php_packages_get_package( + NRPRG(txn)->php_package_major_version_metrics_suggestions, + LIBRARY_NAME); - tlib_php_request_start(); - declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_4); - nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_not_null( - "version test 4: package metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/4/detected")); - tlib_php_request_end(); + test_description = nr_formatf(TEST_DESCRIPTION_FMT, i, library_versions[i], + "suggestion created"); + tlib_pass_if_not_null(test_description, p); + nr_free(test_description); - tlib_php_request_start(); - declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_55); - nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_not_null( - "version test 5: package metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/55/detected")); - tlib_php_request_end(); + test_description = nr_formatf(TEST_DESCRIPTION_FMT, i, library_versions[i], + "suggested version set"); + tlib_pass_if_str_equal(test_description, library_versions[i], + p->package_version); + nr_free(test_description); - tlib_php_request_start(); - declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_6123); - nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_not_null( - "version test 6: package metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/6123/detected")); - tlib_php_request_end(); - - tlib_php_request_start(); - declare_aws_sdk_class("Aws", "Sdk", LIBRARY_MAJOR_VERSION_0); - nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_not_null( - "version test 7: package metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC "/0/detected")); - tlib_php_request_end(); + tlib_php_request_end(); + } /* - * Aws/Sdk does not exist, should not return package metric if no version - * This case should never happen in real situations. + * Aws/Sdk class does not exist, should create package metric suggestion + * with PHP_PACKAGE_VERSION_UNKNOWN version. This case should never happen + * in real situations. */ tlib_php_request_start(); + nr_lib_aws_sdk_php_handle_version(); - tlib_pass_if_null("aws library metric created", - nrm_find(NRPRG(txn)->unscoped_metrics, PACKAGE_METRIC)); + + p = nr_php_packages_get_package( + NRPRG(txn)->php_package_major_version_metrics_suggestions, LIBRARY_NAME); + + tlib_pass_if_not_null( + "nr_lib_aws_sdk_php_handle_version when Aws\\Sdk class is not defined - " + "suggestion created", + p); + tlib_pass_if_str_equal( + "nr_lib_aws_sdk_php_handle_version when Aws\\Sdk class is not defined - " + "suggested version set to PHP_PACKAGE_VERSION_UNKNOWN", + PHP_PACKAGE_VERSION_UNKNOWN, p->package_version); + tlib_php_request_end(); } diff --git a/agent/tests/test_php_txn.c b/agent/tests/test_php_txn.c new file mode 100644 index 000000000..d0665bb26 --- /dev/null +++ b/agent/tests/test_php_txn.c @@ -0,0 +1,268 @@ +/* + * Copyright 2020 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "tlib_php.h" + +#include "php_agent.h" +#include "php_txn_private.h" + +#define LIBRARY_NAME "vendor_name/package_name" +#define LIBRARY_VERSION "1.2.3" +#define DEVEL_LIBRARY_VERSION "1.2.x-dev" +#define LIBRARY_MAJOR_VERSION "1" +#define COMPOSER_PACKAGE_VERSION "2.1.3" +#define COMPOSER_MAJOR_VERSION "2" +#define PACKAGE_METRIC_PREFIX "Supportability/PHP/package/" +#define PACKAGE_METRIC PACKAGE_METRIC_PREFIX LIBRARY_NAME + +tlib_parallel_info_t parallel_info = {.suggested_nthreads = 1, .state_size = 0}; + +nr_php_package_t php_package + = {.package_name = LIBRARY_NAME, + .package_version = LIBRARY_VERSION, + .source_priority = NR_PHP_PACKAGE_SOURCE_COMPOSER}; + +static void test_nr_php_txn_php_package_create_major_metric() { + nrtxn_t t; + nrtxn_t* txn = &t; + + txn->unscoped_metrics = nrm_table_create(10); + txn->php_packages = nr_php_packages_create(); + txn->php_package_major_version_metrics_suggestions = nr_php_packages_create(); + + tlib_php_request_start(); + + /* need to call callback with invalid values to make sure it doesnt crash + * code depends on txn and txn->php_packages existing so these are created + * above with the package suggestions data structure included for good measure + */ + + /* this tests these params in callback: + * suggested = NULL + * actual = NULL + * key = NULL + * txn = NULL + */ + nr_php_txn_php_package_create_major_metric(NULL, NULL, 0, NULL); + tlib_pass_if_int_equal("NULL txn, metric not created", 0, + nrm_table_size(txn->unscoped_metrics)); + + /* this tests these params in callback: + * suggested = NULL + * actual = NULL + * key != NULL + * txn != NULL + */ + nr_php_txn_php_package_create_major_metric(NULL, LIBRARY_NAME, + strlen(LIBRARY_NAME), (void*)txn); + tlib_pass_if_int_equal("NULL value, metric not created", 0, + nrm_table_size(txn->unscoped_metrics)); + + /* the key is not actually used by the callback - just the package name + * in the suggested package so this casee will still create a metric + */ + /* this tests these params in callback: + * suggested != NULL + * actual = NULL + * key = NULL + * txn = != NULL + */ + nr_php_txn_php_package_create_major_metric(&php_package, NULL, 0, (void*)txn); + tlib_pass_if_int_equal("NULL key, metric created", 1, + nrm_table_size(txn->unscoped_metrics)); + + /* cleanup */ + nr_php_packages_destroy(&txn->php_packages); + nr_php_packages_destroy(&txn->php_package_major_version_metrics_suggestions); + nrm_table_destroy(&txn->unscoped_metrics); + + tlib_php_request_end(); +} + +static void test_nr_php_txn_create_packages_major_metrics() { + nrtxn_t t; + nrtxn_t* txn = &t; + + txn->unscoped_metrics = nrm_table_create(10); + txn->php_packages = nr_php_packages_create(); + txn->php_package_major_version_metrics_suggestions = nr_php_packages_create(); + + tlib_php_request_start(); + + /* invalid txn should not crash */ + nr_php_txn_create_packages_major_metrics(NULL); + tlib_pass_if_int_equal("NULL txn, metric not created", 0, + nrm_table_size(txn->unscoped_metrics)); + + /* test with valid txn no package suggestions */ + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal("valid txn with no suggestions, metric not created", 0, + nrm_table_size(txn->unscoped_metrics)); + + /* + * Tests: + * 1. suggestion with NULL version, no packages + * 2. suggestion with PHP_PACKAGE_VERSION_UNKNOWN version, no packages + * 3. suggestion with known version, no packages + * 4. package with known version and suggestion with known version + * 5. package with known version and suggestion with unknown version + * 6. package with unknown version and suggestion with known version + * 7. package with unknown version and suggestion with unknown version + * 8. test that causes "actual" to be NULL in callback + * 9. package with known "dev" version with and suggestion with unknown version + */ + + /* 1. suggestion with NULL version, no packages */ + nr_txn_suggest_package_supportability_metric(txn, LIBRARY_NAME, NULL); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal("suggestion with NULL version, metric not created", 0, + nrm_table_size(txn->unscoped_metrics)); + + /* 2. suggestion with PHP_PACKAGE_VERSION_UNKNOWN version, no packages + * also + * 8. test that causes "actual" to be NULL in callback + */ + nr_txn_suggest_package_supportability_metric(txn, LIBRARY_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal( + "suggestion with PHP_PACKAGE_VERSION_UNKNOWN version, metric not created", + 0, nrm_table_size(txn->unscoped_metrics)); + + /* 3. suggestion with known version, no packages + * also + * 8. test that causes "actual" to be NULL in callback + */ + nr_txn_suggest_package_supportability_metric(txn, LIBRARY_NAME, + LIBRARY_VERSION); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal("suggestion with valid version, metric created", 1, + nrm_table_size(txn->unscoped_metrics)); + tlib_pass_if_not_null( + "php package major version is used for 'detected' metric", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION "/detected")); + + /* reset metrics */ + nrm_table_destroy(&txn->unscoped_metrics); + txn->unscoped_metrics = nrm_table_create(10); + + /* 4. package with known version and suggestion with known version + * + * add a package with a "better" version determined from composer api + * and use existing suggestion which has a different version + */ + nr_txn_add_php_package_from_source(txn, LIBRARY_NAME, + COMPOSER_PACKAGE_VERSION, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal("suggestion with valid version, metric created", 1, + nrm_table_size(txn->unscoped_metrics)); + tlib_pass_if_not_null( + "php package major version is used for 'detected' metric", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" COMPOSER_MAJOR_VERSION "/detected")); + + /* reset suggestions, leave package with known version in place */ + nr_php_packages_destroy(&txn->php_package_major_version_metrics_suggestions); + txn->php_package_major_version_metrics_suggestions = nr_php_packages_create(); + + /* reset metrics */ + nrm_table_destroy(&txn->unscoped_metrics); + txn->unscoped_metrics = nrm_table_create(10); + + /* 5. package with known version and suggestion with unknown version + * + * add a suggestion with no version and test metric uses package version + */ + nr_txn_suggest_package_supportability_metric(txn, LIBRARY_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal("suggestion with valid version, metric created", 1, + nrm_table_size(txn->unscoped_metrics)); + tlib_pass_if_not_null( + "php package major version is used for 'detected' metric", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" COMPOSER_MAJOR_VERSION "/detected")); + + /* reset everything */ + nrm_table_destroy(&txn->unscoped_metrics); + txn->unscoped_metrics = nrm_table_create(10); + nr_php_packages_destroy(&txn->php_packages); + txn->php_packages = nr_php_packages_create(); + nr_php_packages_destroy(&txn->php_package_major_version_metrics_suggestions); + txn->php_package_major_version_metrics_suggestions = nr_php_packages_create(); + + /* 6. package with unknown version and suggestion with known version */ + nr_txn_suggest_package_supportability_metric(txn, LIBRARY_NAME, + LIBRARY_VERSION); + nr_txn_add_php_package_from_source(txn, LIBRARY_NAME, + PHP_PACKAGE_VERSION_UNKNOWN, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal("suggestion with valid version, metric created", 1, + nrm_table_size(txn->unscoped_metrics)); + tlib_pass_if_not_null( + "php package suggestion major version is used for 'detected' metric", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION "/detected")); + + /* reset everything */ + nrm_table_destroy(&txn->unscoped_metrics); + txn->unscoped_metrics = nrm_table_create(10); + nr_php_packages_destroy(&txn->php_packages); + txn->php_packages = nr_php_packages_create(); + nr_php_packages_destroy(&txn->php_package_major_version_metrics_suggestions); + txn->php_package_major_version_metrics_suggestions = nr_php_packages_create(); + + /* 7. package with unknown version and suggestion with unknown version */ + nr_txn_suggest_package_supportability_metric(txn, LIBRARY_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + nr_txn_add_php_package_from_source(txn, LIBRARY_NAME, + PHP_PACKAGE_VERSION_UNKNOWN, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal( + "suggestion and package w/o version, metric not created", 0, + nrm_table_size(txn->unscoped_metrics)); + + /* reset everything */ + nrm_table_destroy(&txn->unscoped_metrics); + txn->unscoped_metrics = nrm_table_create(10); + nr_php_packages_destroy(&txn->php_packages); + txn->php_packages = nr_php_packages_create(); + nr_php_packages_destroy(&txn->php_package_major_version_metrics_suggestions); + txn->php_package_major_version_metrics_suggestions = nr_php_packages_create(); + + /* 9. package with known "dev" version with and suggestion with unknown version */ + nr_txn_suggest_package_supportability_metric(txn, LIBRARY_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + nr_txn_add_php_package_from_source(txn, LIBRARY_NAME, + DEVEL_LIBRARY_VERSION, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + nr_php_txn_create_packages_major_metrics(txn); + tlib_pass_if_int_equal("suggestion with valid 'dev' version, metric created", 1, + nrm_table_size(txn->unscoped_metrics)); + tlib_pass_if_not_null( + "php package suggestion major version with 'dev' is used for 'detected' metric", + nrm_find(txn->unscoped_metrics, + PACKAGE_METRIC "/" LIBRARY_MAJOR_VERSION "/detected")); + + + /* cleanup */ + nr_php_packages_destroy(&txn->php_packages); + nr_php_packages_destroy(&txn->php_package_major_version_metrics_suggestions); + nrm_table_destroy(&txn->unscoped_metrics); + + tlib_php_request_end(); +} + + +void test_main(void* p NRUNUSED) { + tlib_php_engine_create(""); + test_nr_php_txn_php_package_create_major_metric(); + test_nr_php_txn_create_packages_major_metrics(); + tlib_php_engine_destroy(); +} diff --git a/axiom/nr_php_packages.c b/axiom/nr_php_packages.c index 9c1f97ef8..b8a034086 100644 --- a/axiom/nr_php_packages.c +++ b/axiom/nr_php_packages.c @@ -23,7 +23,23 @@ typedef struct { bool package_added; } nr_php_package_json_builder_t; -nr_php_package_t* nr_php_package_create(char* name, char* version) { +static inline const char* nr_php_package_source_priority_to_string(const nr_php_package_source_priority_t source_priority) { + switch (source_priority) { + case NR_PHP_PACKAGE_SOURCE_SUGGESTION: + return "suggestion"; + case NR_PHP_PACKAGE_SOURCE_LEGACY: + return "legacy"; + case NR_PHP_PACKAGE_SOURCE_COMPOSER: + return "composer"; + default: + return "unknown"; + } +} + +nr_php_package_t* nr_php_package_create_with_source( + const char* name, + const char* version, + const nr_php_package_source_priority_t source_priority) { nr_php_package_t* p = NULL; if (NULL == name) { @@ -43,12 +59,17 @@ nr_php_package_t* nr_php_package_create(char* name, char* version) { PHP_PACKAGE_VERSION_UNKNOWN); // if null, version is set to an empty // string with a space according to spec } + p->source_priority = source_priority; - nrl_verbosedebug(NRL_INSTRUMENT, "Creating PHP Package '%s', version '%s'", - p->package_name, p->package_version); + nrl_verbosedebug(NRL_INSTRUMENT, "Creating PHP Package '%s', version '%s', source %s", + p->package_name, p->package_version, nr_php_package_source_priority_to_string(source_priority)); return p; } +nr_php_package_t* nr_php_package_create(const char* name, const char* version) { + return nr_php_package_create_with_source(name, version, NR_PHP_PACKAGE_SOURCE_LEGACY); +} + void nr_php_package_destroy(nr_php_package_t* p) { if (NULL != p) { nr_free(p->package_name); @@ -72,14 +93,15 @@ nr_php_packages_t* nr_php_packages_create() { return h; } -void nr_php_packages_add_package(nr_php_packages_t* h, nr_php_package_t* p) { +nr_php_package_t* nr_php_packages_add_package(nr_php_packages_t* h, + nr_php_package_t* p) { nr_php_package_t* package; if (NULL == h) { - return; + return NULL; } if (NULL == p || NULL == p->package_name || NULL == p->package_version) { - return; + return NULL; } // If package with the same key already exists, we will check if the value is @@ -87,15 +109,26 @@ void nr_php_packages_add_package(nr_php_packages_t* h, nr_php_package_t* p) { package = (nr_php_package_t*)nr_hashmap_get(h->data, p->package_name, nr_strlen(p->package_name)); if (NULL != package) { - if (0 != nr_strcmp(package->package_version, p->package_version)) { + if (package->source_priority <= p->source_priority && 0 != nr_strcmp(package->package_version, p->package_version)) { nr_free(package->package_version); package->package_version = nr_strdup(p->package_version); } nr_php_package_destroy(p); - return; + return package; } nr_hashmap_set(h->data, p->package_name, nr_strlen(p->package_name), p); + return p; +} + +void nr_php_packages_iterate(nr_php_packages_t* packages, + nr_php_packages_iter_t callback, + void* userdata) { + if (NULL == packages || NULL == callback) { + return; + } + + nr_hashmap_apply(packages->data, (nr_hashmap_apply_func_t)callback, userdata); } char* nr_php_package_to_json(nr_php_package_t* package) { diff --git a/axiom/nr_php_packages.h b/axiom/nr_php_packages.h index 118a63f79..f4945c43e 100644 --- a/axiom/nr_php_packages.h +++ b/axiom/nr_php_packages.h @@ -10,32 +10,65 @@ #include "util_random.h" #include "util_vector.h" #include "util_hashmap.h" +#include "util_strings.h" #define PHP_PACKAGE_VERSION_UNKNOWN " " +typedef enum { + NR_PHP_PACKAGE_SOURCE_SUGGESTION, + NR_PHP_PACKAGE_SOURCE_LEGACY, + NR_PHP_PACKAGE_SOURCE_COMPOSER +} nr_php_package_source_priority_t; + typedef struct _nr_php_package_t { char* package_name; char* package_version; + nr_php_package_source_priority_t source_priority; } nr_php_package_t; typedef struct _nr_php_packages_t { nr_hashmap_t* data; } nr_php_packages_t; +typedef void(nr_php_packages_iter_t)(void* value, + const char* name, + size_t name_len, + void* user_data); + /* - * Purpose : Create a new php package. If the name is null, then no package will + * Purpose : Create a new php package with desired source priority. If the name is null, then no package will * be created. If the version is null (version = NULL), then * the package will still be created and the version will be set to an * empty string with a space. * * Params : 1. Package name * 2. Package version + * 3. Package source priority (legacy or composer) * * Returns : A php package that has a name and version. If * nr_php_packages_add_package() is not called, then it must be freed * by nr_php_package_destroy() */ -extern nr_php_package_t* nr_php_package_create(char* name, char* version); +extern nr_php_package_t* nr_php_package_create_with_source( + const char* name, + const char* version, + const nr_php_package_source_priority_t source_priority); + +/* + * Purpose : Create a new php package with legacy source priority. If the name is null, then no package will + * be created. If the version is null (version = NULL), then + * the package will still be created and the version will be set to an + * empty string with a space. + * + * Params : 1. Package name + * 2. Package version + * + * Returns : A php package that has a name and version. If + * nr_php_packages_add_package() is not called, then it must be freed + * by nr_php_package_destroy() + */ +extern nr_php_package_t* nr_php_package_create(const char* name, + const char* version); /* * Purpose : Destroy/free php package @@ -64,10 +97,10 @@ extern nr_php_packages_t* nr_php_packages_create(void); * 2. A pointer to the php package that needs to be added to the * collection * - * Returns : Nothing + * Returns : pointer to added package on success or NULL otherwise. */ -extern void nr_php_packages_add_package(nr_php_packages_t* h, - nr_php_package_t* p); +extern nr_php_package_t* nr_php_packages_add_package(nr_php_packages_t* h, + nr_php_package_t* p); /* * Purpose : Destroy/free the collection @@ -118,6 +151,40 @@ static inline int nr_php_packages_has_package(nr_php_packages_t* h, return 0; } +/* + * Purpose : Retrieve a pointer to php package from the collection + * + * Params : 1. A pointer to nr_php_packages_t + * 2. The name of the package to retrieve + * + * Returns : Returns pointer to php package if the package exists or NULL + */ +static inline nr_php_package_t* nr_php_packages_get_package( + nr_php_packages_t* php_packages, + const char* package_name) { + if (NULL == package_name) { + return NULL; + } + + if (nrlikely(NULL != php_packages && NULL != php_packages->data)) { + return (nr_php_package_t*)nr_hashmap_get(php_packages->data, package_name, nr_strlen(package_name)); + } + return NULL; +} + +/* + * Purpose : Iterate over packages calling callback function + * + * Params : 1. A pointer to nr_php_packages_t + * 2. Callback function (nr_php_packages_iter_t) + * 3. Pointer to user data (can be NULL) + * + * Returns : Nothing + */ +void nr_php_packages_iterate(nr_php_packages_t* packages, + nr_php_packages_iter_t callback, + void* userdata); + /* * Purpose : Converts a package to a json * diff --git a/axiom/nr_txn.c b/axiom/nr_txn.c index c3667db81..774c44671 100644 --- a/axiom/nr_txn.c +++ b/axiom/nr_txn.c @@ -542,6 +542,7 @@ nrtxn_t* nr_txn_begin(nrapp_t* app, nt->custom_events = nr_analytics_events_create(app->limits.custom_events); nt->log_events = nr_log_events_create(app->limits.log_events); nt->php_packages = nr_php_packages_create(); + nt->php_package_major_version_metrics_suggestions = nr_php_packages_create(); /* * reset flag for creation of one-time logging metrics @@ -1246,6 +1247,7 @@ void nr_txn_destroy_fields(nrtxn_t* txn) { nr_segment_destroy_tree(txn->segment_root); nr_hashmap_destroy(&txn->parent_stacks); nr_php_packages_destroy(&txn->php_packages); + nr_php_packages_destroy(&txn->php_package_major_version_metrics_suggestions); nr_stack_destroy_fields(&txn->default_parent_stack); nr_slab_destroy(&txn->segment_slab); nr_minmax_heap_set_destructor(txn->segment_heap, NULL, NULL); @@ -3494,9 +3496,35 @@ void nr_txn_record_log_event(nrtxn_t* txn, nr_txn_add_logging_metrics(txn, log_level_name); } -void nr_txn_add_php_package(nrtxn_t* txn, - char* package_name, - char* package_version) { +nr_php_package_t* nr_txn_add_php_package_from_source( + nrtxn_t* txn, + char* package_name, + char* package_version, + const nr_php_package_source_priority_t source) { + nr_php_package_t* p = NULL; + + if (nrunlikely(NULL == txn)) { + return NULL; + } + + if (nr_strempty(package_name)) { + return NULL; + } + + p = nr_php_package_create_with_source(package_name, package_version, source); + return nr_php_packages_add_package(txn->php_packages, p); +} + +nr_php_package_t* nr_txn_add_php_package(nrtxn_t* txn, + char* package_name, + char* package_version) { + return nr_txn_add_php_package_from_source(txn, package_name, package_version, + NR_PHP_PACKAGE_SOURCE_LEGACY); +} + +void nr_txn_suggest_package_supportability_metric(nrtxn_t* txn, + const char* package_name, + const char* package_version) { nr_php_package_t* p = NULL; if (nrunlikely(NULL == txn)) { @@ -3507,6 +3535,11 @@ void nr_txn_add_php_package(nrtxn_t* txn, return; } - p = nr_php_package_create(package_name, package_version); - nr_php_packages_add_package(txn->php_packages, p); + nrl_verbosedebug(NRL_TXN, "Suggesting package %s %s", NRSAFESTR(package_name), + NRSAFESTR(package_version)); + + p = nr_php_package_create_with_source(package_name, package_version, + NR_PHP_PACKAGE_SOURCE_SUGGESTION); + nr_php_packages_add_package( + txn->php_package_major_version_metrics_suggestions, p); } diff --git a/axiom/nr_txn.h b/axiom/nr_txn.h index a6f942f66..8874260ec 100644 --- a/axiom/nr_txn.h +++ b/axiom/nr_txn.h @@ -203,6 +203,11 @@ typedef enum _nr_cpu_usage_t { NR_CPU_USAGE_COUNT = 2 } nr_cpu_usage_t; +typedef struct _nr_composer_info_t { + bool autoload_detected; + bool composer_detected; +} nr_composer_info_t; + /* * Possible transaction types, which go into the type bitfield in the nrtxn_t * struct. @@ -281,6 +286,9 @@ typedef struct _nrtxn_t { custom_events; /* Custom events created through the API. */ nr_log_events_t* log_events; /* Log events pool */ nr_php_packages_t* php_packages; /* Detected php packages */ + nr_php_packages_t* + php_package_major_version_metrics_suggestions; /* Suggested packages for + major metric creation */ nrtime_t user_cpu[NR_CPU_USAGE_COUNT]; /* User CPU usage */ nrtime_t sys_cpu[NR_CPU_USAGE_COUNT]; /* System CPU usage */ @@ -302,6 +310,7 @@ typedef struct _nrtxn_t { nr_distributed_trace_t* distributed_trace; /* distributed tracing metadata for the transaction */ nr_span_queue_t* span_queue; /* span queue when 8T is enabled */ + nr_composer_info_t composer_info; /* * flag to indicate if one time (per transaction) logging metrics @@ -1164,16 +1173,52 @@ static inline nr_segment_t* nr_txn_allocate_segment(nrtxn_t* txn) { } /* - * Purpose : Add php packages to transaction. This function should only be - * called when Vulnerability Management is enabled. + * Purpose : Add php package to transaction from desired source. This function + * should only be called when Vulnerability Management is enabled. + * + * Params : 1. The transaction + * 2. Package name + * 3. Package version + * 4. Source priority + * + * Returns : pointer to added package on success or NULL otherwise. + */ +nr_php_package_t* nr_txn_add_php_package_from_source( + nrtxn_t* txn, + char* package_name, + char* package_version, + const nr_php_package_source_priority_t source); + +/* + * Purpose : Add php package to transaction from legacy source. This function + * should only be called when Vulnerability Management is enabled. * * Params : 1. The transaction * 2. Package name * 3. Package version * + * Returns : pointer to added package on success or NULL otherwise. */ -void nr_txn_add_php_package(nrtxn_t* txn, - char* package_name, - char* package_version); +extern nr_php_package_t* nr_txn_add_php_package(nrtxn_t* txn, + char* package_name, + char* package_version); +/* + * Purpose : Add php package suggestion to transaction. This function + * can be used when Vulnerability Management is not enabled. It will + * add the package to the transaction's + * php_package_major_version_metrics_suggestions list. At the end of the + * transaction this list is traversed and any suggestions with a known version + * will have a package major version metric created. + * + * Params : 1. The transaction + * 2. Package name + * 3. Package version (can be NULL or PHP_PACKAGE_VERSION_UNKNOWN) + * + * Returns : Nothing. + */ +extern void nr_txn_suggest_package_supportability_metric( + nrtxn_t* txn, + const char* package_name, + const char* package_version); #endif /* NR_TXN_HDR */ diff --git a/axiom/tests/.gitignore b/axiom/tests/.gitignore index e2e2db564..22ee3b042 100644 --- a/axiom/tests/.gitignore +++ b/axiom/tests/.gitignore @@ -82,6 +82,7 @@ test_number_converter test_obfuscate test_object test_offsets +test_php_packages test_postgres test_quarantine test_random diff --git a/axiom/tests/test_php_packages.c b/axiom/tests/test_php_packages.c index 427ece058..bd2323b2f 100644 --- a/axiom/tests/test_php_packages.c +++ b/axiom/tests/test_php_packages.c @@ -192,6 +192,183 @@ static void test_php_package_without_version(void) { nr_php_packages_destroy(&hm); } +static void test_php_package_priority(void) { +#define PACKAGE_NAME "vendor/package" +#define NO_VERSION NULL +#define PACKAGE_VERSION "1.0.0" +#define COMPOSER_VERSION "1.0.1" +#define COMPOSER_VERSION_2 "2.0.1" + nr_php_package_t* legacy_package; + nr_php_package_t* composer_package; + nr_php_package_t* composer_package_2; + nr_php_package_t* p; + nr_php_packages_t* hm = NULL; + int count; + char* legacy_versions[] = {NO_VERSION, PACKAGE_VERSION}; + + // Package added with legacy priority first - version from composer should win + for (size_t i = 0; i < sizeof(legacy_versions) / sizeof(legacy_versions[0]); + i++) { + legacy_package = nr_php_package_create( + PACKAGE_NAME, legacy_versions[i]); // legacy priority + tlib_pass_if_int_equal("create package by uses legacy priority", + NR_PHP_PACKAGE_SOURCE_LEGACY, + legacy_package->source_priority); + composer_package = nr_php_package_create_with_source( + PACKAGE_NAME, COMPOSER_VERSION, + NR_PHP_PACKAGE_SOURCE_COMPOSER); // composer priority + tlib_pass_if_int_equal("create package by uses composer priority", + NR_PHP_PACKAGE_SOURCE_COMPOSER, + composer_package->source_priority); + + hm = nr_php_packages_create(); + // order of adding packages: legacy first, composer second + nr_php_packages_add_package(hm, legacy_package); + nr_php_packages_add_package(hm, composer_package); + + count = nr_php_packages_count(hm); + tlib_pass_if_int_equal("add same package", 1, count); + + p = nr_php_packages_get_package(hm, PACKAGE_NAME); + tlib_pass_if_not_null("package exists", p); + tlib_pass_if_str_equal("package version from composer wins", + COMPOSER_VERSION, p->package_version); + + nr_php_packages_destroy(&hm); + } + + // Package added with composer priority first - version from composer should + // win + for (size_t i = 0; i < sizeof(legacy_versions) / sizeof(legacy_versions[0]); + i++) { + legacy_package = nr_php_package_create( + PACKAGE_NAME, legacy_versions[i]); // legacy priority + tlib_pass_if_int_equal("create package by uses legacy priority", + NR_PHP_PACKAGE_SOURCE_LEGACY, + legacy_package->source_priority); + composer_package = nr_php_package_create_with_source( + PACKAGE_NAME, COMPOSER_VERSION, + NR_PHP_PACKAGE_SOURCE_COMPOSER); // composer priority + tlib_pass_if_int_equal("create package by uses composer priority", + NR_PHP_PACKAGE_SOURCE_COMPOSER, + composer_package->source_priority); + + hm = nr_php_packages_create(); + // order of adding packages: legacy first, composer second + nr_php_packages_add_package(hm, composer_package); + nr_php_packages_add_package(hm, legacy_package); + + count = nr_php_packages_count(hm); + tlib_pass_if_int_equal("add same package", 1, count); + + p = nr_php_packages_get_package(hm, PACKAGE_NAME); + tlib_pass_if_not_null("package exists", p); + tlib_pass_if_str_equal("package version from composer wins", + COMPOSER_VERSION, p->package_version); + + nr_php_packages_destroy(&hm); + } + + // Package added with composer priority only - last version from composer + // should win + composer_package = nr_php_package_create_with_source( + PACKAGE_NAME, COMPOSER_VERSION, + NR_PHP_PACKAGE_SOURCE_COMPOSER); // composer priority + tlib_pass_if_int_equal("create package by uses composer priority", + NR_PHP_PACKAGE_SOURCE_COMPOSER, + composer_package->source_priority); + + composer_package_2 = nr_php_package_create_with_source( + PACKAGE_NAME, COMPOSER_VERSION_2, + NR_PHP_PACKAGE_SOURCE_COMPOSER); // composer priority + tlib_pass_if_int_equal("create package by uses composer priority", + NR_PHP_PACKAGE_SOURCE_COMPOSER, + composer_package_2->source_priority); + + hm = nr_php_packages_create(); + // order of adding packages: composer first, composer second + nr_php_packages_add_package(hm, composer_package); + nr_php_packages_add_package(hm, composer_package_2); + + count = nr_php_packages_count(hm); + tlib_pass_if_int_equal("add same package", 1, count); + + p = nr_php_packages_get_package(hm, PACKAGE_NAME); + tlib_pass_if_not_null("package exists", p); + tlib_pass_if_str_equal("package version from last composer wins", + COMPOSER_VERSION_2, p->package_version); + + nr_php_packages_destroy(&hm); +} + +static void nr_php_packages_itereate_callback(void* value, + const char* key, + size_t key_len, + void* user_data) { + nr_php_package_t* package = value; + const char* name = key; + nrbuf_t* buf = (nrbuf_t*)user_data; + + if (NULL == buf) { + return; + } + + /* append name, len, version to string */ + nr_buffer_add(buf, name, key_len); + nr_buffer_add(buf, NR_PSTR(",")); + nr_buffer_add(buf, package->package_version, + nr_strlen(package->package_version)); + nr_buffer_add(buf, NR_PSTR("\n")); +} + +static void test_php_package_iterate(void) { + nr_php_package_t* package1; + nr_php_package_t* package2; + nr_php_package_t* package3; + nr_php_packages_t* hm = nr_php_packages_create(); + nrbuf_t* buf; + int count; + + // Test: create multiple new packages and add to hashmap + package1 = nr_php_package_create("name1", "name1_version"); + package2 = nr_php_package_create("name2", "name2_version"); + package3 = nr_php_package_create("name3", "name3_version"); + + nr_php_packages_add_package(hm, package1); + nr_php_packages_add_package(hm, package2); + nr_php_packages_add_package(hm, package3); + + count = nr_php_packages_count(hm); + + tlib_pass_if_int_equal("package count", 3, count); + + /* tests with invalid values + * NOTE: nr_buffer_cptr(buf) will return NULL if no data is in the buffer + */ + buf = nr_buffer_create(0, 0); + nr_php_packages_iterate(NULL, nr_php_packages_itereate_callback, (void*)buf); + tlib_pass_if_null("iterate with NULL hashmap", nr_buffer_cptr(buf)); + nr_php_packages_iterate(hm, nr_php_packages_itereate_callback, NULL); + tlib_pass_if_null("iterate with NULL userdata", nr_buffer_cptr(buf)); + nr_php_packages_iterate(hm, NULL, (void*)buf); + tlib_pass_if_null("iterate with NULL callback", nr_buffer_cptr(buf)); + nr_php_packages_iterate(NULL, NULL, NULL); + tlib_pass_if_null("iterate with all NULL", nr_buffer_cptr(buf)); + nr_buffer_destroy(&buf); + + /* test with valid values */ + buf = nr_buffer_create(0, 0); + nr_php_packages_iterate(hm, nr_php_packages_itereate_callback, (void*)buf); + nr_buffer_add(buf, NR_PSTR("\0")); + tlib_pass_if_str_equal("iterate created proper string", + "name1,name1_version\nname2,name2_version\nname3,name3_version\n", nr_buffer_cptr(buf)); + nr_buffer_destroy(&buf); + + nr_php_packages_destroy(&hm); +} + + + tlib_parallel_info_t parallel_info = {.suggested_nthreads = -1, .state_size = 0}; @@ -203,4 +380,6 @@ void test_main(void* p NRUNUSED) { test_php_packages_to_json(); test_php_package_exists_in_hashmap(); test_php_package_without_version(); -} \ No newline at end of file + test_php_package_priority(); + test_php_package_iterate(); +} diff --git a/axiom/tests/test_txn.c b/axiom/tests/test_txn.c index 59b19f9b0..9230a416a 100644 --- a/axiom/tests/test_txn.c +++ b/axiom/tests/test_txn.c @@ -8597,6 +8597,8 @@ static void test_nr_txn_add_php_package(void) { char* package_name4 = "Wordpress"; char* package_version4 = PHP_PACKAGE_VERSION_UNKNOWN; nrtxn_t* txn = new_txn(0); + nr_php_package_t* p1 = NULL; + nr_php_package_t* p2 = NULL; /* * NULL parameters: ensure it does not crash @@ -8621,6 +8623,130 @@ static void test_nr_txn_add_php_package(void) { nr_free(json); nr_txn_destroy(&txn); + + txn = new_txn(0); + p1 = nr_txn_add_php_package(txn, package_name1, package_version1); + p2 = nr_txn_add_php_package(txn, package_name1, package_version2); + tlib_pass_if_ptr_equal( + "same package name, different version, add returns same pointer", p1, p2); + nr_txn_destroy(&txn); +} + +static void test_nr_txn_add_php_package_from_source(void) { + char* json; + char* package_name1 = "Laravel"; + char* package_version1 = "8.83.27"; + char* package_name2 = "Slim"; + char* package_version2 = "4.12.0"; + char* package_name3 = "Drupal"; + char* package_version3 = NULL; + char* package_name4 = "Wordpress"; + char* package_version4 = PHP_PACKAGE_VERSION_UNKNOWN; + nrtxn_t* txn = new_txn(0); + nr_php_package_t* p1 = NULL; + nr_php_package_t* p2 = NULL; + + /* + * NULL parameters: ensure it does not crash + */ + nr_txn_add_php_package_from_source(NULL, NULL, NULL, 0); + nr_txn_add_php_package_from_source(NULL, package_name1, package_version1, 0); + nr_txn_add_php_package_from_source(txn, NULL, package_version1, 0); + nr_txn_add_php_package_from_source(txn, package_name1, NULL, 0); + + // Test: add php packages to transaction + nr_txn_add_php_package_from_source(txn, package_name1, package_version1, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + nr_txn_add_php_package_from_source(txn, package_name2, package_version2, + NR_PHP_PACKAGE_SOURCE_LEGACY); + nr_txn_add_php_package_from_source(txn, package_name3, package_version3, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + nr_txn_add_php_package_from_source(txn, package_name4, package_version4, + NR_PHP_PACKAGE_SOURCE_LEGACY); + json = nr_php_packages_to_json(txn->php_packages); + + tlib_pass_if_str_equal("correct json", + "[[\"Laravel\",\"8.83.27\",{}]," + "[\"Drupal\",\" \",{}],[\"Wordpress\",\" \",{}]," + "[\"Slim\",\"4.12.0\",{}]]", + json); + + nr_free(json); + nr_txn_destroy(&txn); + + txn = new_txn(0); + p1 = nr_txn_add_php_package_from_source(txn, package_name1, package_version1, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + p2 = nr_txn_add_php_package_from_source(txn, package_name1, package_version2, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + tlib_pass_if_ptr_equal( + "same package name, different version, add returns same pointer", p1, p2); + nr_txn_destroy(&txn); + + txn = new_txn(0); + p1 = nr_txn_add_php_package_from_source(txn, package_name1, package_version1, + NR_PHP_PACKAGE_SOURCE_LEGACY); + p2 = nr_txn_add_php_package_from_source(txn, package_name1, package_version2, + NR_PHP_PACKAGE_SOURCE_COMPOSER); + tlib_pass_if_ptr_equal( + "same package name, different version, add returns different pointer", p1, + p2); + tlib_pass_if_str_equal("composer version used", package_version2, + p2->package_version); + + nr_txn_destroy(&txn); +} + +static void test_nr_txn_suggest_package_supportability_metric(void) { + char* json; + char* package_name1 = "Laravel"; + char* package_version1 = "8.83.27"; + char* package_name2 = "Slim"; + char* package_version2 = "4.12.0"; + char* package_name3 = "Drupal"; + char* package_version3 = NULL; + char* package_name4 = "Wordpress"; + char* package_version4 = PHP_PACKAGE_VERSION_UNKNOWN; + nrtxn_t* txn = new_txn(0); + nr_php_package_t* p1 = NULL; + nr_php_package_t* p2 = NULL; + + /* + * NULL parameters: ensure it does not crash + */ + nr_txn_suggest_package_supportability_metric(NULL, NULL, NULL); + nr_txn_suggest_package_supportability_metric(NULL, package_name1, + package_version1); + nr_txn_suggest_package_supportability_metric(txn, NULL, package_version1); + nr_txn_suggest_package_supportability_metric(txn, package_name1, NULL); + + // Test: add php packages to transaction + nr_txn_suggest_package_supportability_metric(txn, package_name1, + package_version1); + nr_txn_suggest_package_supportability_metric(txn, package_name2, + package_version2); + nr_txn_suggest_package_supportability_metric(txn, package_name3, + package_version3); + nr_txn_suggest_package_supportability_metric(txn, package_name4, + package_version4); + json = nr_php_packages_to_json( + txn->php_package_major_version_metrics_suggestions); + + tlib_pass_if_str_equal("correct json", + "[[\"Laravel\",\"8.83.27\",{}]," + "[\"Drupal\",\" \",{}],[\"Wordpress\",\" \",{}]," + "[\"Slim\",\"4.12.0\",{}]]", + json); + + nr_free(json); + nr_txn_destroy(&txn); + + txn = new_txn(0); + p1 = nr_txn_add_php_package(txn, package_name1, package_version1); + p2 = nr_txn_add_php_package(txn, package_name1, package_version2); + tlib_pass_if_ptr_equal( + "same package name, different version, add returns same pointer", p1, p2); + nr_txn_destroy(&txn); } tlib_parallel_info_t parallel_info @@ -8725,4 +8851,6 @@ void test_main(void* p NRUNUSED) { test_record_log_event(); test_txn_log_configuration(); test_nr_txn_add_php_package(); + test_nr_txn_add_php_package_from_source(); + test_nr_txn_suggest_package_supportability_metric(); } diff --git a/daemon/internal/newrelic/integration/php_packages.go b/daemon/internal/newrelic/integration/php_packages.go index 375954b0d..fc9a10a59 100644 --- a/daemon/internal/newrelic/integration/php_packages.go +++ b/daemon/internal/newrelic/integration/php_packages.go @@ -31,12 +31,13 @@ type PhpPackagesCollection struct { // PHP packages config describes how to collect the JSON for the packages installed // for the current test case type PhpPackagesConfiguration struct { - path string - command string - supportedListFile string - overrideVersionsFile string - expectedPackages []string - packageNameOnly []string + path string // + command string // command to run to detect packages + supportedListFile string // JSON file containing list of packages we expect agent to detect + overrideVersionsFile string // JSON file containing overrides for expected package versions + expectedPackages []string // manual override of packages we expect to detect + packageNameOnly []string // list of packages which only have a name because agent cannot determine the version + expectAllDetected bool // flag to indicate we expect all packages detected by the command "command" } // composer package JSON @@ -159,16 +160,22 @@ func NewPhpPackagesCollection(path string, config []byte) (*PhpPackagesCollectio } } - if supportedOK && expectedOK { - return nil, fmt.Errorf("Improper EXPECT_PHP_PACKAGES config - cannot specify 'supported_packages' and 'expected packages' - got %+v", params) + // or "expect_all" which means we expect the agent to detect all the packages that the "command" option would detect + _, expectAllOK := params["expect_all"] + + if (supportedOK && expectedOK) || (supportedOK && expectAllOK) || (expectedOK && expectAllOK) { + return nil, fmt.Errorf("Improper EXPECT_PHP_PACKAGES config - must specify one of 'supported_packages', "+ + "'expected packages' or 'expect_all' - got %+v", params) } - if !supportedOK && !expectedOK { - return nil, fmt.Errorf("Improper EXPECT_PHP_PACKAGES config - must specify 'supported_packages' or 'expected packages' - got %+v", params) + if !supportedOK && !expectedOK && !expectAllOK { + return nil, fmt.Errorf("Improper EXPECT_PHP_PACKAGES config - must specify 'supported_packages' or 'expected packages' "+ + "or 'expect_all' - got %+v", params) } - if supportedOK && !commandOK { - return nil, fmt.Errorf("Improper EXPECT_PHP_PACKAGES config - must specify 'command' option with `supported_packages` - got %+v", params) + if (supportedOK || expectAllOK) && !commandOK { + return nil, fmt.Errorf("Improper EXPECT_PHP_PACKAGES config - must specify 'command' option with `supported_packages` / "+ + "'expect_all' - got %+v", params) } // optional option to specify which packages will only have a name because agent cannot determine the version @@ -209,7 +216,8 @@ func NewPhpPackagesCollection(path string, config []byte) (*PhpPackagesCollectio supportedListFile: supportedListFile, overrideVersionsFile: overrideVersionsFile, expectedPackages: expectedPackagesArr, - packageNameOnly: packageNameOnlyArr}, + packageNameOnly: packageNameOnlyArr, + expectAllDetected: expectAllOK}, } return p, nil @@ -296,18 +304,27 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro var supported []string // get list of packages we expected the agent to detect - // this can be one of 2 scenarios: + // this can be one of 3 scenarios: // 1) test case used the "supported_packages" option which gives a JSON file which // lists all the packages the agent can detect // 2) test case used the "expected_packages" options which provides a comma separated // list of packages we expect the agent to detect + // 3) test case used the "expect_all" option which means we expect the agent to + // detect all the packages that the "command" option would detect + // + // Options #1 and #2 are mutually exclusive, and are intended for testing the legacy VM detection + // mechanism where the agent looks for "magic" files of a package and examinew internals of the + // package to determine its version. // - // Option #1 is preferable as it provides the most comprehensive view of what the agent can do. + // Option #1 is preferable when it available as it provides the most comprehensive view of what the agent can do. // // Option #2 is needed because some test cases do not exercise all the packages which are // installed and so the agent will not detect everything for that test case run which it could // theorectically detect if the test case used all the available packages installed. // + // Option #3 is used when testing the agent's ability to detect packages using the Composer API. In + // this case we expect the agent to detect the exact same packages as composer would detect. + // // Once the list of packages the agent is expected to detect is created it is used to filter // down the package list returned by running the "command" (usually composer) option for the // test case provided. @@ -318,8 +335,9 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro } } else if 0 < len(pkgs.config.expectedPackages) { supported = pkgs.config.expectedPackages - } else { - return nil, fmt.Errorf("Error determining expected packages - supported_packages and expected_packages are both empty") + } else if !pkgs.config.expectAllDetected { + return nil, fmt.Errorf("Error determining expected packages - supported_packages and expected_packages are both empty " + + "and expect_all is false") } splitCmd := strings.Split(pkgs.config.command, " ") @@ -339,7 +357,7 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro json.Unmarshal([]byte(out), &detected) for _, v := range detected.Installed { //fmt.Printf("composer detected %s %s\n", v.Name, v.Version) - if StringSliceContains(supported, v.Name) { + if pkgs.config.expectAllDetected || StringSliceContains(supported, v.Name) { var version string // remove any 'v' from front of version string @@ -371,6 +389,18 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro if 0 < len(version) { pkgs.packages = append(pkgs.packages, PhpPackage{"wordpress", version}) } + } else if 1 < len(splitCmd) && "composer-show.php" == splitCmd[1] { + lines := strings.Split(string(out), "\n") + version := "" + for _, line := range lines { + //fmt.Printf("line is |%s|\n", line) + splitLine := strings.Split(line, "=>") + if 2 == len(splitLine) { + name := strings.TrimSpace(splitLine[0]) + version = strings.TrimSpace(splitLine[1]) + pkgs.packages = append(pkgs.packages, PhpPackage{name, version}) + } + } } else { return nil, fmt.Errorf("ERROR - unknown method '%s'\n", splitCmd[0]) } diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index 631be4615..3e70e769a 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -637,6 +637,7 @@ func (t *Test) comparePhpPackages(harvest *newrelic.Harvest) { var expectedPkgsCollection *PhpPackagesCollection var expectNullPkgs bool var version_overrides map[string]interface{} + var subsetMatch bool = false if nil != t.phpPackagesConfig { var err error @@ -656,6 +657,19 @@ func (t *Test) comparePhpPackages(harvest *newrelic.Harvest) { t.Fatal(err) return } + + // Determine if we expect an exact match between expected and actual packages + // when using the composer API in the agent to detect packages it is possible + // it will return packages which the "composer show" command does not. These + // are usually virtual or other types of packages which "composer show" + // decides to not show. + // + // Currently the test handles this by listing all the packages that the agent + // detected but "composer show" did not as "Notes" on the test results. + // + // Tests for the legacy package detection mechanism still expect an exact match. + // + subsetMatch = expectedPkgsCollection.config.expectAllDetected } } else { // no configuration given for package (no EXPECT_PHP_PACKAGES in test case) so don't run test @@ -690,22 +704,44 @@ func (t *Test) comparePhpPackages(harvest *newrelic.Harvest) { if nil == expectedPackages { t.Fail(fmt.Errorf("No expected PHP packages, harvest contains %+v\n", actualPackages)) } - // compare expected and actual lists of packages + // Compare expected and actual lists of packages // since package names should be identical, iterate over // expected list and compare element by element with same // position in actual list. Name and version should match. // this works because the functions which generate these // lists sort them by package name for us - if len(expectedPackages) != len(actualPackages) { + // + // As explained above - if testing results from the Composer API + // agent detection mechanism, we may not get an exact match so + // we relax the test that the lengths of the two lists are the same + if !subsetMatch && (len(expectedPackages) != len(actualPackages)) { t.Fail(fmt.Errorf("Expected and actual php packages differ in length %d vs %d: expected %+v actual %+v", len(expectedPackages), len(actualPackages), expectedPackages, actualPackages)) return } for i, _ := range expectedPackages { - if expectedPackages[i].Name == actualPackages[i].Name { + var matchingIdx int = -1 + for j, pkg := range actualPackages { + //fmt.Printf("Comparing %s to %s\n", pkg.Name, expectedPackages[i].Name) + if pkg.Name == expectedPackages[i].Name { + //fmt.Printf("Match - index = %d\n", j) + matchingIdx = j + break + } + } + + //fmt.Printf("MatchingIdx: %d\n", matchingIdx) + //fmt.Printf("expectedPatckages[%d]: %+v\n", i, expectedPackages[i]) + // if -1 != matchingIdx { + // fmt.Printf("actualPackages[%d]: %+v\n", matchingIdx, actualPackages[matchingIdx]) + // } else { + // fmt.Printf("no match in actualPackages!\n") + // } + + if -1 != matchingIdx { testPackageNameOnly := false if nil != expectedPkgsCollection.config.packageNameOnly { - testPackageNameOnly = StringSliceContains(expectedPkgsCollection.config.packageNameOnly, actualPackages[i].Name) + testPackageNameOnly = StringSliceContains(expectedPkgsCollection.config.packageNameOnly, actualPackages[matchingIdx].Name) if testPackageNameOnly { t.AddNote(fmt.Sprintf("Tested package name only for packages: %+v", expectedPkgsCollection.config.packageNameOnly)) } @@ -720,23 +756,41 @@ func (t *Test) comparePhpPackages(harvest *newrelic.Harvest) { } if testPackageNameOnly { - if " " != actualPackages[i].Version { + if " " != actualPackages[matchingIdx].Version { t.Fail(fmt.Errorf("Expected no package version and a package version was detected - expected \" \" actual %+v. ", - actualPackages[i].Version)) + actualPackages[matchingIdx].Version)) return } else { continue } } - if expected_version == actualPackages[i].Version { + if expected_version == actualPackages[matchingIdx].Version { continue + } else { + t.Fail(fmt.Errorf("Expected version %s does not match actual version %s for package %s", + expected_version, actualPackages[matchingIdx].Version, expectedPackages[i].Name)) + return } } - t.Fail(fmt.Errorf("Expected and actual Php packages do not match: expected %+v actual %+v. Complete expected %v actual %v.", - expectedPackages[i], actualPackages[i], expectedPackages, actualPackages)) + t.Fail(fmt.Errorf("Expected Php packages do not match any actual packages: expected %+v\nComplete:\nexpected %v\nactual %v.\n", + expectedPackages[i], expectedPackages, actualPackages)) return } + + // create notes for all packages in the actual list not in the expected list + for ii, _ := range actualPackages { + var found bool = false + for _, pkg := range expectedPackages { + if pkg.Name == actualPackages[ii].Name { + found = true + break + } + } + if !found { + t.AddNote(fmt.Sprintf("Detected package not in expected: %+v", actualPackages[ii])) + } + } } else { if nil != expectedPackages { t.Fail(fmt.Errorf("Expected PHP packages %+v, harvest contains none\n", expectedPackages)) diff --git a/tests/integration/autoloader/autoload-with-broken-composer-00/vendor/autoload.php b/tests/integration/autoloader/autoload-with-broken-composer-00/vendor/autoload.php new file mode 100644 index 000000000..01d206c0f --- /dev/null +++ b/tests/integration/autoloader/autoload-with-broken-composer-00/vendor/autoload.php @@ -0,0 +1,12 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/autoload-with-broken-composer-00/vendor/composer/autoload_real.php b/tests/integration/autoloader/autoload-with-broken-composer-00/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/autoload-with-broken-composer-00/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked data: installed packages and their versions + 'versions' => array( + 'vendor1/package1' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'pretty_version' => '2.1.5', + 'version' => '2.1.5.0', + 'type' => 'library' + ) + ) + ); diff --git a/tests/integration/autoloader/autoload-with-broken-composer-01/vendor/autoload.php b/tests/integration/autoloader/autoload-with-broken-composer-01/vendor/autoload.php new file mode 100644 index 000000000..01d206c0f --- /dev/null +++ b/tests/integration/autoloader/autoload-with-broken-composer-01/vendor/autoload.php @@ -0,0 +1,12 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/autoload-with-broken-composer-01/vendor/composer/autoload_real.php b/tests/integration/autoloader/autoload-with-broken-composer-01/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/autoload-with-broken-composer-01/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked data: installed packages and their versions + 'versions' => array( + 'vendor1/package1' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'pretty_version' => '2.1.5', + 'version' => '2.1.5.0', + 'type' => 'library' + ) + ) + ); diff --git a/tests/integration/autoloader/autoload-with-broken-composer-02/vendor/autoload.php b/tests/integration/autoloader/autoload-with-broken-composer-02/vendor/autoload.php new file mode 100644 index 000000000..01d206c0f --- /dev/null +++ b/tests/integration/autoloader/autoload-with-broken-composer-02/vendor/autoload.php @@ -0,0 +1,12 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/autoload-with-broken-composer-02/vendor/composer/autoload_real.php b/tests/integration/autoloader/autoload-with-broken-composer-02/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/autoload-with-broken-composer-02/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/autoload-with-composer-throwing-error/vendor/composer/autoload_real.php b/tests/integration/autoloader/autoload-with-composer-throwing-error/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/autoload-with-composer-throwing-error/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked data: installed packages and their versions + 'versions' => array( + 'vendor1/package1' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'pretty_version' => '2.1.5', + 'version' => '2.1.5.0', + 'type' => 'library' + ) + ) + ); diff --git a/tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/autoload.php b/tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/autoload.php new file mode 100644 index 000000000..01d206c0f --- /dev/null +++ b/tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/autoload.php @@ -0,0 +1,12 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/composer/autoload_real.php b/tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/autoload-with-composer-throwing-exception/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked data: installed packages and their versions + 'versions' => array( + 'vendor1/package1' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'pretty_version' => '2.1.5', + 'version' => '2.1.5.0', + 'type' => 'library' + ) + ) + ); diff --git a/tests/integration/autoloader/autoload-with-composer/vendor/autoload.php b/tests/integration/autoloader/autoload-with-composer/vendor/autoload.php new file mode 100644 index 000000000..01d206c0f --- /dev/null +++ b/tests/integration/autoloader/autoload-with-composer/vendor/autoload.php @@ -0,0 +1,12 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/autoload-with-composer/vendor/composer/autoload_real.php b/tests/integration/autoloader/autoload-with-composer/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/autoload-with-composer/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked data: installed packages and their versions + 'versions' => array( + 'vendor1/package1' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'pretty_version' => '2.1.5', + 'version' => '2.1.5.0', + 'type' => 'library' + ) + ) + ); diff --git a/tests/integration/autoloader/autoload-without-composer/vendor/autoload.php b/tests/integration/autoloader/autoload-without-composer/vendor/autoload.php new file mode 100644 index 000000000..0a6947fef --- /dev/null +++ b/tests/integration/autoloader/autoload-without-composer/vendor/autoload.php @@ -0,0 +1,12 @@ + 1) { + $installedVersions = $argv[1]; +} + +include $installedVersions; +if ($argc > 2) { + $installed = Composer\InstalledVersions::getAllRawData(); + $package = $argv[2]; + $version = ltrim($installed[0]['versions'][$package]['pretty_version'], 'v'); + echo "$package => $version\n"; +} else { + Composer\InstalledVersions::show(); +} diff --git a/tests/integration/autoloader/packages-with-broken-composer-00/vendor/autoload.php b/tests/integration/autoloader/packages-with-broken-composer-00/vendor/autoload.php new file mode 100644 index 000000000..01d206c0f --- /dev/null +++ b/tests/integration/autoloader/packages-with-broken-composer-00/vendor/autoload.php @@ -0,0 +1,12 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/packages-with-broken-composer-00/vendor/composer/autoload_real.php b/tests/integration/autoloader/packages-with-broken-composer-00/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/packages-with-broken-composer-00/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked data: installed packages and their versions + 'versions' => array( + 'vendor1/package1' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'pretty_version' => '2.1.5', + 'version' => '2.1.5.0', + 'type' => 'library' + ), + 'symfony/http-kernel' => array( + 'pretty_version' => '5.4.5', + 'version' => '5.4.5.0', + 'type' => 'library' + ), + ) + ); diff --git a/tests/integration/autoloader/packages-with-broken-composer-00/vendor/symfony/http-kernel/HttpKernel.php b/tests/integration/autoloader/packages-with-broken-composer-00/vendor/symfony/http-kernel/HttpKernel.php new file mode 100644 index 000000000..2cceb6ac7 --- /dev/null +++ b/tests/integration/autoloader/packages-with-broken-composer-00/vendor/symfony/http-kernel/HttpKernel.php @@ -0,0 +1,12 @@ + $info) { + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/packages-with-broken-composer-01/vendor/composer/autoload_real.php b/tests/integration/autoloader/packages-with-broken-composer-01/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/packages-with-broken-composer-01/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked data: installed packages and their versions + 'versions' => array( + 'vendor1/package1' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'pretty_version' => '2.1.5', + 'version' => '2.1.5.0', + 'type' => 'library' + ), + 'laravel/framework' => array( + 'pretty_version' => '11.4.5', + 'version' => '11.4.5', + 'type' => 'library' + ), + ) + ); diff --git a/tests/integration/autoloader/packages-with-broken-composer-01/vendor/laravel/framework/src/Illuminate/Foundation/Application.php b/tests/integration/autoloader/packages-with-broken-composer-01/vendor/laravel/framework/src/Illuminate/Foundation/Application.php new file mode 100644 index 000000000..3c6718e89 --- /dev/null +++ b/tests/integration/autoloader/packages-with-broken-composer-01/vendor/laravel/framework/src/Illuminate/Foundation/Application.php @@ -0,0 +1,25 @@ + $info) { + if (!is_string($package)) { + continue; + } + if (!is_array($info)) { + continue; + } + if (!array_key_exists('pretty_version', $info)) { + continue; + } + if (!is_string($info['pretty_version'])) { + continue; + } + $version = ltrim($info['pretty_version'], 'v'); + echo "$package => $version\n"; + } + } +} diff --git a/tests/integration/autoloader/packages-with-broken-composer-02/vendor/composer/autoload_real.php b/tests/integration/autoloader/packages-with-broken-composer-02/vendor/composer/autoload_real.php new file mode 100644 index 000000000..014c86e9a --- /dev/null +++ b/tests/integration/autoloader/packages-with-broken-composer-02/vendor/composer/autoload_real.php @@ -0,0 +1,9 @@ + array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'project' + ), + // Mocked invalid package data: + // - package without name and version + // - package without name but with version + // - package with name but without version + // Mocked valid package data: + // - package with name and version + 'versions' => array( + array( + 'version' => '1.1.3.0', + 'type' => 'library' + ), + array( + 'pretty_version' => 'v2.1.3', + 'version' => '2.1.3.0', + 'type' => 'library' + ), + 'vendor2/package2' => array( + 'version' => '3.1.5.0', + 'type' => 'library' + ), + 'laravel/framework' => array( + 'pretty_version' => '11.4.5', + 'version' => '11.4.5', + 'type' => 'library' + ), + ) + ); diff --git a/tests/integration/autoloader/packages-with-broken-composer-02/vendor/laravel/framework/src/Illuminate/Foundation/Application.php b/tests/integration/autoloader/packages-with-broken-composer-02/vendor/laravel/framework/src/Illuminate/Foundation/Application.php new file mode 100644 index 000000000..3c6718e89 --- /dev/null +++ b/tests/integration/autoloader/packages-with-broken-composer-02/vendor/laravel/framework/src/Illuminate/Foundation/Application.php @@ -0,0 +1,25 @@ +emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_cat.php b/tests/integration/logging/monolog2/test_monolog_cat.php index d96e38aec..b192b9ce9 100644 --- a/tests/integration/logging/monolog2/test_monolog_cat.php +++ b/tests/integration/logging/monolog2/test_monolog_cat.php @@ -56,7 +56,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -183,4 +183,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_context_simple.php b/tests/integration/logging/monolog2/test_monolog_context_simple.php index 769694845..a0f0b7260 100644 --- a/tests/integration/logging/monolog2/test_monolog_context_simple.php +++ b/tests/integration/logging/monolog2/test_monolog_context_simple.php @@ -59,7 +59,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/logging/monolog2/test_monolog_decoration_and_forwarding.php b/tests/integration/logging/monolog2/test_monolog_decoration_and_forwarding.php index 1737a919c..82ad4be61 100644 --- a/tests/integration/logging/monolog2/test_monolog_decoration_and_forwarding.php +++ b/tests/integration/logging/monolog2/test_monolog_decoration_and_forwarding.php @@ -113,7 +113,7 @@ [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/api/get_linking_metadata"}, [16, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -257,4 +257,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_disable_metrics.php b/tests/integration/logging/monolog2/test_monolog_disable_metrics.php index 95b84d636..eaed5d5d4 100644 --- a/tests/integration/logging/monolog2/test_monolog_disable_metrics.php +++ b/tests/integration/logging/monolog2/test_monolog_disable_metrics.php @@ -51,7 +51,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -153,4 +153,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_drop_empty.php b/tests/integration/logging/monolog2/test_monolog_drop_empty.php index 8139e3606..5d48030ca 100644 --- a/tests/integration/logging/monolog2/test_monolog_drop_empty.php +++ b/tests/integration/logging/monolog2/test_monolog_drop_empty.php @@ -57,7 +57,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -171,4 +171,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_large_message_limit.php b/tests/integration/logging/monolog2/test_monolog_large_message_limit.php index d7c9b677a..7a0e1eacd 100644 --- a/tests/integration/logging/monolog2/test_monolog_large_message_limit.php +++ b/tests/integration/logging/monolog2/test_monolog_large_message_limit.php @@ -40,7 +40,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -78,4 +78,4 @@ function test_logging() { } } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_large_message_limit_drops.php b/tests/integration/logging/monolog2/test_monolog_large_message_limit_drops.php index 0dfe1dc2d..313e73edd 100644 --- a/tests/integration/logging/monolog2/test_monolog_large_message_limit_drops.php +++ b/tests/integration/logging/monolog2/test_monolog_large_message_limit_drops.php @@ -40,7 +40,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1666, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -78,4 +78,4 @@ function test_logging() { } } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_limit_log_events.php b/tests/integration/logging/monolog2/test_monolog_limit_log_events.php index c9106b2ea..ccc75de41 100644 --- a/tests/integration/logging/monolog2/test_monolog_limit_log_events.php +++ b/tests/integration/logging/monolog2/test_monolog_limit_log_events.php @@ -58,7 +58,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -161,4 +161,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_limit_zero_events.php b/tests/integration/logging/monolog2/test_monolog_limit_zero_events.php index 6ff0fa7d1..573850d3a 100644 --- a/tests/integration/logging/monolog2/test_monolog_limit_zero_events.php +++ b/tests/integration/logging/monolog2/test_monolog_limit_zero_events.php @@ -58,7 +58,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -101,4 +101,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid1.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid1.php index f760b19ac..c346aa55e 100644 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid1.php +++ b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid1.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid2.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid2.php index ada730ed7..ab55e0359 100644 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid2.php +++ b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid2.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid3.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid3.php index cdd99bc5f..616eb81f8 100644 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid3.php +++ b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid3.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid4.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid4.php index 354108a09..0f13144eb 100644 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid4.php +++ b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid4.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_level_filter.php b/tests/integration/logging/monolog2/test_monolog_log_level_filter.php index 939dd9cf5..fa7902395 100644 --- a/tests/integration/logging/monolog2/test_monolog_log_level_filter.php +++ b/tests/integration/logging/monolog2/test_monolog_log_level_filter.php @@ -60,7 +60,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -171,4 +171,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_level_filter_invalid.php b/tests/integration/logging/monolog2/test_monolog_log_level_filter_invalid.php index d2eac9410..22107fd98 100644 --- a/tests/integration/logging/monolog2/test_monolog_log_level_filter_invalid.php +++ b/tests/integration/logging/monolog2/test_monolog_log_level_filter_invalid.php @@ -61,7 +61,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/2/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -172,4 +172,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_basic.php b/tests/integration/logging/monolog3/test_monolog_basic.php index 5cbc3a1da..0e494b078 100644 --- a/tests/integration/logging/monolog3/test_monolog_basic.php +++ b/tests/integration/logging/monolog3/test_monolog_basic.php @@ -56,7 +56,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -200,4 +200,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_cat.php b/tests/integration/logging/monolog3/test_monolog_cat.php index dcf557213..12b0c76ae 100644 --- a/tests/integration/logging/monolog3/test_monolog_cat.php +++ b/tests/integration/logging/monolog3/test_monolog_cat.php @@ -56,7 +56,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -184,4 +184,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_context_simple.php b/tests/integration/logging/monolog3/test_monolog_context_simple.php index 1e77e6d25..ddcfd65f9 100644 --- a/tests/integration/logging/monolog3/test_monolog_context_simple.php +++ b/tests/integration/logging/monolog3/test_monolog_context_simple.php @@ -59,7 +59,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/logging/monolog3/test_monolog_decoration_and_forwarding.php b/tests/integration/logging/monolog3/test_monolog_decoration_and_forwarding.php index fa0bbb6cb..3d8edcc7c 100644 --- a/tests/integration/logging/monolog3/test_monolog_decoration_and_forwarding.php +++ b/tests/integration/logging/monolog3/test_monolog_decoration_and_forwarding.php @@ -113,7 +113,7 @@ [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/api/get_linking_metadata"}, [16, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -257,4 +257,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_disable_metrics.php b/tests/integration/logging/monolog3/test_monolog_disable_metrics.php index cb5beb8e1..11bad2177 100644 --- a/tests/integration/logging/monolog3/test_monolog_disable_metrics.php +++ b/tests/integration/logging/monolog3/test_monolog_disable_metrics.php @@ -51,7 +51,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -153,4 +153,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_drop_empty.php b/tests/integration/logging/monolog3/test_monolog_drop_empty.php index 61937fb9f..6a470653b 100644 --- a/tests/integration/logging/monolog3/test_monolog_drop_empty.php +++ b/tests/integration/logging/monolog3/test_monolog_drop_empty.php @@ -57,7 +57,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -171,4 +171,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_large_message_limit.php b/tests/integration/logging/monolog3/test_monolog_large_message_limit.php index 191800f49..50b2a26a5 100644 --- a/tests/integration/logging/monolog3/test_monolog_large_message_limit.php +++ b/tests/integration/logging/monolog3/test_monolog_large_message_limit.php @@ -40,7 +40,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -78,4 +78,4 @@ function test_logging() { } } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_large_message_limit_drops.php b/tests/integration/logging/monolog3/test_monolog_large_message_limit_drops.php index eed9a410a..c2913419d 100644 --- a/tests/integration/logging/monolog3/test_monolog_large_message_limit_drops.php +++ b/tests/integration/logging/monolog3/test_monolog_large_message_limit_drops.php @@ -40,7 +40,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1666, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -78,4 +78,4 @@ function test_logging() { } } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_limit_log_events.php b/tests/integration/logging/monolog3/test_monolog_limit_log_events.php index b1f72e6b6..b5ffaf258 100644 --- a/tests/integration/logging/monolog3/test_monolog_limit_log_events.php +++ b/tests/integration/logging/monolog3/test_monolog_limit_log_events.php @@ -58,7 +58,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -161,4 +161,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_limit_zero_events.php b/tests/integration/logging/monolog3/test_monolog_limit_zero_events.php index 38abfe890..4b65d64f3 100644 --- a/tests/integration/logging/monolog3/test_monolog_limit_zero_events.php +++ b/tests/integration/logging/monolog3/test_monolog_limit_zero_events.php @@ -58,7 +58,7 @@ [{"name": "OtherTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], [{"name": "OtherTransactionTotalTime/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], @@ -101,4 +101,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid1.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid1.php index f33d832af..f94ea94af 100644 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid1.php +++ b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid1.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid2.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid2.php index 73c70e58e..5d0363243 100644 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid2.php +++ b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid2.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid3.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid3.php index 72ca4b06b..8b451bdea 100644 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid3.php +++ b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid3.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid4.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid4.php index 2f60d6bc1..fe4185197 100644 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid4.php +++ b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid4.php @@ -45,7 +45,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [833, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -81,4 +81,4 @@ function test_logging() { } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_level_filter.php b/tests/integration/logging/monolog3/test_monolog_log_level_filter.php index 529ef1459..69d482e9b 100644 --- a/tests/integration/logging/monolog3/test_monolog_log_level_filter.php +++ b/tests/integration/logging/monolog3/test_monolog_log_level_filter.php @@ -60,7 +60,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -171,4 +171,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_level_filter_invalid.php b/tests/integration/logging/monolog3/test_monolog_log_level_filter_invalid.php index e5387616f..649cd5acf 100644 --- a/tests/integration/logging/monolog3/test_monolog_log_level_filter_invalid.php +++ b/tests/integration/logging/monolog3/test_monolog_log_level_filter_invalid.php @@ -61,7 +61,7 @@ [{"name": "Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/Logging/PHP/Monolog/enabled"}, [1, "??", "??", "??", "??", "??"]], - [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [8, "??", "??", "??", "??", "??"]], + [{"name": "Supportability/PHP/package/monolog/monolog/3/detected"}, [1, "??", "??", "??", "??", "??"]], [{"name": "Supportability/library/Monolog/detected"}, [1, "??", "??", "??", "??", "??"]] ] ] @@ -172,4 +172,4 @@ function test_logging() { $logger->emergency("emergency"); } -test_logging(); \ No newline at end of file +test_logging(); From 71674c9d96f4027b4a49212343c791eecf57f338 Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:55:52 -0500 Subject: [PATCH 35/62] chore: Bump version to 11.3.0 (#967) --- VERSION | 2 +- axiom/nr_version.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index b85c6c7b0..f628d2eaf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.2.0 +11.3.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index e608278e9..2c950be4f 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -21,9 +21,8 @@ #endif /* - * Current version naming scheme is flowers + * Current version naming scheme is gemstones * - * dahlia 19Sep2022 (10.1) * echinacea 03Oct2022 (10.2) * freesia 03Nov2022 (10.3) * goldenrod 12Dec2022 (10.4) @@ -47,8 +46,9 @@ * yarrow 26Jun2024 (10.22) * zinnia 30Jul2024 (11.0) * amethyst 26Aug2024 (11.1) + * bowenite 30Sep2024 (11.2) */ -#define NR_CODENAME "bowenite" +#define NR_CODENAME "corundum" const char* nr_version(void) { return NR_STR2(NR_VERSION); From aa15a2d49ca7cbb3a7c8856102fa10dbca99f938 Mon Sep 17 00:00:00 2001 From: ZNeumann Date: Fri, 4 Oct 2024 09:02:44 -0600 Subject: [PATCH 36/62] feat(agent): Memcached instance metrics with host name (#958) These metrics can be used by the backend to create AWS relationship maps with memcached --------- Co-authored-by: Michal Nowacki --- agent/Makefile.frag | 1 + agent/config.m4 | 2 +- agent/php_internal_instrument.c | 59 ++++++++ agent/php_memcached.c | 34 +++++ agent/php_memcached.h | 35 +++++ agent/tests/test_memcached.c | 127 ++++++++++++++++++ .../memcached/test_add_servers.php | 39 ++++++ .../memcached/test_add_servers_bad.php | 68 ++++++++++ tests/integration/memcached/test_basic.php | 1 + .../memcached/test_basic_logging_off.php | 1 + tests/integration/memcached/test_by_key.php | 1 + tests/integration/memcached/test_cas.php7.php | 1 + .../memcached/test_cas_by_key.php7.php | 1 + tests/integration/memcached/test_concat.php | 1 + .../memcached/test_concat_by_key.php | 1 + .../test_concat_by_key_logging_off.php | 1 + tests/integration/memcached/test_multi.php | 1 + .../memcached/test_multi_by_key.php | 1 + tests/integration/memcached/test_socket.php | 30 +++++ 19 files changed, 404 insertions(+), 1 deletion(-) create mode 100644 agent/php_memcached.c create mode 100644 agent/php_memcached.h create mode 100644 agent/tests/test_memcached.c create mode 100644 tests/integration/memcached/test_add_servers.php create mode 100644 tests/integration/memcached/test_add_servers_bad.php create mode 100644 tests/integration/memcached/test_socket.php diff --git a/agent/Makefile.frag b/agent/Makefile.frag index 648fc84b3..fbff46d69 100644 --- a/agent/Makefile.frag +++ b/agent/Makefile.frag @@ -93,6 +93,7 @@ TEST_BINARIES = \ tests/test_internal_instrument \ tests/test_hash \ tests/test_lib_aws_sdk_php \ + tests/test_memcached \ tests/test_mongodb \ tests/test_monolog \ tests/test_mysql \ diff --git a/agent/config.m4 b/agent/config.m4 index ee0859e30..5806caac5 100644 --- a/agent/config.m4 +++ b/agent/config.m4 @@ -215,7 +215,7 @@ if test "$PHP_NEWRELIC" = "yes"; then php_error.c php_execute.c php_explain.c php_explain_mysqli.c \ php_explain_pdo_mysql.c php_extension.c php_file_get_contents.c \ php_globals.c php_hash.c php_header.c php_httprequest_send.c \ - php_internal_instrument.c php_minit.c php_mshutdown.c php_mysql.c \ + php_internal_instrument.c php_memcached.c php_minit.c php_mshutdown.c php_mysql.c \ php_mysqli.c php_newrelic.c php_nrini.c php_observer.c php_output.c php_pdo.c \ php_pdo_mysql.c php_pdo_pgsql.c php_pgsql.c php_psr7.c php_redis.c \ php_rinit.c php_rshutdown.c php_samplers.c php_stack.c \ diff --git a/agent/php_internal_instrument.c b/agent/php_internal_instrument.c index 821379edb..ce6c089ec 100644 --- a/agent/php_internal_instrument.c +++ b/agent/php_internal_instrument.c @@ -13,8 +13,10 @@ #include "php_explain_mysqli.h" #include "php_file_get_contents.h" #include "php_globals.h" +#include "php_hash.h" #include "php_httprequest_send.h" #include "php_internal_instrument.h" +#include "php_memcached.h" #include "php_mysql.h" #include "php_mysqli.h" #include "php_pdo.h" @@ -1531,6 +1533,57 @@ NR_INNER_WRAPPER(memcache_function) { INTERNAL_FUNCTION_PARAM_PASSTHRU); } +NR_INNER_WRAPPER(memcached_add_server) { + char* host = NULL; + nr_string_len_t host_len = 0; + zend_long port = 0; + zend_long weight = 0; + int zcaught = 0; + + if (SUCCESS + == zend_parse_parameters_ex( + ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "s|ll", &host, + &host_len, &port, &weight) && + NULL != host) { + nr_php_memcached_create_instance_metric(host, port); + } + zcaught = nr_zend_call_old_handler(nr_wrapper->oldhandler, + INTERNAL_FUNCTION_PARAM_PASSTHRU); + if (zcaught) { + zend_bailout(); + /* NOTREACHED */ + } +} + +NR_INNER_WRAPPER(memcached_add_servers) { + zval* servers = NULL; + zval* server = NULL; + int zcaught = 0; + + if (SUCCESS + == zend_parse_parameters_ex( + ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "a", &servers)) { + if (NULL != servers && Z_TYPE_P(servers) == IS_ARRAY) { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(servers), server) { + zval* host = nr_php_zend_hash_index_find(Z_ARRVAL_P(server), 0); + zval* port = nr_php_zend_hash_index_find(Z_ARRVAL_P(server), 1); + if (nr_php_is_zval_valid_string(host) && + nr_php_is_zval_valid_integer(port)) { + nr_php_memcached_create_instance_metric(Z_STRVAL_P(host), Z_LVAL_P(port)); + } + } + ZEND_HASH_FOREACH_END(); + } + } + zcaught = nr_zend_call_old_handler(nr_wrapper->oldhandler, + INTERNAL_FUNCTION_PARAM_PASSTHRU); + + if (zcaught) { + zend_bailout(); + /* NOTREACHED */ + } +} + /* * Handle * bool redis::connect ( string $host[, int $port = 6379 ... ] ) @@ -3098,6 +3151,8 @@ NR_OUTER_WRAPPER(memcached_set) NR_OUTER_WRAPPER(memcached_setbykey) NR_OUTER_WRAPPER(memcached_setmulti) NR_OUTER_WRAPPER(memcached_setmultibykey) +NR_OUTER_WRAPPER(memcached_addserver) +NR_OUTER_WRAPPER(memcached_addservers) NR_OUTER_WRAPPER(redis_append) NR_OUTER_WRAPPER(redis_bitcount) @@ -3511,6 +3566,10 @@ void nr_php_generate_internal_wrap_records(void) { memcache_function, 0, "set") NR_INTERNAL_WRAPREC("memcached::setmultibykey", memcached_setmultibykey, memcache_function, 0, "set") + NR_INTERNAL_WRAPREC("memcached::addserver", memcached_addserver, + memcached_add_server, 0, 0); + NR_INTERNAL_WRAPREC("memcached::addservers", memcached_addservers, + memcached_add_servers, 0, 0); NR_INTERNAL_WRAPREC("redis::connect", redis_connect, redis_connect, 0, "connect") diff --git a/agent/php_memcached.c b/agent/php_memcached.c new file mode 100644 index 000000000..ee13e1e73 --- /dev/null +++ b/agent/php_memcached.c @@ -0,0 +1,34 @@ +/* + * Copyright 2020 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "php_memcached.h" +#include "nr_datastore_instance.h" +#include "php_agent.h" + +nr_datastore_instance_t* nr_php_memcached_create_datastore_instance( + const char* host_or_socket, + zend_long port) { + nr_datastore_instance_t* instance = NULL; + if (port == 0) { // local socket + instance = nr_datastore_instance_create("localhost", host_or_socket, NULL); + } else { + char* port_str = nr_formatf("%ld", (long)port); + instance = nr_datastore_instance_create(host_or_socket, port_str, NULL); + nr_free(port_str); + } + return instance; +} + +void nr_php_memcached_create_instance_metric( + const char* host_or_socket, + zend_long port) { + nr_datastore_instance_t* instance + = nr_php_memcached_create_datastore_instance(host_or_socket, port); + char* instance_metric = nr_formatf("Datastore/instance/Memcached/%s/%s", + instance->host, instance->port_path_or_id); + nrm_force_add(NRPRG(txn)->unscoped_metrics, instance_metric, 0); + nr_datastore_instance_destroy(&instance); + nr_free(instance_metric); +} diff --git a/agent/php_memcached.h b/agent/php_memcached.h new file mode 100644 index 000000000..f449030ea --- /dev/null +++ b/agent/php_memcached.h @@ -0,0 +1,35 @@ +/* + * Copyright 2020 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef PHP_MEMCACHED_HDR +#define PHP_MEMCACHED_HDR + +#include "nr_datastore_instance.h" +#include "php_includes.h" + +/* + * Purpose : Create a datastore instance metadata for a Memcached server. + * + * Params : 1. The memcached host or socket name as given to Memcached::addServer(). + * 2. The memcached port as given as given to Memcached::addServer(). + * + * Returns: nr_datastore_instance_t* that the caller is responsible for freeing + */ +nr_datastore_instance_t* nr_php_memcached_create_datastore_instance( + const char* host_or_socket, + zend_long port); + +/* + * Purpose : Create a memcached instance metric + * + * Params : 1. The memcached host or socket name as given to Memcached::addServer(). + * 2. The memcached port as given as given to Memcached::addServer(). + */ +extern void nr_php_memcached_create_instance_metric( + const char* host_or_socket, + zend_long port); + + +#endif diff --git a/agent/tests/test_memcached.c b/agent/tests/test_memcached.c new file mode 100644 index 000000000..1f05c2443 --- /dev/null +++ b/agent/tests/test_memcached.c @@ -0,0 +1,127 @@ +/* + * Copyright 2020 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +#include "tlib_php.h" +#include "tlib_datastore.h" + +#include "php_agent.h" +#include "php_memcached.h" +#include "util_system.h" + +tlib_parallel_info_t parallel_info + = {.suggested_nthreads = -1, .state_size = 0}; + +static char* system_host_name; + +static void test_create_datastore_instance(void) { + assert_datastore_instance_equals_destroy( + "named socket", + &((nr_datastore_instance_t){ + .host = system_host_name, + .database_name = "unknown", + .port_path_or_id = "/tmp/memcached.sock", + }), + nr_php_memcached_create_datastore_instance("/tmp/memcached.sock", 0)); + + assert_datastore_instance_equals_destroy( + "empty socket", + &((nr_datastore_instance_t){ + .host = system_host_name, + .database_name = "unknown", + .port_path_or_id = "unknown", + }), + nr_php_memcached_create_datastore_instance("", 0)); + + assert_datastore_instance_equals_destroy( + "empty host", + &((nr_datastore_instance_t){ + .host = system_host_name, + .database_name = "unknown", + .port_path_or_id = "unknown", + }), + nr_php_memcached_create_datastore_instance(NULL, 0)); + + assert_datastore_instance_equals_destroy( + "host.name socket", + &((nr_datastore_instance_t){ + .host = "host.name", + .database_name = "unknown", + .port_path_or_id = "11211", + }), + nr_php_memcached_create_datastore_instance("host.name", 11211)); + + assert_datastore_instance_equals_destroy( + "host and port", + &((nr_datastore_instance_t){ + .host = "unknown", + .database_name = "unknown", + .port_path_or_id = "6379", + }), + nr_php_memcached_create_datastore_instance("", 6379)); + + assert_datastore_instance_equals_destroy( + "NULL socket", + &((nr_datastore_instance_t){ + .host = "unknown", + .database_name = "unknown", + .port_path_or_id = "11211", + }), + nr_php_memcached_create_datastore_instance(NULL, 11211)); +} + +static void test_create_instance_metric(void) { + nrtxn_t* txn; + nrmetric_t* metric; + char* metric_str; + tlib_php_engine_create(""); + tlib_php_request_start(); + txn = NRPRG(txn); + + nr_php_memcached_create_instance_metric("host", 11211); + metric = nrm_find(txn->unscoped_metrics, "Datastore/instance/Memcached/host/11211"); + tlib_pass_if_not_null("metric found", metric); + + nr_php_memcached_create_instance_metric("", 11211); + metric = nrm_find(txn->unscoped_metrics, "Datastore/instance/Memcached/unknown/11211"); + tlib_pass_if_not_null("metric found", metric); + + nr_php_memcached_create_instance_metric(NULL, 7); + metric = nrm_find(txn->unscoped_metrics, "Datastore/instance/Memcached/unknown/7"); + tlib_pass_if_not_null("metric found", metric); + + nr_php_memcached_create_instance_metric("path/to/sock", 0); + metric_str = nr_formatf("Datastore/instance/Memcached/%s/path/to/sock", system_host_name); + metric = nrm_find(txn->unscoped_metrics, metric_str); + nr_free(metric_str); + tlib_pass_if_not_null("metric found", metric); + + nr_php_memcached_create_instance_metric("", 0); + metric_str = nr_formatf("Datastore/instance/Memcached/%s/unknown", system_host_name); + metric = nrm_find(txn->unscoped_metrics, metric_str); + nr_free(metric_str); + tlib_pass_if_not_null("metric found", metric); + + // restart the transaction because the next metric is the same as a previous metric + tlib_php_request_end(); + tlib_php_request_start(); + txn = NRPRG(txn); + + nr_php_memcached_create_instance_metric(NULL, 0); + metric_str = nr_formatf("Datastore/instance/Memcached/%s/unknown", system_host_name); + metric = nrm_find(txn->unscoped_metrics, metric_str); + nr_free(metric_str); + tlib_pass_if_not_null("metric found", metric); + + tlib_php_request_end(); + tlib_php_engine_destroy(); +} + +void test_main(void* p NRUNUSED) { + system_host_name = nr_system_get_hostname(); + + test_create_datastore_instance(); + test_create_instance_metric(); + + nr_free(system_host_name); +} diff --git a/tests/integration/memcached/test_add_servers.php b/tests/integration/memcached/test_add_servers.php new file mode 100644 index 000000000..41e9b5a63 --- /dev/null +++ b/tests/integration/memcached/test_add_servers.php @@ -0,0 +1,39 @@ + +*/ + +/*INI +*/ + +/*EXPECT_METRICS_EXIST +Datastore/instance/Memcached/host1/1, 1 +Datastore/instance/Memcached/host2/2, 1 +Datastore/instance/Memcached/host3/11211, 1 +Datastore/instance/Memcached/host4/1, 1 +*/ + +/*EXPECT_ERROR_EVENTS null */ + +require_once(realpath (dirname ( __FILE__ )) . '/../../include/helpers.php'); +require_once(realpath (dirname ( __FILE__ )) . '/../../include/tap.php'); +require_once(realpath (dirname ( __FILE__ )) . '/memcache.inc'); + +$memcached = new Memcached(); +$memcached->addServers(array( + array("host1", 1), + array("host2", 2), + array("host3", 11211))); +$memcached->addServers(array()); +$memcached->addServers(array(array("host4", 1, "test field"))); +$memcached->quit(); diff --git a/tests/integration/memcached/test_add_servers_bad.php b/tests/integration/memcached/test_add_servers_bad.php new file mode 100644 index 000000000..c4887584f --- /dev/null +++ b/tests/integration/memcached/test_add_servers_bad.php @@ -0,0 +1,68 @@ + +*/ + +/*INI +*/ + +/*EXPECT_REGEX + +.*(PHP )?Warning:.*could not add entry.* + +.*(PHP )?Warning:.*could not add entry.* + +*/ + +/*EXPECT_ERROR_EVENTS +[ + "?? agent run id", + { + "reservoir_size": "??", + "events_seen": 1 + }, + [ + [ + { + "type": "TransactionError", + "timestamp": "??", + "error.class": "E_WARNING", + "error.message": "Memcached::addServers(): could not add entry #2 to the server list", + "transactionName": "OtherTransaction\/php__FILE__", + "duration": "??", + "nr.transactionGuid": "??", + "guid": "??", + "sampled": true, + "priority": "??", + "traceId": "??", + "spanId": "??" + }, + {}, + {} + ] + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../include/helpers.php'); +require_once(realpath (dirname ( __FILE__ )) . '/../../include/tap.php'); +require_once(realpath (dirname ( __FILE__ )) . '/memcache.inc'); + +$memcached = new Memcached(); +$memcached->addServer(5, 5); +//$memcached->addServer("host", string); crashes PHP +$memcached->addServers(array(array(1))); +$memcached->addServers(array(array("host1"))); +$memcached->addServers(array(array(1, "host1"))); +//$memcahed->addServers("string"); crashes PHP +$memcached->quit(); diff --git a/tests/integration/memcached/test_basic.php b/tests/integration/memcached/test_basic.php index 6ccde57b7..1e24bfd7e 100644 --- a/tests/integration/memcached/test_basic.php +++ b/tests/integration/memcached/test_basic.php @@ -46,6 +46,7 @@ [{"name":"Datastore/allOther"}, [15, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [15, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [15, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/add"}, [2, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/add", "scope":"OtherTransaction/php__FILE__"}, [2, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_basic_logging_off.php b/tests/integration/memcached/test_basic_logging_off.php index 521fc1d44..05e87a4c1 100644 --- a/tests/integration/memcached/test_basic_logging_off.php +++ b/tests/integration/memcached/test_basic_logging_off.php @@ -49,6 +49,7 @@ [{"name":"Datastore/allOther"}, [15, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [15, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [15, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/add"}, [2, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/add", "scope":"OtherTransaction/php__FILE__"}, [2, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_by_key.php b/tests/integration/memcached/test_by_key.php index 006d6cd7d..ceb2758d8 100644 --- a/tests/integration/memcached/test_by_key.php +++ b/tests/integration/memcached/test_by_key.php @@ -48,6 +48,7 @@ [{"name":"Datastore/allOther"}, [11, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [11, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [11, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/add"}, [2, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/add", "scope":"OtherTransaction/php__FILE__"}, [2, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_cas.php7.php b/tests/integration/memcached/test_cas.php7.php index b69010e59..650bb22ec 100644 --- a/tests/integration/memcached/test_cas.php7.php +++ b/tests/integration/memcached/test_cas.php7.php @@ -42,6 +42,7 @@ [{"name":"Datastore/allOther"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [5, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete", "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_cas_by_key.php7.php b/tests/integration/memcached/test_cas_by_key.php7.php index f43a6dc29..10b073016 100644 --- a/tests/integration/memcached/test_cas_by_key.php7.php +++ b/tests/integration/memcached/test_cas_by_key.php7.php @@ -42,6 +42,7 @@ [{"name":"Datastore/allOther"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [5, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete", "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_concat.php b/tests/integration/memcached/test_concat.php index 092bd5683..0a526adcd 100644 --- a/tests/integration/memcached/test_concat.php +++ b/tests/integration/memcached/test_concat.php @@ -35,6 +35,7 @@ [{"name":"Datastore/allOther"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [5, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete", "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_concat_by_key.php b/tests/integration/memcached/test_concat_by_key.php index 7339eed12..2cb041974 100644 --- a/tests/integration/memcached/test_concat_by_key.php +++ b/tests/integration/memcached/test_concat_by_key.php @@ -35,6 +35,7 @@ [{"name":"Datastore/allOther"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [5, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete", "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_concat_by_key_logging_off.php b/tests/integration/memcached/test_concat_by_key_logging_off.php index d4e3f2d60..4d644a74d 100644 --- a/tests/integration/memcached/test_concat_by_key_logging_off.php +++ b/tests/integration/memcached/test_concat_by_key_logging_off.php @@ -38,6 +38,7 @@ [{"name":"Datastore/allOther"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [5, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/delete", "scope":"OtherTransaction/php__FILE__"}, [1, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_multi.php b/tests/integration/memcached/test_multi.php index 82328762a..78dbd2fa3 100644 --- a/tests/integration/memcached/test_multi.php +++ b/tests/integration/memcached/test_multi.php @@ -42,6 +42,7 @@ [{"name":"Datastore/allOther"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [5, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/get"}, [4, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/get", "scope":"OtherTransaction/php__FILE__"}, [4, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_multi_by_key.php b/tests/integration/memcached/test_multi_by_key.php index d5867c36d..5d4c2e9d3 100644 --- a/tests/integration/memcached/test_multi_by_key.php +++ b/tests/integration/memcached/test_multi_by_key.php @@ -42,6 +42,7 @@ [{"name":"Datastore/allOther"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/all"}, [5, "??", "??", "??", "??", "??"]], [{"name":"Datastore/Memcached/allOther"}, [5, "??", "??", "??", "??", "??"]], + [{"name":"Datastore/instance/Memcached/ENV[MEMCACHE_HOST]/11211"}, [1, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/get"}, [4, "??", "??", "??", "??", "??"]], [{"name":"Datastore/operation/Memcached/get", "scope":"OtherTransaction/php__FILE__"}, [4, "??", "??", "??", "??", "??"]], diff --git a/tests/integration/memcached/test_socket.php b/tests/integration/memcached/test_socket.php new file mode 100644 index 000000000..19a1787e9 --- /dev/null +++ b/tests/integration/memcached/test_socket.php @@ -0,0 +1,30 @@ + +*/ + +/*INI +*/ + +/*EXPECT_METRICS_EXIST +Datastore/instance/Memcached/__HOST__/my/socket, 1 +*/ + +/*EXPECT_ERROR_EVENTS null */ + +require_once(realpath (dirname ( __FILE__ )) . '/../../include/helpers.php'); +require_once(realpath (dirname ( __FILE__ )) . '/../../include/tap.php'); +require_once(realpath (dirname ( __FILE__ )) . '/memcache.inc'); + +$memcached = new Memcached(); +$memcached->addServer("my/socket", 0); +$memcached->quit(); From f9530ed288f4ad47f10353590dd41ad877ac8800 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Mon, 7 Oct 2024 22:58:05 -0400 Subject: [PATCH 37/62] refactor(agent): improve magic file recognition performance (#970) Speed up package detection by performing a suffix match on the 'magic' file pattern with case insensitive string comparison instead of a substring search within a lowercased filename. This is possible because all of the 'magic' file search patterns patterns are right anchored. Fixup of e11b992c with changes from 24c1c656. --- agent/php_execute.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/agent/php_execute.c b/agent/php_execute.c index 83ff4d5a9..e54dc7828 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -603,14 +603,17 @@ static size_t num_logging_frameworks typedef struct _nr_vuln_mgmt_table_t { const char* package_name; const char* file_to_check; + size_t file_to_check_len; nr_vuln_mgmt_enable_fn_t enable; } nr_vuln_mgmt_table_t; /* Note that all paths should be in lowercase. */ +// clang-format: off static const nr_vuln_mgmt_table_t vuln_mgmt_packages[] = { - {"Drupal", "drupal/component/dependencyinjection/container.php", nr_drupal_version}, - {"Wordpress", "wp-includes/version.php", nr_wordpress_version}, + {"Drupal", NR_PSTR("drupal/component/dependencyinjection/container.php"), nr_drupal_version}, + {"Wordpress", NR_PSTR("wp-includes/version.php"), nr_wordpress_version}, }; +// clang-format: on static const size_t num_packages = sizeof(vuln_mgmt_packages) / sizeof(nr_vuln_mgmt_table_t); @@ -990,28 +993,22 @@ static void nr_execute_handle_logging_framework(const char* filename, } } -#undef STR_AND_LEN - -static void nr_execute_handle_package(const char* filename) { - if (NULL == filename || 0 >= nr_strlen(filename)) { - nrl_verbosedebug(NRL_FRAMEWORK, "%s: The file name is NULL", - __func__); - return; - } - char* filename_lower = nr_string_to_lowercase(filename); +static void nr_execute_handle_package(const char* filename, + const size_t filename_len) { size_t i = 0; for (i = 0; i < num_packages; i++) { - if (nr_stridx(filename_lower, vuln_mgmt_packages[i].file_to_check) >= 0) { + if (nr_striendswith(STR_AND_LEN(filename), + STR_AND_LEN(vuln_mgmt_packages[i].file_to_check))) { if (NULL != vuln_mgmt_packages[i].enable) { vuln_mgmt_packages[i].enable(); } } } - - nr_free(filename_lower); } +#undef STR_AND_LEN + /* * Purpose : Detect library and framework usage from a PHP file. * @@ -1036,7 +1033,7 @@ static void nr_php_user_instrumentation_from_file(const char* filename, nr_execute_handle_autoload(filename, filename_len); nr_execute_handle_logging_framework(filename, filename_len TSRMLS_CC); if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_execute_handle_package(filename); + nr_execute_handle_package(filename, filename_len); } } From 7a5f848e99900715e5b2594a83b6abb9cb1d7cc1 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Tue, 15 Oct 2024 00:22:49 -0400 Subject: [PATCH 38/62] refactor(agent): improve magic file recognition performance (#975) Speed up magic file recognition performance by removing files from `libraries` and `logging_frameworks` that belong to old and un-instrumented packages. --- agent/php_execute.c | 55 ------------------- .../analog/test_supportability_metric.php | 25 --------- .../analog/analog/lib/Analog/Analog.php | 6 -- .../test_supportability_metric.php | 24 -------- .../cakephp-log/vendor/cakephp/log/Log.php | 6 -- 5 files changed, 116 deletions(-) delete mode 100644 tests/integration/logging/analog/test_supportability_metric.php delete mode 100644 tests/integration/logging/analog/vendor/analog/analog/lib/Analog/Analog.php delete mode 100644 tests/integration/logging/cakephp-log/test_supportability_metric.php delete mode 100644 tests/integration/logging/cakephp-log/vendor/cakephp/log/Log.php diff --git a/agent/php_execute.c b/agent/php_execute.c index e54dc7828..e8e0db9ca 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -523,59 +523,7 @@ static nr_library_table_t libraries[] = { */ {"Laminas_Http", NR_PSTR("laminas-http/src/client.php"), nr_laminas_http_enable}, - /* - * Other frameworks, detected only, but not specifically - * instrumented. We detect these as libraries so that we don't prevent - * detection of a supported framework or library later (since a transaction - * can only have one framework). - */ - {"Aura1", NR_PSTR("aura/framework/system.php"), NULL}, - {"Aura2", NR_PSTR("aura/di/src/containerinterface.php"), NULL}, - {"Aura3", NR_PSTR("aura/di/src/containerconfiginterface.php"), NULL}, {"CakePHP3", NR_PSTR("cakephp/src/core/functions.php"), NULL}, - {"Fuel", NR_PSTR("fuel/core/classes/fuel.php"), NULL}, - {"Lithium", NR_PSTR("lithium/core/libraries.php"), NULL}, - {"Phpbb", NR_PSTR("phpbb/request/request.php"), NULL}, - {"Phpixie2", NR_PSTR("phpixie/core/classes/phpixie/pixie.php"), NULL}, - {"Phpixie3", NR_PSTR("phpixie/framework.php"), NULL}, - {"React", NR_PSTR("react/event-loop/src/loopinterface.php"), NULL}, - {"SilverStripe", NR_PSTR("injector/silverstripeinjectioncreator.php"), NULL}, - {"SilverStripe4", NR_PSTR("silverstripeserviceconfigurationlocator.php"), NULL}, - {"Typo3", NR_PSTR("classes/typo3/flow/core/bootstrap.php"), NULL}, - {"Typo3", NR_PSTR("typo3/sysext/core/classes/core/bootstrap.php"), NULL}, - - /* - * Other CMS (content management systems), detected only, but - * not specifically instrumented. - */ - {"Moodle", NR_PSTR("moodlelib.php"), NULL}, - /* - * It is likely that this will never be found, since the CodeIgniter.php - * will get loaded first, and as such mark this transaction as belonging to - * CodeIgniter, and not Expession Engine. - */ - {"ExpressionEngine", NR_PSTR("system/expressionengine/config/config.php"), NULL}, - /* - * ExpressionEngine 5, however, has a very obvious file we can look for. - */ - {"ExpressionEngine5", NR_PSTR("expressionengine/boot/boot.php"), NULL}, - /* - * DokuWiki uses doku.php as an entry point, but has other files that are - * loaded directly that this won't pick up. That's probably OK for - * supportability metrics, but we'll add the most common name for the - * configuration file as well just in case. - */ - {"DokuWiki", NR_PSTR("doku.php"), NULL}, - {"DokuWiki", NR_PSTR("conf/dokuwiki.php"), NULL}, - - /* - * SugarCRM no longer has a community edition, so this likely only works - * with older versions. - */ - {"SugarCRM", NR_PSTR("sugarobjects/sugarconfig.php"), NULL}, - - {"Xoops", NR_PSTR("class/xoopsload.php"), NULL}, - {"E107", NR_PSTR("e107_handlers/e107_class.php"), NULL}, }; // clang-format: on @@ -590,9 +538,6 @@ static nr_library_table_t logging_frameworks[] = { /* laminas-log - Logging for PHP */ {"laminas-log", NR_PSTR("laminas-log/src/logger.php"), NULL}, /* cakephp-log - Logging for PHP */ - {"cakephp-log", NR_PSTR("cakephp/log/log.php"), NULL}, - /* Analog - Logging for PHP */ - {"Analog", NR_PSTR("analog/analog.php"), NULL}, }; // clang-format: on diff --git a/tests/integration/logging/analog/test_supportability_metric.php b/tests/integration/logging/analog/test_supportability_metric.php deleted file mode 100644 index f3cfb4477..000000000 --- a/tests/integration/logging/analog/test_supportability_metric.php +++ /dev/null @@ -1,25 +0,0 @@ - Date: Tue, 15 Oct 2024 13:08:33 -0600 Subject: [PATCH 39/62] fix(installer): tarball installer checks for ini in mods-available (#971) Debian uses a directory called "mods-available" to house ini files. It's `phpenmod` and `phpdismod` allow command-line management of extensions in directory. It also creates a symlink ini file to this "mods-available" directory in the normal conf.d directory. The issue is that this symlink is prefixed with a number (for example 20-newrelic.ini). This prefix prevents our tarball installer from recognizing that a newrelic.ini already exists, resulting in 2 ini files: a newrelic.ini and a 20-newrelic.ini. Our .deb package installer scouts out the "mods-available" directory and installs therein when possible. That means that if a customer installs via package but upgrades via tarball (not recommended), then their system gets the duplicates. This change makes our tarball installer scout for a potential previous installation in mods-available. Fixes https://github.com/newrelic/newrelic-php-agent/issues/399 --------- Co-authored-by: Michal Nowacki --- agent/newrelic-install.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/agent/newrelic-install.sh b/agent/newrelic-install.sh index d0959b252..9ef1e45fd 100755 --- a/agent/newrelic-install.sh +++ b/agent/newrelic-install.sh @@ -1371,6 +1371,25 @@ EOF if [ -d "${cfg_pfx}/fpm/conf.d" ]; then pi_inidir_dso="${cfg_pfx}/fpm/conf.d" fi + + # + # Debian can use a mods-available directory to store the ini files. + # It creates a symlink from the ini file in the conf.d directory that + # our installer can fail to find (because the symlink is prefixed with + # "20-" (notably the number can change based on configurations). + # While this install script will not install into the mods-available + # directory, our .deb installer can. Therefore, we want to detect if + # newrelic has previously been installed in the mods-available directory + # so that we do not create an additional ini file -- which would result in + # the conf.d directory having both newrelic.ini and 20-newrelic.ini. + # + + if [ -d "${cfg_pfx}/mods-available" -a -f "${cfg_pfx}/mods-available/newrelic.ini" ]; then + pi_inidir_cli="${cfg_pfx}/mods-available" + if [ -n "${pi_inidir_dso}" ]; then + pi_inidir_dso="${cfg_pfx}/mods-available" + fi + fi fi done From dc162a4eb72fa9faad2d982350e5362ed7cdd83b Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Fri, 18 Oct 2024 10:30:16 -0400 Subject: [PATCH 40/62] fix(agent): don't skip arguments when calling `mysqli::real_connect` (#976) Co-authored-by: Konstantin Kovshenin Co-authored-by: Amber Sistla --- agent/php_mysqli.c | 61 ++++--- docker-compose.yaml | 9 ++ .../mysqli/test_explain_connect_socket.php | 148 +++++++++++++++++ .../mysqli/test_explain_construct_socket.php | 150 ++++++++++++++++++ 4 files changed, 342 insertions(+), 26 deletions(-) create mode 100644 tests/integration/mysqli/test_explain_connect_socket.php create mode 100644 tests/integration/mysqli/test_explain_construct_socket.php diff --git a/agent/php_mysqli.c b/agent/php_mysqli.c index b17fd2491..24a321b02 100644 --- a/agent/php_mysqli.c +++ b/agent/php_mysqli.c @@ -398,42 +398,51 @@ static nr_status_t nr_php_mysqli_link_real_connect( zval* link, const nr_mysqli_metadata_link_t* metadata TSRMLS_DC) { zend_ulong argc = 0; + zend_ulong arg_required = 0; zval* argv[7] = {0}; zend_ulong i; zval* retval = NULL; -#define ADD_IF_INT_SET(args, argc, value) \ - if (value) { \ - args[argc] = nr_php_zval_alloc(); \ - ZVAL_LONG(args[argc], value); \ - argc++; \ - } - -#define ADD_IF_STR_SET(args, argc, value) \ - if (value) { \ - args[argc] = nr_php_zval_alloc(); \ - nr_php_zval_str(args[argc], value); \ - argc++; \ - } - - ADD_IF_STR_SET(argv, argc, +#define ADD_IF_INT_SET(null_ok, args, argc, value) \ + if (value) { \ + args[argc] = nr_php_zval_alloc(); \ + ZVAL_LONG(args[argc], value); \ + argc++; \ + } else if (true == null_ok) { \ + args[argc] = nr_php_zval_alloc(); \ + ZVAL_NULL(args[argc]); \ + argc++; \ + } + +#define ADD_IF_STR_SET(null_ok, args, argc, value) \ + if (value) { \ + args[argc] = nr_php_zval_alloc(); \ + nr_php_zval_str(args[argc], value); \ + argc++; \ + } else if (true == null_ok) { \ + args[argc] = nr_php_zval_alloc(); \ + ZVAL_NULL(args[argc]); \ + argc++; \ + } + + ADD_IF_STR_SET(false, argv, argc, nr_php_mysqli_strip_persistent_prefix(metadata->host)); - ADD_IF_STR_SET(argv, argc, metadata->user); - ADD_IF_STR_SET(argv, argc, metadata->password); + ADD_IF_STR_SET(false, argv, argc, metadata->user); + ADD_IF_STR_SET(false, argv, argc, metadata->password); /* * We can only add the remaining metadata fields if we already have three * arguments (host, user and password) above, lest we accidentally set the - * wrong positional argument to something it doesn't mean. + * wrong positional argument to something it doesn't mean. Note, prior + * to 7.4 not all args are nullable. */ + arg_required = argc; if (argc == 3) { - ADD_IF_STR_SET(argv, argc, metadata->database); - ADD_IF_INT_SET(argv, argc, metadata->port); - ADD_IF_STR_SET(argv, argc, metadata->socket); - ADD_IF_INT_SET(argv, argc, metadata->flags); - } - - retval = nr_php_call_user_func(link, "real_connect", argc, argv TSRMLS_CC); + ADD_IF_STR_SET(true, argv, argc, metadata->database); + ADD_IF_INT_SET(true, argv, argc, metadata->port); + ADD_IF_STR_SET(true, argv, argc, metadata->socket); + ADD_IF_INT_SET(false, argv, argc, metadata->flags); + } retval = nr_php_call_user_func(link, "real_connect", argc, argv TSRMLS_CC); for (i = 0; i < argc; i++) { nr_php_zval_free(&argv[i]); @@ -450,7 +459,7 @@ static nr_status_t nr_php_mysqli_link_real_connect( * If we didn't specify the database in the connection parameters, we need to * call mysqli::select_db here. */ - if (metadata->database && (argc < 4)) { + if (metadata->database && (arg_required < 3)) { zval* database = nr_php_zval_alloc(); nr_php_zval_str(database, metadata->database); diff --git a/docker-compose.yaml b/docker-compose.yaml index 4d57753ff..2ea1d11d3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -24,6 +24,8 @@ services: retries: 3 start_period: 20s container_name: mysqldb + volumes: + - var-run-mysqld:/var/run/mysqld redisdb: image: redis restart: always @@ -56,6 +58,7 @@ services: MYSQL_USER: admin MYSQL_PASSWD: admin MYSQL_HOST: mysqldb + MYSQL_SOCKET: /var/run/mysqld/mysqld.sock PG_HOST: postgres PG_PORT: 5432 @@ -67,6 +70,7 @@ services: volumes: - ${AGENT_CODE:-$PWD}:/usr/local/src/newrelic-php-agent + - var-run-mysqld:/var/run/mysqld entrypoint: tail command: -f /dev/null container_name: nr-php @@ -83,6 +87,7 @@ services: MYSQL_USER: admin MYSQL_PASSWD: admin MYSQL_HOST: mysqldb + MYSQL_SOCKET: /var/run/mysqld/mysqld.sock PG_HOST: postgres PG_PORT: 5432 @@ -97,8 +102,12 @@ services: NEWRELIC_LICENSE_KEY: ${NEW_RELIC_LICENSE_KEY} volumes: - ${PWD}:/usr/src/myapp + - var-run-mysqld:/var/run/mysqld working_dir: /usr/src/myapp stdin_open: true tty: true container_name: agent-devenv profiles: ["dev"] + +volumes: + var-run-mysqld: diff --git a/tests/integration/mysqli/test_explain_connect_socket.php b/tests/integration/mysqli/test_explain_connect_socket.php new file mode 100644 index 000000000..0c56e3bc9 --- /dev/null +++ b/tests/integration/mysqli/test_explain_connect_socket.php @@ -0,0 +1,148 @@ +", + "?? SQL ID", + "SELECT TABLE_NAME FROM information_schema.tables WHERE table_name=?", + "Datastore/statement/MySQL/tables/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "explain_plan": [ + [ + "id", + "select_type", + "table", + "type", + "possible_keys", + "key", + "key_len", + "ref", + "rows", + "Extra" + ], + [ + [ + 1, + "SIMPLE", + "tables", + "ALL", + null, + "TABLE_NAME", + null, + null, + null, + "Using where; Skip_open_table; Scanned 1 database" + ] + ] + ], + "backtrace": [ + " in mysqli_stmt_execute called at __FILE__ (??)", + " in test_prepare called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +/*EXPECT_TRACED_ERRORS +null +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../include/config.php'); + +function test_prepare($link) +{ + $query = "SELECT TABLE_NAME FROM information_schema.tables WHERE table_name='STATISTICS'"; + + $stmt = mysqli_prepare($link, $query); + if (FALSE === $stmt) { + echo mysqli_error($link) . "\n"; + return; + } + + if (FALSE === mysqli_stmt_execute($stmt)) { + echo mysqli_stmt_error($stmt) . "\n"; + return; + } + + if (FALSE === mysqli_stmt_bind_result($stmt, $value)) { + echo mysqli_stmt_error($stmt) . "\n"; + return; + } + + while (mysqli_stmt_fetch($stmt)) { + echo $value . "\n"; + } + + mysqli_stmt_close($stmt); +} + +$link = mysqli_connect('localhost', $MYSQL_USER, $MYSQL_PASSWD, $MYSQL_DB, null, $MYSQL_SOCKET); +if (mysqli_connect_errno()) { + echo mysqli_connect_error() . "\n"; + exit(1); +} + +test_prepare($link); +mysqli_close($link); diff --git a/tests/integration/mysqli/test_explain_construct_socket.php b/tests/integration/mysqli/test_explain_construct_socket.php new file mode 100644 index 000000000..20c6e1481 --- /dev/null +++ b/tests/integration/mysqli/test_explain_construct_socket.php @@ -0,0 +1,150 @@ +", + "?? SQL ID", + "SELECT TABLE_NAME FROM information_schema.tables WHERE table_name=?", + "Datastore/statement/MySQL/tables/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "explain_plan": [ + [ + "id", + "select_type", + "table", + "type", + "possible_keys", + "key", + "key_len", + "ref", + "rows", + "Extra" + ], + [ + [ + 1, + "SIMPLE", + "tables", + "ALL", + null, + "TABLE_NAME", + null, + null, + null, + "Using where; Skip_open_table; Scanned 1 database" + ] + ] + ], + "backtrace": [ + " in mysqli_stmt_execute called at __FILE__ (??)", + " in test_prepare called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +/*EXPECT_TRACED_ERRORS +null +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../include/config.php'); + +function test_prepare($link) +{ + + $query = "SELECT TABLE_NAME FROM information_schema.tables WHERE table_name='STATISTICS'"; + + $stmt = mysqli_prepare($link, $query); + if (FALSE === $stmt) { + echo mysqli_error($link) . "\n"; + return; + } + + if (FALSE === mysqli_stmt_execute($stmt)) { + echo mysqli_stmt_error($stmt) . "\n"; + return; + } + + if (FALSE === mysqli_stmt_bind_result($stmt, $value)) { + echo mysqli_stmt_error($stmt) . "\n"; + return; + } + + while (mysqli_stmt_fetch($stmt)) { + echo $value . "\n"; + } + + mysqli_stmt_close($stmt); +} + +$link = new mysqli('localhost', $MYSQL_USER, $MYSQL_PASSWD, $MYSQL_DB, null, $MYSQL_SOCKET); +if (mysqli_connect_errno()) { + echo mysqli_connect_error() . "\n"; + exit(1); +} + +test_prepare($link); +mysqli_close($link); From 727812d6216c59946878fc53b62e4d8afd433b07 Mon Sep 17 00:00:00 2001 From: ZNeumann Date: Tue, 22 Oct 2024 08:55:04 -0600 Subject: [PATCH 41/62] chore(agent): bump to 11.4 (#979) --- VERSION | 2 +- axiom/nr_version.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index f628d2eaf..72773deb8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.3.0 +11.4.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 2c950be4f..5f09c86a7 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -23,7 +23,6 @@ /* * Current version naming scheme is gemstones * - * echinacea 03Oct2022 (10.2) * freesia 03Nov2022 (10.3) * goldenrod 12Dec2022 (10.4) * hydrangea 18Jan2023 (10.5) @@ -47,8 +46,9 @@ * zinnia 30Jul2024 (11.0) * amethyst 26Aug2024 (11.1) * bowenite 30Sep2024 (11.2) + * corundum 21Oct2024 (11.3) */ -#define NR_CODENAME "corundum" +#define NR_CODENAME "diamond" const char* nr_version(void) { return NR_STR2(NR_VERSION); From 467f79e4bce6be3caef6d129f4f44d3b6ad5c581 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Tue, 12 Nov 2024 15:10:20 -0500 Subject: [PATCH 42/62] chore: enhance dockerized development environment (#977) 1. Add an option to control which PHP version is to be used in devenv service via PHP env var passed at the time when dev-shell is started (or any dev-* target is build). 2. Simplify `composer` and `go` install. 3. Fix `devenv` service image build for PHPs 7.2 and 7.3. 4. Apply `Dockerfile` best practices --- Makefile | 33 +++++---- docker-compose.yaml | 3 +- docs/dev_environment.md | 47 +++++++++---- files/Dockerfile | 152 +++++++++++++++++----------------------- files/set_path.sh | 5 -- 5 files changed, 116 insertions(+), 124 deletions(-) diff --git a/Makefile b/Makefile index 0e95237d5..11a871312 100644 --- a/Makefile +++ b/Makefile @@ -475,25 +475,28 @@ test-services-stop: # Docker Development Environment # -dev-shell: - docker compose --profile dev up --build --remove-orphans -d - docker exec -it agent-devenv bash -c "sh files/set_path.sh ; bash" +devenv-image: + @docker compose --profile dev build devenv -dev-build: - docker compose --profile dev up --build --remove-orphans -d - docker exec -it agent-devenv bash -c "sh files/set_path.sh ; make -j4 all" +dev-shell: devenv-image + docker compose --profile dev up --pull missing --remove-orphans -d + docker compose exec -it devenv bash -c "sh files/set_path.sh ; bash" -dev-unit-tests: - docker compose --profile dev up --build --remove-orphans -d - docker exec -it agent-devenv bash -c "sh files/set_path.sh ; make -j4 valgrind" +dev-build: devenv-image + docker compose --profile dev up --pull missing --remove-orphans -d + docker compose exec -it devenv bash -c "sh files/set_path.sh ; make -j4 all" -dev-integration-tests: - docker compose --profile dev up --build --remove-orphans -d - docker exec -it agent-devenv bash -c "sh files/set_path.sh ; ./bin/integration_runner -agent ./agent/.libs/newrelic.so" +dev-unit-tests: devenv-image + docker compose --profile dev up --pull missing --remove-orphans -d + docker compose exec -it devenv bash -c "sh files/set_path.sh ; make -j4 valgrind" -dev-all: - docker compose --profile dev up --build --remove-orphans -d - docker exec -it agent-devenv bash -c "sh files/set_path.sh ; make -j4 all valgrind; ./bin/integration_runner -agent ./agent/.libs/newrelic.so" +dev-integration-tests: devenv-image + docker compose --profile dev up --pull missing --remove-orphans -d + docker compose exec -it devenv bash -c "sh files/set_path.sh ; ./bin/integration_runner -agent ./agent/.libs/newrelic.so" + +dev-all: devenv-image + docker compose --profile dev up --pull missing --remove-orphans -d + docker compose exec -it devenv bash -c "sh files/set_path.sh ; make -j4 all valgrind; ./bin/integration_runner -agent ./agent/.libs/newrelic.so" dev-stop: docker compose --profile dev stop diff --git a/docker-compose.yaml b/docker-compose.yaml index 2ea1d11d3..315bedbfa 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,7 +2,6 @@ # Copyright 2021 New Relic Corporation. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # -version: '3.8' services: # The Database mysqldb: @@ -79,6 +78,8 @@ services: build: context: . dockerfile: files/Dockerfile + args: + PHP_VER: ${PHP:-8.3} user: ${UID}:${GID} environment: MEMCACHE_HOST: memcached diff --git a/docs/dev_environment.md b/docs/dev_environment.md index 7e6940d05..15948fc9f 100644 --- a/docs/dev_environment.md +++ b/docs/dev_environment.md @@ -6,19 +6,38 @@ The dockerized development environment prototype allows contributors to both dev docker-compose spins up `mysql` and `redis` and other databases in separate containers. -Two environment variables to note: -`NEWRELIC_LICENSE_KEY` is required to run the integration tests and should be set to your NR license key. -If your collector isn’t the default (collector.newrelic.com), set the `NEWRELIC_COLLECTOR_HOST` to the appropriate value. +## Prerequisites -PHP_VER can also be set to vary the PHP version being used. +### 1. Docker Compose -Set all environment variables prior to running the development environment. +Dockerized development environment for the New Relic PHP Agent uses following Docker Compose services as a runtime platform. So you need `docker` with `docker compose` installed. + +### 2. Environment variables + +Dockerized development environment for the New Relic PHP Agent needs a valid license key available in `NEW_RELIC_LICENSE_KEY` environment variable. +This environment variable must be set prior to starting Dockerized development environment for the New Relic PHP Agent. The easiest way to set +`NEW_RELIC_LICENSE_KEY` environment variable is via `.env` file. Simply create `.env` file in the top level directory, and add definition +of `NEW_RELIC_LICENSE_KEY` environment variable there, e.g.: +``` +NEW_RELIC_LICENSE_KEY=... +``` + +The second, optional environment variable, that controls PHP version in Dockerized development environment for the New Relic PHP Agent is `PHP`. `PHP` defaults to latest PHP supported by the agent. +This environment variable can be provided at the time when Dockerized development environment for the New Relic PHP Agent is started, e.g.: +``` +make dev-shell PHP=8.2 +``` ## Options for using the environment -## With a shell environment +### With a shell environment + +To start the dev environment type `make dev-shell`. This will spin up `devenv` service in `agent-devenv` container, with: + - latest PHP supported by the agent (this can be overriden with `PHP` environment variable like this: `make dev-shell PHP=8.2`) + - all the tools needed to build the agent + - all the tools needed to run unit tests + - all the tools and supporting services to run integration tests -To start the dev environment type `make dev-shell`. This will create a set of docker containers. A prompt will open and you’ll be able to compile and run all `make` commands right away with no additional setup (for example: `make -j4 all` or `make -j4 valgrind` or `make -j4 run_tests`). After compiling the agent, the integration tests can be run using the `integration_runner`. @@ -31,27 +50,27 @@ To end the session type `exit`. You can run `make dev-stop` to stop the docker- In the shell, you can run all `make` commands as you normally would. -## Build only +### Build only `make dev-build` -## Unit Tests only +### Unit Tests only `make dev-unit tests` -## Integration Tests only +### Integration Tests only `make dev-integration-tests` -## Build and test all +### Build and test all `make dev-all` -## Stop all containers +### Stop all containers `make dev-stop` -# Next steps and issues +## Next steps and issues -## There is possibly some incompatibility with mysql in the main build container as one of the mysql unit tests fails. Unless this is resolved, It might make sense at a future point to have the integration tests run from a different container than the build container. +### There is possibly some incompatibility with mysql in the main build container as one of the mysql unit tests fails. Unless this is resolved, It might make sense at a future point to have the integration tests run from a different container than the build container. diff --git a/files/Dockerfile b/files/Dockerfile index 4b50bebb8..2b327d439 100644 --- a/files/Dockerfile +++ b/files/Dockerfile @@ -14,95 +14,65 @@ FROM php:${PHP_VER:-8.3} RUN docker-php-source extract ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update -RUN apt-get install -y build-essential - -# -# PHP dependencies -# -RUN apt-get update \ - && apt-get -y install gcc git netcat-openbsd \ - libpcre3 libpcre3-dev psmisc automake libtool \ - insserv procps vim ${PHP_USER_SPECIFIED_PACKAGES} \ - zlib1g-dev libmcrypt-dev +RUN apt-get update && apt-get install -y --no-install-recommends \ +# Install build entrypoint - make: + make \ +# Makefile's default shell: + bash \ +# git; techincally not needed to build agent but is required for successfull +# processing of top level Makefile: +# - make/version.mk if GIT_COMMIT is not defined, git is used to compute it: + git \ +# The following are required to build PHP extension: + $PHPIZE_DEPS \ +# valgrind, awk; required for agent-valgrind and axiom-valgrind targets + valgrind gawk \ +# Other useful developer tools: + vim lcov gdb strace ccache procps psmisc curl wget bzip2 zip unzip perl sqlite3 openssl \ +# Other build dependencies: + argon2 \ + automake \ + autotools-dev \ + dnsutils \ + gyp \ + insserv \ + libc6 libc6-dev libc6-dbg \ + libcurl4-openssl-dev \ + libedit-dev \ + libghc-argon2-dev \ + libgtest-dev \ + libmcrypt-dev \ + libonig-dev \ + libpcre3 libpcre3-dev \ + libreadline-dev \ + libssl-dev \ + libsqlite3-dev \ + libtool \ + libxml2 libxml2-dev \ + locales \ + locales-all \ + netcat-openbsd \ + python3-yaml \ + ${PHP_USER_SPECIFIED_PACKAGES} \ + zlib1g-dev # pgsql extension -RUN apt-get install -y libpq-dev +RUN apt-get install -y --no-install-recommends libpq-dev RUN docker-php-ext-install pgsql -# -# Other tools -# -RUN apt-get install -y gdb valgrind libcurl4-openssl-dev pkg-config libpq-dev libedit-dev libreadline-dev git - -# -# Install other packages. -# -RUN apt-get update && apt-get install -y \ - autoconf \ - autotools-dev \ - build-essential \ - bzip2 \ - ccache \ - curl \ - dnsutils \ - git \ - gyp \ - lcov \ - libc6 \ - libc6-dbg \ - libc6-dev \ - libgtest-dev \ - libtool \ - locales \ - locales-all \ - make \ - perl \ - strace \ - python-dev-is-python3 \ - python3-yaml \ - sqlite3 \ - libsqlite3-dev \ - openssl \ - libxml2 \ - libxml2-dev \ - libonig-dev \ - libssl-dev \ - unzip \ - wget \ - zip && apt-get clean - -# -# Download and install Go -# -RUN arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) && \ - wget https://go.dev/dl/go1.21.1.linux-${arch}.tar.gz -O- | tar -C /usr/local -zxvf -; - -RUN ln -s /usr/local/go/bin/go /usr/bin/go +# install latest go to work with the daemon +COPY --from=golang /usr/local/go /usr/local/go +ENV PATH /usr/local/go/bin:$PATH # -# If the debian version is jessie, don't install argon2 +# If the debian version is buster, don't install python-dev-is-python3 # -RUN if [ -z "$(grep '^8\.' /etc/debian_version)" ]; then \ - apt-get install -y argon2 libghc-argon2-dev; \ +RUN if [ -z "$(grep '^10\.' /etc/debian_version)" ]; then \ + apt-get install -y --no-install-recommends python-dev-is-python3; \ fi # install composer -WORKDIR /usr/src - -# based on https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md -RUN \ - EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')" \ - && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ - && ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" \ - && if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]; \ - then \ - >&2 echo 'ERROR: Invalid installer checksum'; \ - rm composer-setup.php; \ - exit 1; \ - fi \ - && php composer-setup.php \ - && php -r "unlink('composer-setup.php');" +COPY --from=composer ["/usr/bin/composer", "/usr/bin/composer"] # # The explain plan in the sql tests contain partition/filtered properties @@ -121,8 +91,16 @@ RUN \ # the mysql tests a separate machine running mysql server 5.6 is required. RUN docker-php-ext-install pdo pdo_mysql -# redis -RUN pecl install redis && docker-php-ext-enable redis +# install redis extension required by test_redis: +RUN \ + php_cmp=$(php -r "echo version_compare(PHP_VERSION, '7.4.0', '>=');"); \ + if [ "$php_cmp" = 1 ]; then \ + # install latest redis for PHPs >= 7.4 + echo 'no' | pecl install redis; \ + else \ + # install redis-4.3.0 - last one with support for php 7.2 + echo 'no' | pecl install redis-4.3.0; \ + fi && docker-php-ext-enable redis # memcache # Pre 8.0 requires 4.0.5.2 @@ -135,7 +113,7 @@ RUN \ fi # memcached -RUN apt-get install -y libmemcached-dev +RUN apt-get install -y --no-install-recommends libmemcached-dev RUN pecl install memcached && docker-php-ext-enable memcached # uopz @@ -152,13 +130,9 @@ RUN \ # install predis # installation will be in /usr/src/vendor/predis/predis # which is value which should be used for PREDIS_HOME -RUN php composer.phar require "predis/predis" -RUN php composer.phar update - -# -# install composer and make executable so it can be used in dev env -# -RUN cp composer.phar /usr/local/bin/composer && chmod +x /usr/local/bin/composer +WORKDIR /usr/src +RUN composer require "predis/predis" +RUN composer update # # These args need to be repeated so we can propagate the VARS within this build context. diff --git a/files/set_path.sh b/files/set_path.sh index 3a5cc965c..0b9e88c48 100644 --- a/files/set_path.sh +++ b/files/set_path.sh @@ -17,11 +17,6 @@ case ":$PATH:" in *) PATH=/usr/local/bin:$PATH esac -case ":$PATH:" in - *:/usr/local/go/bin:*) ;; - *) PATH=/usr/local/go/bin:$PATH -esac - export PATH From bae63754d546cbde31e2b7edff2fa66e6dc75dce Mon Sep 17 00:00:00 2001 From: Hitesh Ahuja <108540135+hahuja2@users.noreply.github.com> Date: Fri, 22 Nov 2024 09:31:21 -0800 Subject: [PATCH 43/62] feat(agent): add support for CakePHP 4.x and 5.x (#983) This PR does the following: - Modifies how the action name is retrieved, so that it is compatible with CakePHP 4.x and 5.x - Adds correct detection file for CakePHP 4.x and 5.x - Adds call to `nr_txn_suggest_package_supportability_metric` in `nr_cakephp_enable` --------- Co-authored-by: Michal Nowacki --- agent/fw_cakephp.c | 282 ++++++++++---------------------------------- agent/fw_hooks.h | 8 +- agent/php_execute.c | 13 +- 3 files changed, 65 insertions(+), 238 deletions(-) diff --git a/agent/fw_cakephp.c b/agent/fw_cakephp.c index 1dfe88231..572f6f23f 100644 --- a/agent/fw_cakephp.c +++ b/agent/fw_cakephp.c @@ -4,6 +4,7 @@ */ #include "php_agent.h" +#include "php_error.h" #include "php_execute.h" #include "php_user_instrument.h" #include "php_wrapper.h" @@ -12,132 +13,14 @@ #include "util_logging.h" #include "util_memory.h" -nr_framework_classification_t nr_cakephp_special_1( - const char* filename TSRMLS_DC) { - NR_UNUSED_TSRMLS; - - if (nr_strcaseidx(filename, "cake/libs/object.php") >= 0) { - return FRAMEWORK_IS_SPECIAL; - } - - return FRAMEWORK_IS_NORMAL; -} - -nr_framework_classification_t nr_cakephp_special_2( - const char* filename TSRMLS_DC) { - NR_UNUSED_TSRMLS; - - if (nr_strcaseidx(filename, "cake/core/app.php") >= 0) { - return FRAMEWORK_IS_SPECIAL; - } - - return FRAMEWORK_IS_NORMAL; -} - -/* - * For CakePHP 1.2 and 1.3 (and possibly earlier versions too) we hook into - * Component::initialize(). This function takes a controller as a parameter - * and we look into the params array of that controller object, and pick up - * the controller and action out of that array. - * - * CakePHP 1.x is end-of-life and no longer supported by the agent. - * Cake PHP 1.x does not support PHP 8+ and this wrapper is not updated for OAPI - * compatibility. - * - */ -NR_PHP_WRAPPER(nr_cakephp_name_the_wt_pre20) { - zval* arg1 = 0; - zval* params; - zval* czval; - zval* azval; - char* controller = 0; - char* action = 0; - int clen = 0; - int alen = 0; - char* name; - - (void)wraprec; - NR_UNUSED_SPECIALFN; - - NR_PHP_WRAPPER_REQUIRE_FRAMEWORK(NR_FW_CAKEPHP); - - arg1 = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS TSRMLS_CC); - if (!nr_php_is_zval_valid_object(arg1)) { - NR_PHP_WRAPPER_CALL; - goto end; - } - - NR_PHP_WRAPPER_CALL; - - params = nr_php_get_zval_object_property(arg1, "params" TSRMLS_CC); - if (0 == params) { - nrl_verbosedebug(NRL_FRAMEWORK, "CakePHP: no params found in component"); - goto end; - } - - if (IS_ARRAY != Z_TYPE_P(params)) { - nrl_verbosedebug(NRL_FRAMEWORK, - "CakePHP: component params is not an array"); - goto end; - } - - czval = nr_php_get_zval_object_property(params, "controller" TSRMLS_CC); - if (0 == czval) { - nrl_verbosedebug(NRL_FRAMEWORK, - "CakePHP: no params['controller'] in component"); - } else { - clen = Z_STRLEN_P(czval); - controller = (char*)nr_alloca(clen + 1); - nr_strxcpy(controller, Z_STRVAL_P(czval), clen); - } - - azval = nr_php_get_zval_object_property(params, "action" TSRMLS_CC); - if (0 == azval) { - nrl_verbosedebug(NRL_FRAMEWORK, - "CakePHP: no params['action'] in component"); - } else { - alen = Z_STRLEN_P(azval); - action = (char*)nr_alloca(alen + 1); - nr_strxcpy(action, Z_STRVAL_P(azval), alen); - } - - if ((0 == clen) && (0 == alen)) { - nrl_verbosedebug(NRL_FRAMEWORK, - "CakePHP: nothing to call the transaction (yet?)"); - goto end; - } - - name = (char*)nr_alloca(alen + clen + 2); - if (clen) { - nr_strcpy(name, controller); - } - if (alen) { - if (clen) { - nr_strcat(name, "/"); - nr_strcat(name, action); - } else { - nr_strcpy(name, action); - } - } - - nr_txn_set_path("CakePHP", NRPRG(txn), name, NR_PATH_TYPE_ACTION, - NR_NOT_OK_TO_OVERWRITE); - -end: - nr_php_arg_release(&arg1); -} -NR_PHP_WRAPPER_END +#define PHP_PACKAGE_NAME "cakephp/cakephp" /* - * For CakePHP 2.0 and on, we do things a little differently as the params - * array doesn't exist in the component any more. Instead we hook the - * Controller's invokeAction method. This gets the request as a parameter - * and we get the action from the params array in that object. The - * controller object ($this) has a name, and that name is used (along - * with the word "Controller" appended which is what the CakePHP code does). - * - * CakePHP 2.x is end-of-life and in maintenance mode (critical bugfixes only). - * As such, functionality added in PHP 7.1+ is not well supported. + * For CakePHP 4.0 and on, we retrieve the current controller object + * and are able to extract the controller name from that. We then + * retrieve the request object from the controller and are able to + * extract the action name from that. We then concatenate the two + * strings to form the transaction name. * * txn naming scheme: * In this case, `nr_txn_set_path` is called after `NR_PHP_WRAPPER_CALL` with @@ -147,8 +30,7 @@ NR_PHP_WRAPPER_END * default way of calling the wrapped function in func_end. * */ -NR_PHP_WRAPPER(nr_cakephp_name_the_wt_2) { - zval* arg1 = 0; +NR_PHP_WRAPPER(nr_cakephp_name_the_wt_4) { zval* this_var = 0; zval* czval = 0; char* controller = 0; @@ -156,8 +38,9 @@ NR_PHP_WRAPPER(nr_cakephp_name_the_wt_2) { int clen = 0; int alen = 0; char* name = 0; - zval* params; - zval* azval; + zval* action_zval = NULL; + zval* request = NULL; + zval action_param; (void)wraprec; NR_UNUSED_SPECIALFN; @@ -193,37 +76,24 @@ NR_PHP_WRAPPER(nr_cakephp_name_the_wt_2) { } } - arg1 = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS TSRMLS_CC); - if (!nr_php_is_zval_valid_object(arg1)) { - NR_PHP_WRAPPER_CALL; - goto end; - } - NR_PHP_WRAPPER_CALL; - params = nr_php_get_zval_object_property(arg1, "params" TSRMLS_CC); - if (0 == params) { - nrl_verbosedebug(NRL_FRAMEWORK, "CakePHP: no params found in request"); + request = nr_php_call(this_var, "getRequest"); + if (!nr_php_is_zval_valid_object(request)) { + nrl_verbosedebug(NRL_FRAMEWORK, "CakePHP: no request found in controller"); goto end; } - if (IS_ARRAY != Z_TYPE_P(params)) { - nrl_verbosedebug(NRL_FRAMEWORK, "CakePHP: request params is not an array"); + nr_php_zval_str(&action_param, "action"); + action_zval = nr_php_call(request, "getParam", &action_param); + zval_dtor(&action_param); + if (!nr_php_is_zval_non_empty_string(action_zval)) { + nrl_verbosedebug(NRL_FRAMEWORK, "CakePHP: no action param found in request"); goto end; - } - - azval = nr_php_get_zval_object_property(params, "action" TSRMLS_CC); - if (0 == azval) { - nrl_verbosedebug(NRL_FRAMEWORK, "CakePHP: no params['action'] in request"); } else { - if (!nr_php_is_zval_valid_string(azval)) { - nrl_verbosedebug(NRL_FRAMEWORK, - "CakePHP: no string-valued params['action'] in request"); - } else { - alen = Z_STRLEN_P(azval); - action = (char*)nr_alloca(alen + 1); - nr_strxcpy(action, Z_STRVAL_P(azval), alen); - } + alen = Z_STRLEN_P(action_zval); + action = (char*)nr_alloca(alen + 1); + nr_strxcpy(action, Z_STRVAL_P(action_zval), alen); } if ((0 == clen) && (0 == alen)) { @@ -249,92 +119,64 @@ NR_PHP_WRAPPER(nr_cakephp_name_the_wt_2) { NR_NOT_OK_TO_OVERWRITE); end: - nr_php_arg_release(&arg1); nr_php_scope_release(&this_var); + nr_php_zval_free(&request); + nr_php_zval_free(&action_zval); } NR_PHP_WRAPPER_END /* - * CakePHP 1.2, 1.3 - * - * Dispatch::cakeError will be called if there is a problem during dispatch - * (action or controller not found). - * - * CakePHP 1.x is end-of-life and no longer supported by the agent. - * Cake PHP 1.x does not support PHP 8+ and this wrapper is not updated for OAPI - * compatibility. + * CakePHP 4.0+ * + * Report errors and exceptions caught by CakePHP's error handler. */ -NR_PHP_WRAPPER(nr_cakephp_problem_1) { - const char* name = "Dispatcher::cakeError"; +NR_PHP_WRAPPER(nr_cakephp_error_handler_wrapper) { + zval* exception = NULL; + char* request_uri = nr_php_get_server_global("REQUEST_URI"); - (void)wraprec; NR_UNUSED_SPECIALFN; + (void)wraprec; NR_PHP_WRAPPER_REQUIRE_FRAMEWORK(NR_FW_CAKEPHP); - nr_txn_set_path("CakePHP", NRPRG(txn), name, NR_PATH_TYPE_ACTION, - NR_NOT_OK_TO_OVERWRITE); - - NR_PHP_WRAPPER_CALL; -} -NR_PHP_WRAPPER_END - -/* - * CakePHP 2.0+ - * - * If the action or controller is not found during the dispatch process, the - * appropriate Exception will be created and thrown. We wrap the CakeException - * constructor instead of the Exception handler, since CakePHP allows for the - * handler to be completely replaced. - * - * CakePHP 2.x is end-of-life and in maintenance mode (critical bugfixes only). - * As such, functionality added in PHP 7.1+ is not well supported. - * - * txn naming scheme: - * In this case, `nr_txn_set_path` is called before `NR_PHP_WRAPPER_CALL` with - * `NR_NOT_OK_TO_OVERWRITE` and as this corresponds to calling the wrapped - * function in func_begin it needs to be explicitly set as a before_callback to - * ensure OAPI compatibility. This entails that the first wrapped call gets to - * name the txn. - */ -NR_PHP_WRAPPER(nr_cakephp_problem_2) { - const char* name = "Exception"; - - (void)wraprec; - NR_UNUSED_SPECIALFN; + exception = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS); + if (!nr_php_is_zval_valid_object(exception)) { + nrl_verbosedebug(NRL_FRAMEWORK, "%s: exception is NULL or not an object", + __func__); + goto end; + } - NR_PHP_WRAPPER_REQUIRE_FRAMEWORK(NR_FW_CAKEPHP); + if (NR_SUCCESS + != nr_php_error_record_exception( + NRPRG(txn), exception, nr_php_error_get_priority(E_ERROR), true, + "Uncaught exception ", &NRPRG(exception_filters))) { + nrl_verbosedebug(NRL_FRAMEWORK, "%s: unable to record exception", __func__); + } - nr_txn_set_path("CakePHP", NRPRG(txn), name, NR_PATH_TYPE_ACTION, - NR_NOT_OK_TO_OVERWRITE); + if (NULL != request_uri) { + nr_txn_set_path("CakePHP Exception", NRPRG(txn), request_uri, NR_PATH_TYPE_URI, + NR_OK_TO_OVERWRITE); + } else { + nrl_verbosedebug(NRL_FRAMEWORK, "%s: request uri is NULL", __func__); + } - NR_PHP_WRAPPER_CALL; +end: + nr_php_arg_release(&exception); + nr_free(request_uri); } NR_PHP_WRAPPER_END /* - * Enable CakePHP 1.2, 1.3 - */ -void nr_cakephp_enable_1(TSRMLS_D) { - nr_php_wrap_user_function(NR_PSTR("Component::initialize"), - nr_cakephp_name_the_wt_pre20 TSRMLS_CC); - nr_php_wrap_user_function(NR_PSTR("Dispatcher::cakeError"), - nr_cakephp_problem_1 TSRMLS_CC); -} - -/* - * Enable CakePHP 2.0+ + * Enable CakePHP 4.0+ */ -void nr_cakephp_enable_2(TSRMLS_D) { - nr_php_wrap_user_function(NR_PSTR("Controller::invokeAction"), - nr_cakephp_name_the_wt_2 TSRMLS_CC); -#if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO \ - && !defined OVERWRITE_ZEND_EXECUTE_DATA - nr_php_wrap_user_function_before_after_clean( - NR_PSTR("CakeException::__construct"), nr_cakephp_problem_2, NULL, NULL); -#else - nr_php_wrap_user_function(NR_PSTR("CakeException::__construct"), - nr_cakephp_problem_2 TSRMLS_CC); -#endif +void nr_cakephp_enable(TSRMLS_D) { + nr_php_wrap_user_function( + NR_PSTR("Cake\\Controller\\Controller::invokeAction"), + nr_cakephp_name_the_wt_4); + nr_php_wrap_user_function( + NR_PSTR( + "Cake\\Error\\Middleware\\ErrorHandlerMiddleware::handleException"), + nr_cakephp_error_handler_wrapper); + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/fw_hooks.h b/agent/fw_hooks.h index c4500aeb2..711c3b618 100644 --- a/agent/fw_hooks.h +++ b/agent/fw_hooks.h @@ -12,13 +12,7 @@ */ #include "php_execute.h" -extern void nr_cakephp_enable_1(TSRMLS_D); -extern void nr_cakephp_enable_2(TSRMLS_D); -extern nr_framework_classification_t nr_cakephp_special_1( - const char* filename TSRMLS_DC); -extern nr_framework_classification_t nr_cakephp_special_2( - const char* filename TSRMLS_DC); - +extern void nr_cakephp_enable(TSRMLS_D); extern void nr_codeigniter_enable(TSRMLS_D); extern int nr_drupal_is_framework(nrframework_t fw); diff --git a/agent/php_execute.c b/agent/php_execute.c index e8e0db9ca..058fea30c 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -331,15 +331,8 @@ typedef struct _nr_framework_table_t { */ // clang-format: off static const nr_framework_table_t all_frameworks[] = { - /* - * Watch out: - * cake1.2 and cake1.3 use a subdirectory named 'cake' (lower case) - * cake2.0 and on use a subdirectory named 'Cake' (upper case file name) - */ - {"CakePHP", "cakephp", NR_PSTR("cake/libs/object.php"), nr_cakephp_special_1, - nr_cakephp_enable_1, NR_FW_CAKEPHP}, - {"CakePHP", "cakephp", NR_PSTR("cake/core/app.php"), nr_cakephp_special_2, - nr_cakephp_enable_2, NR_FW_CAKEPHP}, + {"CakePHP", "cakephp", NR_PSTR("cakephp/src/core/functions.php"), 0, + nr_cakephp_enable, NR_FW_CAKEPHP}, /* * Watch out: frameworks or CMS' build on top of CodeIgniter might not get @@ -522,8 +515,6 @@ static nr_library_table_t libraries[] = { * with other frameworks or even without a framework at all. */ {"Laminas_Http", NR_PSTR("laminas-http/src/client.php"), nr_laminas_http_enable}, - - {"CakePHP3", NR_PSTR("cakephp/src/core/functions.php"), NULL}, }; // clang-format: on From 99979665f938f8999315cc927dd9868244df8aa5 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Thu, 5 Dec 2024 11:07:09 -0500 Subject: [PATCH 44/62] ci: add security scan with trivy (#985) Security scan with trivy will be run on push to main and dev, pull request, and weekly. trivy will skip scanning vendor subdirectory because the agent is not using code from that directory. --- .../actions/ubuntu16-build-action/Dockerfile | 21 -------- .../actions/ubuntu16-build-action/action.yml | 5 -- .../actions/ubuntu16-build-action/build.sh | 4 -- .../actions/ubuntu18-build-action/Dockerfile | 21 -------- .../actions/ubuntu18-build-action/action.yml | 5 -- .../actions/ubuntu18-build-action/build.sh | 4 -- .../actions/ubuntu20-build-action/Dockerfile | 21 -------- .../actions/ubuntu20-build-action/action.yml | 5 -- .../actions/ubuntu20-build-action/build.sh | 4 -- .github/workflows/security-scan.yml | 48 +++++++++++++++++++ .trivyignore | 2 + docker-compose.yaml | 1 - files/Dockerfile | 5 ++ trivy.yaml | 18 +++++++ 14 files changed, 73 insertions(+), 91 deletions(-) delete mode 100644 .github/actions/ubuntu16-build-action/Dockerfile delete mode 100644 .github/actions/ubuntu16-build-action/action.yml delete mode 100755 .github/actions/ubuntu16-build-action/build.sh delete mode 100644 .github/actions/ubuntu18-build-action/Dockerfile delete mode 100644 .github/actions/ubuntu18-build-action/action.yml delete mode 100755 .github/actions/ubuntu18-build-action/build.sh delete mode 100644 .github/actions/ubuntu20-build-action/Dockerfile delete mode 100644 .github/actions/ubuntu20-build-action/action.yml delete mode 100755 .github/actions/ubuntu20-build-action/build.sh create mode 100644 .github/workflows/security-scan.yml create mode 100644 .trivyignore create mode 100644 trivy.yaml diff --git a/.github/actions/ubuntu16-build-action/Dockerfile b/.github/actions/ubuntu16-build-action/Dockerfile deleted file mode 100644 index c43e2c564..000000000 --- a/.github/actions/ubuntu16-build-action/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM ubuntu:16.04 - -# Uncomment deb-src lines for all enabled repos. First part of single-quoted -# string (up the the !) is the pattern of the lines that will be ignored. -# Needed for apt-get build-dep call later in script -RUN sed -Ei '/.*partner/! s/^# (deb-src .*)/\1/g' /etc/apt/sources.list - -ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update -RUN apt-get install -y build-essential - -# PHP dependencies -RUN apt-get build-dep -y php7.0 -RUN apt-get install -y libmysqlclient-dev php-dev libmcrypt-dev libphp7.0-embed - -# Other tools -RUN apt-get install -y curl gdb valgrind libcurl4-openssl-dev pkg-config postgresql python-psycopg2 libpq-dev libedit-dev libreadline-dev git - -COPY build.sh /build.sh - -ENTRYPOINT ["/build.sh"] diff --git a/.github/actions/ubuntu16-build-action/action.yml b/.github/actions/ubuntu16-build-action/action.yml deleted file mode 100644 index 2a01f96da..000000000 --- a/.github/actions/ubuntu16-build-action/action.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: ubuntu16-build-action -description: 'Build the agent on ubuntu 16' -runs: - using: 'docker' - image: 'Dockerfile' diff --git a/.github/actions/ubuntu16-build-action/build.sh b/.github/actions/ubuntu16-build-action/build.sh deleted file mode 100755 index 079de1ba1..000000000 --- a/.github/actions/ubuntu16-build-action/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -make -j $(nproc) all -make -j $(nproc) run_tests - diff --git a/.github/actions/ubuntu18-build-action/Dockerfile b/.github/actions/ubuntu18-build-action/Dockerfile deleted file mode 100644 index b9bb190db..000000000 --- a/.github/actions/ubuntu18-build-action/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM ubuntu:18.04 - -# Uncomment deb-src lines for all enabled repos. First part of single-quoted -# string (up the the !) is the pattern of the lines that will be ignored. -# Needed for apt-get build-dep call later in script -RUN sed -Ei '/.*partner/! s/^# (deb-src .*)/\1/g' /etc/apt/sources.list - -ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update -RUN apt-get install -y build-essential - -# PHP dependencies -RUN apt-get build-dep -y php7.2 -RUN apt-get install -y libmysqlclient-dev php-dev libmcrypt-dev libphp7.2-embed - -# Other tools -RUN apt-get install -y curl gdb valgrind libcurl4-openssl-dev pkg-config postgresql python-psycopg2 libpq-dev libedit-dev libreadline-dev git - -COPY build.sh /build.sh - -ENTRYPOINT ["/build.sh"] diff --git a/.github/actions/ubuntu18-build-action/action.yml b/.github/actions/ubuntu18-build-action/action.yml deleted file mode 100644 index 5b8fc28d6..000000000 --- a/.github/actions/ubuntu18-build-action/action.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: ubuntu18-build-action -description: 'Build the agent on ubuntu 18' -runs: - using: 'docker' - image: 'Dockerfile' diff --git a/.github/actions/ubuntu18-build-action/build.sh b/.github/actions/ubuntu18-build-action/build.sh deleted file mode 100755 index 079de1ba1..000000000 --- a/.github/actions/ubuntu18-build-action/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -make -j $(nproc) all -make -j $(nproc) run_tests - diff --git a/.github/actions/ubuntu20-build-action/Dockerfile b/.github/actions/ubuntu20-build-action/Dockerfile deleted file mode 100644 index bbd6fe406..000000000 --- a/.github/actions/ubuntu20-build-action/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM ubuntu:20.04 - -# Uncomment deb-src lines for all enabled repos. First part of single-quoted -# string (up the the !) is the pattern of the lines that will be ignored. -# Needed for apt-get build-dep call later in script -RUN sed -Ei '/.*partner/! s/^# (deb-src .*)/\1/g' /etc/apt/sources.list - -ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update -RUN apt-get install -y build-essential - -# PHP dependencies -RUN apt-get build-dep -y php7.4 -RUN apt-get install -y libmysqlclient-dev php-dev libmcrypt-dev libphp7.4-embed - -# Other tools -RUN apt-get install -y curl gdb valgrind libcurl4-openssl-dev pkg-config postgresql libpq-dev libedit-dev libreadline-dev git - -COPY build.sh /build.sh - -ENTRYPOINT ["/build.sh"] diff --git a/.github/actions/ubuntu20-build-action/action.yml b/.github/actions/ubuntu20-build-action/action.yml deleted file mode 100644 index d42d71cf9..000000000 --- a/.github/actions/ubuntu20-build-action/action.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: ubuntu20-build-action -description: 'Build the agent on ubuntu 20' -runs: - using: 'docker' - image: 'Dockerfile' diff --git a/.github/actions/ubuntu20-build-action/build.sh b/.github/actions/ubuntu20-build-action/build.sh deleted file mode 100755 index 079de1ba1..000000000 --- a/.github/actions/ubuntu20-build-action/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -make -j $(nproc) all -make -j $(nproc) run_tests - diff --git a/.github/workflows/security-scan.yml b/.github/workflows/security-scan.yml new file mode 100644 index 000000000..98e8039ba --- /dev/null +++ b/.github/workflows/security-scan.yml @@ -0,0 +1,48 @@ +name: Security scan +on: + push: + branches: + - main + - dev + pull_request: + schedule: + - cron: '0 0 * * 0' # Every Sunday at 12:00 AM + +jobs: + trivy-scan: + runs-on: ubuntu-latest + steps: + - name: Checkout newrelic-php-agent code + uses: actions/checkout@v4 + with: + path: php-agent + - name: Run Trivy in table mode + # Table output is only useful when running on a pull request or push. + if: contains(fromJSON('["push", "pull_request"]'), github.event_name) + uses: aquasecurity/trivy-action@0.28.0 + with: + scan-type: fs + scan-ref: ./php-agent + trivy-config: ./php-agent/trivy.yaml + trivyignores: ./php-agent/.trivyignore + format: table + exit-code: 1 + + - name: Run Trivy in report mode + # Only generate sarif when running nightly on the dev branch. + if: ${{ github.event_name == 'schedule' }} + uses: aquasecurity/trivy-action@0.28.0 + with: + scan-type: fs + scan-ref: ./php-agent + trivy-config: ./php-agent/trivy.yaml + trivyignores: ./php-agent/.trivyignore + format: sarif + output: trivy-results.sarif + + - name: Upload Trivy scan results to GitHub Security tab + # Only upload sarif when running nightly on the dev branch. + if: ${{ github.event_name == 'schedule' }} + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: trivy-results.sarif diff --git a/.trivyignore b/.trivyignore new file mode 100644 index 000000000..01a5782ee --- /dev/null +++ b/.trivyignore @@ -0,0 +1,2 @@ +# Ignore missing HEALTHCHECK in Dockerfile - devenv service from files/Dockerfile doesn't need it: +AVD-DS-0026 diff --git a/docker-compose.yaml b/docker-compose.yaml index 315bedbfa..21044c7c7 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -80,7 +80,6 @@ services: dockerfile: files/Dockerfile args: PHP_VER: ${PHP:-8.3} - user: ${UID}:${GID} environment: MEMCACHE_HOST: memcached diff --git a/files/Dockerfile b/files/Dockerfile index 2b327d439..3081cf1ab 100644 --- a/files/Dockerfile +++ b/files/Dockerfile @@ -148,5 +148,10 @@ ENV PS1="New Relic > " RUN echo 'alias integ="/usr/src/myapp/bin/integration_runner -agent /usr/src/myapp/agent/.libs/newrelic.so"' >> ~/.bashrc \ && echo 'alias rebuild="make -C agent clean && rm agent/Makefile && make && make tests"' >> ~/.bashrc +ARG USER=developer +ARG UID=501 +ARG GID=20 +RUN useradd --uid ${UID} --gid ${GID} --shell /bin/bash --create-home ${USER} +USER ${USER} WORKDIR /usr/src/myapp CMD ["bash"] diff --git a/trivy.yaml b/trivy.yaml new file mode 100644 index 000000000..e27bd8157 --- /dev/null +++ b/trivy.yaml @@ -0,0 +1,18 @@ +db: + repository: + - mirror.gcr.io/aquasec/trivy-db:2 + +scan: + scanners: + - vuln + - misconfig + skip-dirs: vendor + +severities: + - CRITICAL + - HIGH + - MEDIUM + - LOW + +vulnerability: + ignore-unfixed: true From 439398032f1d1ddc774918c81c28c94c3924c2e9 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Mon, 9 Dec 2024 14:38:36 -0500 Subject: [PATCH 45/62] chore: bump version for next release (#990) --- VERSION | 2 +- axiom/nr_version.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 72773deb8..7ef698131 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.4.0 +11.5.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 5f09c86a7..6125e272e 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -23,7 +23,6 @@ /* * Current version naming scheme is gemstones * - * freesia 03Nov2022 (10.3) * goldenrod 12Dec2022 (10.4) * hydrangea 18Jan2023 (10.5) * impatiens 13Feb2023 (10.6) @@ -47,8 +46,9 @@ * amethyst 26Aug2024 (11.1) * bowenite 30Sep2024 (11.2) * corundum 21Oct2024 (11.3) + * diamond 09Dec2024 (11.4) */ -#define NR_CODENAME "diamond" +#define NR_CODENAME "emerald" const char* nr_version(void) { return NR_STR2(NR_VERSION); From f14a128099ae027284a12e46e353a93c59de8778 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Thu, 19 Dec 2024 17:05:11 -0500 Subject: [PATCH 46/62] chore: devenv enhancements (#1000) Fix QOL aliases and allow multiple devenvs to run simultanously. --- docker-compose.yaml | 13 ------------- files/Dockerfile | 14 ++++++++------ 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 21044c7c7..b99c89dc0 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -14,38 +14,26 @@ services: MYSQL_USER: admin MYSQL_PASSWORD: admin MYSQL_HOST: mysqldb - ports: - - "3306:3306" healthcheck: test: ["CMD", "mysql", "--user=admin", "--password=admin", "-e", "SELECT 1"] interval: 10s timeout: 10s retries: 3 start_period: 20s - container_name: mysqldb volumes: - var-run-mysqld:/var/run/mysqld redisdb: image: redis restart: always - ports: - - "6379:6379" - container_name: redisdb memcached: image: memcached:latest restart: always - ports: - - "11211:11211" - container_name: memcached postgres: image: postgres restart: always environment: POSTGRES_PASSWORD: root POSTGRES_USER: postgres - ports: - - "5432:5432" - container_name: postgres php: platform: ${PLATFORM:-} image: newrelic/nr-php-agent-builder:make-php-${PHP:-8.2}-${LIBC:-gnu}-${IMAGE_VERSION:-v1} @@ -106,7 +94,6 @@ services: working_dir: /usr/src/myapp stdin_open: true tty: true - container_name: agent-devenv profiles: ["dev"] volumes: diff --git a/files/Dockerfile b/files/Dockerfile index 3081cf1ab..cb52536ef 100644 --- a/files/Dockerfile +++ b/files/Dockerfile @@ -142,16 +142,18 @@ ENV PHP_VER=${PHP_VER} ARG PS1 ENV PS1="New Relic > " -# QOL aliases -# `rebuild` - make clean + make agent + make tests -# `integ` - run all integration tests -RUN echo 'alias integ="/usr/src/myapp/bin/integration_runner -agent /usr/src/myapp/agent/.libs/newrelic.so"' >> ~/.bashrc \ - && echo 'alias rebuild="make -C agent clean && rm agent/Makefile && make && make tests"' >> ~/.bashrc - ARG USER=developer ARG UID=501 ARG GID=20 RUN useradd --uid ${UID} --gid ${GID} --shell /bin/bash --create-home ${USER} USER ${USER} +# QOL aliases +# `rebuild` - make clean + make agent + make tests +# `integ` - run all integration tests +RUN echo 'alias integ="/usr/src/myapp/bin/integration_runner -agent /usr/src/myapp/agent/.libs/newrelic.so"' >> ~/.bashrc \ + && echo 'alias rebuild="make -C agent clean && rm agent/Makefile && make && make tests"' >> ~/.bashrc WORKDIR /usr/src/myapp +# Avoid "fatal: detected dubious ownership in repository at '/usr/src/myapp/'" error +# when running git commands inside container with host volume mounted: +RUN git config --global --add safe.directory /usr/src/myapp/ CMD ["bash"] From c9c5992c6f1575bbb95710e82455620df9cc22cd Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Thu, 19 Dec 2024 18:53:12 -0500 Subject: [PATCH 47/62] security(daemon): upgrade golang.org/x/net to v0.33.0 (#999) Address CVE-2024-45338 by upgrading golang.org/x/net to v0.33.0 go get golang.org/x/net@v0.33.0 go: upgraded golang.org/x/net v0.23.0 => v0.33.0 go: upgraded golang.org/x/sys v0.18.0 => v0.28.0 go: upgraded golang.org/x/text v0.14.0 => v0.21.0 --- daemon/go.mod | 7 ++++--- daemon/go.sum | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/daemon/go.mod b/daemon/go.mod index 5fb45e76e..5685974d5 100644 --- a/daemon/go.mod +++ b/daemon/go.mod @@ -1,18 +1,19 @@ module github.com/newrelic/newrelic-php-agent/daemon go 1.21 + toolchain go1.23.1 require ( github.com/golang/protobuf v1.5.3 github.com/google/flatbuffers v23.5.26+incompatible - golang.org/x/net v0.23.0 + golang.org/x/net v0.33.0 google.golang.org/grpc v1.61.0 google.golang.org/protobuf v1.33.0 ) require ( - golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect ) diff --git a/daemon/go.sum b/daemon/go.sum index f7f322d87..8ede3e252 100644 --- a/daemon/go.sum +++ b/daemon/go.sum @@ -6,12 +6,12 @@ github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZat github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= From aae7611d7dbdf418c7d312a1f13b9593f4a8d2df Mon Sep 17 00:00:00 2001 From: bduranleau-nr <106178551+bduranleau-nr@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:50:48 -0600 Subject: [PATCH 48/62] fix(agent): fix Drupal error and exception handling (#995) Co-authored-by: Michal Nowacki --- agent/fw_drupal8.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/agent/fw_drupal8.c b/agent/fw_drupal8.c index 541cb8b87..32976c64a 100644 --- a/agent/fw_drupal8.c +++ b/agent/fw_drupal8.c @@ -9,6 +9,7 @@ #include "php_user_instrument.h" #include "php_execute.h" #include "php_wrapper.h" +#include "php_error.h" #include "fw_drupal_common.h" #include "fw_hooks.h" #include "fw_support.h" @@ -20,6 +21,62 @@ #define PHP_PACKAGE_NAME "drupal/core" +NR_PHP_WRAPPER(nr_drupal_exception) { + int priority = nr_php_error_get_priority(E_ERROR); + zval* event = NULL; + zval* exception = NULL; + + /* Warning avoidance */ + (void)wraprec; + + NR_PHP_WRAPPER_REQUIRE_FRAMEWORK(NR_FW_DRUPAL8); + + if (NR_SUCCESS != nr_txn_record_error_worthy(NRPRG(txn), priority)) { + NR_PHP_WRAPPER_CALL; + goto end; + } + + /* Get the event that was given. */ + event = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS); + + /* Call the original function. */ + NR_PHP_WRAPPER_CALL; + + if (0 == nr_php_is_zval_valid_object(event)) { + nrl_verbosedebug(NRL_TXN, + "Drupal: ExceptionSubscriber::onException() does not " + "have an `event` parameter"); + goto end; + } + + /* + * Get the exception from the event. + */ + exception = nr_php_call(event, "getThrowable"); + if (!nr_php_is_zval_valid_object(exception)) { + // be abundantly cautious: free exception before attempting to re-assign + nr_php_zval_free(&exception); + exception = nr_php_call(event, "getException"); + } + + if (!nr_php_is_zval_valid_object(exception)) { + nrl_verbosedebug(NRL_TXN, "Drupal: getException() returned a non-object"); + goto end; + } + + if (NR_SUCCESS + != nr_php_error_record_exception(NRPRG(txn), exception, priority, true, + NULL, + &NRPRG(exception_filters))) { + nrl_verbosedebug(NRL_TXN, "Drupal: unable to record exception"); + } + +end: + nr_php_arg_release(&event); + nr_php_zval_free(&exception); +} +NR_PHP_WRAPPER_END + /* * Purpose : Convenience function to handle adding a callback to a method, * given a class entry and a method name. This will check the @@ -730,6 +787,26 @@ void nr_drupal8_enable(TSRMLS_D) { "er::getControllerFromDefinition"), nr_drupal8_name_the_wt TSRMLS_CC); + /* + * ExceptionSubscribers handle Drupal errors and exceptions before + * the agent has the opportunity to capture them. Instrument several + * of these ExceptionSubscriber function `onException` methods in order + * to capture Exceptions and Errors in Drupal 9.x+ + */ + // clang-format off + /* + * Log exceptions without further handling. + */ + nr_php_wrap_user_function(NR_PSTR("Drupal\\Core\\EventSubscriber\\ExceptionLoggingSubscriber::onException"), + nr_drupal_exception); + + /* + * Last-chance handler for exceptions: the final exception subscriber. + */ + nr_php_wrap_user_function(NR_PSTR("Drupal\\Core\\EventSubscriber\\FinalExceptionSubscriber::onException"), + nr_drupal_exception); + // clang-format on + /* * The drupal_modules config setting controls instrumentation of modules, * hooks, and views. From d6db53b9c37b9d7031de1e733f57628de49f0be4 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Fri, 20 Dec 2024 12:40:47 -0700 Subject: [PATCH 49/62] fix(agent): address the aws-sdk-php versioning change (#1001) Concerns about future/past proofing to the checking prioritized the non-eval implementation vs using the eval method for checking the version. However, aws-sdk-php internal functions frequently change without notice in the release notes. An extra eval is used to avoid the fatal error that would occur in the VERY unlikely event of Aws/Sdk.php not being found and which addresses the previous concerns while decoupling versioning from internal functions. --- agent/lib_aws_sdk_php.c | 100 +++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 57 deletions(-) diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c index ad956ac1e..51ef17fda 100644 --- a/agent/lib_aws_sdk_php.c +++ b/agent/lib_aws_sdk_php.c @@ -22,49 +22,40 @@ * In a normal course of events, the following line will always work * zend_eval_string("Aws\\Sdk::VERSION;", &retval, "Get AWS Version") * By the time we have detected the existence of the aws-sdk-php and with - * default composer profject settings, it callable even from + * default composer project settings, it is callable even from * nr_aws_sdk_php_enable which will automatically load the class if it isn't - * loaded yet and then evaluate the string. However, in the rare case that files + * loaded yet and then evaluate the string. In the rare case that files * are not loaded via autoloader and/or have non-default composer classload - * settings, if the class is not found, PHP 8.2+ will generate a fatal - * unrecoverable uncatchable error error whenever it cannot find a class. While - * calling this from nr_aws_sdk_php_enable would have been great and would allow - * the sdk version value to be set only once, to avoid the very unlikely but not - * impossible fatal error, this will be called from the - * "Aws\\ClientResolver::_apply_user_agent" wrapper which GUARANTEES that - * aws/sdk exists and is already loaded. - * - * - * Additionally given that aws-sdk-php is currently detected from the - * AwsClient.php file, this method will always be called when a client is - * created unlike Sdk::construct which doesn't show with PHP 8.2+. - * - * Using Aws/Sdk::__construct for version is currently nonviable as it is - * unreliable as a version determiner. - * Having separate functionality to extract from Aws/Sdk::__construct - * is both not required and is redundant and causes additional overhead and - * so only one function is needed to extract version. - * - * Aws\\ClientResolver::_apply_user_agent a reliable function as it is - * always called on client initialization since it is key to populating - * the request headers, and it loads Sdk by default. - * - * Concerns about future/past proofing to the checking prioritized the following - * implementation vs using the eval method. + * settings, if the class is not found, PHP 8.2+ will generate an + * error whenever it cannot find a class which must be caught. Calling this + * from nr_aws_sdk_php_enable would allow the sdk version value to be set only + * once. To avoid the VERY unlikely but not impossible fatal error, we need to + * wrap the call in a try/catch block and make it a lambda so that we avoid + * fatal errors. */ void nr_lib_aws_sdk_php_handle_version() { - zval* zval_version = NULL; - zend_class_entry* class_entry = NULL; char* version = NULL; - - class_entry = nr_php_find_class("aws\\sdk"); - if (NULL != class_entry) { - zval_version = nr_php_get_class_constant(class_entry, "VERSION"); - - if (nr_php_is_zval_non_empty_string(zval_version)) { - version = Z_STRVAL_P(zval_version); + zval retval; + int result = FAILURE; + + result = zend_eval_string( + "(function() {" + " $nr_aws_sdk_version = '';" + " try {" + " $nr_aws_sdk_version = Aws\\Sdk::VERSION;" + " } catch (Throwable $e) {" + " }" + " return $nr_aws_sdk_version;" + "})();", + &retval, "Get nr_aws_sdk_version"); + + /* See if we got a non-empty/non-null string for version. */ + if (SUCCESS == result) { + if (nr_php_is_zval_non_empty_string(&retval)) { + version = Z_STRVAL(retval); } } + if (NRINI(vulnerability_management_package_detection_enabled)) { /* Add php package to transaction */ nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); @@ -73,7 +64,7 @@ void nr_lib_aws_sdk_php_handle_version() { nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, version); - nr_php_zval_free(&zval_version); + zval_dtor(&retval); } void nr_lib_aws_sdk_php_add_supportability_service_metric( @@ -96,13 +87,6 @@ void nr_lib_aws_sdk_php_add_supportability_service_metric( nrm_force_add(NRPRG(txn) ? NRTXN(unscoped_metrics) : 0, buf, 0); } -NR_PHP_WRAPPER(nr_create_aws_sdk_version_metrics) { - (void)wraprec; - NR_PHP_WRAPPER_CALL; - nr_lib_aws_sdk_php_handle_version(); -} -NR_PHP_WRAPPER_END - /* * AwsClient::parseClass * This is called from the base AwsClient class for every client associated @@ -144,7 +128,7 @@ NR_PHP_WRAPPER_END * optimizable library. Small overhead incurred when encountering an autoload * file, but detects aws-sdk-php immediately before any sdk code executes * (changes needed for this are detailed in the original PR) - * 2. use a file that gets called later and only when AwsClient.php file file is + * 2. use a file that gets called later and only when AwsClient.php file is * called. It's called later and we'll miss some instrumentation, but if we're * only ever going to be interested in Client calls anyway, maybe that's ok? * Doesn't detect Sdk.php (optimized out) so when customers only use that or @@ -158,22 +142,24 @@ NR_PHP_WRAPPER_END * to wrap, this will add overhead to every hash map lookup. Currently * implemented option is 2, use the AwsClient.php as this is our main focus. * This means until a call to an Aws/AwsClient function, - * all calls including aws\sdk calls are ignored. Version detection will be - * tied to Aws/ClientResolver::_apply_user_agent which is ALWAYS called when - * dealing with aws clients. It will not be computed from - * Aws/Sdk::__constructor which would at best be duplicate info and worst would - * never be ignored until a client is called. + * all calls including aws\sdk calls are ignored. + * + * Version detection will be called directly from Aws\Sdk.php */ void nr_aws_sdk_php_enable() { - /* This will be used to extract the version. */ - nr_php_wrap_user_function(NR_PSTR("Aws\\ClientResolver::_apply_user_agent"), - nr_create_aws_sdk_version_metrics); - /* Called when initializing all other Clients */ - nr_php_wrap_user_function(NR_PSTR("Aws\\AwsClient::parseClass"), - nr_create_aws_service_metric); - + /* + * Set the UNKNOWN package first, so it doesn't overwrite what we find with + * nr_lib_aws_sdk_php_handle_version. + */ if (NRINI(vulnerability_management_package_detection_enabled)) { nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + /* Extract the version for aws-sdk 3+ */ + nr_lib_aws_sdk_php_handle_version(); + + /* Called when initializing all Clients */ + nr_php_wrap_user_function(NR_PSTR("Aws\\AwsClient::parseClass"), + nr_create_aws_service_metric); } From 0d0f724fe6523e80d60fc6e2084a4911fa13cf59 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Fri, 20 Dec 2024 18:05:59 -0500 Subject: [PATCH 50/62] ci: fix CodeQL's agent scan (#1002) Fix agent build scan by pinning runner to ubuntu-22.04. ubuntu-24.04, which is what ubuntu-latest has recently become, doesn't have agent's build dependency (libpcre3-dev) installed. --- .github/workflows/codeql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c715fe73b..48d046adf 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -16,7 +16,7 @@ jobs: # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners # Consider using larger runners for possible analysis time improvements. - runs-on: 'ubuntu-latest' + runs-on: 'ubuntu-22.04' timeout-minutes: 360 permissions: # required for all workflows From f26aeadb6c8d951b1edc40956d0dfc7890757972 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Thu, 2 Jan 2025 20:46:11 -0500 Subject: [PATCH 51/62] ci: fix scheduled security scan (#1004) `codeql-action/upload-sarif` needs to know where the scanned code was checked out if it has been checked out to a subdir of `github.workspace`. --- .github/workflows/security-scan.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/security-scan.yml b/.github/workflows/security-scan.yml index 98e8039ba..a5bbd9cd9 100644 --- a/.github/workflows/security-scan.yml +++ b/.github/workflows/security-scan.yml @@ -45,4 +45,5 @@ jobs: if: ${{ github.event_name == 'schedule' }} uses: github/codeql-action/upload-sarif@v3 with: + checkout_path: ./php-agent sarif_file: trivy-results.sarif From 34d720e9af354445394f61b5c94083db8b7169dd Mon Sep 17 00:00:00 2001 From: ZNeumann Date: Wed, 8 Jan 2025 09:29:44 -0700 Subject: [PATCH 52/62] feat: PHP 8.4 (#996) Bumps monolog and guzzle versions for 8.4 support from those libraries. monolog2 -> 2.10 monolog3 -> 3.8 guzzle -> 7.9.2 Adds 8.4 to builds/tests/installers. Requires some updates to our make/configure scripts to adapt to changes in PHP autoconf macros. Adjusts tests to account for new closure naming in PHP 8.4 Adjusts tests to account for deprecation of E_USER_ERROR --------- Co-authored-by: James Co-authored-by: Michal Nowacki --- .github/workflows/code-coverage-baseline.yml | 4 +- .github/workflows/make-agent.yml | 2 +- .github/workflows/make-integration-tests.yml | 2 +- .github/workflows/test-agent.yml | 4 +- agent/config.m4 | 5 +- agent/newrelic-install.sh | 15 +- agent/php_includes.h | 1 + agent/php_internal_instrument.c | 28 +++ agent/tests/test_agent.c | 4 + docs/development.md | 2 +- files/Dockerfile | 4 +- make/php_versions.mk | 2 +- make/release.mk | 1 + tests/include/config.php | 6 +- tests/include/guzzle.tar.bz2 | Bin 544409 -> 550104 bytes tests/include/monolog2.tar.bz2 | Bin 84346 -> 103762 bytes tests/include/monolog3.tar.bz2 | Bin 84471 -> 108070 bytes .../test_error_group_callback_error_web.php | 8 + ...t_error_group_callback_error_web.php84.php | 179 ++++++++++++++++ .../test_good_4_args_error_handler.php | 4 +- .../test_good_5_args_error_handler.php | 4 +- .../api/notice_error/test_prioritize_api.php | 2 +- .../api/notice_error/test_priority.php | 12 +- .../set_user_id/test_set_user_id_error.php | 6 +- .../test_transaction_closure_clm.php | 9 +- .../test_transaction_closure_clm.php84.php | 167 +++++++++++++++ .../test_transaction_closure_clm_off.php | 3 + ...test_transaction_closure_clm_off.php84.php | 154 ++++++++++++++ .../newrelic/test_error_intrinsic_error.php | 4 +- .../errors/test_E_DEPRECATED_2.php81.php | 3 + .../errors/test_E_DEPRECATED_2.php84.php | 81 +++++++ .../integration/errors/test_E_USER_ERROR.php | 7 + .../test_uncaught_handled_exception_02.php | 3 + ...st_uncaught_handled_exception_02.php84.php | 169 +++++++++++++++ .../events/test_database_duration.php | 2 +- tests/integration/external/guzzle7/skipif.inc | 4 +- ...n_events_are_created_upon_caught_error.php | 3 + ...ts_are_created_upon_caught_error.php84.php | 196 +++++++++++++++++ ...events_are_created_upon_uncaught_error.php | 11 +- ..._are_created_upon_uncaught_error.php84.php | 137 ++++++++++++ ...reated_upon_uncaught_handled_exception.php | 3 + ..._upon_uncaught_handled_exception.php84.php | 200 ++++++++++++++++++ ...n_events_are_created_upon_caught_error.php | 3 + ...ts_are_created_upon_caught_error.php84.php | 195 +++++++++++++++++ ...events_are_created_upon_uncaught_error.php | 3 + ..._are_created_upon_uncaught_error.php84.php | 135 ++++++++++++ ...reated_upon_uncaught_handled_exception.php | 3 + ..._upon_uncaught_handled_exception.php84.php | 197 +++++++++++++++++ ...n_events_are_created_upon_caught_error.php | 3 + ...ts_are_created_upon_caught_error.php84.php | 193 +++++++++++++++++ ...events_are_created_upon_uncaught_error.php | 3 + ..._are_created_upon_uncaught_error.php84.php | 132 ++++++++++++ ...reated_upon_uncaught_handled_exception.php | 3 + ..._upon_uncaught_handled_exception.php84.php | 197 +++++++++++++++++ .../test_instance_reporting_port.php | 157 ++++++++++++++ .../test_instance_reporting_socket.php | 160 ++++++++++++++ .../base-class/test_prepared_stmt_basic.php | 110 ++++++++++ .../test_prepared_stmt_bind_value.php | 111 ++++++++++ .../pdo/mysql/base-class/test_query_1_arg.php | 52 +++++ .../base-class/test_query_fetch_class.php | 49 +++++ .../base-class/test_query_fetch_column.php | 51 +++++ .../base-class/test_query_fetch_into.php | 49 +++++ .../test_instance_reporting_port.php | 158 ++++++++++++++ .../test_instance_reporting_socket.php | 161 ++++++++++++++ .../constructor/test_prepared_stmt_basic.php | 111 ++++++++++ .../test_prepared_stmt_bind_value.php | 112 ++++++++++ .../mysql/constructor/test_query_1_arg.php | 53 +++++ .../constructor/test_query_fetch_class.php | 50 +++++ .../constructor/test_query_fetch_column.php | 52 +++++ .../constructor/test_query_fetch_into.php | 50 +++++ .../factory/test_instance_reporting_port.php | 158 ++++++++++++++ .../test_instance_reporting_socket.php | 161 ++++++++++++++ .../factory/test_prepared_stmt_basic.php | 111 ++++++++++ .../factory/test_prepared_stmt_bind_value.php | 112 ++++++++++ .../pdo/mysql/factory/test_query_1_arg.php | 53 +++++ .../mysql/factory/test_query_fetch_class.php | 50 +++++ .../mysql/factory/test_query_fetch_column.php | 52 +++++ .../mysql/factory/test_query_fetch_into.php | 50 +++++ .../test_instance_reporting_port.php | 156 ++++++++++++++ .../base-class/test_prepared_stmt_basic.php | 106 ++++++++++ .../test_prepared_stmt_bind_value.php | 107 ++++++++++ .../pdo/pgsql/base-class/test_query_1_arg.php | 55 +++++ .../base-class/test_query_fetch_class.php | 49 +++++ .../base-class/test_query_fetch_column.php | 51 +++++ .../base-class/test_query_fetch_into.php | 49 +++++ .../test_instance_reporting_port.php | 157 ++++++++++++++ .../constructor/test_prepared_stmt_basic.php | 107 ++++++++++ .../test_prepared_stmt_bind_value.php | 108 ++++++++++ .../pgsql/constructor/test_query_1_arg.php | 52 +++++ .../constructor/test_query_fetch_class.php | 50 +++++ .../constructor/test_query_fetch_column.php | 52 +++++ .../constructor/test_query_fetch_into.php | 50 +++++ .../factory/test_instance_reporting_port.php | 157 ++++++++++++++ .../factory/test_prepared_stmt_basic.php | 107 ++++++++++ .../factory/test_prepared_stmt_bind_value.php | 108 ++++++++++ .../pdo/pgsql/factory/test_query_1_arg.php | 52 +++++ .../pgsql/factory/test_query_fetch_class.php | 50 +++++ .../pgsql/factory/test_query_fetch_column.php | 52 +++++ .../pgsql/factory/test_query_fetch_into.php | 50 +++++ .../integration/pdo/skipif_pdo_subclasses.inc | 10 + tests/integration/pdo/skipif_pgsql.inc | 37 ++++ .../base-class/test_prepared_stmt_basic.php | 106 ++++++++++ .../test_prepared_stmt_bind_value.php | 107 ++++++++++ .../base-class/test_query_1_arg.php} | 39 +--- .../base-class/test_query_fetch_class.php} | 34 +-- .../base-class/test_query_fetch_column.php} | 30 +-- .../test_query_fetch_column_logging_off.php} | 30 +-- .../base-class/test_query_fetch_into.php} | 35 +-- .../constructor/test_prepared_stmt_basic.php | 107 ++++++++++ .../test_prepared_stmt_bind_value.php | 108 ++++++++++ .../sqlite/constructor/test_query_1_arg.php | 75 +++++++ .../constructor/test_query_fetch_class.php | 73 +++++++ .../constructor/test_query_fetch_column.php | 75 +++++++ .../test_query_fetch_column_logging_off.php | 78 +++++++ .../constructor/test_query_fetch_into.php | 73 +++++++ .../extending-class/test_query_1_arg.php} | 37 +--- .../factory/test_prepared_stmt_basic.php | 107 ++++++++++ .../factory/test_prepared_stmt_bind_value.php | 108 ++++++++++ .../pdo/sqlite/factory/test_query_1_arg.php | 75 +++++++ .../sqlite/factory/test_query_fetch_class.php | 73 +++++++ .../factory/test_query_fetch_column.php | 75 +++++++ .../test_query_fetch_column_logging_off.php | 78 +++++++ .../sqlite/factory/test_query_fetch_into.php | 73 +++++++ .../pdo/test_empty_driver_options.php | 4 +- .../pdo/test_empty_driver_options.php81.php | 4 +- .../pdo/test_instance_reporting.inc | 33 +++ .../pdo/test_instance_slow_sql_1.php | 4 +- .../pdo/test_instance_slow_sql_1.php81.php | 4 +- .../pdo/test_instance_slow_sql_2.php | 4 +- .../pdo/test_instance_slow_sql_2.php81.php | 4 +- .../pdo/test_instance_slow_sql_for_update.php | 4 +- .../pdo/test_instance_slow_sql_lock.php | 4 +- .../pdo/test_instance_slow_sql_semicolon.php | 4 +- tests/integration/pdo/test_null_options.php | 4 +- .../pdo/test_null_options.php81.php | 4 +- .../integration/pdo/test_persistent_conn.php | 4 +- .../pdo/test_persistent_conn.php81.php | 4 +- .../pdo/test_prepared_stmt_basic.inc | 31 +++ .../pdo/test_prepared_stmt_bind_value.inc | 32 +++ .../pdo/test_prepared_stmt_params.php | 4 +- .../pdo/test_prepared_stmt_params.php81.php | 4 +- tests/integration/pdo/test_query_1_arg.inc | 51 +++++ .../pdo/test_query_fetch_class.inc | 44 ++++ .../pdo/test_query_fetch_column.inc | 40 ++++ .../integration/pdo/test_query_fetch_into.inc | 45 ++++ tests/integration/pdo/test_slow_sql_1.php | 4 +- .../integration/pdo/test_slow_sql_1.php81.php | 4 +- tests/integration/pdo/test_slow_sql_2.php | 4 +- .../integration/pdo/test_slow_sql_2.php81.php | 4 +- .../pdo/test_slow_sql_for_update.php | 4 +- tests/integration/pdo/test_slow_sql_lock.php | 4 +- .../pdo/test_slow_sql_semicolon.php | 4 +- ...n_events_are_created_upon_caught_error.php | 7 +- ...s_are_created_upon_caught_error.php84.php} | 30 ++- ...events_are_created_upon_uncaught_error.php | 5 +- ...s_are_created_upon_uncaught_error.php5.php | 7 + ..._are_created_upon_uncaught_error.php84.php | 122 +++++++++++ ...reated_upon_uncaught_handled_exception.php | 3 + ..._upon_uncaught_handled_exception.php84.php | 183 ++++++++++++++++ .../suite-least-secure/test_slow_sql_on.php | 6 +- .../test_slow_sql_on.php81.php | 6 +- .../suite-most-secure/test_slow_sql_off.php | 2 +- .../lasp/suite-random-2/test_slow_sql_on.php | 6 +- .../suite-random-2/test_slow_sql_on.php81.php | 6 +- .../lasp/suite-random-3/test_slow_sql_off.php | 2 +- .../lasp/suite-random-3/test_slow_sql_on.php | 2 +- .../test_php_1179_pdo_options_crash.php | 2 +- 167 files changed, 8595 insertions(+), 277 deletions(-) create mode 100644 tests/integration/api/error_group_callback/test_error_group_callback_error_web.php84.php create mode 100644 tests/integration/attributes/test_transaction_closure_clm.php84.php create mode 100644 tests/integration/attributes/test_transaction_closure_clm_off.php84.php create mode 100644 tests/integration/errors/test_E_DEPRECATED_2.php84.php create mode 100644 tests/integration/errors/test_uncaught_handled_exception_02.php84.php create mode 100644 tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php84.php create mode 100644 tests/integration/jit/function/test_span_events_are_created_upon_uncaught_error.php84.php create mode 100644 tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php84.php create mode 100644 tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php84.php create mode 100644 tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php84.php create mode 100644 tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php84.php create mode 100644 tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php84.php create mode 100644 tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php84.php create mode 100644 tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php84.php create mode 100644 tests/integration/pdo/mysql/base-class/test_instance_reporting_port.php create mode 100644 tests/integration/pdo/mysql/base-class/test_instance_reporting_socket.php create mode 100644 tests/integration/pdo/mysql/base-class/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/mysql/base-class/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/mysql/base-class/test_query_1_arg.php create mode 100644 tests/integration/pdo/mysql/base-class/test_query_fetch_class.php create mode 100644 tests/integration/pdo/mysql/base-class/test_query_fetch_column.php create mode 100644 tests/integration/pdo/mysql/base-class/test_query_fetch_into.php create mode 100644 tests/integration/pdo/mysql/constructor/test_instance_reporting_port.php create mode 100644 tests/integration/pdo/mysql/constructor/test_instance_reporting_socket.php create mode 100644 tests/integration/pdo/mysql/constructor/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/mysql/constructor/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/mysql/constructor/test_query_1_arg.php create mode 100644 tests/integration/pdo/mysql/constructor/test_query_fetch_class.php create mode 100644 tests/integration/pdo/mysql/constructor/test_query_fetch_column.php create mode 100644 tests/integration/pdo/mysql/constructor/test_query_fetch_into.php create mode 100644 tests/integration/pdo/mysql/factory/test_instance_reporting_port.php create mode 100644 tests/integration/pdo/mysql/factory/test_instance_reporting_socket.php create mode 100644 tests/integration/pdo/mysql/factory/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/mysql/factory/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/mysql/factory/test_query_1_arg.php create mode 100644 tests/integration/pdo/mysql/factory/test_query_fetch_class.php create mode 100644 tests/integration/pdo/mysql/factory/test_query_fetch_column.php create mode 100644 tests/integration/pdo/mysql/factory/test_query_fetch_into.php create mode 100644 tests/integration/pdo/pgsql/base-class/test_instance_reporting_port.php create mode 100644 tests/integration/pdo/pgsql/base-class/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/pgsql/base-class/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/pgsql/base-class/test_query_1_arg.php create mode 100644 tests/integration/pdo/pgsql/base-class/test_query_fetch_class.php create mode 100644 tests/integration/pdo/pgsql/base-class/test_query_fetch_column.php create mode 100644 tests/integration/pdo/pgsql/base-class/test_query_fetch_into.php create mode 100644 tests/integration/pdo/pgsql/constructor/test_instance_reporting_port.php create mode 100644 tests/integration/pdo/pgsql/constructor/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/pgsql/constructor/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/pgsql/constructor/test_query_1_arg.php create mode 100644 tests/integration/pdo/pgsql/constructor/test_query_fetch_class.php create mode 100644 tests/integration/pdo/pgsql/constructor/test_query_fetch_column.php create mode 100644 tests/integration/pdo/pgsql/constructor/test_query_fetch_into.php create mode 100644 tests/integration/pdo/pgsql/factory/test_instance_reporting_port.php create mode 100644 tests/integration/pdo/pgsql/factory/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/pgsql/factory/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/pgsql/factory/test_query_1_arg.php create mode 100644 tests/integration/pdo/pgsql/factory/test_query_fetch_class.php create mode 100644 tests/integration/pdo/pgsql/factory/test_query_fetch_column.php create mode 100644 tests/integration/pdo/pgsql/factory/test_query_fetch_into.php create mode 100644 tests/integration/pdo/skipif_pdo_subclasses.inc create mode 100644 tests/integration/pdo/skipif_pgsql.inc create mode 100644 tests/integration/pdo/sqlite/base-class/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/sqlite/base-class/test_prepared_stmt_bind_value.php rename tests/integration/pdo/{test_query_1.php => sqlite/base-class/test_query_1_arg.php} (76%) rename tests/integration/pdo/{test_query_3.php => sqlite/base-class/test_query_fetch_class.php} (82%) rename tests/integration/pdo/{test_query_2.php => sqlite/base-class/test_query_fetch_column.php} (81%) rename tests/integration/pdo/{test_query_2_logging_off.php => sqlite/base-class/test_query_fetch_column_logging_off.php} (81%) rename tests/integration/pdo/{test_query_4.php => sqlite/base-class/test_query_fetch_into.php} (82%) create mode 100644 tests/integration/pdo/sqlite/constructor/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/sqlite/constructor/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/sqlite/constructor/test_query_1_arg.php create mode 100644 tests/integration/pdo/sqlite/constructor/test_query_fetch_class.php create mode 100644 tests/integration/pdo/sqlite/constructor/test_query_fetch_column.php create mode 100644 tests/integration/pdo/sqlite/constructor/test_query_fetch_column_logging_off.php create mode 100644 tests/integration/pdo/sqlite/constructor/test_query_fetch_into.php rename tests/integration/pdo/{test_query_1.php81.php => sqlite/extending-class/test_query_1_arg.php} (77%) create mode 100644 tests/integration/pdo/sqlite/factory/test_prepared_stmt_basic.php create mode 100644 tests/integration/pdo/sqlite/factory/test_prepared_stmt_bind_value.php create mode 100644 tests/integration/pdo/sqlite/factory/test_query_1_arg.php create mode 100644 tests/integration/pdo/sqlite/factory/test_query_fetch_class.php create mode 100644 tests/integration/pdo/sqlite/factory/test_query_fetch_column.php create mode 100644 tests/integration/pdo/sqlite/factory/test_query_fetch_column_logging_off.php create mode 100644 tests/integration/pdo/sqlite/factory/test_query_fetch_into.php create mode 100644 tests/integration/pdo/test_instance_reporting.inc create mode 100644 tests/integration/pdo/test_prepared_stmt_basic.inc create mode 100644 tests/integration/pdo/test_prepared_stmt_bind_value.inc create mode 100644 tests/integration/pdo/test_query_1_arg.inc create mode 100644 tests/integration/pdo/test_query_fetch_class.inc create mode 100644 tests/integration/pdo/test_query_fetch_column.inc create mode 100644 tests/integration/pdo/test_query_fetch_into.inc rename tests/integration/span_events/{test_span_events_are_created_upon_caught_error.php5.php => test_span_events_are_created_upon_caught_error.php84.php} (80%) create mode 100644 tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php84.php create mode 100644 tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php84.php diff --git a/.github/workflows/code-coverage-baseline.yml b/.github/workflows/code-coverage-baseline.yml index ab5b213f8..199bdccac 100644 --- a/.github/workflows/code-coverage-baseline.yml +++ b/.github/workflows/code-coverage-baseline.yml @@ -69,7 +69,7 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64] - php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4'] include: - codecov: 0 - platform: gnu @@ -147,7 +147,7 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64] - php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4'] include: - codecov: 0 - platform: gnu diff --git a/.github/workflows/make-agent.yml b/.github/workflows/make-agent.yml index b29881676..6508fcaf3 100644 --- a/.github/workflows/make-agent.yml +++ b/.github/workflows/make-agent.yml @@ -32,7 +32,7 @@ jobs: strategy: matrix: platform: [gnu, musl] - php: ['8.0', '8.1', '8.2', '8.3'] + php: ['8.0', '8.1', '8.2', '8.3', '8.4'] steps: - name: Checkout Repo uses: actions/checkout@v4 diff --git a/.github/workflows/make-integration-tests.yml b/.github/workflows/make-integration-tests.yml index 800146f41..0b6660575 100644 --- a/.github/workflows/make-integration-tests.yml +++ b/.github/workflows/make-integration-tests.yml @@ -34,7 +34,7 @@ jobs: fail-fast: true matrix: platform: [gnu, musl] - php: ['8.0', '8.1', '8.2', '8.3'] + php: ['8.0', '8.1', '8.2', '8.3', '8.4'] steps: - name: Checkout integration tests uses: actions/checkout@v4 diff --git a/.github/workflows/test-agent.yml b/.github/workflows/test-agent.yml index 328be3a39..fff60dae5 100644 --- a/.github/workflows/test-agent.yml +++ b/.github/workflows/test-agent.yml @@ -97,7 +97,7 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64, arm64] - php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4'] exclude: - arch: arm64 php: '7.2' @@ -203,7 +203,7 @@ jobs: matrix: platform: [gnu, musl] arch: [amd64, arm64] - php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3'] + php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4'] exclude: - arch: arm64 php: '7.2' diff --git a/agent/config.m4 b/agent/config.m4 index 5806caac5..6671bcd54 100644 --- a/agent/config.m4 +++ b/agent/config.m4 @@ -232,13 +232,16 @@ if test "$PHP_NEWRELIC" = "yes"; then lib_guzzle4.c lib_guzzle6.c lib_guzzle_common.c \ lib_mongodb.c lib_phpunit.c lib_predis.c lib_zend_http.c \ lib_composer.c" - PHP_NEW_EXTENSION(newrelic, $FRAMEWORKS $LIBRARIES $NEWRELIC_AGENT, $ext_shared,, \\$(NEWRELIC_CFLAGS)) + PHP_NEW_EXTENSION(newrelic, $FRAMEWORKS $LIBRARIES $NEWRELIC_AGENT, $ext_shared,, $(NEWRELIC_CFLAGS)) PHP_SUBST(NEWRELIC_CFLAGS) dnl Define $(PHP_CONFIG) so we can call it when building tests. PHP_SUBST(PHP_CONFIG) + dnl Make sure we include the source directory in the include search path. + PHP_ADD_INCLUDE([$abs_srcdir], [1]) + dnl Include the Makefile.frag, which we use to handle build time dnl dependencies. PHP_ADD_MAKEFILE_FRAGMENT diff --git a/agent/newrelic-install.sh b/agent/newrelic-install.sh index 9ef1e45fd..8ff9cd3ed 100755 --- a/agent/newrelic-install.sh +++ b/agent/newrelic-install.sh @@ -335,10 +335,10 @@ for pmv in "20170718" "20180731" "20190902"; do done fi # Currently supported versions: -# (8.0, 8.1, 8.2, 8.3) +# (8.0, 8.1, 8.2, 8.3, 8.4) # for x64 and aarch64 if [ ${arch} = x64 ] || [ ${arch} = aarch64 ]; then - for pmv in "20200930" "20210902" "20220829" "20230831"; do + for pmv in "20200930" "20210902" "20220829" "20230831" "20240924"; do check_file "${ilibdir}/agent/${arch}/newrelic-${pmv}.so" done fi @@ -542,6 +542,7 @@ add_to_path /usr/local/php-8.0/bin add_to_path /usr/local/php-8.1/bin add_to_path /usr/local/php-8.2/bin add_to_path /usr/local/php-8.3/bin +add_to_path /usr/local/php-8.4/bin add_to_path /opt/local/bin add_to_path /usr/php/bin @@ -553,6 +554,7 @@ add_to_path /usr/php-8.0/bin add_to_path /usr/php-8.1/bin add_to_path /usr/php-8.2/bin add_to_path /usr/php-8.3/bin +add_to_path /usr/php-8.4/bin add_to_path /usr/php/7.2/bin add_to_path /usr/php/7.3/bin @@ -561,6 +563,7 @@ add_to_path /usr/php/8.0/bin add_to_path /usr/php/8.1/bin add_to_path /usr/php/8.2/bin add_to_path /usr/php/8.3/bin +add_to_path /usr/php/8.4/bin add_to_path /opt/php/bin add_to_path /opt/zend/bin @@ -572,6 +575,7 @@ add_to_path /opt/php-8.0/bin add_to_path /opt/php-8.1/bin add_to_path /opt/php-8.2/bin add_to_path /opt/php-8.3/bin +add_to_path /opt/php-8.4/bin if [ -n "${NR_INSTALL_PATH}" ]; then oIFS="${IFS}" @@ -1052,7 +1056,11 @@ for this copy of PHP. We apologize for the inconvenience. 8.3.*) pi_php8="yes" - ;; + ;; + + 8.4.*) + pi_php8="yes" + ;; *) error "unsupported version '${pi_ver}' of PHP found at: @@ -1232,6 +1240,7 @@ does not exist. This particular instance of PHP will be skipped. 8.1.*) pi_modver="20210902" ;; 8.2.*) pi_modver="20220829" ;; 8.3.*) pi_modver="20230831" ;; + 8.4.*) pi_modver="20240924" ;; esac log "${pdir}: pi_modver=${pi_modver}" diff --git a/agent/php_includes.h b/agent/php_includes.h index 72c25a26a..da255fdbc 100644 --- a/agent/php_includes.h +++ b/agent/php_includes.h @@ -54,6 +54,7 @@ #define ZEND_8_1_X_API_NO 20210902 #define ZEND_8_2_X_API_NO 20220829 #define ZEND_8_3_X_API_NO 20230831 +#define ZEND_8_4_X_API_NO 20240924 #if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO /* PHP8+ */ #include "Zend/zend_observer.h" diff --git a/agent/php_internal_instrument.c b/agent/php_internal_instrument.c index ce6c089ec..e37510e32 100644 --- a/agent/php_internal_instrument.c +++ b/agent/php_internal_instrument.c @@ -3840,9 +3840,37 @@ void nr_php_generate_internal_wrap_records(void) { NR_INTERNAL_WRAPREC("sqlite3::exec", sqlite3_exec, sqlite3, 0, 0) NR_INTERNAL_WRAPREC("pdo::__construct", pdo_construct, pdo_construct, 0, 0) +#if ZEND_MODULE_API_NO >= ZEND_8_4_X_API_NO + NR_INTERNAL_WRAPREC("pdo\\firebird::__construct", pdo_construct, pdo_construct, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\mysql::__construct", pdo_construct, pdo_construct, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\odbc::__construct", pdo_construct, pdo_construct, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\pgsql::__construct", pdo_construct, pdo_construct, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\sqlite::__construct", pdo_construct, pdo_construct, 0, 0) +#endif NR_INTERNAL_WRAPREC("pdo::query", pdo_query, pdo_query, 0, 0) +#if ZEND_MODULE_API_NO >= ZEND_8_4_X_API_NO + NR_INTERNAL_WRAPREC("pdo\\firebird::query", pdo_query, pdo_query, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\mysql::query", pdo_query, pdo_query, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\odbc::query", pdo_query, pdo_query, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\pgsql::query", pdo_query, pdo_query, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\sqlite::query", pdo_query, pdo_query, 0, 0) +#endif NR_INTERNAL_WRAPREC("pdo::exec", pdo_exec, pdo_exec, 0, 0) +#if ZEND_MODULE_API_NO >= ZEND_8_4_X_API_NO + NR_INTERNAL_WRAPREC("pdo\\firebird::exec", pdo_exec, pdo_exec, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\mysql::exec", pdo_exec, pdo_exec, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\odbc::exec", pdo_exec, pdo_exec, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\pgsql::exec", pdo_exec, pdo_exec, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\sqlite::exec", pdo_exec, pdo_exec, 0, 0) +#endif NR_INTERNAL_WRAPREC("pdo::prepare", pdo_prepare, pdo_prepare, 0, 0) +#if ZEND_MODULE_API_NO >= ZEND_8_4_X_API_NO + NR_INTERNAL_WRAPREC("pdo\\firebird::prepare", pdo_prepare, pdo_prepare, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\mysql::prepare", pdo_prepare, pdo_prepare, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\odbc::prepare", pdo_prepare, pdo_prepare, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\pgsql::prepare", pdo_prepare, pdo_prepare, 0, 0) + NR_INTERNAL_WRAPREC("pdo\\sqlite::prepare", pdo_prepare, pdo_prepare, 0, 0) +#endif NR_INTERNAL_WRAPREC("pdostatement::execute", pdostmt_execute, pdostatement_execute, 0, 0) diff --git a/agent/tests/test_agent.c b/agent/tests/test_agent.c index 12d3437e4..53b3495ee 100644 --- a/agent/tests/test_agent.c +++ b/agent/tests/test_agent.c @@ -142,7 +142,11 @@ static void test_function_debug_name(TSRMLS_D) { func = nr_php_zval_to_function(closure TSRMLS_CC); name = nr_php_function_debug_name(func); +#if ZEND_MODULE_API_NO < ZEND_8_4_X_API_NO tlib_pass_if_str_equal("closure", "{closure} declared at -:1", name); +#else + tlib_pass_if_str_equal("closure", "{closure:-:1} declared at -:1", name); +#endif nr_php_zval_free(&closure); nr_free(name); diff --git a/docs/development.md b/docs/development.md index 11700cdee..ec42de64d 100644 --- a/docs/development.md +++ b/docs/development.md @@ -58,7 +58,7 @@ _(most operating systems package these with `-dev` or `-devel` suffixes)_ ### PHP -The PHP agent supports PHP versions `7.2`, `7.3`, `7.4`,`8.0`, `8.1`, '8.2', and `8.3`. +The PHP agent supports PHP versions `7.2`, `7.3`, `7.4`,`8.0`, `8.1`, `8.2`, `8.3` and `8.4`. ## Build the PHP Agent diff --git a/files/Dockerfile b/files/Dockerfile index cb52536ef..2f99740e3 100644 --- a/files/Dockerfile +++ b/files/Dockerfile @@ -9,7 +9,7 @@ ARG PHP_VER -FROM php:${PHP_VER:-8.3} +FROM php:${PHP_VER:-8.4} RUN docker-php-source extract @@ -89,7 +89,7 @@ COPY --from=composer ["/usr/bin/composer", "/usr/bin/composer"] # and 8.0 has problems with how the explanation for informational_schema # work (refer to bug https://bugs.mysql.com/bug.php?id=102536) so to run # the mysql tests a separate machine running mysql server 5.6 is required. -RUN docker-php-ext-install pdo pdo_mysql +RUN docker-php-ext-install pdo pdo_mysql pdo_pgsql # install redis extension required by test_redis: RUN \ diff --git a/make/php_versions.mk b/make/php_versions.mk index e0a63e9b9..f28157f09 100644 --- a/make/php_versions.mk +++ b/make/php_versions.mk @@ -3,4 +3,4 @@ # SPDX-License-Identifier: Apache-2.0 # -PHP_VERSION_LIST=$${PHPS:-8.3 8.2 8.1 8.0 7.4 7.3 7.2} +PHP_VERSION_LIST=$${PHPS:-8.4 8.3 8.2 8.1 8.0 7.4 7.3 7.2} diff --git a/make/release.mk b/make/release.mk index 8eee97388..bb166f66e 100644 --- a/make/release.mk +++ b/make/release.mk @@ -163,6 +163,7 @@ release-$1-zts: Makefile agent | releases/$$(RELEASE_OS)/agent/$$(RELEASE_ARCH)/ endef +$(eval $(call RELEASE_AGENT_TARGET,8.4,20240924)) $(eval $(call RELEASE_AGENT_TARGET,8.3,20230831)) $(eval $(call RELEASE_AGENT_TARGET,8.2,20220829)) $(eval $(call RELEASE_AGENT_TARGET,8.1,20210902)) diff --git a/tests/include/config.php b/tests/include/config.php index 4cde7cfb2..399d15552 100644 --- a/tests/include/config.php +++ b/tests/include/config.php @@ -13,7 +13,7 @@ function isset_or($check, $alternate = NULL) $MYSQL_USER = isset_or('MYSQL_USER', 'root'); $MYSQL_PASSWD = isset_or('MYSQL_PASSWD', 'root'); -$MYSQL_DB = 'information_schema'; // TODO: MSL comment here. +$MYSQL_DB = isset_or('MYSQL_DB', 'information_schema'); $MYSQL_HOST = isset_or('MYSQL_HOST', 'localhost'); $MYSQL_PORT = isset_or('MYSQL_PORT', 3306); $MYSQL_SOCKET = isset_or('MYSQL_SOCKET', ''); @@ -75,6 +75,10 @@ function make_tracing_url($file) $PG_PORT = isset_or('PG_PORT', '5433'); $PG_CONNECTION = "host=$PG_HOST port=$PG_PORT user=$PG_USER password=$PG_PW connect_timeout=1"; +$PDO_PGSQL_DSN = 'pgsql:'; +$PDO_PGSQL_DSN .= 'host=' . $PG_HOST . ';'; +$PDO_PGSQL_DSN .= 'port=' . $PG_PORT . ';'; + // Header used to track whether or not our CAT instrumentation interferes with // other existing headers. define('CUSTOMER_HEADER', 'Customer-Header'); diff --git a/tests/include/guzzle.tar.bz2 b/tests/include/guzzle.tar.bz2 index 49e7b4ef222e62b60dd65b818feff8de412917da..a7ecfeb72e9c93cd835d32457c45c0acfa9b3e7d 100644 GIT binary patch literal 550104 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⪻%`vX(S+#hB*MhNYK~?9X0MX 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�F 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]e`@AtR(AMLr}cemu{rFd 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 diff --git a/tests/include/monolog2.tar.bz2 b/tests/include/monolog2.tar.bz2 index 2b97f8938b24b90ab5d76aa13e223fe70a8ec13b..a1c0578e41c0644c5c9e616d6bf87eff4ed265a1 100644 GIT binary patch literal 103762 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 z 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 literal 84346 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 z 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 diff --git a/tests/include/monolog3.tar.bz2 b/tests/include/monolog3.tar.bz2 index 2cce31210a9c22eaa80cb906314af895df2ad8e2..783c067d61628dfaf506f7b1ee1c3dcd403a8b4b 100644 GIT binary patch literal 108070 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 Cc-7$m literal 84471 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 G*|{L_t!TOc diff --git a/tests/integration/api/error_group_callback/test_error_group_callback_error_web.php b/tests/integration/api/error_group_callback/test_error_group_callback_error_web.php index c4c02c418..3b82e16f9 100644 --- a/tests/integration/api/error_group_callback/test_error_group_callback_error_web.php +++ b/tests/integration/api/error_group_callback/test_error_group_callback_error_web.php @@ -8,6 +8,14 @@ Tests newrelic_set_error_group_callback() API for Web errors. */ +/*SKIPIF +=")) { + die("skip: newer test for PHPs 8.4+\n"); +} +*/ + + /*ENVIRONMENT REQUEST_METHOD=GET QUERY_STRING=foo=1&bar=2 diff --git a/tests/integration/api/error_group_callback/test_error_group_callback_error_web.php84.php b/tests/integration/api/error_group_callback/test_error_group_callback_error_web.php84.php new file mode 100644 index 000000000..e740c7613 --- /dev/null +++ b/tests/integration/api/error_group_callback/test_error_group_callback_error_web.php84.php @@ -0,0 +1,179 @@ + \/test_error_group_callback_error_web.php84.php\?foo=1&bar=2 +path => .*test_error_group_callback_error_web.php84.php +method => GET +status_code => 200 + +klass => E_USER_WARNING +message => I'M COVERED IN BEES +file => .*test_error_group_callback_error_web.php84.php +stack => \[" in trigger_error called at .*test_error_group_callback_error_web.php84.php \(.*\)"," in alpha called at .*test_error_group_callback_error_web.php84.php \(.*\)"\] +*/ + +/*EXPECT_METRICS +[ + "?? agent run id", + "?? timeframe start", + "?? timeframe stop", + [ + [{"name":"Apdex"}, [0, "??", "??", "??", "??", "??"]], + [{"name":"Apdex/Uri__FILE__"}, [0, "??", "??", "??", "??", "??"]], + [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/all"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"DurationByCaller/Unknown/Unknown/Unknown/Unknown/allWeb"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"Errors/WebTransaction/Uri__FILE__"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"Errors/all"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"Errors/allWeb"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"ErrorsByCaller/Unknown/Unknown/Unknown/Unknown/all"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"ErrorsByCaller/Unknown/Unknown/Unknown/Unknown/allWeb"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"HttpDispatcher"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"Supportability/Logging/Forwarding/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"Supportability/Logging/Metrics/PHP/enabled"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"Supportability/api/set_error_group_callback"}, [1, 0, 0, 0, 0, 0]], + [{"name":"WebTransaction"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"WebTransaction/Uri__FILE__"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"WebTransactionTotalTime"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"WebTransactionTotalTime/Uri__FILE__"}, [1, "??", "??", "??", "??", "??"]], + [{"name":"Supportability/Logging/LocalDecorating/PHP/disabled"}, [1, "??", "??", "??", "??", "??"]] + ] +] +*/ + + +/*EXPECT_ERROR_EVENTS +[ + "?? agent run id", + { + "reservoir_size": 100, + "events_seen": 1 + }, + [ + [ + { + "type": "TransactionError", + "timestamp": "??", + "error.class": "E_USER_WARNING", + "error.message": "I'M COVERED IN BEES", + "transactionName": "WebTransaction\/Uri__FILE__", + "duration": "??", + "nr.transactionGuid": "??", + "guid": "??", + "sampled": true, + "priority": "??", + "traceId": "??", + "spanId": "??" + }, + {}, + { + "response.headers.contentType": "application\/json", + "http.statusCode": 200, + "response.statusCode": 200, + "httpResponseCode": "200", + "request.uri": "__FILE__", + "error.group.name": "CUSTOM ERROR GROUP NAME", + "SERVER_NAME": "127.0.0.1", + "request.method": "GET", + "request.headers.host": "127.0.0.1" + } + ] + ] +] +*/ + +/*EXPECT_TRACED_ERRORS +[ + "?? agent run id", + [ + [ + "??", + "WebTransaction\/Uri__FILE__", + "I'M COVERED IN BEES", + "E_USER_WARNING", + { + "stack_trace": [ + " in trigger_error called at __FILE__ (??)", + " in alpha called at __FILE__ (??)" + ], + "agentAttributes": { + "response.headers.contentType": "application\/json", + "http.statusCode": 200, + "response.statusCode": 200, + "httpResponseCode": "200", + "request.uri": "__FILE__", + "error.group.name": "CUSTOM ERROR GROUP NAME", + "SERVER_NAME": "127.0.0.1", + "request.method": "GET", + "request.headers.host": "127.0.0.1" + }, + "intrinsics": { + "totalTime": "??", + "cpu_time": "??", + "cpu_user_time": "??", + "cpu_sys_time": "??", + "guid": "??", + "sampled": true, + "priority": "??", + "traceId": "??" + }, + "request_uri": "__FILE__" + }, + "?? transaction ID" + ] + ] +] +*/ + +require_once(realpath(dirname(__FILE__)) . '/../../../include/tap.php'); + +header('Content-Type: text/html'); +header('Content-Type: application/json'); + +function alpha() +{ + trigger_error("I'M COVERED IN BEES", E_USER_WARNING); +} + +$callback = function($txndata, $errdata) +{ + foreach($txndata as $tkey => $tdata) { + echo "$tkey => $tdata\n"; + }; + + echo "\n"; + + foreach($errdata as $ekey => $edata) { + echo "$ekey => $edata\n"; + }; + + $fingerprint = "CUSTOM ERROR GROUP NAME"; + return $fingerprint; +}; + +$result = newrelic_set_error_group_callback($callback); + +tap_assert($result, "callback registered"); + +alpha(); diff --git a/tests/integration/api/notice_error/test_good_4_args_error_handler.php b/tests/integration/api/notice_error/test_good_4_args_error_handler.php index 6562e4f7a..323bce533 100644 --- a/tests/integration/api/notice_error/test_good_4_args_error_handler.php +++ b/tests/integration/api/notice_error/test_good_4_args_error_handler.php @@ -142,8 +142,8 @@ */ function a() { - trigger_error("4 arg error", E_USER_ERROR); + trigger_error("4 arg error", E_USER_WARNING); } -set_error_handler('newrelic_notice_error', E_USER_ERROR); +set_error_handler('newrelic_notice_error', E_USER_WARNING); a(); diff --git a/tests/integration/api/notice_error/test_good_5_args_error_handler.php b/tests/integration/api/notice_error/test_good_5_args_error_handler.php index 17772271c..485b2f500 100644 --- a/tests/integration/api/notice_error/test_good_5_args_error_handler.php +++ b/tests/integration/api/notice_error/test_good_5_args_error_handler.php @@ -142,8 +142,8 @@ */ function a() { - trigger_error("5 arg error", E_USER_ERROR); + trigger_error("5 arg error", E_USER_WARNING); } -set_error_handler('newrelic_notice_error', E_USER_ERROR); +set_error_handler('newrelic_notice_error', E_USER_WARNING); a(); diff --git a/tests/integration/api/notice_error/test_prioritize_api.php b/tests/integration/api/notice_error/test_prioritize_api.php index 92c2f04ec..4bf0418f8 100644 --- a/tests/integration/api/notice_error/test_prioritize_api.php +++ b/tests/integration/api/notice_error/test_prioritize_api.php @@ -84,7 +84,7 @@ function gamma($password) function omega() { - trigger_error("ignore me", E_USER_ERROR); + trigger_error("ignore me", E_USER_WARNING); } gamma('my super secret password that New Relic cannot know'); diff --git a/tests/integration/api/notice_error/test_priority.php b/tests/integration/api/notice_error/test_priority.php index c33fdeb12..806c11f9e 100644 --- a/tests/integration/api/notice_error/test_priority.php +++ b/tests/integration/api/notice_error/test_priority.php @@ -16,7 +16,7 @@ "?? when", "OtherTransaction/php__FILE__", "highest priority", - "E_USER_ERROR", + "E_USER_WARNING", { "stack_trace": [ " in trigger_error called at __FILE__ (??)" @@ -42,7 +42,7 @@ { "type": "TransactionError", "timestamp": "??", - "error.class": "E_USER_ERROR", + "error.class": "E_USER_WARNING", "error.message": "highest priority", "transactionName": "OtherTransaction\/php__FILE__", "duration": "??", @@ -60,9 +60,7 @@ ] */ -/* - * Cause three errors to be noticed in order of decreasing priority. - */ -trigger_error ("highest priority", E_USER_ERROR); -trigger_error ("goldilox", E_USER_WARNING); trigger_error ("lowest priority", E_USER_NOTICE); +trigger_error ("goldilox", E_USER_DEPRECATED); +trigger_error ("highest priority", E_USER_WARNING); +trigger_error ("goldilox", E_USER_DEPRECATED); diff --git a/tests/integration/api/set_user_id/test_set_user_id_error.php b/tests/integration/api/set_user_id/test_set_user_id_error.php index 1632bbca9..dbf782bdb 100644 --- a/tests/integration/api/set_user_id/test_set_user_id_error.php +++ b/tests/integration/api/set_user_id/test_set_user_id_error.php @@ -44,7 +44,7 @@ "??", "OtherTransaction\/php__FILE__", "I'M COVERED IN BEES", - "E_USER_ERROR", + "E_USER_WARNING", { "stack_trace": [ " in trigger_error called at __FILE__ (??)", @@ -82,7 +82,7 @@ { "type": "TransactionError", "timestamp": "??", - "error.class": "E_USER_ERROR", + "error.class": "E_USER_WARNING", "error.message": "I'M COVERED IN BEES", "transactionName": "OtherTransaction\/php__FILE__", "duration": "??", @@ -106,7 +106,7 @@ function alpha() { - trigger_error("I'M COVERED IN BEES", E_USER_ERROR); + trigger_error("I'M COVERED IN BEES", E_USER_WARNING); }; $uuid = "0123456789abcdefghijlkmnopqrstuvwxyz"; diff --git a/tests/integration/attributes/test_transaction_closure_clm.php b/tests/integration/attributes/test_transaction_closure_clm.php index cb6759465..369c7cc49 100644 --- a/tests/integration/attributes/test_transaction_closure_clm.php +++ b/tests/integration/attributes/test_transaction_closure_clm.php @@ -14,6 +14,9 @@ class name, and lineno for closures. if (version_compare(PHP_VERSION, "7.0", "<")) { die("skip: CLM for PHP 5 not supported\n"); } +if (version_compare(PHP_VERSION, "8.4", ">=")) { + die("skip: newer test for PHP 8.4+\n"); +} */ /*INI @@ -94,7 +97,7 @@ class name, and lineno for closures. }, {}, { - "code.lineno": 151, + "code.lineno": 154, "code.filepath": "__FILE__", "code.function": "{closure}" } @@ -115,7 +118,7 @@ class name, and lineno for closures. }, {}, { - "code.lineno": 159, + "code.lineno": 162, "code.filepath": "__FILE__", "code.function": "{closure}" } @@ -136,7 +139,7 @@ class name, and lineno for closures. }, {}, { - "code.lineno": 159, + "code.lineno": 162, "code.filepath": "__FILE__", "code.function": "{closure}" } diff --git a/tests/integration/attributes/test_transaction_closure_clm.php84.php b/tests/integration/attributes/test_transaction_closure_clm.php84.php new file mode 100644 index 000000000..7a30585c4 --- /dev/null +++ b/tests/integration/attributes/test_transaction_closure_clm.php84.php @@ -0,0 +1,167 @@ +=")) { + die("skip: newer test for PHP 8.4+\n"); +} */ /*INI diff --git a/tests/integration/attributes/test_transaction_closure_clm_off.php84.php b/tests/integration/attributes/test_transaction_closure_clm_off.php84.php new file mode 100644 index 000000000..dda499cb6 --- /dev/null +++ b/tests/integration/attributes/test_transaction_closure_clm_off.php84.php @@ -0,0 +1,154 @@ +=")) { + die("skip: PHP >= 8.4.0 not supported\n"); +} */ /*INI diff --git a/tests/integration/errors/test_E_DEPRECATED_2.php84.php b/tests/integration/errors/test_E_DEPRECATED_2.php84.php new file mode 100644 index 000000000..afb0b9ca6 --- /dev/null +++ b/tests/integration/errors/test_E_DEPRECATED_2.php84.php @@ -0,0 +1,81 @@ +=")) { + die("skip: E_USER_ERROR deprecated in PHP 8.4\n"); +} +*/ + /*INI display_errors=1 log_errors=0 diff --git a/tests/integration/errors/test_uncaught_handled_exception_02.php b/tests/integration/errors/test_uncaught_handled_exception_02.php index 5fc475dca..059686adb 100644 --- a/tests/integration/errors/test_uncaught_handled_exception_02.php +++ b/tests/integration/errors/test_uncaught_handled_exception_02.php @@ -26,6 +26,9 @@ if (version_compare(PHP_VERSION, "8.0", "<")) { die("skip: PHP < 8.0.0 not supported\n"); } +if (version_compare(PHP_VERSION, "8.4", ">=")) { + die("skip: newer test for PHP 8.4+\n"); +} */ diff --git a/tests/integration/errors/test_uncaught_handled_exception_02.php84.php b/tests/integration/errors/test_uncaught_handled_exception_02.php84.php new file mode 100644 index 000000000..01a5df516 --- /dev/null +++ b/tests/integration/errors/test_uncaught_handled_exception_02.php84.php @@ -0,0 +1,169 @@ +query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/external/guzzle7/skipif.inc b/tests/integration/external/guzzle7/skipif.inc index 91ee13a0b..e8ede4887 100644 --- a/tests/integration/external/guzzle7/skipif.inc +++ b/tests/integration/external/guzzle7/skipif.inc @@ -6,8 +6,8 @@ require_once(realpath(dirname(__FILE__)) . '/../../../include/unpack_guzzle.php'); -if (version_compare(phpversion(), '7.2.5', '<')) { - die("skip: PHP >= 7.2.5 required\n"); +if (version_compare(phpversion(), '8.1', '<')) { + die("skip: PHP >= 8.1 required\n"); } /* diff --git a/tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php b/tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php index bca70be7e..0c113528a 100644 --- a/tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php +++ b/tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php @@ -15,6 +15,9 @@ =")) { + die("skip: newer test for PHP 8.4+\n"); +} */ diff --git a/tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php84.php b/tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php84.php new file mode 100644 index 000000000..f5ef9e41e --- /dev/null +++ b/tests/integration/jit/function/test_span_events_are_created_upon_caught_error.php84.php @@ -0,0 +1,196 @@ + 'FakeDB', + ) +); +a(); diff --git a/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_error.php b/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_error.php index c3f064b6d..cc1fc14b3 100644 --- a/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_error.php +++ b/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_error.php @@ -13,6 +13,9 @@ =")) { + die("skip: newer test for PHPs 8.4+\n"); +} + +*/ + +/*INI +newrelic.distributed_tracing_enabled=1 +newrelic.transaction_tracer.threshold = 0 +newrelic.span_events_enabled=1 +newrelic.cross_application_tracer.enabled = false +display_errors=1 +log_errors=0 +error_reporting = E_ALL +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=32M +opcache.jit=function +*/ + +/*PHPMODULES +zend_extension=opcache.so +*/ + +/*EXPECT_SPAN_EVENTS +[ + "?? agent run id", + { + "reservoir_size": 10000, + "events_seen": 3 + }, + [ + [ + { + "traceId": "??", + "duration": "??", + "transactionId": "??", + "name": "OtherTransaction\/php__FILE__", + "guid": "??", + "type": "Span", + "category": "generic", + "priority": "??", + "sampled": true, + "nr.entryPoint": true, + "timestamp": "??", + "transaction.name": "OtherTransaction\/php__FILE__" + }, + {}, + {} + ], + [ + { + "type": "Span", + "traceId": "??", + "transactionId": "??", + "sampled": true, + "priority": "??", + "name": "Datastore\/statement\/FakeDB\/other\/other", + "guid": "??", + "timestamp": "??", + "duration": "??", + "category": "datastore", + "parentId": "??", + "span.kind": "client", + "component": "FakeDB" + }, + {}, + { + "db.instance": "unknown", + "peer.hostname": "unknown", + "peer.address": "unknown:unknown" + } + ], + [ + { + "type": "Span", + "traceId": "??", + "transactionId": "??", + "sampled": true, + "priority": "??", + "name": "Custom\/a", + "guid": "??", + "timestamp": "??", + "duration": "??", + "category": "generic", + "parentId": "??" + }, + {}, + { + "error.message": "foo", + "error.class": "E_USER_ERROR", + "code.lineno": "??", + "code.filepath": "__FILE__", + "code.function": "??" + } + ] + ] +] +*/ + +/*EXPECT_REGEX +^\s*(PHP )?Fatal error:\s*foo in .*? on line [0-9]+\s*$ +*/ + +function a() +{ + time_nanosleep(0, 100000000); + trigger_error('foo', E_USER_ERROR); +} + +newrelic_record_datastore_segment( + function () { + time_nanosleep(0, 100000000); + }, array( + 'product' => 'FakeDB', + ) +); +a(); + +echo 'this should never be printed'; diff --git a/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php b/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php index 2381e2045..7624a2a4b 100644 --- a/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php +++ b/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php @@ -15,6 +15,9 @@ =")) { + die("skip: newer test for PHP 8.4+\n"); +} */ diff --git a/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php84.php b/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php84.php new file mode 100644 index 000000000..28099b17c --- /dev/null +++ b/tests/integration/jit/function/test_span_events_are_created_upon_uncaught_handled_exception.php84.php @@ -0,0 +1,200 @@ + 'FakeDB', + ) +); +a(); + +echo 'this should never be printed'; diff --git a/tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php b/tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php index ebde4a26b..74e03bf46 100644 --- a/tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php +++ b/tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php @@ -15,6 +15,9 @@ =")) { + die("skip: newer test for PHP 8.4+\n"); +} */ diff --git a/tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php84.php b/tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php84.php new file mode 100644 index 000000000..eeb18dc14 --- /dev/null +++ b/tests/integration/jit/tracing/test_span_events_are_created_upon_caught_error.php84.php @@ -0,0 +1,195 @@ + 'FakeDB', + ) +); +a(); diff --git a/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php index ee1a578ae..51f8b899a 100644 --- a/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php +++ b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php @@ -13,6 +13,9 @@ =")) { + die("skip: newer test for PHPs 8.4+\n"); +} */ diff --git a/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php84.php b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php84.php new file mode 100644 index 000000000..54660f8a3 --- /dev/null +++ b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_error.php84.php @@ -0,0 +1,135 @@ + 'FakeDB', + ) +); +a(); diff --git a/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php index 395b1231f..7444c28e7 100644 --- a/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php +++ b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php @@ -15,6 +15,9 @@ =")) { + die("skip: newer test for PHP 8.4+\n"); +} */ diff --git a/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php84.php b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php84.php new file mode 100644 index 000000000..922a0c5a7 --- /dev/null +++ b/tests/integration/jit/tracing/test_span_events_are_created_upon_uncaught_handled_exception.php84.php @@ -0,0 +1,197 @@ + 'FakeDB', + ) +); +a(); + +echo 'this should never be printed'; diff --git a/tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php b/tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php index d61b7fea0..ce62bfc12 100644 --- a/tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php +++ b/tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php @@ -15,6 +15,9 @@ =")) { + die("skip: newer test for PHP 8.4+\n"); +} */ diff --git a/tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php84.php b/tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php84.php new file mode 100644 index 000000000..86c24a776 --- /dev/null +++ b/tests/integration/opcache/disabled/test_span_events_are_created_upon_caught_error.php84.php @@ -0,0 +1,193 @@ + 'FakeDB', + ) +); +a(); diff --git a/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php index bc42257cc..49320f19b 100644 --- a/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php +++ b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php @@ -13,6 +13,9 @@ =")) { + die("skip: newer test for PHPs 8.4+\n"); +} */ diff --git a/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php84.php b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php84.php new file mode 100644 index 000000000..35014d54f --- /dev/null +++ b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_error.php84.php @@ -0,0 +1,132 @@ + 'FakeDB', + ) +); +a(); diff --git a/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php index d45a094b8..76dd4fe41 100644 --- a/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php +++ b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php @@ -17,6 +17,9 @@ if (version_compare(PHP_VERSION, "8.0", "<")) { die("skip: PHP < 7.0.0 not supported\n"); } +if (version_compare(PHP_VERSION, "8.4", ">=")) { + die("skip: newer test for PHP 8.4+\n"); +} require('skipif.inc'); diff --git a/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php84.php b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php84.php new file mode 100644 index 000000000..e4be687b9 --- /dev/null +++ b/tests/integration/opcache/disabled/test_span_events_are_created_upon_uncaught_handled_exception.php84.php @@ -0,0 +1,197 @@ + 'FakeDB', + ) +); +a(); + +echo 'this should never be printed'; diff --git a/tests/integration/pdo/mysql/base-class/test_instance_reporting_port.php b/tests/integration/pdo/mysql/base-class/test_instance_reporting_port.php new file mode 100644 index 000000000..0742b5461 --- /dev/null +++ b/tests/integration/pdo/mysql/base-class/test_instance_reporting_port.php @@ -0,0 +1,157 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[MYSQL_HOST]", + "port_path_or_id": "ENV[MYSQL_PORT]", + "database_name": "ENV[MYSQL_DB]" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[MYSQL_HOST]", + "port_path_or_id": "ENV[MYSQL_PORT]", + "database_name": "ENV[MYSQL_DB]" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[MYSQL_HOST]", + "peer.address": "ENV[MYSQL_HOST]:ENV[MYSQL_PORT]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[MYSQL_HOST]", + "peer.address": "ENV[MYSQL_HOST]:ENV[MYSQL_PORT]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +test_instance_reporting(new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), 0); diff --git a/tests/integration/pdo/mysql/base-class/test_instance_reporting_socket.php b/tests/integration/pdo/mysql/base-class/test_instance_reporting_socket.php new file mode 100644 index 000000000..95177d7c7 --- /dev/null +++ b/tests/integration/pdo/mysql/base-class/test_instance_reporting_socket.php @@ -0,0 +1,160 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "__HOST__", + "port_path_or_id": "ENV[MYSQL_SOCKET]", + "database_name": "ENV[MYSQL_DB]" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "__HOST__", + "port_path_or_id": "ENV[MYSQL_SOCKET]", + "database_name": "ENV[MYSQL_DB]" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "__HOST__", + "peer.address": "__HOST__:ENV[MYSQL_SOCKET]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "__HOST__", + "peer.address": "__HOST__:ENV[MYSQL_SOCKET]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$DSN = 'mysql:'; +$DSN .= 'unix_socket=' . $MYSQL_SOCKET . ';'; +$DSN .= 'dbname=' . $MYSQL_DB . ';'; + +test_instance_reporting(new PDO($DSN, $MYSQL_USER, $MYSQL_PASSWD), 0); diff --git a/tests/integration/pdo/mysql/base-class/test_prepared_stmt_basic.php b/tests/integration/pdo/mysql/base-class/test_prepared_stmt_basic.php new file mode 100644 index 000000000..93e54a033 --- /dev/null +++ b/tests/integration/pdo/mysql/base-class/test_prepared_stmt_basic.php @@ -0,0 +1,110 @@ +", + "?? SQL id", + "select * from information_schema.tables limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ], + "explain_plan": "??" + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables limit 1;'; +test_prepared_stmt(new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), $query); diff --git a/tests/integration/pdo/mysql/base-class/test_prepared_stmt_bind_value.php b/tests/integration/pdo/mysql/base-class/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..34868e9ec --- /dev/null +++ b/tests/integration/pdo/mysql/base-class/test_prepared_stmt_bind_value.php @@ -0,0 +1,111 @@ +", + "?? SQL id", + "select * from information_schema.tables where table_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ], + "explain_plan": "??" + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables where table_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables where table_name = ? limit 1;'; +test_prepared_stmt(new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), $query); diff --git a/tests/integration/pdo/mysql/base-class/test_query_1_arg.php b/tests/integration/pdo/mysql/base-class/test_query_1_arg.php new file mode 100644 index 000000000..65a1da4fa --- /dev/null +++ b/tests/integration/pdo/mysql/base-class/test_query_1_arg.php @@ -0,0 +1,52 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[MYSQL_HOST]", + "port_path_or_id": "ENV[MYSQL_PORT]", + "database_name": "ENV[MYSQL_DB]" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[MYSQL_HOST]", + "port_path_or_id": "ENV[MYSQL_PORT]", + "database_name": "ENV[MYSQL_DB]" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[MYSQL_HOST]", + "peer.address": "ENV[MYSQL_HOST]:ENV[MYSQL_PORT]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[MYSQL_HOST]", + "peer.address": "ENV[MYSQL_HOST]:ENV[MYSQL_PORT]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +test_instance_reporting(new Pdo\Mysql($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), 0); diff --git a/tests/integration/pdo/mysql/constructor/test_instance_reporting_socket.php b/tests/integration/pdo/mysql/constructor/test_instance_reporting_socket.php new file mode 100644 index 000000000..073bceb80 --- /dev/null +++ b/tests/integration/pdo/mysql/constructor/test_instance_reporting_socket.php @@ -0,0 +1,161 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "__HOST__", + "port_path_or_id": "ENV[MYSQL_SOCKET]", + "database_name": "ENV[MYSQL_DB]" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "__HOST__", + "port_path_or_id": "ENV[MYSQL_SOCKET]", + "database_name": "ENV[MYSQL_DB]" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "__HOST__", + "peer.address": "__HOST__:ENV[MYSQL_SOCKET]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "__HOST__", + "peer.address": "__HOST__:ENV[MYSQL_SOCKET]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$DSN = 'mysql:'; +$DSN .= 'unix_socket=' . $MYSQL_SOCKET . ';'; +$DSN .= 'dbname=' . $MYSQL_DB . ';'; + +test_instance_reporting(new Pdo\Mysql($DSN, $MYSQL_USER, $MYSQL_PASSWD), 0); diff --git a/tests/integration/pdo/mysql/constructor/test_prepared_stmt_basic.php b/tests/integration/pdo/mysql/constructor/test_prepared_stmt_basic.php new file mode 100644 index 000000000..695dab225 --- /dev/null +++ b/tests/integration/pdo/mysql/constructor/test_prepared_stmt_basic.php @@ -0,0 +1,111 @@ +", + "?? SQL id", + "select * from information_schema.tables limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ], + "explain_plan": "??" + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables limit 1;'; +test_prepared_stmt(new Pdo\Mysql($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), $query); diff --git a/tests/integration/pdo/mysql/constructor/test_prepared_stmt_bind_value.php b/tests/integration/pdo/mysql/constructor/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..214533332 --- /dev/null +++ b/tests/integration/pdo/mysql/constructor/test_prepared_stmt_bind_value.php @@ -0,0 +1,112 @@ +", + "?? SQL id", + "select * from information_schema.tables where table_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ], + "explain_plan": "??" + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables where table_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables where table_name = ? limit 1;'; +test_prepared_stmt(new Pdo\Mysql($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), $query); diff --git a/tests/integration/pdo/mysql/constructor/test_query_1_arg.php b/tests/integration/pdo/mysql/constructor/test_query_1_arg.php new file mode 100644 index 000000000..63d641e70 --- /dev/null +++ b/tests/integration/pdo/mysql/constructor/test_query_1_arg.php @@ -0,0 +1,53 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[MYSQL_HOST]", + "port_path_or_id": "ENV[MYSQL_PORT]", + "database_name": "ENV[MYSQL_DB]" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[MYSQL_HOST]", + "port_path_or_id": "ENV[MYSQL_PORT]", + "database_name": "ENV[MYSQL_DB]" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[MYSQL_HOST]", + "peer.address": "ENV[MYSQL_HOST]:ENV[MYSQL_PORT]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[MYSQL_HOST]", + "peer.address": "ENV[MYSQL_HOST]:ENV[MYSQL_PORT]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +test_instance_reporting(PDO::connect($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), 0); diff --git a/tests/integration/pdo/mysql/factory/test_instance_reporting_socket.php b/tests/integration/pdo/mysql/factory/test_instance_reporting_socket.php new file mode 100644 index 000000000..796d108db --- /dev/null +++ b/tests/integration/pdo/mysql/factory/test_instance_reporting_socket.php @@ -0,0 +1,161 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "__HOST__", + "port_path_or_id": "ENV[MYSQL_SOCKET]", + "database_name": "ENV[MYSQL_DB]" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "__HOST__", + "port_path_or_id": "ENV[MYSQL_SOCKET]", + "database_name": "ENV[MYSQL_DB]" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "__HOST__", + "peer.address": "__HOST__:ENV[MYSQL_SOCKET]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "__HOST__", + "peer.address": "__HOST__:ENV[MYSQL_SOCKET]", + "db.instance": "ENV[MYSQL_DB]", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$DSN = 'mysql:'; +$DSN .= 'unix_socket=' . $MYSQL_SOCKET . ';'; +$DSN .= 'dbname=' . $MYSQL_DB . ';'; + +test_instance_reporting(PDO::connect($DSN, $MYSQL_USER, $MYSQL_PASSWD), 0); diff --git a/tests/integration/pdo/mysql/factory/test_prepared_stmt_basic.php b/tests/integration/pdo/mysql/factory/test_prepared_stmt_basic.php new file mode 100644 index 000000000..6488f0ffe --- /dev/null +++ b/tests/integration/pdo/mysql/factory/test_prepared_stmt_basic.php @@ -0,0 +1,111 @@ +", + "?? SQL id", + "select * from information_schema.tables limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ], + "explain_plan": "??" + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables limit 1;'; +test_prepared_stmt(PDO::connect($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), $query); diff --git a/tests/integration/pdo/mysql/factory/test_prepared_stmt_bind_value.php b/tests/integration/pdo/mysql/factory/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..e1cae652e --- /dev/null +++ b/tests/integration/pdo/mysql/factory/test_prepared_stmt_bind_value.php @@ -0,0 +1,112 @@ +", + "?? SQL id", + "select * from information_schema.tables where table_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ], + "explain_plan": "??" + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables where table_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables where table_name = ? limit 1;'; +test_prepared_stmt(PDO::connect($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD), $query); diff --git a/tests/integration/pdo/mysql/factory/test_query_1_arg.php b/tests/integration/pdo/mysql/factory/test_query_1_arg.php new file mode 100644 index 000000000..b15999e0b --- /dev/null +++ b/tests/integration/pdo/mysql/factory/test_query_1_arg.php @@ -0,0 +1,53 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[PG_HOST]", + "port_path_or_id": "ENV[PG_PORT]", + "database_name": "postgres" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[PG_HOST]", + "port_path_or_id": "ENV[PG_PORT]", + "database_name": "postgres" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[PG_HOST]", + "peer.address": "ENV[PG_HOST]:ENV[PG_PORT]", + "db.instance": "postgres", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[PG_HOST]", + "peer.address": "ENV[PG_HOST]:ENV[PG_PORT]", + "db.instance": "postgres", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +test_instance_reporting(new PDO($PDO_PGSQL_DSN, $PG_USER, $PG_PW), 0); diff --git a/tests/integration/pdo/pgsql/base-class/test_prepared_stmt_basic.php b/tests/integration/pdo/pgsql/base-class/test_prepared_stmt_basic.php new file mode 100644 index 000000000..9c7960080 --- /dev/null +++ b/tests/integration/pdo/pgsql/base-class/test_prepared_stmt_basic.php @@ -0,0 +1,106 @@ +", + "?? SQL id", + "select * from information_schema.tables limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables limit 1;'; +test_prepared_stmt(new PDO($PDO_PGSQL_DSN, $PG_USER, $PG_PW), $query); diff --git a/tests/integration/pdo/pgsql/base-class/test_prepared_stmt_bind_value.php b/tests/integration/pdo/pgsql/base-class/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..56737cafb --- /dev/null +++ b/tests/integration/pdo/pgsql/base-class/test_prepared_stmt_bind_value.php @@ -0,0 +1,107 @@ +", + "?? SQL id", + "select * from information_schema.tables where table_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables where table_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables where table_name = ? limit 1;'; +test_prepared_stmt(new PDO($PDO_PGSQL_DSN, $PG_USER, $PG_PW), $query); diff --git a/tests/integration/pdo/pgsql/base-class/test_query_1_arg.php b/tests/integration/pdo/pgsql/base-class/test_query_1_arg.php new file mode 100644 index 000000000..48e212208 --- /dev/null +++ b/tests/integration/pdo/pgsql/base-class/test_query_1_arg.php @@ -0,0 +1,55 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[PG_HOST]", + "port_path_or_id": "ENV[PG_PORT]", + "database_name": "postgres" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[PG_HOST]", + "port_path_or_id": "ENV[PG_PORT]", + "database_name": "postgres" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[PG_HOST]", + "peer.address": "ENV[PG_HOST]:ENV[PG_PORT]", + "db.instance": "postgres", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[PG_HOST]", + "peer.address": "ENV[PG_HOST]:ENV[PG_PORT]", + "db.instance": "postgres", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +test_instance_reporting(new Pdo\Pgsql($PDO_PGSQL_DSN, $PG_USER, $PG_PW), 0); diff --git a/tests/integration/pdo/pgsql/constructor/test_prepared_stmt_basic.php b/tests/integration/pdo/pgsql/constructor/test_prepared_stmt_basic.php new file mode 100644 index 000000000..131ab0935 --- /dev/null +++ b/tests/integration/pdo/pgsql/constructor/test_prepared_stmt_basic.php @@ -0,0 +1,107 @@ +", + "?? SQL id", + "select * from information_schema.tables limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables limit 1;'; +test_prepared_stmt(new Pdo\Pgsql($PDO_PGSQL_DSN, $PG_USER, $PG_PW), $query); diff --git a/tests/integration/pdo/pgsql/constructor/test_prepared_stmt_bind_value.php b/tests/integration/pdo/pgsql/constructor/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..c954060f8 --- /dev/null +++ b/tests/integration/pdo/pgsql/constructor/test_prepared_stmt_bind_value.php @@ -0,0 +1,108 @@ +", + "?? SQL id", + "select * from information_schema.tables where table_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables where table_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables where table_name = ? limit 1;'; +test_prepared_stmt(new Pdo\Pgsql($PDO_PGSQL_DSN, $PG_USER, $PG_PW), $query); diff --git a/tests/integration/pdo/pgsql/constructor/test_query_1_arg.php b/tests/integration/pdo/pgsql/constructor/test_query_1_arg.php new file mode 100644 index 000000000..c3cc9381d --- /dev/null +++ b/tests/integration/pdo/pgsql/constructor/test_query_1_arg.php @@ -0,0 +1,52 @@ +", + "?? SQL id", + "DROP TABLE ENV[DATASTORE_COLLECTION];", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[PG_HOST]", + "port_path_or_id": "ENV[PG_PORT]", + "database_name": "postgres" + } + ], + [ + "OtherTransaction/php__FILE__", + "", + "?? SQL id", + "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDO::exec called at .*\/", + " in test_instance_reporting called at __FILE__ (??)" + ], + "host": "ENV[PG_HOST]", + "port_path_or_id": "ENV[PG_PORT]", + "database_name": "postgres" + } + ] + ] +] +*/ + +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/create", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[PG_HOST]", + "peer.address": "ENV[PG_HOST]:ENV[PG_PORT]", + "db.instance": "postgres", + "db.statement": "CREATE TABLE ENV[DATASTORE_COLLECTION] (id INT, description VARCHAR(?));" + } + ], + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/drop", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.hostname": "ENV[PG_HOST]", + "peer.address": "ENV[PG_HOST]:ENV[PG_PORT]", + "db.instance": "postgres", + "db.statement": "DROP TABLE ENV[DATASTORE_COLLECTION];" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_instance_reporting.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +test_instance_reporting(PDO::connect($PDO_PGSQL_DSN, $PG_USER, $PG_PW), 0); diff --git a/tests/integration/pdo/pgsql/factory/test_prepared_stmt_basic.php b/tests/integration/pdo/pgsql/factory/test_prepared_stmt_basic.php new file mode 100644 index 000000000..58841fbf7 --- /dev/null +++ b/tests/integration/pdo/pgsql/factory/test_prepared_stmt_basic.php @@ -0,0 +1,107 @@ +", + "?? SQL id", + "select * from information_schema.tables limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables limit 1;'; +test_prepared_stmt(PDO::connect($PDO_PGSQL_DSN, $PG_USER, $PG_PW), $query); diff --git a/tests/integration/pdo/pgsql/factory/test_prepared_stmt_bind_value.php b/tests/integration/pdo/pgsql/factory/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..7ccfa9e9f --- /dev/null +++ b/tests/integration/pdo/pgsql/factory/test_prepared_stmt_bind_value.php @@ -0,0 +1,108 @@ +", + "?? SQL id", + "select * from information_schema.tables where table_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from information_schema.tables where table_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from information_schema.tables where table_name = ? limit 1;'; +test_prepared_stmt(PDO::connect($PDO_PGSQL_DSN, $PG_USER, $PG_PW), $query); diff --git a/tests/integration/pdo/pgsql/factory/test_query_1_arg.php b/tests/integration/pdo/pgsql/factory/test_query_1_arg.php new file mode 100644 index 000000000..1f47b55b7 --- /dev/null +++ b/tests/integration/pdo/pgsql/factory/test_query_1_arg.php @@ -0,0 +1,52 @@ += 8.4\n"); +} + diff --git a/tests/integration/pdo/skipif_pgsql.inc b/tests/integration/pdo/skipif_pgsql.inc new file mode 100644 index 000000000..92caf44be --- /dev/null +++ b/tests/integration/pdo/skipif_pgsql.inc @@ -0,0 +1,37 @@ +getMessage() . "\n"); +} diff --git a/tests/integration/pdo/sqlite/base-class/test_prepared_stmt_basic.php b/tests/integration/pdo/sqlite/base-class/test_prepared_stmt_basic.php new file mode 100644 index 000000000..ddf000ce8 --- /dev/null +++ b/tests/integration/pdo/sqlite/base-class/test_prepared_stmt_basic.php @@ -0,0 +1,106 @@ +", + "?? SQL id", + "select * from ENV[DATASTORE_COLLECTION] limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from ENV[DATASTORE_COLLECTION] limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from sqlite_master limit 1;'; +test_prepared_stmt(new PDO('sqlite::memory:'), $query); diff --git a/tests/integration/pdo/sqlite/base-class/test_prepared_stmt_bind_value.php b/tests/integration/pdo/sqlite/base-class/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..a26e0802f --- /dev/null +++ b/tests/integration/pdo/sqlite/base-class/test_prepared_stmt_bind_value.php @@ -0,0 +1,107 @@ +", + "?? SQL id", + "select * from ENV[DATASTORE_COLLECTION] where tbl_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from ENV[DATASTORE_COLLECTION] where tbl_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from sqlite_master where tbl_name = ? limit 1;'; +test_prepared_stmt(new PDO('sqlite::memory:'), $query); diff --git a/tests/integration/pdo/test_query_1.php b/tests/integration/pdo/sqlite/base-class/test_query_1_arg.php similarity index 76% rename from tests/integration/pdo/test_query_1.php rename to tests/integration/pdo/sqlite/base-class/test_query_1_arg.php index 21b932f49..df16dc8a3 100644 --- a/tests/integration/pdo/test_query_1.php +++ b/tests/integration/pdo/sqlite/base-class/test_query_1_arg.php @@ -6,14 +6,12 @@ /*DESCRIPTION The agent should record Datastore metrics for the one argument form of -PDO::query(). +PDO::query() when PDO base class constructor is used to create connection +object. */ /*SKIPIF -=")) { - die("skip: PHP >= 8.1.0 not supported\n"); -} +exec("CREATE TABLE test (id INT, desc VARCHAR(10));"), 'create table'); - - tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert one'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (2, 'two');"), 'insert two'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (3, 'three');"), 'insert three'); - - $expected = array( - array('id' => '1', 'desc' => 'one'), - array('id' => '2', 'desc' => 'two'), - array('id' => '3', 'desc' => 'three') - ); - - $result = $conn->query('SELECT * FROM test;'); - $actual = $result->fetchAll(PDO::FETCH_ASSOC); - $result->closeCursor(); - tap_equal($expected, $actual, 'query (1-arg)'); - - tap_equal(1, $conn->exec("DROP TABLE test;"), 'drop table'); -} - -test_pdo_query(); +test_pdo_query(new PDO('sqlite::memory:')); diff --git a/tests/integration/pdo/test_query_3.php b/tests/integration/pdo/sqlite/base-class/test_query_fetch_class.php similarity index 82% rename from tests/integration/pdo/test_query_3.php rename to tests/integration/pdo/sqlite/base-class/test_query_fetch_class.php index e37919a72..e84fb4027 100644 --- a/tests/integration/pdo/test_query_3.php +++ b/tests/integration/pdo/sqlite/base-class/test_query_fetch_class.php @@ -6,11 +6,12 @@ /*DESCRIPTION The agent should record database metrics for the FETCH_CLASS variant of -PDO::query(). +PDO::query() when PDO base class constructor is used to create connection +object. */ /*SKIPIF -exec("CREATE TABLE test (id INT, desc VARCHAR(10));"), 'create table'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert row'); - - $expected = new Row(); - $expected->id = '1'; - $expected->desc = 'one'; - - $actual = $conn->query('SELECT * FROM test;', PDO::FETCH_CLASS, 'Row')->fetch(); - tap_assert($expected == $actual, 'fetch row as object'); - - tap_equal(1, $conn->exec("DROP TABLE test;"), 'drop table'); -} - -test_pdo_query(); +test_pdo_query(new PDO('sqlite::memory:')); diff --git a/tests/integration/pdo/test_query_2.php b/tests/integration/pdo/sqlite/base-class/test_query_fetch_column.php similarity index 81% rename from tests/integration/pdo/test_query_2.php rename to tests/integration/pdo/sqlite/base-class/test_query_fetch_column.php index e0269144c..37989527d 100644 --- a/tests/integration/pdo/test_query_2.php +++ b/tests/integration/pdo/sqlite/base-class/test_query_fetch_column.php @@ -6,11 +6,12 @@ /*DESCRIPTION The agent should record database metrics for the FETCH_COLUMN variant of -PDO::query(). +PDO::query() when PDO base class constructor is used to create connection +object. */ /*SKIPIF -exec("CREATE TABLE test (id INT, desc VARCHAR(10));"), 'create table'); - - tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert one'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (2, 'two');"), 'insert two'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (3, 'three');"), 'insert three'); - - $result = $conn->query('SELECT * FROM test;', PDO::FETCH_COLUMN, 1); - $actual = $result->fetchAll(PDO::FETCH_ASSOC); - $result->closeCursor(); - tap_equal(3, count($actual), 'fetch column'); - - tap_equal(1, $conn->exec("DROP TABLE test;"), 'drop table'); -} - -test_pdo_query(); +test_pdo_query(new PDO('sqlite::memory:')); diff --git a/tests/integration/pdo/test_query_2_logging_off.php b/tests/integration/pdo/sqlite/base-class/test_query_fetch_column_logging_off.php similarity index 81% rename from tests/integration/pdo/test_query_2_logging_off.php rename to tests/integration/pdo/sqlite/base-class/test_query_fetch_column_logging_off.php index f3d2da948..76a35f1fc 100644 --- a/tests/integration/pdo/test_query_2_logging_off.php +++ b/tests/integration/pdo/sqlite/base-class/test_query_fetch_column_logging_off.php @@ -6,11 +6,12 @@ /*DESCRIPTION The agent should record database metrics for the FETCH_COLUMN variant of -PDO::query(). +PDO::query() when PDO base class constructor is used to create connection +object. */ /*SKIPIF -exec("CREATE TABLE test (id INT, desc VARCHAR(10));"), 'create table'); - - tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert one'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (2, 'two');"), 'insert two'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (3, 'three');"), 'insert three'); - - $result = $conn->query('SELECT * FROM test;', PDO::FETCH_COLUMN, 1); - $actual = $result->fetchAll(PDO::FETCH_ASSOC); - $result->closeCursor(); - tap_equal(3, count($actual), 'fetch column'); - - tap_equal(1, $conn->exec("DROP TABLE test;"), 'drop table'); -} - -test_pdo_query(); +test_pdo_query(new PDO('sqlite::memory:')); diff --git a/tests/integration/pdo/test_query_4.php b/tests/integration/pdo/sqlite/base-class/test_query_fetch_into.php similarity index 82% rename from tests/integration/pdo/test_query_4.php rename to tests/integration/pdo/sqlite/base-class/test_query_fetch_into.php index 884bb1f8d..63c132317 100644 --- a/tests/integration/pdo/test_query_4.php +++ b/tests/integration/pdo/sqlite/base-class/test_query_fetch_into.php @@ -6,11 +6,12 @@ /*DESCRIPTION The agent should record database metrics for the FETCH_INTO variant of -PDO::query(). +PDO::query() when PDO base class constructor is used to create connection +object. */ /*SKIPIF -exec("CREATE TABLE test (id INT, desc VARCHAR(10));"), 'create table'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert row'); - - $expected = new Row(); - $expected->id = '1'; - $expected->desc = 'one'; - - $actual = new Row(); - $conn->query('SELECT * FROM test;', PDO::FETCH_INTO, $actual)->fetch(); - tap_assert($expected == $actual, 'fetch row into object'); - - tap_equal(1, $conn->exec("DROP TABLE test;"), 'drop table'); -} - -test_pdo_query(); +test_pdo_query(new PDO('sqlite::memory:')); diff --git a/tests/integration/pdo/sqlite/constructor/test_prepared_stmt_basic.php b/tests/integration/pdo/sqlite/constructor/test_prepared_stmt_basic.php new file mode 100644 index 000000000..bdb32dd76 --- /dev/null +++ b/tests/integration/pdo/sqlite/constructor/test_prepared_stmt_basic.php @@ -0,0 +1,107 @@ +", + "?? SQL id", + "select * from ENV[DATASTORE_COLLECTION] limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from ENV[DATASTORE_COLLECTION] limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from sqlite_schema limit 1;'; +test_prepared_stmt(new Pdo\Sqlite('sqlite::memory:'), $query); diff --git a/tests/integration/pdo/sqlite/constructor/test_prepared_stmt_bind_value.php b/tests/integration/pdo/sqlite/constructor/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..36e02cb5e --- /dev/null +++ b/tests/integration/pdo/sqlite/constructor/test_prepared_stmt_bind_value.php @@ -0,0 +1,108 @@ +", + "?? SQL id", + "select * from ENV[DATASTORE_COLLECTION] where tbl_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from ENV[DATASTORE_COLLECTION] where tbl_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from sqlite_schema where tbl_name = ? limit 1;'; +test_prepared_stmt(new Pdo\Sqlite('sqlite::memory:'), $query); diff --git a/tests/integration/pdo/sqlite/constructor/test_query_1_arg.php b/tests/integration/pdo/sqlite/constructor/test_query_1_arg.php new file mode 100644 index 000000000..d0dc104cf --- /dev/null +++ b/tests/integration/pdo/sqlite/constructor/test_query_1_arg.php @@ -0,0 +1,75 @@ +exec("CREATE TABLE test (id INT, desc VARCHAR(10));"), 'create table'); - - tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert one'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (2, 'two');"), 'insert two'); - tap_equal(1, $conn->exec("INSERT INTO test VALUES (3, 'three');"), 'insert three'); - - $expected = array( - array('id' => 1, 'desc' => 'one'), - array('id' => 2, 'desc' => 'two'), - array('id' => 3, 'desc' => 'three') - ); - - $result = $conn->query('SELECT * FROM test;'); - $actual = $result->fetchAll(PDO::FETCH_ASSOC); - $result->closeCursor(); - tap_equal($expected, $actual, 'query (1-arg)'); - - tap_equal(1, $conn->exec("DROP TABLE test;"), 'drop table'); +class MyPDO extends \PDO +{ } -test_pdo_query(); +test_pdo_query(new MyPDO('sqlite::memory:')); diff --git a/tests/integration/pdo/sqlite/factory/test_prepared_stmt_basic.php b/tests/integration/pdo/sqlite/factory/test_prepared_stmt_basic.php new file mode 100644 index 000000000..652f65165 --- /dev/null +++ b/tests/integration/pdo/sqlite/factory/test_prepared_stmt_basic.php @@ -0,0 +1,107 @@ +", + "?? SQL id", + "select * from ENV[DATASTORE_COLLECTION] limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from ENV[DATASTORE_COLLECTION] limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_basic.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from sqlite_schema limit 1;'; +test_prepared_stmt(PDO::Connect('sqlite::memory:'), $query); diff --git a/tests/integration/pdo/sqlite/factory/test_prepared_stmt_bind_value.php b/tests/integration/pdo/sqlite/factory/test_prepared_stmt_bind_value.php new file mode 100644 index 000000000..c4c548970 --- /dev/null +++ b/tests/integration/pdo/sqlite/factory/test_prepared_stmt_bind_value.php @@ -0,0 +1,108 @@ +", + "?? SQL id", + "select * from ENV[DATASTORE_COLLECTION] where tbl_name = ? limit ?;", + "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + 1, + "?? total time", + "?? min time", + "?? max time", + { + "backtrace": [ + "/ in PDOStatement::execute called at .*\/", + " in test_prepared_stmt called at __FILE__ (??)" + ] + } + ] + ] +] +*/ + +// peer.address is unknown:unknown because instance_reporting is disabled +/*EXPECT_SPAN_EVENTS_LIKE +[ + [ + { + "category": "datastore", + "type": "Span", + "guid": "??", + "traceId": "??", + "transactionId": "??", + "name": "Datastore/statement/ENV[DATASTORE_PRODUCT]/ENV[DATASTORE_COLLECTION]/select", + "timestamp": "??", + "duration": "??", + "priority": "??", + "sampled": true, + "parentId": "??", + "span.kind": "client", + "component": "ENV[DATASTORE_PRODUCT]" + }, + {}, + { + "peer.address": "unknown:unknown", + "db.statement": "select * from ENV[DATASTORE_COLLECTION] where tbl_name = ? limit ?;" + } + ] +] +*/ + +require_once(realpath (dirname ( __FILE__ )) . '/../../test_prepared_stmt_bind_value.inc'); +require_once(realpath (dirname ( __FILE__ )) . '/../../../../include/config.php'); + +$query = 'select * from sqlite_schema where tbl_name = ? limit 1;'; +test_prepared_stmt(PDO::Connect('sqlite::memory:'), $query); diff --git a/tests/integration/pdo/sqlite/factory/test_query_1_arg.php b/tests/integration/pdo/sqlite/factory/test_query_1_arg.php new file mode 100644 index 000000000..edab45185 --- /dev/null +++ b/tests/integration/pdo/sqlite/factory/test_query_1_arg.php @@ -0,0 +1,75 @@ +", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -85,7 +85,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_empty_driver_options.php81.php b/tests/integration/pdo/test_empty_driver_options.php81.php index 60f3e3778..e29984f62 100644 --- a/tests/integration/pdo/test_empty_driver_options.php81.php +++ b/tests/integration/pdo/test_empty_driver_options.php81.php @@ -32,7 +32,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -85,7 +85,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_instance_reporting.inc b/tests/integration/pdo/test_instance_reporting.inc new file mode 100644 index 000000000..0ae7fb6a8 --- /dev/null +++ b/tests/integration/pdo/test_instance_reporting.inc @@ -0,0 +1,33 @@ +exec("CREATE TABLE test (id INT, description VARCHAR(10));"), 'create table'); + tap_equal($want_drop_table_result, $conn->exec("DROP TABLE test;"), 'drop table'); +} diff --git a/tests/integration/pdo/test_instance_slow_sql_1.php b/tests/integration/pdo/test_instance_slow_sql_1.php index 465ab00a1..b767100ba 100644 --- a/tests/integration/pdo/test_instance_slow_sql_1.php +++ b/tests/integration/pdo/test_instance_slow_sql_1.php @@ -45,7 +45,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -103,7 +103,7 @@ function test_query() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_query(); diff --git a/tests/integration/pdo/test_instance_slow_sql_1.php81.php b/tests/integration/pdo/test_instance_slow_sql_1.php81.php index 80a890f2e..1d217e04f 100644 --- a/tests/integration/pdo/test_instance_slow_sql_1.php81.php +++ b/tests/integration/pdo/test_instance_slow_sql_1.php81.php @@ -41,7 +41,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -99,7 +99,7 @@ function test_query() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_query(); diff --git a/tests/integration/pdo/test_instance_slow_sql_2.php b/tests/integration/pdo/test_instance_slow_sql_2.php index afa7e5df6..47330ea78 100644 --- a/tests/integration/pdo/test_instance_slow_sql_2.php +++ b/tests/integration/pdo/test_instance_slow_sql_2.php @@ -40,7 +40,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -98,7 +98,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $stmt = $conn->prepare('select * from tables limit 1;'); + $stmt = $conn->prepare('select * from information_schema.tables limit 1;'); tap_assert($stmt->execute(), 'execute slow query'); } diff --git a/tests/integration/pdo/test_instance_slow_sql_2.php81.php b/tests/integration/pdo/test_instance_slow_sql_2.php81.php index 60e833f34..9a7767cf0 100644 --- a/tests/integration/pdo/test_instance_slow_sql_2.php81.php +++ b/tests/integration/pdo/test_instance_slow_sql_2.php81.php @@ -40,7 +40,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -98,7 +98,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $stmt = $conn->prepare('select * from tables limit 1;'); + $stmt = $conn->prepare('select * from information_schema.tables limit 1;'); tap_assert($stmt->execute(), 'execute slow query'); } diff --git a/tests/integration/pdo/test_instance_slow_sql_for_update.php b/tests/integration/pdo/test_instance_slow_sql_for_update.php index 3ba2a18bc..1aac88955 100644 --- a/tests/integration/pdo/test_instance_slow_sql_for_update.php +++ b/tests/integration/pdo/test_instance_slow_sql_for_update.php @@ -36,7 +36,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ? for update;", + "select * from information_schema.tables limit ? for update;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -66,7 +66,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1 for update;'); + $result = $conn->query('select * from information_schema.tables limit 1 for update;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_instance_slow_sql_lock.php b/tests/integration/pdo/test_instance_slow_sql_lock.php index 798d4272d..ea3db1bc7 100644 --- a/tests/integration/pdo/test_instance_slow_sql_lock.php +++ b/tests/integration/pdo/test_instance_slow_sql_lock.php @@ -37,7 +37,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ? lock in share mode;", + "select * from information_schema.tables limit ? lock in share mode;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -67,7 +67,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1 lock in share mode;'); + $result = $conn->query('select * from information_schema.tables limit 1 lock in share mode;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_instance_slow_sql_semicolon.php b/tests/integration/pdo/test_instance_slow_sql_semicolon.php index 2c07e0023..c26da78ed 100644 --- a/tests/integration/pdo/test_instance_slow_sql_semicolon.php +++ b/tests/integration/pdo/test_instance_slow_sql_semicolon.php @@ -36,7 +36,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables where engine = ?;", + "select * from information_schema.tables where engine = ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -66,7 +66,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables where engine = \';\';'); + $result = $conn->query('select * from information_schema.tables where engine = \';\';'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_null_options.php b/tests/integration/pdo/test_null_options.php index 16e522a57..ea61e7343 100644 --- a/tests/integration/pdo/test_null_options.php +++ b/tests/integration/pdo/test_null_options.php @@ -32,7 +32,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -85,7 +85,7 @@ function test_slow_sql() { $options = null; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, $options); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_null_options.php81.php b/tests/integration/pdo/test_null_options.php81.php index 528855b81..6f61e3a00 100644 --- a/tests/integration/pdo/test_null_options.php81.php +++ b/tests/integration/pdo/test_null_options.php81.php @@ -32,7 +32,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -85,7 +85,7 @@ function test_slow_sql() { $options = null; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, $options); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_persistent_conn.php b/tests/integration/pdo/test_persistent_conn.php index b44785305..b5453d889 100644 --- a/tests/integration/pdo/test_persistent_conn.php +++ b/tests/integration/pdo/test_persistent_conn.php @@ -32,7 +32,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -86,7 +86,7 @@ function test_slow_sql() $options = array(PDO::ATTR_PERSISTENT => true); $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, $options); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_persistent_conn.php81.php b/tests/integration/pdo/test_persistent_conn.php81.php index ad185d896..2c669bd7f 100644 --- a/tests/integration/pdo/test_persistent_conn.php81.php +++ b/tests/integration/pdo/test_persistent_conn.php81.php @@ -32,7 +32,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -86,7 +86,7 @@ function test_slow_sql() $options = array(PDO::ATTR_PERSISTENT => true); $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, $options); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_prepared_stmt_basic.inc b/tests/integration/pdo/test_prepared_stmt_basic.inc new file mode 100644 index 000000000..4db6fd87b --- /dev/null +++ b/tests/integration/pdo/test_prepared_stmt_basic.inc @@ -0,0 +1,31 @@ +prepare($query); + tap_assert($stmt->execute(), 'execute prepared statement'); +} diff --git a/tests/integration/pdo/test_prepared_stmt_bind_value.inc b/tests/integration/pdo/test_prepared_stmt_bind_value.inc new file mode 100644 index 000000000..6ba2ffd82 --- /dev/null +++ b/tests/integration/pdo/test_prepared_stmt_bind_value.inc @@ -0,0 +1,32 @@ +prepare($query); + $stmt->bindValue(1, "missing"); + tap_assert($stmt->execute(), 'execute prepared statement'); +} diff --git a/tests/integration/pdo/test_prepared_stmt_params.php b/tests/integration/pdo/test_prepared_stmt_params.php index cd097e04f..7bb92e7c3 100644 --- a/tests/integration/pdo/test_prepared_stmt_params.php +++ b/tests/integration/pdo/test_prepared_stmt_params.php @@ -36,7 +36,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables where table_name = ? limit ?;", + "select * from information_schema.tables where table_name = ? limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -88,7 +88,7 @@ function test_prepared_statement() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $stmt = $conn->prepare('select * from tables where table_name = ? limit 1;'); + $stmt = $conn->prepare('select * from information_schema.tables where table_name = ? limit 1;'); $stmt->bindValue(1, "missing"); tap_assert($stmt->execute(), 'execute prepared statement with a param'); } diff --git a/tests/integration/pdo/test_prepared_stmt_params.php81.php b/tests/integration/pdo/test_prepared_stmt_params.php81.php index 001b38dd3..5c1b40c99 100644 --- a/tests/integration/pdo/test_prepared_stmt_params.php81.php +++ b/tests/integration/pdo/test_prepared_stmt_params.php81.php @@ -36,7 +36,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables where table_name = ? limit ?;", + "select * from information_schema.tables where table_name = ? limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -88,7 +88,7 @@ function test_prepared_statement() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $stmt = $conn->prepare('select * from tables where table_name = ? limit 1;'); + $stmt = $conn->prepare('select * from information_schema.tables where table_name = ? limit 1;'); $stmt->bindValue(1, "missing"); tap_assert($stmt->execute(), 'execute prepared statement with a param'); } diff --git a/tests/integration/pdo/test_query_1_arg.inc b/tests/integration/pdo/test_query_1_arg.inc new file mode 100644 index 000000000..104405786 --- /dev/null +++ b/tests/integration/pdo/test_query_1_arg.inc @@ -0,0 +1,51 @@ +exec("CREATE TABLE test (id INT, description VARCHAR(10));"), 'create table'); + + tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert one'); + tap_equal(1, $conn->exec("INSERT INTO test VALUES (2, 'two');"), 'insert two'); + tap_equal(1, $conn->exec("INSERT INTO test VALUES (3, 'three');"), 'insert three'); + + $expected = array( + array('id' => 1, 'description' => 'one'), + array('id' => 2, 'description' => 'two'), + array('id' => 3, 'description' => 'three') + ); + + $result = $conn->query('SELECT * FROM test;'); + $actual = $result->fetchAll(PDO::FETCH_ASSOC); + $result->closeCursor(); + // normalize id to int type + array_walk($actual, function (&$row, $key) { + $row['id'] = intval($row['id']); + }); + tap_equal($expected, $actual, 'query (1-arg)'); + + tap_equal($want_drop_table_result, $conn->exec("DROP TABLE test;"), 'drop table'); +} diff --git a/tests/integration/pdo/test_query_fetch_class.inc b/tests/integration/pdo/test_query_fetch_class.inc new file mode 100644 index 000000000..4aef4c76f --- /dev/null +++ b/tests/integration/pdo/test_query_fetch_class.inc @@ -0,0 +1,44 @@ +exec("CREATE TABLE test (id INT, description VARCHAR(10));"), 'create table'); + tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert row'); + + $expected = new Row(); + $expected->id = '1'; + $expected->description = 'one'; + + $actual = $conn->query('SELECT * FROM test;', PDO::FETCH_CLASS, 'Row')->fetch(); + tap_assert($expected == $actual, 'fetch row as object'); + + tap_equal($want_drop_table_result, $conn->exec("DROP TABLE test;"), 'drop table'); +} diff --git a/tests/integration/pdo/test_query_fetch_column.inc b/tests/integration/pdo/test_query_fetch_column.inc new file mode 100644 index 000000000..df1c590e5 --- /dev/null +++ b/tests/integration/pdo/test_query_fetch_column.inc @@ -0,0 +1,40 @@ +exec("CREATE TABLE test (id INT, description VARCHAR(10));"), 'create table'); + + tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert one'); + tap_equal(1, $conn->exec("INSERT INTO test VALUES (2, 'two');"), 'insert two'); + tap_equal(1, $conn->exec("INSERT INTO test VALUES (3, 'three');"), 'insert three'); + + $result = $conn->query('SELECT * FROM test;', PDO::FETCH_COLUMN, 1); + $actual = $result->fetchAll(PDO::FETCH_ASSOC); + $result->closeCursor(); + tap_equal(3, count($actual), 'fetch column'); + + tap_equal($want_drop_table_result, $conn->exec("DROP TABLE test;"), 'drop table'); +} diff --git a/tests/integration/pdo/test_query_fetch_into.inc b/tests/integration/pdo/test_query_fetch_into.inc new file mode 100644 index 000000000..2cc144881 --- /dev/null +++ b/tests/integration/pdo/test_query_fetch_into.inc @@ -0,0 +1,45 @@ +exec("CREATE TABLE test (id INT, description VARCHAR(10));"), 'create table'); + tap_equal(1, $conn->exec("INSERT INTO test VALUES (1, 'one');"), 'insert row'); + + $expected = new Row(); + $expected->id = '1'; + $expected->description = 'one'; + + $actual = new Row(); + $conn->query('SELECT * FROM test;', PDO::FETCH_INTO, $actual)->fetch(); + tap_assert($expected == $actual, 'fetch row into object'); + + tap_equal($want_drop_table_result, $conn->exec("DROP TABLE test;"), 'drop table'); +} diff --git a/tests/integration/pdo/test_slow_sql_1.php b/tests/integration/pdo/test_slow_sql_1.php index 84e0aa06c..86b4aea7f 100644 --- a/tests/integration/pdo/test_slow_sql_1.php +++ b/tests/integration/pdo/test_slow_sql_1.php @@ -31,7 +31,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -83,7 +83,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_slow_sql_1.php81.php b/tests/integration/pdo/test_slow_sql_1.php81.php index 6d5b4064e..e420b7b97 100644 --- a/tests/integration/pdo/test_slow_sql_1.php81.php +++ b/tests/integration/pdo/test_slow_sql_1.php81.php @@ -31,7 +31,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -83,7 +83,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_slow_sql_2.php b/tests/integration/pdo/test_slow_sql_2.php index f2f928385..2c3bb54d2 100644 --- a/tests/integration/pdo/test_slow_sql_2.php +++ b/tests/integration/pdo/test_slow_sql_2.php @@ -35,7 +35,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -87,7 +87,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $stmt = $conn->prepare('select * from tables limit 1;'); + $stmt = $conn->prepare('select * from information_schema.tables limit 1;'); tap_assert($stmt->execute(), 'execute slow query'); } diff --git a/tests/integration/pdo/test_slow_sql_2.php81.php b/tests/integration/pdo/test_slow_sql_2.php81.php index a80a43510..f52008c2c 100644 --- a/tests/integration/pdo/test_slow_sql_2.php81.php +++ b/tests/integration/pdo/test_slow_sql_2.php81.php @@ -35,7 +35,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ?;", + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -87,7 +87,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $stmt = $conn->prepare('select * from tables limit 1;'); + $stmt = $conn->prepare('select * from information_schema.tables limit 1;'); tap_assert($stmt->execute(), 'execute slow query'); } diff --git a/tests/integration/pdo/test_slow_sql_for_update.php b/tests/integration/pdo/test_slow_sql_for_update.php index 2a074b689..63e75d373 100644 --- a/tests/integration/pdo/test_slow_sql_for_update.php +++ b/tests/integration/pdo/test_slow_sql_for_update.php @@ -28,7 +28,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ? for update;", + "select * from information_schema.tables limit ? for update;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -51,7 +51,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1 for update;'); + $result = $conn->query('select * from information_schema.tables limit 1 for update;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_slow_sql_lock.php b/tests/integration/pdo/test_slow_sql_lock.php index c87464ad3..7f1d07722 100644 --- a/tests/integration/pdo/test_slow_sql_lock.php +++ b/tests/integration/pdo/test_slow_sql_lock.php @@ -28,7 +28,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables limit ? lock in share mode;", + "select * from information_schema.tables limit ? lock in share mode;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -51,7 +51,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables limit 1 lock in share mode;'); + $result = $conn->query('select * from information_schema.tables limit 1 lock in share mode;'); } test_slow_sql(); diff --git a/tests/integration/pdo/test_slow_sql_semicolon.php b/tests/integration/pdo/test_slow_sql_semicolon.php index 87901b7e5..4f88e76d5 100644 --- a/tests/integration/pdo/test_slow_sql_semicolon.php +++ b/tests/integration/pdo/test_slow_sql_semicolon.php @@ -28,7 +28,7 @@ "OtherTransaction/php__FILE__", "", "?? SQL id", - "select * from tables where engine = ?;", + "select * from information_schema.tables where engine = ?;", "Datastore/statement/MySQL/tables/select", 1, "?? total time", @@ -51,7 +51,7 @@ function test_slow_sql() { global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD); - $result = $conn->query('select * from tables where engine = \';\';'); + $result = $conn->query('select * from information_schema.tables where engine = \';\';'); } test_slow_sql(); diff --git a/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php b/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php index 91b1420be..56e161179 100644 --- a/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php +++ b/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php @@ -14,6 +14,9 @@ if (version_compare(PHP_VERSION, "7.0", "<")) { die("skip: CLM for PHP 5 not supported\n"); } +if (version_compare(PHP_VERSION, "8.4", ">=")) { + die("skip: newer test for PHP 8.4+\n"); +} */ /*INI @@ -92,7 +95,7 @@ { "error.message": "foo", "error.class": "E_USER_ERROR", - "code.lineno": 136, + "code.lineno": 139, "code.filepath": "__FILE__", "code.function": "a" } @@ -113,7 +116,7 @@ }, {}, { - "code.lineno": 130, + "code.lineno": 133, "code.filepath": "__FILE__", "code.function": "{closure}" } diff --git a/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php5.php b/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php84.php similarity index 80% rename from tests/integration/span_events/test_span_events_are_created_upon_caught_error.php5.php rename to tests/integration/span_events/test_span_events_are_created_upon_caught_error.php84.php index 22a82caa9..fabe4bddd 100644 --- a/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php5.php +++ b/tests/integration/span_events/test_span_events_are_created_upon_caught_error.php84.php @@ -7,6 +7,14 @@ /*DESCRIPTION Test that span events are correctly created from any eligible segment, even when an error is generated and handled. +PHP 8.4+ names closures differently. +*/ + +/*SKIPIF +=")) { + die("skip: newer test for PHP 8.4\n"); +} */ /*INI @@ -92,7 +95,7 @@ { "error.message": "foo", "error.class": "E_USER_ERROR", - "code.lineno": 108, + "code.lineno": 111, "code.filepath": "__FILE__", "code.function": "a" } diff --git a/tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php5.php b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php5.php index 5353e0da0..3e17f5371 100644 --- a/tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php5.php +++ b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php5.php @@ -19,6 +19,13 @@ newrelic.code_level_metrics.enabled=false */ +/*SKIPIF +=")) { + die("skip: newer test for PHP 8.4\n"); +} +*/ + /*EXPECT_SPAN_EVENTS [ "?? agent run id", diff --git a/tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php84.php b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php84.php new file mode 100644 index 000000000..b56ef56a2 --- /dev/null +++ b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_error.php84.php @@ -0,0 +1,122 @@ + 'FakeDB', + ) +); +a(); diff --git a/tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php index 7670f8a27..24d3e6da2 100644 --- a/tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php +++ b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php @@ -16,6 +16,9 @@ if (version_compare(PHP_VERSION, "8.0", "<")) { die("skip: test for oapi agent only\n"); } +if (version_compare(PHP_VERSION, "8.4", ">=")) { + die("skip: newer test for PHP 8.4+\n"); +} */ /*INI diff --git a/tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php84.php b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php84.php new file mode 100644 index 000000000..c9e6a3455 --- /dev/null +++ b/tests/integration/span_events/test_span_events_are_created_upon_uncaught_handled_exception.php84.php @@ -0,0 +1,183 @@ + 'FakeDB', + ) +); +a(); + +echo 'this should never be printed'; diff --git a/tests/lasp/suite-least-secure/test_slow_sql_on.php b/tests/lasp/suite-least-secure/test_slow_sql_on.php index e4b693b0b..003595b14 100644 --- a/tests/lasp/suite-least-secure/test_slow_sql_on.php +++ b/tests/lasp/suite-least-secure/test_slow_sql_on.php @@ -31,8 +31,8 @@ [ "OtherTransaction/php__FILE__", "\u003cunknown\u003e", - 2691358128, - "select * from tables limit ?;", + 2279837883, + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", "??", "??", @@ -85,7 +85,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/lasp/suite-least-secure/test_slow_sql_on.php81.php b/tests/lasp/suite-least-secure/test_slow_sql_on.php81.php index b4e678a8b..a9696beb7 100644 --- a/tests/lasp/suite-least-secure/test_slow_sql_on.php81.php +++ b/tests/lasp/suite-least-secure/test_slow_sql_on.php81.php @@ -31,8 +31,8 @@ [ "OtherTransaction/php__FILE__", "\u003cunknown\u003e", - 2691358128, - "select * from tables limit ?;", + 2279837883, + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", "??", "??", @@ -85,7 +85,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/lasp/suite-most-secure/test_slow_sql_off.php b/tests/lasp/suite-most-secure/test_slow_sql_off.php index e5e252eea..e464fd0d0 100644 --- a/tests/lasp/suite-most-secure/test_slow_sql_off.php +++ b/tests/lasp/suite-most-secure/test_slow_sql_off.php @@ -35,7 +35,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/lasp/suite-random-2/test_slow_sql_on.php b/tests/lasp/suite-random-2/test_slow_sql_on.php index b68fb481f..c1e86a5fa 100644 --- a/tests/lasp/suite-random-2/test_slow_sql_on.php +++ b/tests/lasp/suite-random-2/test_slow_sql_on.php @@ -30,8 +30,8 @@ [ "OtherTransaction/php__FILE__", "\u003cunknown\u003e", - 2691358128, - "select * from tables limit ?;", + 2279837883, + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", "??", "??", @@ -84,7 +84,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/lasp/suite-random-2/test_slow_sql_on.php81.php b/tests/lasp/suite-random-2/test_slow_sql_on.php81.php index d229271ef..c25195200 100644 --- a/tests/lasp/suite-random-2/test_slow_sql_on.php81.php +++ b/tests/lasp/suite-random-2/test_slow_sql_on.php81.php @@ -30,8 +30,8 @@ [ "OtherTransaction/php__FILE__", "\u003cunknown\u003e", - 2691358128, - "select * from tables limit ?;", + 2279837883, + "select * from information_schema.tables limit ?;", "Datastore/statement/MySQL/tables/select", "??", "??", @@ -84,7 +84,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/lasp/suite-random-3/test_slow_sql_off.php b/tests/lasp/suite-random-3/test_slow_sql_off.php index 18c3c7f84..087f130bb 100644 --- a/tests/lasp/suite-random-3/test_slow_sql_off.php +++ b/tests/lasp/suite-random-3/test_slow_sql_off.php @@ -34,7 +34,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/lasp/suite-random-3/test_slow_sql_on.php b/tests/lasp/suite-random-3/test_slow_sql_on.php index d55b78edf..6ec54ea93 100644 --- a/tests/lasp/suite-random-3/test_slow_sql_on.php +++ b/tests/lasp/suite-random-3/test_slow_sql_on.php @@ -34,7 +34,7 @@ function test_slow_sql() global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, array()); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } test_slow_sql(); diff --git a/tests/regression/test_php_1179_pdo_options_crash.php b/tests/regression/test_php_1179_pdo_options_crash.php index e35ca7f0a..9b6419337 100644 --- a/tests/regression/test_php_1179_pdo_options_crash.php +++ b/tests/regression/test_php_1179_pdo_options_crash.php @@ -59,7 +59,7 @@ function test_slow_sql(array $options) global $PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD; $conn = new PDO($PDO_MYSQL_DSN, $MYSQL_USER, $MYSQL_PASSWD, $options); - $result = $conn->query('select * from tables limit 1;'); + $result = $conn->query('select * from information_schema.tables limit 1;'); } $shared_options = array(PDO::ATTR_PERSISTENT => true); From 8a73dde5bab68356599dfd14ea93b5654665de84 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Thu, 9 Jan 2025 11:31:23 -0700 Subject: [PATCH 53/62] fix(axiom): externalCallCount should be added to the txn not just the error (#1006) --- axiom/nr_txn.c | 2 ++ axiom/tests/test_cmd_txndata.c | 1 + axiom/tests/test_txn.c | 5 +++ .../external/curl_exec/test_dt_simple.php | 30 +++++++++++++++++ .../test_spans_are_created_correctly.php | 29 ++++++++++++++++ ...t_uncaught_bad_response_exception_sync.php | 33 +++++++++++++++++++ .../synthetics/test_happy_path_with_dt.php | 1 + 7 files changed, 101 insertions(+) diff --git a/axiom/nr_txn.c b/axiom/nr_txn.c index 774c44671..4e5c4c41e 100644 --- a/axiom/nr_txn.c +++ b/axiom/nr_txn.c @@ -2582,6 +2582,8 @@ nrobj_t* nr_txn_event_intrinsics(const nrtxn_t* txn) { params, txn->unscoped_metrics, "WebFrontend/QueueTime", "queueDuration"); nr_txn_add_metric_total_as_attribute(params, txn->unscoped_metrics, "External/all", "externalDuration"); + nr_txn_add_metric_count_as_attribute(params, txn->unscoped_metrics, + "External/all", "externalCallCount"); nr_txn_add_metric_total_as_attribute(params, txn->unscoped_metrics, "Datastore/all", "databaseDuration"); nr_txn_add_metric_count_as_attribute(params, txn->unscoped_metrics, diff --git a/axiom/tests/test_cmd_txndata.c b/axiom/tests/test_cmd_txndata.c index fc9272e1c..1107d9a79 100644 --- a/axiom/tests/test_cmd_txndata.c +++ b/axiom/tests/test_cmd_txndata.c @@ -1094,6 +1094,7 @@ static void test_encode_txn_event(void) { "\"duration\":0.98700,\"totalTime\":0.98700,\"nr.apdexPerfZone\":" "\"F\"," "\"queueDuration\":3.00000,\"externalDuration\":2.00000," + "\"externalCallCount\":1," "\"databaseDuration\":2.00000," "\"databaseCallCount\":2," "\"error\":false}," diff --git a/axiom/tests/test_txn.c b/axiom/tests/test_txn.c index 9230a416a..279bbbbee 100644 --- a/axiom/tests/test_txn.c +++ b/axiom/tests/test_txn.c @@ -4056,6 +4056,7 @@ static void test_create_event(void) { "\"nr.apdexPerfZone\":\"F\"," "\"queueDuration\":3.00000," "\"externalDuration\":2.00000," + "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," "\"error\":false" @@ -4078,6 +4079,7 @@ static void test_create_event(void) { "\"totalTime\":0.98700," "\"queueDuration\":3.00000," "\"externalDuration\":2.00000," + "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," "\"error\":false" @@ -4103,6 +4105,7 @@ static void test_create_event(void) { "\"nr.apdexPerfZone\":\"F\"," "\"queueDuration\":3.00000," "\"externalDuration\":2.00000," + "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," "\"error\":false" @@ -4126,6 +4129,7 @@ static void test_create_event(void) { "\"nr.apdexPerfZone\":\"F\"," "\"queueDuration\":3.00000," "\"externalDuration\":2.00000," + "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," "\"error\":false" @@ -4148,6 +4152,7 @@ static void test_create_event(void) { "\"nr.apdexPerfZone\":\"F\"," "\"queueDuration\":3.00000," "\"externalDuration\":2.00000," + "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," "\"error\":false" diff --git a/tests/integration/external/curl_exec/test_dt_simple.php b/tests/integration/external/curl_exec/test_dt_simple.php index 5574bcf38..b7009267a 100644 --- a/tests/integration/external/curl_exec/test_dt_simple.php +++ b/tests/integration/external/curl_exec/test_dt_simple.php @@ -28,6 +28,36 @@ /*EXPECT_RESPONSE_HEADERS */ +/*EXPECT_ANALYTICS_EVENTS +[ + "?? agent run id", + { + "reservoir_size": 50, + "events_seen": 1 + }, + [ + [ + { + "type": "Transaction", + "name": "OtherTransaction\/php__FILE__", + "timestamp": "??", + "duration": "??", + "totalTime": "??", + "externalDuration": "??", + "externalCallCount": 1, + "guid": "??", + "sampled": true, + "priority": "??", + "traceId": "??", + "error": false + }, + {}, + {} + ] + ] +] +*/ + /*EXPECT_TRACED_ERRORS null */ diff --git a/tests/integration/external/guzzle7/test_spans_are_created_correctly.php b/tests/integration/external/guzzle7/test_spans_are_created_correctly.php index 87388da64..4ec83c617 100644 --- a/tests/integration/external/guzzle7/test_spans_are_created_correctly.php +++ b/tests/integration/external/guzzle7/test_spans_are_created_correctly.php @@ -19,6 +19,35 @@ newrelic.transaction_tracer.detail = 0 */ +/*EXPECT_ANALYTICS_EVENTS +[ + "?? agent run id", + { + "reservoir_size": 50, + "events_seen": 1 + }, + [ + [ + { + "type": "Transaction", + "name": "OtherTransaction\/php__FILE__", + "timestamp": "??", + "duration": "??", + "totalTime": "??", + "externalDuration": "??", + "externalCallCount": 1, + "guid": "??", + "sampled": true, + "priority": "??", + "traceId": "??", + "error": false + }, + {}, + {} + ] + ] +] +*/ /*EXPECT_SPAN_EVENTS_LIKE [ diff --git a/tests/integration/external/guzzle7/test_uncaught_bad_response_exception_sync.php b/tests/integration/external/guzzle7/test_uncaught_bad_response_exception_sync.php index 88e2acdaf..98172f8ef 100644 --- a/tests/integration/external/guzzle7/test_uncaught_bad_response_exception_sync.php +++ b/tests/integration/external/guzzle7/test_uncaught_bad_response_exception_sync.php @@ -81,6 +81,39 @@ ] */ +/*EXPECT_ANALYTICS_EVENTS +[ + "?? agent run id", + { + "reservoir_size": 50, + "events_seen": 1 + }, + [ + [ + { + "type": "Transaction", + "name": "OtherTransaction\/php__FILE__", + "timestamp": "??", + "duration": "??", + "totalTime": "??", + "externalDuration": "??", + "externalCallCount": 1, + "guid": "??", + "sampled": true, + "priority": "??", + "traceId": "??", + "error": true + }, + {}, + { + "errorType": "GuzzleHttp\\Exception\\BadResponseException", + "errorMessage": "Uncaught exception 'GuzzleHttp\\Exception\\BadResponseException' with message 'ClientException' in __FILE__:??" + } + ] + ] +] +*/ + /*EXPECT_TRACED_ERRORS [ "?? agent run id", diff --git a/tests/integration/synthetics/test_happy_path_with_dt.php b/tests/integration/synthetics/test_happy_path_with_dt.php index 855a35e2a..bd415e684 100644 --- a/tests/integration/synthetics/test_happy_path_with_dt.php +++ b/tests/integration/synthetics/test_happy_path_with_dt.php @@ -62,6 +62,7 @@ "nr.syntheticsJobId": "jjjjjjj-jjjj-1234-jjjj-jjjjjjjjjjjj", "nr.syntheticsMonitorId": "mmmmmmm-mmmm-1234-mmmm-mmmmmmmmmmmm", "externalDuration": "??", + "externalCallCount": 1, "guid": "??", "sampled": true, "priority": "??", From 86db4f8fbbbe6ed458c02eda2f6fea1c6222543c Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Tue, 14 Jan 2025 11:38:17 -0500 Subject: [PATCH 54/62] fix(daemon): enable `go vet` check on pull requests (#1005) Address issues spotted by `go vet`: - fix syntax of `kubernetes.KubernetesServiceHost` struct tags - ensure `context.cancel()` is always called to avoid context leak Add go vet check for pull requests. --- .github/workflows/test-agent.yml | 33 +++++++++++++++++++ daemon/cmd/daemon/worker.go | 4 ++- .../newrelic/utilization/kubernetes.go | 2 +- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-agent.yml b/.github/workflows/test-agent.yml index fff60dae5..efb68d872 100644 --- a/.github/workflows/test-agent.yml +++ b/.github/workflows/test-agent.yml @@ -44,6 +44,39 @@ jobs: echo "$GOFMT_REPORTED_FILES" >> $GITHUB_STEP_SUMMARY exit 1 fi + govet: + runs-on: ubuntu-latest + continue-on-error: true + steps: + - name: Checkout newrelic-php-agent code + uses: actions/checkout@v4 + with: + path: php-agent + - name: Get go version + id: get-go-version + run: | + echo "go toolchain version required to build the daemon:" + toolchain="$(awk '/^toolchain */ {gsub(/^go/, "", $2); print $2}' ./php-agent/daemon/go.mod)" + echo "[${toolchain}]" + echo "go-toolchain-version=${toolchain}" >> $GITHUB_OUTPUT + - name: Setup go + uses: actions/setup-go@v5 + with: + go-version: ${{ steps.get-go-version.outputs.go-toolchain-version }} + cache-dependency-path: "**/*.sum" + - name: Verify go version + run: | + echo "Verify correct go toolchain version is used" + actual="$(go version)" + echo "Actual: [$actual]" + expected="go version go${{ steps.get-go-version.outputs.go-toolchain-version }} linux/amd64" + echo "Expected: [$expected]" + if [ "$actual" != "$expected" ]; then + exit 1 + fi + - name: Run go vet + run: go vet -C ./php-agent/daemon ./... + shell: bash daemon-unit-tests: runs-on: ubuntu-latest env: diff --git a/daemon/cmd/daemon/worker.go b/daemon/cmd/daemon/worker.go index 25ec5a2ca..eade69f46 100644 --- a/daemon/cmd/daemon/worker.go +++ b/daemon/cmd/daemon/worker.go @@ -124,6 +124,7 @@ func runWorker(cfg *Config) { hasProgenitor := !(cfg.Foreground || cfg.WatchdogForeground) ctx, cancel := context.WithCancel(context.Background()) + defer cancel() // Ensure that the context is always cancelled when the worker exits, not only when signal is caught. select { case <-listenAndServe(ctx, cfg.BindAddr, errorChan, p, hasProgenitor): @@ -140,7 +141,8 @@ func runWorker(cfg *Config) { case caught := <-signalChan: // Close the listener before sending remaining data. This ensures that the socket // connection is closed as soon as possible and other processes can start listening - // the socket while remaining data is sent. + // the socket while remaining data is sent. Earlier defer cancel() will be a no-op + // because cancel() is called here explicitly. cancel() log.Infof("worker received signal %d - sending remaining data", caught) p.CleanExit() diff --git a/daemon/internal/newrelic/utilization/kubernetes.go b/daemon/internal/newrelic/utilization/kubernetes.go index 2bca922ca..e96a6e560 100644 --- a/daemon/internal/newrelic/utilization/kubernetes.go +++ b/daemon/internal/newrelic/utilization/kubernetes.go @@ -11,7 +11,7 @@ import ( ) type kubernetes struct { - KubernetesServiceHost string `json:"kubernetes_service_host",omitempty` + KubernetesServiceHost string `json:"kubernetes_service_host,omitempty"` // Having a custom getter allows the unit tests to mock os.Getenv(). environmentVariableGetter func(key string) string From 94d15754d6602dbd798be6badfa92ff12f0c687f Mon Sep 17 00:00:00 2001 From: Hitesh Ahuja <108540135+hahuja2@users.noreply.github.com> Date: Tue, 14 Jan 2025 10:38:21 -0800 Subject: [PATCH 55/62] chore(agent): Bump version to 11.6 (#1008) --- VERSION | 2 +- axiom/nr_version.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 7ef698131..146d5de79 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.5.0 +11.6.0 diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 6125e272e..e6e54a250 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -47,8 +47,9 @@ * bowenite 30Sep2024 (11.2) * corundum 21Oct2024 (11.3) * diamond 09Dec2024 (11.4) + * emerald 13Jan2025 (11.5) */ -#define NR_CODENAME "emerald" +#define NR_CODENAME "fluorite" const char* nr_version(void) { return NR_STR2(NR_VERSION); From 996dcc9ecb25102e5b1549a48d9504954a43f7c1 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Fri, 17 Jan 2025 09:12:25 -0700 Subject: [PATCH 56/62] feat(axiom): Add message segment functionality (#991) 1) Added message segment. Agent will now handle generic, external, datastore, and message segments. 2) Added unit tests for the changes 3) New functionality involves adding message specific attributes to segments/spans, generating message specific metrics, and honoring the message_tracer_parameters_enabled INI setting to disable/enable the attributes. 4)Things to keep in mind while reviewing: * the commits describe a lot of what is going on * Functionality-wise, message segment is a mix of external and datastore * nr_segment_message is the new file --------- Co-authored-by: ZNeumann Co-authored-by: Michael Fulbright <89205663+mfulb@users.noreply.github.com> --- agent/php_newrelic.h | 6 + agent/php_nrini.c | 11 + agent/php_txn.c | 4 +- agent/scripts/newrelic.ini.template | 11 + axiom/Makefile | 1 + axiom/nr_segment.c | 52 +- axiom/nr_segment.h | 61 +- axiom/nr_segment_external.c | 4 +- axiom/nr_segment_message.c | 238 ++++ axiom/nr_segment_message.h | 53 + axiom/nr_segment_private.c | 12 + axiom/nr_segment_private.h | 7 + axiom/nr_segment_traces.c | 71 ++ axiom/nr_segment_traces.h | 4 + axiom/nr_span_event.c | 81 +- axiom/nr_span_event.h | 54 +- axiom/nr_span_event_private.h | 4 + axiom/nr_txn.c | 12 + axiom/nr_txn.h | 2 + axiom/tests/Makefile | 1 + axiom/tests/test_cmd_txndata.c | 9 +- axiom/tests/test_segment_helpers.h | 23 +- axiom/tests/test_segment_message.c | 1010 +++++++++++++++++ axiom/tests/test_segment_private.c | 90 +- axiom/tests/test_segment_traces.c | 164 ++- axiom/tests/test_span_event.c | 107 ++ axiom/tests/test_txn.c | 31 +- .../synthetics/test_happy_path_with_dt.php | 2 +- 28 files changed, 2077 insertions(+), 48 deletions(-) create mode 100644 axiom/nr_segment_message.c create mode 100644 axiom/nr_segment_message.h create mode 100644 axiom/tests/test_segment_message.c diff --git a/agent/php_newrelic.h b/agent/php_newrelic.h index 1860b5167..6afaf531a 100644 --- a/agent/php_newrelic.h +++ b/agent/php_newrelic.h @@ -596,6 +596,12 @@ nrinibool_t nrinibool_t vulnerability_management_composer_api_enabled; /* newrelic.vulnerability_management.composer_api.enabled */ +/* + * Configuration options for recording Messaging APIs + */ +nrinibool_t + message_tracer_segment_parameters_enabled; /* newrelic.segment_tracer.segment_parameters.enabled */ + #if ZEND_MODULE_API_NO < ZEND_7_4_X_API_NO /* * pid and user_function_wrappers are used to store user function wrappers. diff --git a/agent/php_nrini.c b/agent/php_nrini.c index 6c21d1bdf..4a2f7c471 100644 --- a/agent/php_nrini.c +++ b/agent/php_nrini.c @@ -3100,6 +3100,17 @@ STD_PHP_INI_ENTRY_EX("newrelic.vulnerability_management.composer_api.enabled", newrelic_globals, nr_enabled_disabled_dh) +/* + * Messaging API + */ +STD_PHP_INI_ENTRY_EX("newrelic.message_tracer.segment_parameters.enabled", + "1", + NR_PHP_REQUEST, + nr_boolean_mh, + message_tracer_segment_parameters_enabled, + zend_newrelic_globals, + newrelic_globals, + nr_enabled_disabled_dh) PHP_INI_END() /* } */ void nr_php_register_ini_entries(int module_number TSRMLS_DC) { diff --git a/agent/php_txn.c b/agent/php_txn.c index b5b57975c..bc0ea6b7e 100644 --- a/agent/php_txn.c +++ b/agent/php_txn.c @@ -854,6 +854,8 @@ nr_status_t nr_php_txn_begin(const char* appnames, opts.log_forwarding_log_level = NRINI(log_forwarding_log_level); opts.log_events_max_samples_stored = NRINI(log_events_max_samples_stored); opts.log_metrics_enabled = NRINI(log_metrics_enabled); + opts.message_tracer_segment_parameters_enabled + = NRINI(message_tracer_segment_parameters_enabled); /* * Enable the behaviour whereby asynchronous time is discounted from the total @@ -1165,7 +1167,7 @@ nr_status_t nr_php_txn_end(int ignoretxn, int in_post_deactivate TSRMLS_DC) { #if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO \ && !defined OVERWRITE_ZEND_EXECUTE_DATA nr_segment_t* segment = nr_txn_get_current_segment(NRPRG(txn), NULL); - while(NULL != segment && segment != NRTXN(segment_root)) { + while (NULL != segment && segment != NRTXN(segment_root)) { nr_segment_end(&segment); segment = nr_txn_get_current_segment(NRPRG(txn), NULL); } diff --git a/agent/scripts/newrelic.ini.template b/agent/scripts/newrelic.ini.template index 4ed06a091..b406628a9 100644 --- a/agent/scripts/newrelic.ini.template +++ b/agent/scripts/newrelic.ini.template @@ -1341,3 +1341,14 @@ newrelic.daemon.logfile = "/var/log/newrelic/newrelic-daemon.log" ; to gather package information for vulnerability management. ; ;newrelic.vulnerability_management.composer_api.enabled = false + +; Setting: newrelic.message_tracer.segment_parameters.enabled +; Type : boolean +; Scope : per-directory +; Default: true +; Info : If this setting is true, then message parameters will be captured and +; stored on their respective segments. While enabled, specific attributes +; can be filtered by using newrelic.attributes.include/exclude and +; newrelic.span_events.attributes.include/exclude +; +;newrelic.message_tracer.segment_parameters.enabled = true diff --git a/axiom/Makefile b/axiom/Makefile index 34b45c229..4cce3a6f6 100644 --- a/axiom/Makefile +++ b/axiom/Makefile @@ -113,6 +113,7 @@ OBJS := \ nr_segment_children.o \ nr_segment_datastore.o \ nr_segment_external.o \ + nr_segment_message.o \ nr_segment_private.o \ nr_segment_terms.o \ nr_segment_traces.o \ diff --git a/axiom/nr_segment.c b/axiom/nr_segment.c index fa91cf1b7..4aaf7c120 100644 --- a/axiom/nr_segment.c +++ b/axiom/nr_segment.c @@ -313,6 +313,26 @@ static void nr_populate_http_spans(nr_span_event_t* span_event, segment->typed_attributes->external.status); } +static void nr_populate_message_spans(nr_span_event_t* span_event, + const nr_segment_t* segment) { + nr_span_event_set_category(span_event, NR_SPAN_MESSAGE); + + if (nrunlikely(NULL == segment || NULL == segment->typed_attributes)) { + return; + } + + nr_span_event_set_spankind(span_event, + segment->typed_attributes->message.message_action); + nr_span_event_set_message( + span_event, NR_SPAN_MESSAGE_DESTINATION_NAME, + segment->typed_attributes->message.destination_name); + nr_span_event_set_message( + span_event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM, + segment->typed_attributes->message.messaging_system); + nr_span_event_set_message(span_event, NR_SPAN_MESSAGE_SERVER_ADDRESS, + segment->typed_attributes->message.server_address); +} + static nr_status_t add_user_attribute_to_span_event(const char* key, const nrobj_t* val, void* ptr) { @@ -431,8 +451,8 @@ nr_span_event_t* nr_segment_to_span_event(nr_segment_t* segment) { nr_span_event_set_trusted_parent_id( event, nr_distributed_trace_inbound_get_trusted_parent_id( segment->txn->distributed_trace)); - nr_span_event_set_parent_id(event, - nr_distributed_trace_inbound_get_guid(segment->txn->distributed_trace)); + nr_span_event_set_parent_id(event, nr_distributed_trace_inbound_get_guid( + segment->txn->distributed_trace)); nr_span_event_set_transaction_name(event, segment->txn->name); @@ -482,6 +502,10 @@ nr_span_event_t* nr_segment_to_span_event(nr_segment_t* segment) { nr_populate_http_spans(event, segment); break; + case NR_SEGMENT_MESSAGE: + nr_populate_message_spans(event, segment); + break; + case NR_SEGMENT_CUSTOM: nr_span_event_set_category(event, NR_SPAN_GENERIC); break; @@ -599,6 +623,30 @@ bool nr_segment_set_external(nr_segment_t* segment, return true; } +bool nr_segment_set_message(nr_segment_t* segment, + const nr_segment_message_t* message) { + if (nrunlikely((NULL == segment) || (NULL == message))) { + return false; + } + + nr_segment_destroy_typed_attributes(segment->type, + &segment->typed_attributes); + segment->type = NR_SEGMENT_MESSAGE; + segment->typed_attributes = nr_zalloc(sizeof(nr_segment_typed_attributes_t)); + + // clang-format off + // Initialize the fields of the message attributes, one field per line. + segment->typed_attributes->message = (nr_segment_message_t){ + .message_action = message->message_action, + .destination_name = nr_strempty(message->destination_name) ? NULL: nr_strdup(message->destination_name), + .messaging_system = nr_strempty(message->messaging_system) ? NULL: nr_strdup(message->messaging_system), + .server_address = nr_strempty(message->server_address) ? NULL: nr_strdup(message->server_address), + }; + // clang-format on + + return true; +} + bool nr_segment_add_child(nr_segment_t* parent, nr_segment_t* child) { if (nrunlikely((NULL == parent) || (NULL == child))) { return false; diff --git a/axiom/nr_segment.h b/axiom/nr_segment.h index 56d972579..f35ab6224 100644 --- a/axiom/nr_segment.h +++ b/axiom/nr_segment.h @@ -34,7 +34,8 @@ typedef struct _nrtxn_t nrtxn_t; typedef enum _nr_segment_type_t { NR_SEGMENT_CUSTOM, NR_SEGMENT_DATASTORE, - NR_SEGMENT_EXTERNAL + NR_SEGMENT_EXTERNAL, + NR_SEGMENT_MESSAGE } nr_segment_type_t; /* @@ -109,6 +110,48 @@ typedef struct _nr_segment_external_t { uint64_t status; } nr_segment_external_t; +typedef struct _nr_segment_message_t { + /* + * Attributes needed for entity relationship building. + * Compare to OTEL attributes: + * https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/ + * cloud.account.id, cloud.region, messaging.system and server.address are + * used to create relationships between APM and cloud services. It may not + * make sense to add these attributes unless they are used for creating one of + * the relationships in Entity Relationships. + */ + + nr_span_spankind_t + message_action; /*The action of the message, e.g.,Produce/Consume.*/ + char* destination_name; /*The name of the Queue, Topic, or Exchange; + otherwise, Temp. Needed for SQS relationship.*/ + char* messaging_system; /* for ex: aws_sqs. Needed for SQS relationship.*/ + char* server_address; /*The server domain name or IP address. Needed for + MQBROKER relationship.*/ +} nr_segment_message_t; + +typedef struct _nr_segment_cloud_attrs_t { + /* + * Attributes needed for entity relationship building. + * Compare to OTEL attributes: + * https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/ + * cloud.account.id, cloud.region, messaging.system and server.address are + * used to create relationships between APM and cloud services. It may not + * make sense to add these attributes unless they are used for creating one of + * the relationships in Entity Relationships. + * These attributes aren't specific to a segment category so don't belong as + * typed attributes and can be added whenever they are available. + */ + char* cloud_region; /*Targeted region; ex:us-east-1*. Needed for SQS + relationship.*/ + char* cloud_account_id; /*The cloud provider account ID. Needed for SQS + relationship.*/ + char* cloud_resource_id; /*Unique cloud provider identifier. For AWS, this is + the ARN of the AWS resource being accessed.*/ + char* aws_operation; /*AWS specific operation name.*/ + +} nr_segment_cloud_attrs_t; + typedef struct _nr_segment_metric_t { char* name; bool scoped; @@ -132,6 +175,7 @@ typedef struct _nr_segment_error_t { typedef union { nr_segment_datastore_t datastore; nr_segment_external_t external; + nr_segment_message_t message; } nr_segment_typed_attributes_t; typedef struct _nr_segment_t { @@ -179,8 +223,8 @@ typedef struct _nr_segment_t { int priority; /* Used to determine which segments are preferred for span event creation */ nr_segment_typed_attributes_t* typed_attributes; /* Attributes specific to - external or datastore - segments. */ + external, datastore, + or message segments. */ nr_segment_error_t* error; /* segment error attributes */ #if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO \ && !defined OVERWRITE_ZEND_EXECUTE_DATA /* PHP 8.0+ and OAPI */ @@ -314,6 +358,17 @@ extern bool nr_segment_set_datastore(nr_segment_t* segment, */ extern bool nr_segment_set_external(nr_segment_t* segment, const nr_segment_external_t* external); + +/* + * Purpose : Mark the segment as being a message segment. + * + * Params : 1. The pointer to the segment. + * 2. The message attributes, which will be copied into the segment. + * + * Returns : true if successful, false otherwise. + */ +extern bool nr_segment_set_message(nr_segment_t* segment, + const nr_segment_message_t* message); /* * Purpose : Add a child to a segment. * diff --git a/axiom/nr_segment_external.c b/axiom/nr_segment_external.c index dbaf4c78a..738cec6f5 100644 --- a/axiom/nr_segment_external.c +++ b/axiom/nr_segment_external.c @@ -57,8 +57,8 @@ static void nr_segment_external_set_attrs( * External/{host}/all non-CAT * ExternalTransaction/{host}/{external_id}/{external_txnname} CAT * - * These metrics are dictated by the spec located here: - * https://source.datanerd.us/agents/agent-specs/blob/master/Cross-Application-Tracing-PORTED.md + * These metrics are dictated by the agent-spec in this file: + * Cross-Application-Tracing-PORTED.md */ static void nr_segment_external_create_metrics(nr_segment_t* segment, const char* uri, diff --git a/axiom/nr_segment_message.c b/axiom/nr_segment_message.c new file mode 100644 index 000000000..56e9ed2b9 --- /dev/null +++ b/axiom/nr_segment_message.c @@ -0,0 +1,238 @@ +/* + * Copyright 2020 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "nr_axiom.h" + +#include + +#include "nr_header.h" +#include "nr_segment_message.h" +#include "nr_segment_private.h" +#include "util_strings.h" +#include "util_url.h" + +/* + * Purpose : Set all the typed message attributes on the segment. + * + * Params : 1. nr_segment_t* ASSUMED TO BE NON-NULL - the segment to set the + * attributes on + * 2. nr_segment_message_params_t* ASSUMED TO BE NON-NULL - the + * parameters set the attributes to + * + * Returns: true on success. + * + * Note: This is a function private to this file and assumes the calling + * function has already checked the input parameters for NULL prior to calling + * this function. Calling function is assumed to check the following items for + * NULL: if (NULL == segment || NULL == message_params || NULL == segment->txn) + */ +static void nr_segment_message_set_attrs( + nr_segment_t* segment, + const nr_segment_message_params_t* params) { + nr_segment_message_t message_attributes = {0}; + + message_attributes.message_action = params->message_action; + + if (segment->txn->options.message_tracer_segment_parameters_enabled) { + message_attributes.destination_name = params->destination_name; + message_attributes.messaging_system = params->messaging_system; + message_attributes.server_address = params->server_address; + } + + nr_segment_set_message(segment, &message_attributes); +} + +/* + * Purpose : Create metrics for a completed message call and set the segment + * name. + * + * Metrics created during this call + * ---------------------------------------------------------------------------------- + * MessageBroker/all Unscoped Always + * MessageBroker/{library}/all Scoped Always + * + * Metrics created based on MessageBroker/all (in nr_txn_create_rollup_metrics) + * ---------------------------------------------------------------------------------- + * MessageBroker/allWeb Unscoped Web + * MessageBroker/allOther Unscoped non-Web + * + * Segment name + * ----------------------------------------------------------------------------------- + * MessageBroker/{library}/all Always + * For non-temp: + * MessageBroker/{Library}/{DestinationType}/{Action}/Named/{DestinationName} + * For temp: + * MessageBroker/{Library}/{DestinationType}/{Action}/Temp + * + * + * These metrics are dictated by the agent-spec file here: + * APIs/messaging.md#metrics + * When the destination is temporary (such as a temporary queue, or a temporary + * topic), the destination name MUST be omitted. The metric segment 'Named' MUST + * be replaced with 'Temp'. The DestinationType segment SHOULD NOT contain + * "Temporary". Thus, "Temporary " should be removed from the destination type + * enum before metric use. Examples: MessageBroker/JMS/Queue/Produce/Temp, + * MessageBroker/JMS/Topic/Produce/Temp + * + * Further note that for pull-style messaging, the transaction segment name MUST + * be equal to the scoped metric name (e.g., + * MessageBroker/JMS/Queue/Produce/Named/SortQueue) + * + * + * Params : 1. The message segment. + * 2. Message parameters + * 3. Duration of the segment + * + * Returns : the scoped metric that was created. Caller is responsible for + * freeing this value. + */ + +static char* nr_segment_message_create_metrics( + nr_segment_t* segment, + const nr_segment_message_params_t* message_params, + nrtime_t duration) { + const char* action_string = NULL; + const char* destination_type_string = NULL; + const char* library_string = NULL; + char* rollup_metric = NULL; + char* scoped_metric = NULL; + + if (NULL == segment) { + return NULL; + } + + if (NULL == message_params) { + return NULL; + } + + /* Rollup metric. + * + * This has to be created on the transaction in order to create + * MessageBroker/allWeb and MessageBroker/allOther and to calculate + * messageDuration later on. + */ + + nrm_force_add(segment->txn->unscoped_metrics, "MessageBroker/all", duration); + + if (nr_strempty(message_params->library)) { + library_string = ""; + } else { + library_string = message_params->library; + } + rollup_metric = nr_formatf("MessageBroker/%s/all", library_string); + nrm_force_add(segment->txn->unscoped_metrics, rollup_metric, duration); + nr_free(rollup_metric); + + /* + * Note: although the concept of Temporary queues/topics is detailed in the + * spec, in practice, we are unlikely to encounter it as it is currently only + * meaningful with JMS (Java Message Service). It is added here for adherence + * with spec. + */ + + if (NR_SPANKIND_PRODUCER == message_params->message_action) { + action_string = "Produce"; + } else if (NR_SPANKIND_CONSUMER == message_params->message_action) { + action_string = "Consume"; + } else { + action_string = ""; + } + + switch (message_params->destination_type) { + case NR_MESSAGE_DESTINATION_TYPE_TEMP_QUEUE: + case NR_MESSAGE_DESTINATION_TYPE_QUEUE: + destination_type_string = "Queue"; + break; + case NR_MESSAGE_DESTINATION_TYPE_TEMP_TOPIC: + case NR_MESSAGE_DESTINATION_TYPE_TOPIC: + destination_type_string = "Topic"; + break; + case NR_MESSAGE_DESTINATION_TYPE_EXCHANGE: + destination_type_string = "Exchange"; + break; + default: + destination_type_string = ""; + break; + } + /* + * Create the scoped metric + * MessageBroker/{Library}/{DestinationType}/{Action}/Named/{DestinationName} + * non-temp MessageBroker/{Library}/{DestinationType}/{Action}/Temp + */ + if (NR_MESSAGE_DESTINATION_TYPE_TEMP_QUEUE == message_params->destination_type + || NR_MESSAGE_DESTINATION_TYPE_TEMP_TOPIC + == message_params->destination_type) { + scoped_metric = nr_formatf("MessageBroker/%s/%s/%s/Temp", library_string, + destination_type_string, action_string); + } else { + scoped_metric + = nr_formatf("MessageBroker/%s/%s/%s/Named/%s", library_string, + destination_type_string, action_string, + nr_strempty(message_params->destination_name) + ? "" + : message_params->destination_name); + } + + nr_segment_add_metric(segment, scoped_metric, true); + + /* + * The scoped metric will be used as the segment name. + */ + return scoped_metric; +} + +bool nr_segment_message_end(nr_segment_t** segment_ptr, + const nr_segment_message_params_t* message_params) { + bool rv = false; + nr_segment_t* segment; + nrtime_t duration = 0; + char* scoped_metric = NULL; + + if (NULL == segment_ptr) { + return false; + } + + segment = *segment_ptr; + + if (NULL == segment || NULL == message_params || NULL == segment->txn) { + return false; + } + + /* + * We don't want message segments to have any children, as + * this would scramble the exclusive time calculation. + * Additionally, because it makes http calls under the hood, + * we don't want additional external calls created for this same txn. + * Therefore, we delete all children of the message segment. + */ + if (segment) { + for (size_t i = 0; i < nr_segment_children_size(&segment->children); i++) { + nr_segment_t* child = nr_segment_children_get(&segment->children, i); + nr_segment_discard(&child); + } + } + + nr_segment_message_set_attrs(segment, message_params); + + /* + * We set the end time here because we need the duration, (nr_segment_end will + * not overwrite this value if it's already set). + */ + if (!segment->stop_time) { + segment->stop_time + = nr_time_duration(nr_txn_start_time(segment->txn), nr_get_time()); + } + duration = nr_time_duration(segment->start_time, segment->stop_time); + + scoped_metric + = nr_segment_message_create_metrics(segment, message_params, duration); + nr_segment_set_name(segment, scoped_metric); + + rv = nr_segment_end(&segment); + + nr_free(scoped_metric); + + return rv; +} diff --git a/axiom/nr_segment_message.h b/axiom/nr_segment_message.h new file mode 100644 index 000000000..2104e3f35 --- /dev/null +++ b/axiom/nr_segment_message.h @@ -0,0 +1,53 @@ +/* + * Copyright 2020 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef NR_SEGMENT_MESSAGE_HDR +#define NR_SEGMENT_MESSAGE_HDR + +#include "nr_segment.h" +#include "nr_segment_traces.h" + +/* + * Note: + * CAT is EOLed and this feature is not compatible with CAT. + */ + +typedef enum _nr_segment_message_destination_type_t { + NR_MESSAGE_DESTINATION_TYPE_QUEUE, + NR_MESSAGE_DESTINATION_TYPE_TOPIC, + NR_MESSAGE_DESTINATION_TYPE_TEMP_QUEUE, + NR_MESSAGE_DESTINATION_TYPE_TEMP_TOPIC, + NR_MESSAGE_DESTINATION_TYPE_EXCHANGE +} nr_segment_message_destination_type_t; + +typedef struct { + /* All strings are null-terminated. When NULL/empty the values are ingored. */ + + /* Only used for creating metrics. */ + char* library; /* Library; Possible values are SQS, SNS, RabbitMQ, JMS */ + nr_segment_message_destination_type_t + destination_type; /* Named/temp queue/topic/exchange */ + + /* Used for creating message attributes. */ + nr_span_spankind_t + message_action; /*The action of the message, e.g.,Produce/Consume.*/ + char* destination_name; /*The name of the Queue, Topic, or Exchange; + otherwise, Temp. Needed for SQS relationship.*/ + char* messaging_system; /* for ex: aws_sqs. Needed for SQS relationship.*/ + char* server_address; /*The server domain name or IP address. Needed for + MQBROKER relationship.*/ +} nr_segment_message_params_t; + +/* + * Purpose : End a message segment and record metrics. + * + * Params : 1. nr_segment_message_params_t + * + * Returns: true on success. + */ +extern bool nr_segment_message_end(nr_segment_t** segment, + const nr_segment_message_params_t* params); + +#endif diff --git a/axiom/nr_segment_private.c b/axiom/nr_segment_private.c index a60865afd..f063862b7 100644 --- a/axiom/nr_segment_private.c +++ b/axiom/nr_segment_private.c @@ -39,6 +39,16 @@ void nr_segment_external_destroy_fields(nr_segment_external_t* external) { nr_free(external->procedure); } +void nr_segment_message_destroy_fields(nr_segment_message_t* message) { + if (nrunlikely(NULL == message)) { + return; + } + + nr_free(message->destination_name); + nr_free(message->messaging_system); + nr_free(message->server_address); +} + void nr_segment_destroy_typed_attributes( nr_segment_type_t type, nr_segment_typed_attributes_t** attributes) { @@ -54,6 +64,8 @@ void nr_segment_destroy_typed_attributes( nr_segment_datastore_destroy_fields(&attrs->datastore); } else if (NR_SEGMENT_EXTERNAL == type) { nr_segment_external_destroy_fields(&attrs->external); + } else if (NR_SEGMENT_MESSAGE == type) { + nr_segment_message_destroy_fields(&attrs->message); } nr_free(attrs); diff --git a/axiom/nr_segment_private.h b/axiom/nr_segment_private.h index 70b499795..b2d6fe2c4 100644 --- a/axiom/nr_segment_private.h +++ b/axiom/nr_segment_private.h @@ -33,6 +33,13 @@ void nr_segment_datastore_destroy_fields(nr_segment_datastore_t* datastore); */ void nr_segment_external_destroy_fields(nr_segment_external_t* external); +/* + * Purpose : Free all data related to a segment's message metadata. + * + * Params : 1. A pointer to a segment's nr_segment_message_t structure. + */ +void nr_segment_message_destroy_fields(nr_segment_message_t* message); + /* * Purpose : Free all data related to a segment metric. * diff --git a/axiom/nr_segment_traces.c b/axiom/nr_segment_traces.c index 846d89a55..153ccd5c2 100644 --- a/axiom/nr_segment_traces.c +++ b/axiom/nr_segment_traces.c @@ -162,6 +162,15 @@ static void add_typed_attributes_to_buffer(nrbuf_t* buf, ext->transaction_guid, false); add_hash_key_value_to_buffer_int(buf, "status", &ext->status); } break; + case NR_SEGMENT_MESSAGE: { + const nr_segment_message_t* message = &segment->typed_attributes->message; + add_hash_key_value_to_buffer(buf, "destination_name", + message->destination_name, false); + add_hash_key_value_to_buffer(buf, "messaging_system", + message->messaging_system, false); + add_hash_key_value_to_buffer(buf, "server_address", + message->server_address, false); + } break; case NR_SEGMENT_CUSTOM: default: break; @@ -578,3 +587,65 @@ void nr_segment_traces_create_data( return; } + +/* + * Purpose : If available, add cloud attributes to segment. + * + * Params : 1. segment to create and add agent attributes to + * 2. nr_segment_cloud_attrs_t* that contains the attributes + * + * Returns : void + * + */ +extern void nr_segment_traces_add_cloud_attributes( + nr_segment_t* segment, + const nr_segment_cloud_attrs_t* cloud_attrs) { + if (NULL == cloud_attrs) { + return; + } + + if (NULL == segment) { + return; + } + + /* + * Ensure a spot for the attributes. + */ + + if (NULL == segment->attributes) { + segment->attributes = nr_attributes_create(segment->txn->attribute_config); + } + + if (nrunlikely(NULL == segment->attributes)) { + return; + } + +#define NR_CLOUD_AGENT_ATTRIBUTE_DESTINATION \ + (NR_ATTRIBUTE_DESTINATION_TXN_TRACE | NR_ATTRIBUTE_DESTINATION_ERROR \ + | NR_ATTRIBUTE_DESTINATION_TXN_EVENT | NR_ATTRIBUTE_DESTINATION_SPAN) + + /* + * If the value is empty or null, ignore it. + */ + + if (!nr_strempty(cloud_attrs->cloud_region)) { + nr_attributes_agent_add_string( + segment->attributes, NR_CLOUD_AGENT_ATTRIBUTE_DESTINATION, + NR_ATTR_CLOUD_REGION, cloud_attrs->cloud_region); + } + if (!nr_strempty(cloud_attrs->cloud_account_id)) { + nr_attributes_agent_add_string( + segment->attributes, NR_CLOUD_AGENT_ATTRIBUTE_DESTINATION, + NR_ATTR_CLOUD_ACCOUNT_ID, cloud_attrs->cloud_account_id); + } + if (!nr_strempty(cloud_attrs->cloud_resource_id)) { + nr_attributes_agent_add_string( + segment->attributes, NR_CLOUD_AGENT_ATTRIBUTE_DESTINATION, + NR_ATTR_CLOUD_RESOURCE_ID, cloud_attrs->cloud_resource_id); + } + if (!nr_strempty(cloud_attrs->aws_operation)) { + nr_attributes_agent_add_string( + segment->attributes, NR_CLOUD_AGENT_ATTRIBUTE_DESTINATION, + NR_ATTR_AWS_OPERATION, cloud_attrs->aws_operation); + } +} diff --git a/axiom/nr_segment_traces.h b/axiom/nr_segment_traces.h index a8ccbb10f..aa9ad4610 100644 --- a/axiom/nr_segment_traces.h +++ b/axiom/nr_segment_traces.h @@ -124,4 +124,8 @@ bool nr_segment_traces_json_print_segments(nrbuf_t* buf, extern nr_segment_iter_return_t nr_segment_traces_stot_iterator_callback( nr_segment_t* segment, void* userdata); + +extern void nr_segment_traces_add_cloud_attributes( + nr_segment_t* segment, + const nr_segment_cloud_attrs_t* cloud_attrs); #endif diff --git a/axiom/nr_span_event.c b/axiom/nr_span_event.c index 965b297d9..00987881a 100644 --- a/axiom/nr_span_event.c +++ b/axiom/nr_span_event.c @@ -141,20 +141,49 @@ void nr_span_event_set_category(nr_span_event_t* event, switch (category) { case NR_SPAN_DATASTORE: nro_set_hash_string(event->intrinsics, "category", "datastore"); - nro_set_hash_string(event->intrinsics, "span.kind", "client"); + nr_span_event_set_spankind(event, NR_SPANKIND_CLIENT); break; case NR_SPAN_GENERIC: nro_set_hash_string(event->intrinsics, "category", "generic"); - if (nro_get_hash_value(event->intrinsics, "span.kind", NULL)) { - nro_set_hash_none(event->intrinsics, "span.kind"); - } + nr_span_event_set_spankind(event, NR_SPANKIND_NO_SPANKIND); break; case NR_SPAN_HTTP: nro_set_hash_string(event->intrinsics, "category", "http"); + nr_span_event_set_spankind(event, NR_SPANKIND_CLIENT); + break; + + case NR_SPAN_MESSAGE: + nro_set_hash_string(event->intrinsics, "category", "message"); + /* give it a default value in case we exit before spankind is set*/ + nr_span_event_set_spankind(event, NR_SPANKIND_NO_SPANKIND); + break; + } +} + +void nr_span_event_set_spankind(nr_span_event_t* event, + nr_span_spankind_t spankind) { + if (NULL == event) { + return; + } + + switch (spankind) { + case NR_SPANKIND_PRODUCER: + nro_set_hash_string(event->intrinsics, "span.kind", "producer"); + break; + case NR_SPANKIND_CLIENT: nro_set_hash_string(event->intrinsics, "span.kind", "client"); break; + case NR_SPANKIND_CONSUMER: + nro_set_hash_string(event->intrinsics, "span.kind", "consumer"); + break; + case NR_SPANKIND_NO_SPANKIND: + default: + if (nro_get_hash_value(event->intrinsics, "span.kind", NULL)) { + nro_set_hash_none(event->intrinsics, "span.kind"); + } + break; } } @@ -328,6 +357,29 @@ void nr_span_event_set_external_status(nr_span_event_t* event, nro_set_hash_ulong(event->agent_attributes, "http.statusCode", status); } +void nr_span_event_set_message(nr_span_event_t* event, + nr_span_event_message_member_t member, + const char* new_value) { + if (NULL == event || NULL == new_value) { + return; + } + + switch (member) { + case NR_SPAN_MESSAGE_DESTINATION_NAME: + nro_set_hash_string(event->agent_attributes, + NR_ATTR_MESSAGING_DESTINATION_NAME, new_value); + break; + case NR_SPAN_MESSAGE_MESSAGING_SYSTEM: + nro_set_hash_string(event->agent_attributes, NR_ATTR_MESSAGING_SYSTEM, + new_value); + break; + case NR_SPAN_MESSAGE_SERVER_ADDRESS: + nro_set_hash_string(event->agent_attributes, NR_ATTR_SERVER_ADDRESS, + new_value); + break; + } +} + /* * Getters. * @@ -378,6 +430,7 @@ SPAN_EVENT_GETTER_STRING(nr_span_event_get_transaction_name, intrinsics, "transaction.name") SPAN_EVENT_GETTER_STRING(nr_span_event_get_category, intrinsics, "category") +SPAN_EVENT_GETTER_STRING(nr_span_event_get_spankind, intrinsics, "span.kind") SPAN_EVENT_GETTER_TIME(nr_span_event_get_timestamp, intrinsics, "timestamp") SPAN_EVENT_GETTER_DOUBLE(nr_span_event_get_duration, intrinsics, "duration") SPAN_EVENT_GETTER_DOUBLE(nr_span_event_get_priority, intrinsics, "priority") @@ -466,6 +519,26 @@ const char* nr_span_event_get_external(const nr_span_event_t* event, return NULL; } +const char* nr_span_event_get_message(const nr_span_event_t* event, + nr_span_event_message_member_t member) { + if (NULL == event) { + return NULL; + } + + switch (member) { + case NR_SPAN_MESSAGE_DESTINATION_NAME: + return nro_get_hash_string(event->agent_attributes, + NR_ATTR_MESSAGING_DESTINATION_NAME, NULL); + case NR_SPAN_MESSAGE_MESSAGING_SYSTEM: + return nro_get_hash_string(event->agent_attributes, + NR_ATTR_MESSAGING_SYSTEM, NULL); + case NR_SPAN_MESSAGE_SERVER_ADDRESS: + return nro_get_hash_string(event->agent_attributes, + NR_ATTR_SERVER_ADDRESS, NULL); + } + return NULL; +} + void nr_span_event_set_attribute_user(nr_span_event_t* event, const char* name, const nrobj_t* value) { diff --git a/axiom/nr_span_event.h b/axiom/nr_span_event.h index 74ee2119c..2a87b2306 100644 --- a/axiom/nr_span_event.h +++ b/axiom/nr_span_event.h @@ -13,6 +13,14 @@ #include #include +#define NR_ATTR_MESSAGING_DESTINATION_NAME "messaging.destination.name" +#define NR_ATTR_MESSAGING_SYSTEM "messaging.system" +#define NR_ATTR_SERVER_ADDRESS "server.address" +#define NR_ATTR_CLOUD_REGION "cloud.region" +#define NR_ATTR_CLOUD_ACCOUNT_ID "cloud.account.id" +#define NR_ATTR_CLOUD_RESOURCE_ID "cloud.resource_id" +#define NR_ATTR_AWS_OPERATION "aws.operation" + typedef struct _nr_span_event_t nr_span_event_t; /* @@ -21,9 +29,30 @@ typedef struct _nr_span_event_t nr_span_event_t; typedef enum { NR_SPAN_GENERIC, NR_SPAN_HTTP, - NR_SPAN_DATASTORE + NR_SPAN_DATASTORE, + NR_SPAN_MESSAGE } nr_span_category_t; +/* + * The spankinds a span may fall into. + * This is set according to: + * 1) guidelines in agent-specs which state datastore and http spans set + * span.kind to client and further states that generic span.kind is unset + * + * 2) for message spans follow guidance here: + * https://opentelemetry.io/docs/specs/semconv/messaging/messaging-spans/ + * which states that span.kind is + * a) producer when the operation type is create or send(if the context is + * create) b) client when the operation type is create or send(if the context is + * NOT create) c) consumer when the operation type is process + */ +typedef enum { + NR_SPANKIND_PRODUCER, + NR_SPANKIND_CLIENT, + NR_SPANKIND_CONSUMER, + NR_SPANKIND_NO_SPANKIND +} nr_span_spankind_t; + /* * Fields that can be set on datastore spans. */ @@ -44,6 +73,15 @@ typedef enum { NR_SPAN_EXTERNAL_METHOD } nr_span_event_external_member_t; +/* + * Fields that can be set on message spans. + */ +typedef enum { + NR_SPAN_MESSAGE_DESTINATION_NAME, + NR_SPAN_MESSAGE_MESSAGING_SYSTEM, + NR_SPAN_MESSAGE_SERVER_ADDRESS, +} nr_span_event_message_member_t; + /* * The parent attributes that can be set on service entry spans. * parent.transportDuration is set in @@ -115,6 +153,8 @@ extern void nr_span_event_set_transaction_name(nr_span_event_t* event, const char* transaction_name); extern void nr_span_event_set_category(nr_span_event_t* event, nr_span_category_t category); +extern void nr_span_event_set_spankind(nr_span_event_t* event, + nr_span_spankind_t spankind); extern void nr_span_event_set_timestamp(nr_span_event_t* event, nrtime_t time); extern void nr_span_event_set_duration(nr_span_event_t* event, nrtime_t duration); @@ -170,6 +210,18 @@ extern void nr_span_event_set_external(nr_span_event_t* event, extern void nr_span_event_set_external_status(nr_span_event_t* event, const uint64_t status); +/* + * Purpose : Set a message attribute. + * + * Params : 1. The target Span Event that should be changed. + * 2. The message attribute to be set. + * 3. The string value that the field will be after the function has + * executed. + */ +extern void nr_span_event_set_message(nr_span_event_t* event, + nr_span_event_message_member_t member, + const char* new_value); + /* * Purpose : Set a user attribute. * diff --git a/axiom/nr_span_event_private.h b/axiom/nr_span_event_private.h index 349c50538..4f55c6f2f 100644 --- a/axiom/nr_span_event_private.h +++ b/axiom/nr_span_event_private.h @@ -28,6 +28,7 @@ extern const char* nr_span_event_get_name(const nr_span_event_t* event); extern const char* nr_span_event_get_transaction_name( const nr_span_event_t* event); extern const char* nr_span_event_get_category(const nr_span_event_t* event); +extern const char* nr_span_event_get_spankind(const nr_span_event_t* event); extern nrtime_t nr_span_event_get_timestamp(const nr_span_event_t* event); extern double nr_span_event_get_duration(const nr_span_event_t* event); extern double nr_span_event_get_priority(const nr_span_event_t* event); @@ -44,6 +45,9 @@ extern const char* nr_span_event_get_external( const nr_span_event_t* event, nr_span_event_external_member_t member); extern uint64_t nr_span_event_get_external_status(const nr_span_event_t* event); +extern const char* nr_span_event_get_message( + const nr_span_event_t* event, + nr_span_event_message_member_t member); extern const char* nr_span_event_get_error_message( const nr_span_event_t* event); extern const char* nr_span_event_get_error_class(const nr_span_event_t* event); diff --git a/axiom/nr_txn.c b/axiom/nr_txn.c index 4e5c4c41e..06c0214ef 100644 --- a/axiom/nr_txn.c +++ b/axiom/nr_txn.c @@ -1221,11 +1221,15 @@ void nr_txn_create_rollup_metrics(nrtxn_t* txn) { "Datastore/allOther"); nrm_duplicate_metric(txn->unscoped_metrics, "External/all", "External/allOther"); + nrm_duplicate_metric(txn->unscoped_metrics, "MessageBroker/all", + "MessageBroker/allOther"); } else { nrm_duplicate_metric(txn->unscoped_metrics, "Datastore/all", "Datastore/allWeb"); nrm_duplicate_metric(txn->unscoped_metrics, "External/all", "External/allWeb"); + nrm_duplicate_metric(txn->unscoped_metrics, "MessageBroker/all", + "MessageBroker/allWeb"); } nr_string_pool_apply( @@ -2492,11 +2496,15 @@ nr_analytics_event_t* nr_error_to_event(const nrtxn_t* txn) { "External/all", "externalDuration"); nr_txn_add_metric_total_as_attribute(params, txn->unscoped_metrics, "Datastore/all", "databaseDuration"); + nr_txn_add_metric_total_as_attribute(params, txn->unscoped_metrics, + "MessageBroker/all", "messageDuration"); nr_txn_add_metric_count_as_attribute(params, txn->unscoped_metrics, "Datastore/all", "databaseCallCount"); nr_txn_add_metric_count_as_attribute(params, txn->unscoped_metrics, "External/all", "externalCallCount"); + nr_txn_add_metric_count_as_attribute(params, txn->unscoped_metrics, + "MessageBroker/all", "messageCallCount"); nro_set_hash_string(params, "nr.transactionGuid", nr_txn_get_guid(txn)); @@ -2588,6 +2596,10 @@ nrobj_t* nr_txn_event_intrinsics(const nrtxn_t* txn) { "Datastore/all", "databaseDuration"); nr_txn_add_metric_count_as_attribute(params, txn->unscoped_metrics, "Datastore/all", "databaseCallCount"); + nr_txn_add_metric_total_as_attribute(params, txn->unscoped_metrics, + "MessageBroker/all", "messageDuration"); + nr_txn_add_metric_count_as_attribute(params, txn->unscoped_metrics, + "MessageBroker/all", "messageCallCount"); if (txn->options.distributed_tracing_enabled) { nr_txn_add_distributed_tracing_intrinsics(txn, params); diff --git a/axiom/nr_txn.h b/axiom/nr_txn.h index 8874260ec..55871f1b1 100644 --- a/axiom/nr_txn.h +++ b/axiom/nr_txn.h @@ -132,6 +132,8 @@ typedef struct _nrtxnopt_t { size_t log_events_max_samples_stored; /* The maximum number of log events per transaction */ bool log_metrics_enabled; /* Whether log metrics are enabled */ + bool message_tracer_segment_parameters_enabled; /* Determines whether to add + message attr */ } nrtxnopt_t; typedef enum _nrtxnstatus_cross_process_t { diff --git a/axiom/tests/Makefile b/axiom/tests/Makefile index 0a37821bb..3d67984ca 100644 --- a/axiom/tests/Makefile +++ b/axiom/tests/Makefile @@ -173,6 +173,7 @@ TESTS := \ test_segment_children \ test_segment_datastore \ test_segment_external \ + test_segment_message \ test_segment_private \ test_segment_terms \ test_segment_traces \ diff --git a/axiom/tests/test_cmd_txndata.c b/axiom/tests/test_cmd_txndata.c index 1107d9a79..ffb53a6c9 100644 --- a/axiom/tests/test_cmd_txndata.c +++ b/axiom/tests/test_cmd_txndata.c @@ -134,7 +134,8 @@ static void test_encode_errors(void) { "[887788,\"txnname\",\"msg\",\"cls\",{\"stack_trace\":[" "\"stacktrace " "json\"],\"agentAttributes\":{\"agent_long\":2},\"userAttributes\":{" - "\"user_long\":1},\"intrinsics\":{\"a\":\"b\",\"guid\":\"abcdef\"}},\"abcdef\"]"), + "\"user_long\":1},\"intrinsics\":{\"a\":\"b\",\"guid\":\"abcdef\"}}," + "\"abcdef\"]"), nr_flatbuffers_table_read_bytes(&tbl, ERROR_FIELD_DATA), nr_flatbuffers_table_read_vector_len(&tbl, ERROR_FIELD_DATA), __FILE__, __LINE__); @@ -1042,6 +1043,7 @@ static void test_encode_txn_event(void) { nrm_add(txn.unscoped_metrics, "Datastore/all", 1 * NR_TIME_DIVISOR); nrm_add(txn.unscoped_metrics, "Datastore/all", 1 * NR_TIME_DIVISOR); nrm_add(txn.unscoped_metrics, "External/all", 2 * NR_TIME_DIVISOR); + nrm_add(txn.unscoped_metrics, "MessageBroker/all", 2 * NR_TIME_DIVISOR); nrm_add(txn.unscoped_metrics, "WebFrontend/QueueTime", 3 * NR_TIME_DIVISOR); txn.attributes = nr_attributes_create(0); @@ -1093,10 +1095,13 @@ static void test_encode_txn_event(void) { "\"timestamp\":123.00000," "\"duration\":0.98700,\"totalTime\":0.98700,\"nr.apdexPerfZone\":" "\"F\"," - "\"queueDuration\":3.00000,\"externalDuration\":2.00000," + "\"queueDuration\":3.00000," + "\"externalDuration\":2.00000," "\"externalCallCount\":1," "\"databaseDuration\":2.00000," "\"databaseCallCount\":2," + "\"messageDuration\":2.00000," + "\"messageCallCount\":1," "\"error\":false}," "{\"user_long\":1},{\"agent_long\":2}]"), nr_flatbuffers_table_read_bytes(&tbl, EVENT_FIELD_DATA), diff --git a/axiom/tests/test_segment_helpers.h b/axiom/tests/test_segment_helpers.h index 908432798..9ff7f54f7 100644 --- a/axiom/tests/test_segment_helpers.h +++ b/axiom/tests/test_segment_helpers.h @@ -12,6 +12,7 @@ #include "nr_segment.h" #include "nr_segment_datastore.h" #include "nr_segment_external.h" +#include "nr_segment_message.h" #include "tlib_main.h" #include "util_metrics_private.h" #include "nr_limits.h" @@ -287,7 +288,7 @@ static NRUNUSED bool test_segment_end_and_keep(nr_segment_t** segment_ptr) { } /* - * Purpose : Ends an external segment without nulling out the segment pointer. + * Purpose : Ends an external segment without nulling out the segment pointer. * * WARNING : This can only be used safely when the segment priority queue is * disabled. @@ -326,4 +327,24 @@ static NRUNUSED bool test_segment_datastore_end_and_keep( return nr_segment_datastore_end(&segment, params); } +/* + * Purpose : Ends a message segment without nulling out the segment pointer. + * + * WARNING : This can only be used safely when the segment priority queue is + * disabled. + */ +static NRUNUSED bool test_segment_message_end_and_keep( + nr_segment_t** segment_ptr, + nr_segment_message_params_t* params) { + nr_segment_t* segment; + + if (NULL == segment_ptr) { + return false; + } + + segment = *segment_ptr; + + return nr_segment_message_end(&segment, params); +} + #endif /* TEST_SEGMENT_HELPERS_HDR */ diff --git a/axiom/tests/test_segment_message.c b/axiom/tests/test_segment_message.c new file mode 100644 index 000000000..a68403caf --- /dev/null +++ b/axiom/tests/test_segment_message.c @@ -0,0 +1,1010 @@ +/* + * Copyright 2020 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "nr_axiom.h" +#include "nr_header.h" +#include "nr_segment_message.h" +#include "test_segment_helpers.h" +#include "nr_attributes.h" +#include "nr_attributes_private.h" +#include "util_hash.h" +#include "util_memory.h" +#include "util_object.h" +#include "util_reply.h" +#include "util_strings.h" +#include "util_text.h" + +#include "tlib_main.h" + +typedef struct { + const char* test_name; + const char* name; + const char* txn_rollup_metric; + const char* library_metric; + uint32_t num_metrics; + const char* destination_name; + const char* cloud_region; + const char* cloud_account_id; + const char* messaging_system; + const char* cloud_resource_id; + const char* server_address; + const char* aws_operation; +} segment_message_expecteds_t; + +static nr_segment_t* mock_txn_segment(void) { + nrtxn_t* txn = new_txn(0); + + return nr_segment_start(txn, NULL, NULL); +} + +static void test_message_segment(nr_segment_message_params_t* params, + nr_segment_cloud_attrs_t* cloud_attrs, + bool message_attributes_enabled, + segment_message_expecteds_t expecteds) { + uint32_t all = NR_ATTRIBUTE_DESTINATION_ALL; + nrobj_t* obj = NULL; + nr_segment_t* seg = mock_txn_segment(); + nrtxn_t* txn = seg->txn; + seg->txn->options.message_tracer_segment_parameters_enabled + = message_attributes_enabled; + + nr_segment_traces_add_cloud_attributes(seg, cloud_attrs); + /* Check the agent cloud attributes. */ + obj = nr_attributes_agent_to_obj(seg->attributes, all); + tlib_pass_if_str_equal(expecteds.test_name, expecteds.aws_operation, + nro_get_hash_string(obj, NR_ATTR_AWS_OPERATION, 0)); + tlib_pass_if_str_equal( + expecteds.test_name, expecteds.cloud_resource_id, + nro_get_hash_string(obj, NR_ATTR_CLOUD_RESOURCE_ID, 0)); + tlib_pass_if_str_equal(expecteds.test_name, expecteds.cloud_account_id, + nro_get_hash_string(obj, NR_ATTR_CLOUD_ACCOUNT_ID, 0)); + tlib_pass_if_str_equal(expecteds.test_name, expecteds.cloud_region, + nro_get_hash_string(obj, NR_ATTR_CLOUD_REGION, 0)); + nro_delete(obj); + + test_segment_message_end_and_keep(&seg, params); + /* Check the metrics and txn naming. */ + tlib_pass_if_str_equal(expecteds.test_name, expecteds.name, + nr_string_get(seg->txn->trace_strings, seg->name)); + test_txn_metric_created(expecteds.test_name, txn->unscoped_metrics, + expecteds.txn_rollup_metric); + test_txn_metric_created(expecteds.test_name, txn->unscoped_metrics, + expecteds.library_metric); + test_metric_vector_size(seg->metrics, expecteds.num_metrics); + + /* Check the segment settings and typed attributes. */ + tlib_pass_if_true(expecteds.test_name, NR_SEGMENT_MESSAGE == seg->type, + "NR_SEGMENT_MESSAGE"); + tlib_pass_if_str_equal(expecteds.test_name, + seg->typed_attributes->message.destination_name, + expecteds.destination_name); + tlib_pass_if_str_equal(expecteds.test_name, + seg->typed_attributes->message.messaging_system, + expecteds.messaging_system); + tlib_pass_if_str_equal(expecteds.test_name, + seg->typed_attributes->message.server_address, + expecteds.server_address); + nr_txn_destroy(&txn); +} + +static void test_bad_parameters(void) { + nr_segment_t seg_null = {0}; + nr_segment_t* seg_null_ptr; + nr_segment_t* seg = mock_txn_segment(); + nrtxn_t* txn = seg->txn; + nr_segment_message_params_t params = {0}; + + tlib_pass_if_false("bad parameters", nr_segment_message_end(NULL, ¶ms), + "expected false"); + + seg_null_ptr = NULL; + + tlib_pass_if_false("bad parameters", + nr_segment_message_end(&seg_null_ptr, ¶ms), + "expected false"); + + seg_null_ptr = &seg_null; + tlib_pass_if_false("bad parameters", + nr_segment_message_end(&seg_null_ptr, ¶ms), + "expected false"); + + tlib_pass_if_false("bad parameters", nr_segment_message_end(&seg, NULL), + "expected false"); + test_metric_vector_size(seg->metrics, 0); + + nr_txn_destroy(&txn); +} + +static void test_segment_message_destination_type(void) { + /* + * The following values are used to create metrics: + * library + * destination_type + * message_action + * destination_name + */ + /* Test NR_MESSAGE_DESTINATION_TYPE_TEMP_TOPIC destination type */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TEMP_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name + = "Test NR_MESSAGE_DESTINATION_TYPE_TEMP_TOPIC destination type", + .name = "MessageBroker/SQS/Topic/Produce/Temp", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test NR_MESSAGE_DESTINATION_TYPE_TEMP_QUEUE destination type */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TEMP_QUEUE, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name + = "Test NR_MESSAGE_DESTINATION_TYPE_TEMP_QUEUE destination type", + .name = "MessageBroker/SQS/Queue/Produce/Temp", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test NR_MESSAGE_DESTINATION_TYPE_EXCHANGE destination type */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_EXCHANGE, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name + = "Test NR_MESSAGE_DESTINATION_TYPE_EXCHANGE destination type", + .name = "MessageBroker/SQS/Exchange/Produce/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test NR_MESSAGE_DESTINATION_TYPE_TOPIC destination type */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name + = "Test NR_MESSAGE_DESTINATION_TYPE_EXCHANGE destination type", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test NR_MESSAGE_DESTINATION_TYPE_QUEUE destination type */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_QUEUE, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name + = "Test NR_MESSAGE_DESTINATION_TYPE_QUEUE destination type", + .name = "MessageBroker/SQS/Queue/Produce/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_message_action(void) { + /* + * The following values are used to create metrics: + * library + * destination_type + * message_action + * destination_name + */ + + /* Test NR_SPANKIND_PRODUCER message action */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test NR_SPANKIND_PRODUCER message action", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test NR_SPANKIND_CONSUMER message action */ + + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_CONSUMER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test NR_SPANKIND_CONSUMER message action", + .name = "MessageBroker/SQS/Topic/Consume/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* + * Test NR_SPANKIND_CLIENT message action; this is not + * allowed for message segments, should show unknown. + */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_CLIENT, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test NR_SPANKIND_CLIENT message action", + .name = "MessageBroker/SQS/Topic//Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_library(void) { + /* + * The following values are used to create metrics: + * library + * destination_type + * message_action + * destination_name + */ + /* Test null library */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = NULL, + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null library", + .name + = "MessageBroker//Topic/Produce/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker//all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test empty library */ + + test_message_segment( + &(nr_segment_message_params_t){ + .library = "", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty library", + .name + = "MessageBroker//Topic/Produce/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker//all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid library */ + + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_queue_or_topic"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid library", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_queue_or_topic", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_queue_or_topic", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_destination_name(void) { + /* + * The following values are used to create metrics: + * library + * destination_type + * message_action + * destination_name + */ + /* Test null destination_name */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = NULL}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null destination_name", + .name = "MessageBroker/SQS/Topic/Produce/Named/", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = NULL, + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test empty destination_name */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = ""}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty destination_name", + .name = "MessageBroker/SQS/Topic/Produce/Named/", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = NULL, + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid destination_name */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid destination_name", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_cloud_region(void) { + /* + * cloud_region values should NOT impact the creation of + * metrics. + */ + + /* Test null cloud_region */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null cloud_region", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test empty cloud_region */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.cloud_region = ""}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty cloud_region", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid cloud_region */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.cloud_region = "wild-west-1"}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid cloud_region", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = "wild-west-1", + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_cloud_account_id(void) { + /* + * cloud_account_id values should NOT impact the creation + * of metrics. + */ + + /* Test null cloud_account_id */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null cloud_account_id", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test empty cloud_account_id */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.cloud_account_id = ""}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty cloud_account_id", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid cloud_account_id */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.cloud_account_id = "12345678"}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid cloud_account_id", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = "12345678", + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_messaging_system(void) { + /* + * messaging_system values should NOT impact the creation + * of metrics. + */ + + /* Test null messaging_system */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_system = NULL, + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null messaging_system", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test empty messaging_system */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_system = "", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty messaging_system", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid messaging_system */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_system = "my_messaging_system", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid messaging_system", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = "my_messaging_system", + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_cloud_resource_id(void) { + /* + * cloud_resource_id values should NOT impact the creation + * of metrics. + */ + + /* Test null cloud_resource_id */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null cloud_resource_id ", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test empty cloud_resource_id */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.cloud_resource_id = ""}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty cloud_resource_id ", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid cloud_resource_id */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.cloud_resource_id = "my_resource_id"}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid cloud_resource_id ", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = "my_resource_id", + .server_address = NULL, + .aws_operation = NULL}); +} + +static void test_segment_message_server_address(void) { + /* + * server_address values should NOT impact the creation + * of metrics. + */ + + /* Test null server_address */ + test_message_segment( + &(nr_segment_message_params_t){ + .server_address = "localhost", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null server_address", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = "localhost", + .aws_operation = NULL}); + + /* Test empty server_address */ + test_message_segment( + &(nr_segment_message_params_t){ + .server_address = "", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty server_address", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid server_address */ + test_message_segment( + &(nr_segment_message_params_t){ + .server_address = "localhost", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid server_address", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = "localhost", + .aws_operation = NULL}); +} + +static void test_segment_message_aws_operation(void) { + /* + * aws_operation values should NOT impact the creation + * of metrics. + */ + + /* Test null aws_operation */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test null aws_operation", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test empty aws_operation */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.aws_operation = ""}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test empty aws_operation", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = NULL}); + + /* Test valid aws_operation */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.aws_operation = "sendMessage"}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid aws_operation", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = NULL, + .cloud_account_id = NULL, + .messaging_system = NULL, + .cloud_resource_id = NULL, + .server_address = NULL, + .aws_operation = "sendMessage"}); +} + +static void test_segment_message_parameters_enabled(void) { + /* + * Attributes should be set based on value of parameters_enabled. + */ + + /* Test true message_parameters_enabled */ + test_message_segment( + &(nr_segment_message_params_t){ + .server_address = "localhost", + .messaging_system = "my_system", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.aws_operation = "sendMessage", + .cloud_region = "wild-west-1", + .cloud_account_id = "12345678", + .cloud_resource_id = "my_resource_id"}, + true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test true message_parameters_enabled", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .cloud_region = "wild-west-1", + .cloud_account_id = "12345678", + .messaging_system = "my_system", + .cloud_resource_id = "my_resource_id", + .server_address = "localhost", + .aws_operation = "sendMessage"}); + + /* + * Test false message_parameters_enabled. Message attributes should not show, + * but cloud attributes should be unaffected. + */ + test_message_segment( + &(nr_segment_message_params_t){ + .server_address = "localhost", + .messaging_system = "my_system", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){.aws_operation = "sendMessage", + .cloud_region = "wild-west-1", + .cloud_account_id = "12345678", + .cloud_resource_id = "my_resource_id"}, + false /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test false message_parameters_enabled", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = NULL, + .cloud_region = "wild-west-1", + .cloud_account_id = "12345678", + .messaging_system = NULL, + .cloud_resource_id = "my_resource_id", + .server_address = NULL, + .aws_operation = "sendMessage"}); +} + +tlib_parallel_info_t parallel_info = {.suggested_nthreads = 4, .state_size = 0}; + +void test_main(void* p NRUNUSED) { + test_bad_parameters(); + test_segment_message_destination_type(); + test_segment_message_message_action(); + test_segment_message_library(); + test_segment_message_destination_name(); + test_segment_message_cloud_region(); + test_segment_message_cloud_account_id(); + test_segment_message_messaging_system(); + test_segment_message_cloud_resource_id(); + test_segment_message_server_address(); + test_segment_message_aws_operation(); + test_segment_message_parameters_enabled(); +} diff --git a/axiom/tests/test_segment_private.c b/axiom/tests/test_segment_private.c index e586f1f4f..82e0dfd80 100644 --- a/axiom/tests/test_segment_private.c +++ b/axiom/tests/test_segment_private.c @@ -25,6 +25,7 @@ static void test_bad_parameters(void) { nr_segment_destroy_fields(NULL); nr_segment_datastore_destroy_fields(NULL); nr_segment_external_destroy_fields(NULL); + nr_segment_message_destroy_fields(NULL); nr_segment_metric_destroy_fields(NULL); nr_segment_error_destroy_fields(NULL); } @@ -205,7 +206,6 @@ static void test_set_custom(void) { tlib_pass_if_int_equal( "Setting an untyped segment to custom must set the type", (int)NR_SEGMENT_CUSTOM, (int)s.type); - nr_segment_set_datastore(&t, &d); tlib_pass_if_true("Setting a datastore segment to custom must be successful", nr_segment_set_custom(&t), "Expected true"); @@ -316,6 +316,48 @@ static void test_set_destroy_external_fields(void) { &s.typed_attributes); } +static void test_set_destroy_message_fields(void) { + nr_segment_t s = {.type = NR_SEGMENT_MESSAGE}; + + nr_segment_message_t m = {.message_action = NR_SPANKIND_CLIENT, + .messaging_system = "my_messaging_system", + .server_address = "localhost"}; + + nr_segment_external_t e = {.transaction_guid = "transaction_guid", + .uri = "uri", + .library = "library", + .procedure = "procedure", + .status = 200}; + /* + * Test : Bad parameters. + */ + tlib_pass_if_false( + "Setting a NULL segment's message attributes must not be successful", + nr_segment_set_message(NULL, &m), "Expected false"); + + tlib_pass_if_false( + "Setting a segment with NULL message attributes must not be successful", + nr_segment_set_message(&s, NULL), "Expected false"); + + /* + * Test : Normal operation. + */ + tlib_pass_if_true("Setting a segment's message attributes must be successful", + nr_segment_set_message(&s, &m), "Expected true"); + + tlib_pass_if_true( + "Setting a segment from message attributes to external attributes must " + "be successful", + nr_segment_set_external(&s, &e), "Expected true"); + + /* Valgrind shall affirm that the attributes for s were cleaned + * up when the segment type was changed from message to external. + */ + + /* Clean up */ + nr_segment_destroy_typed_attributes(NR_SEGMENT_EXTERNAL, &s.typed_attributes); +} + static void test_destroy_typed_attributes(void) { nr_segment_t s = {0}; char* test_string = "0123456789"; @@ -325,10 +367,41 @@ static void test_destroy_typed_attributes(void) { */ nr_segment_destroy_typed_attributes(NR_SEGMENT_EXTERNAL, NULL); nr_segment_destroy_typed_attributes(NR_SEGMENT_EXTERNAL, &s.typed_attributes); + tlib_pass_if_null( + "Even with bad parameters, nr_segment_destroy_typed_attributes should " + "not crash and s.typed_attributes should be NULL", + s.typed_attributes); nr_segment_destroy_typed_attributes(NR_SEGMENT_DATASTORE, NULL); nr_segment_destroy_typed_attributes(NR_SEGMENT_DATASTORE, &s.typed_attributes); + tlib_pass_if_null( + "Even with bad parameters, nr_segment_destroy_typed_attributes should " + "not crash and s.typed_attributes should be NULL", + s.typed_attributes); + nr_segment_destroy_typed_attributes(NR_SEGMENT_MESSAGE, NULL); + nr_segment_destroy_typed_attributes(NR_SEGMENT_MESSAGE, &s.typed_attributes); + tlib_pass_if_null( + "Even with bad parameters, nr_segment_destroy_typed_attributes should " + "not crash and s.typed_attributes should be NULL", + s.typed_attributes); + /* + * Test : Clean up typed attributes for a message segment + */ + s.type = NR_SEGMENT_MESSAGE; + s.typed_attributes = nr_zalloc(sizeof(nr_segment_typed_attributes_t)); + s.typed_attributes->message.destination_name = nr_strdup("queue_name"); + s.typed_attributes->message.messaging_system = nr_strdup("aws_sqs"); + s.typed_attributes->message.server_address = nr_strdup("localhost"); + + /* + * Valgrind shall affirm that the attributes were cleaned up. + */ + nr_segment_destroy_typed_attributes(NR_SEGMENT_MESSAGE, &s.typed_attributes); + tlib_pass_if_null( + "After nr_segment_destroy_typed_attributes, s.typed_attributes should be " + "NULL", + s.typed_attributes); /* * Test : Clean up typed attributes for an external segment */ @@ -340,7 +413,14 @@ static void test_destroy_typed_attributes(void) { s.typed_attributes->external.procedure = nr_strdup(test_string); s.typed_attributes->external.status = 200; + /* + * Valgrind shall affirm that the attributes were cleaned up. + */ nr_segment_destroy_typed_attributes(NR_SEGMENT_EXTERNAL, &s.typed_attributes); + tlib_pass_if_null( + "After nr_segment_destroy_typed_attributes, s.typed_attributes should be " + "NULL", + s.typed_attributes); /* * Test : Clean up typed attributes for a datastore segment @@ -358,8 +438,15 @@ static void test_destroy_typed_attributes(void) { = nr_strdup(test_string); s.typed_attributes->datastore.instance.database_name = nr_strdup(test_string); + /* + * Valgrind shall affirm that the attributes were cleaned up. + */ nr_segment_destroy_typed_attributes(NR_SEGMENT_DATASTORE, &s.typed_attributes); + tlib_pass_if_null( + "After nr_segment_destroy_typed_attributes, s.typed_attributes should be " + "NULL", + s.typed_attributes); } static void test_destroy_fields(void) { @@ -394,6 +481,7 @@ void test_main(void* p NRUNUSED) { test_set_custom(); test_set_destroy_datastore_fields(); test_set_destroy_external_fields(); + test_set_destroy_message_fields(); test_destroy_typed_attributes(); test_destroy_fields(); test_destroy_metric(); diff --git a/axiom/tests/test_segment_traces.c b/axiom/tests/test_segment_traces.c index 450ea8af6..b43e15b28 100644 --- a/axiom/tests/test_segment_traces.c +++ b/axiom/tests/test_segment_traces.c @@ -51,6 +51,10 @@ tlib_pass_if_str_equal("category", "http", \ nr_span_event_get_category(evt)); \ break; \ + case NR_SPAN_MESSAGE: \ + tlib_pass_if_str_equal("category", "message", \ + nr_span_event_get_category(evt)); \ + break; \ default: \ tlib_pass_if_true("invalid category", false, "category=%s", \ nr_span_event_get_category(evt)); \ @@ -86,6 +90,20 @@ tlib_pass_if_int_equal("status", expected_status, \ nr_span_event_get_external_status(span_event)); +#define SPAN_EVENT_COMPARE_MESSAGE(span_event, expected_destination_name, \ + expected_messaging_system, \ + expected_server_address) \ + tlib_pass_if_str_equal("messaging.destination.name", \ + expected_destination_name, \ + nr_span_event_get_message( \ + span_event, NR_SPAN_MESSAGE_DESTINATION_NAME)); \ + tlib_pass_if_str_equal("messaging.system", expected_messaging_system, \ + nr_span_event_get_message( \ + span_event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM)); \ + tlib_pass_if_str_equal( \ + "server.address", expected_server_address, \ + nr_span_event_get_message(span_event, NR_SPAN_MESSAGE_SERVER_ADDRESS)); + static void nr_vector_span_event_dtor(void* element, void* userdata NRUNUSED) { nr_span_event_destroy((nr_span_event_t**)&element); } @@ -652,13 +670,15 @@ static void test_json_print_segments_invalid_typed_attributes(void) { nr_span_event_t* evt_root; nr_span_event_t* evt_a; nr_span_event_t* evt_b; + nr_span_event_t* evt_c; nrtxn_t txn = {0}; // clang-format off - nr_segment_t root = {.txn = &txn, .start_time = 0, .stop_time = 9000}; + nr_segment_t root = {.txn = &txn, .start_time = 0, .stop_time = 11000}; nr_segment_t A = {.txn = &txn, .start_time = 1000, .stop_time = 6000}; nr_segment_t B = {.txn = &txn, .start_time = 6000, .stop_time = 8000}; + nr_segment_t C = {.txn = &txn, .start_time = 9000, .stop_time = 10000}; // clang-format on buf = nr_buffer_create(4096, 4096); @@ -668,20 +688,23 @@ static void test_json_print_segments_invalid_typed_attributes(void) { /* Mock up the transaction */ mock_txn(&txn, &root); txn.abs_start_time = 1000; - txn.segment_count = 2; + txn.segment_count = 3; /* Create a collection of mock segments */ nr_segment_children_init(&root.children); nr_segment_add_child(&root, &A); nr_segment_add_child(&root, &B); + nr_segment_add_child(&root, &C); root.name = nr_string_add(txn.trace_strings, "WebTransaction/*"); A.name = nr_string_add(txn.trace_strings, "A"); B.name = nr_string_add(txn.trace_strings, "B"); + C.name = nr_string_add(txn.trace_strings, "C"); A.type = NR_SEGMENT_EXTERNAL; B.type = NR_SEGMENT_DATASTORE; + C.type = NR_SEGMENT_MESSAGE; /* * Test : Normal operation @@ -689,23 +712,27 @@ static void test_json_print_segments_invalid_typed_attributes(void) { rv = nr_segment_traces_json_print_segments(buf, span_events, NULL, NULL, &txn, &root, segment_names); tlib_pass_if_bool_equal("success", true, rv); - test_buffer_contents("datastore params", buf, - "[0,9,\"`0\",{},[[1,6," - "\"`1\",{},[]],[6,8," - "\"`2\",{},[]]]]"); + test_buffer_contents("segment attributes", buf, + "[0,11,\"`0\",{}," + "[[1,6,\"`1\",{},[]]," + "[6,8,\"`2\",{},[]]," + "[9,10,\"`3\",{},[]]]]"); - tlib_pass_if_uint_equal("span event size", nr_vector_size(span_events), 3); + tlib_pass_if_uint_equal("span event size", nr_vector_size(span_events), 4); evt_root = (nr_span_event_t*)nr_vector_get(span_events, 0); evt_a = (nr_span_event_t*)nr_vector_get(span_events, 1); evt_b = (nr_span_event_t*)nr_vector_get(span_events, 2); + evt_c = (nr_span_event_t*)nr_vector_get(span_events, 3); SPAN_EVENT_COMPARE(evt_root, "WebTransaction/*", NR_SPAN_GENERIC, NULL, 1000, - 9000); + 11000); SPAN_EVENT_COMPARE(evt_a, "A", NR_SPAN_HTTP, evt_root, 2000, 5000); SPAN_EVENT_COMPARE_EXTERNAL(evt_a, NULL, NULL, NULL, 0); SPAN_EVENT_COMPARE(evt_b, "B", NR_SPAN_DATASTORE, evt_root, 7000, 2000); SPAN_EVENT_COMPARE_DATASTORE(evt_b, NULL, NULL, NULL, NULL); + SPAN_EVENT_COMPARE(evt_c, "C", NR_SPAN_MESSAGE, evt_root, 10000, 1000); + SPAN_EVENT_COMPARE_MESSAGE(evt_c, NULL, NULL, NULL); /* Clean up */ nr_segment_children_deinit(&root.children); @@ -713,6 +740,7 @@ static void test_json_print_segments_invalid_typed_attributes(void) { nr_segment_destroy_fields(&A); nr_segment_destroy_fields(&B); + nr_segment_destroy_fields(&C); cleanup_mock_txn(&txn); nr_string_pool_destroy(&segment_names); @@ -904,7 +932,88 @@ static void test_json_print_segments_external_async_user_attrs(void) { nr_vector_destroy(&span_events); } -static void test_json_print_segments_datastore_external(void) { +static void test_json_print_segments_message_attributes(void) { + bool rv; + nrbuf_t* buf; + nr_vector_t* span_events; + nrpool_t* segment_names; + + nrtxn_t txn = {0}; + + nr_span_event_t* evt_root; + nr_span_event_t* evt_a; + + // clang-format off + nr_segment_t root = {.txn = &txn, .start_time = 0, .stop_time = 9000}; + nr_segment_t A = {.txn = &txn, .start_time = 1000, .stop_time = 6000}; + // clang-format on + + buf = nr_buffer_create(4096, 4096); + span_events = nr_vector_create(9, nr_vector_span_event_dtor, NULL); + segment_names = nr_string_pool_create(); + + /* Mock up the transaction */ + mock_txn(&txn, &root); + txn.abs_start_time = 1000; + txn.segment_count = 2; + + /* Create a collection of mock segments */ + + /* ------root------- + * ------A------ + */ + + nr_segment_children_init(&root.children); + + nr_segment_add_child(&root, &A); + + root.name = nr_string_add(txn.trace_strings, "WebTransaction/*"); + A.name = nr_string_add(txn.trace_strings, "A"); + + A.type = NR_SEGMENT_MESSAGE; + A.attributes = NULL; + A.typed_attributes = nr_zalloc(sizeof(nr_segment_typed_attributes_t)); + A.typed_attributes->message.destination_name = nr_strdup("queue_name"); + A.typed_attributes->message.messaging_system = nr_strdup("aws_sqs"); + A.typed_attributes->message.server_address = nr_strdup("localhost"); + + /* + * Test : Normal operation + */ + rv = nr_segment_traces_json_print_segments(buf, span_events, NULL, NULL, &txn, + &root, segment_names); + tlib_pass_if_bool_equal("success", true, rv); + test_buffer_contents("message attributes", buf, + "[0,9,\"`0\",{},[[1,6,\"`1\",{" + "\"destination_name\":\"queue_name\"," + "\"messaging_system\":\"aws_sqs\"," + "\"server_address\":\"localhost\"" + "},[]]]]"); + + tlib_pass_if_uint_equal("span event size", nr_vector_size(span_events), 2); + + evt_root = (nr_span_event_t*)nr_vector_get(span_events, 0); + evt_a = (nr_span_event_t*)nr_vector_get(span_events, 1); + + SPAN_EVENT_COMPARE(evt_root, "WebTransaction/*", NR_SPAN_GENERIC, NULL, 1000, + 9000); + SPAN_EVENT_COMPARE(evt_a, "A", NR_SPAN_MESSAGE, evt_root, 2000, 5000); + SPAN_EVENT_COMPARE_MESSAGE(evt_a, "queue_name", "aws_sqs", "localhost"); + + /* Clean up */ + nr_segment_children_deinit(&root.children); + nr_segment_destroy_fields(&root); + + nr_segment_destroy_fields(&A); + + cleanup_mock_txn(&txn); + nr_string_pool_destroy(&segment_names); + + nr_buffer_destroy(&buf); + nr_vector_destroy(&span_events); +} + +static void test_json_print_segments_datastore_external_message(void) { bool rv; nrbuf_t* buf; nr_vector_t* span_events; @@ -972,12 +1081,11 @@ static void test_json_print_segments_datastore_external(void) { C.typed_attributes->external.transaction_guid = nr_strdup("guid"); C.typed_attributes->external.status = 200; - D.type = NR_SEGMENT_DATASTORE; + D.type = NR_SEGMENT_MESSAGE; D.attributes = NULL; D.typed_attributes = nr_zalloc(sizeof(nr_segment_typed_attributes_t)); - D.typed_attributes->datastore.sql = nr_strdup("SELECT pass"); - D.typed_attributes->datastore.instance.host = nr_strdup("localhost"); - D.typed_attributes->datastore.instance.database_name = nr_strdup("db"); + D.typed_attributes->message.destination_name = nr_strdup("queue_name"); + D.typed_attributes->message.messaging_system = nr_strdup("aws_sqs"); /* * Test : Normal operation @@ -999,9 +1107,8 @@ static void test_json_print_segments_datastore_external(void) { "\"transaction_guid\":\"guid\"," "\"status\":200},[]]," "[5,6,\"`4\"," - "{\"host\":\"localhost\"," - "\"database_name\":\"db\"," - "\"sql\":\"SELECT pass\"},[]]]]]]"); + "{\"destination_name\":\"queue_name\"," + "\"messaging_system\":\"aws_sqs\"},[]]]]]]"); tlib_pass_if_uint_equal("span event size", nr_vector_size(span_events), 5); @@ -1019,9 +1126,8 @@ static void test_json_print_segments_datastore_external(void) { "localhost:3308"); SPAN_EVENT_COMPARE(evt_c, "C", NR_SPAN_HTTP, evt_a, 5000, 1000); SPAN_EVENT_COMPARE_EXTERNAL(evt_c, "example.com", "GET", "curl", 200); - SPAN_EVENT_COMPARE(evt_d, "D", NR_SPAN_DATASTORE, evt_a, 6000, 1000); - SPAN_EVENT_COMPARE_DATASTORE(evt_d, "localhost", "db", "SELECT pass", - "localhost:unknown"); + SPAN_EVENT_COMPARE(evt_d, "D", NR_SPAN_MESSAGE, evt_a, 6000, 1000); + SPAN_EVENT_COMPARE_MESSAGE(evt_d, "queue_name", "aws_sqs", NULL); /* Clean up */ nr_segment_children_deinit(&root.children); @@ -1146,8 +1252,8 @@ static void test_json_print_segments_async_basic(void) { * * These diagrams all follow the same pattern: time is shown in seconds on * the first row, followed by the ROOT node, and then individual contexts - * with their nodes. The "main" context indicates that no async_context will - * be attached to nodes in that context. + * with their nodes. The "main" context indicates that no async_context + * will be attached to nodes in that context. * * time (s) 0 1 2 3 4 5 6 7 8 9 10 * |------------------- ROOT -------------------| @@ -1245,8 +1351,8 @@ static void test_json_print_segments_async_multi_child(void) { /* * Multiple children test: main context lasts the same timespan as ROOT, and - * spawns one child context with three nodes for part of its run time, one of - * which has a duplicated name. + * spawns one child context with three nodes for part of its run time, one + * of which has a duplicated name. * * time (s) 0 1 2 3 4 5 6 7 8 9 10 * |------------------- ROOT -------------------| @@ -1955,7 +2061,8 @@ static void test_json_print_segments_with_sampling_cousin_parent(void) { rv = nr_segment_traces_json_print_segments(buf, span_events, set, set, &txn, &root, segment_names); tlib_pass_if_bool_equal( - "Printing JSON for a sampled cousin parent tree of segments must succeed", + "Printing JSON for a sampled cousin parent tree of segments must " + "succeed", true, rv); test_buffer_contents("Cousin Parent", buf, "[0,14,\"`0\",{},[[1,5,\"`1\",{},[[1,3,\"`2\",{},[]]]],[" @@ -2269,7 +2376,8 @@ static void test_json_print_segments_with_sampling_genghis_khan(void) { rv = nr_segment_traces_json_print_segments(buf, span_events, set, set, &txn, &root, segment_names); tlib_pass_if_bool_equal( - "Printing JSON for a genghis khan sampled tree of segments must succeed", + "Printing JSON for a genghis khan sampled tree of segments must " + "succeed", true, rv); test_buffer_contents("genghis khan", buf, "[0,9,\"`0\",{},[[1,6,\"`1\",{},[]],[3,4,\"`2\",{},[]],[" @@ -2470,7 +2578,8 @@ static void test_trace_create_data_bad_parameters(void) { agent_attributes, user_attributes, intrinsics, true, false); tlib_pass_if_null( - "A transaction with more than NR_MAX_SEGMENTS segments must not succeed " + "A transaction with more than NR_MAX_SEGMENTS segments must not " + "succeed " "in creating " "a trace", metadata.out->trace_json); @@ -2786,9 +2895,10 @@ void test_main(void* p NRUNUSED) { test_json_print_segments_hanoi(); test_json_print_segments_three_siblings(); test_json_print_segments_two_generations(); - test_json_print_segments_datastore_external(); + test_json_print_segments_datastore_external_message(); test_json_print_segments_datastore_params(); test_json_print_segments_external_async_user_attrs(); + test_json_print_segments_message_attributes(); test_json_print_segments_async_basic(); test_json_print_segments_async_multi_child(); diff --git a/axiom/tests/test_span_event.c b/axiom/tests/test_span_event.c index 85ca788b9..ff44ab1cd 100644 --- a/axiom/tests/test_span_event.c +++ b/axiom/tests/test_span_event.c @@ -256,6 +256,55 @@ static void test_span_event_category(void) { tlib_pass_if_str_equal("Category should be the one we set - http", "http", nr_span_event_get_category(event)); + nr_span_event_set_category(event, NR_SPAN_MESSAGE); + tlib_pass_if_str_equal("Category should be the one we set - message", + "message", nr_span_event_get_category(event)); + + nr_span_event_destroy(&event); +} + +static void test_span_event_spankind(void) { + nr_span_event_t* event = nr_span_event_create(); + + // Test : the default is NULL (spankind must be explicitly set) + tlib_pass_if_str_equal( + "When not explicitly set, The default spankind is NULL", NULL, + nr_span_event_get_spankind(event)); + + // Test : A null event returns NULL + tlib_pass_if_null("nr_span_event_get_spankind(NULL) returns NULL", + nr_span_event_get_spankind(NULL)); + + // Test : passing a NULL event should not crash + nr_span_event_set_spankind(NULL, NR_SPANKIND_PRODUCER); + + // Test : invalid spankind + nr_span_event_set_spankind(event, 255); + tlib_pass_if_str_equal( + "Invalid spankind value doesn't crash and sets spankind to none (NULL)", + NULL, nr_span_event_get_spankind(event)); + + // Test : setting the spankind back and forth + nr_span_event_set_spankind(event, NR_SPANKIND_NO_SPANKIND); + tlib_pass_if_str_equal( + "Spankind should be the one we set - no spankind (NULL)", NULL, + nr_span_event_get_spankind(event)); + + // Test : setting the spankind back and forth + nr_span_event_set_spankind(event, NR_SPANKIND_PRODUCER); + tlib_pass_if_str_equal("Spankind should be the one we set - producer", + "producer", nr_span_event_get_spankind(event)); + + // Test : setting the spankind back and forth + nr_span_event_set_spankind(event, NR_SPANKIND_CLIENT); + tlib_pass_if_str_equal("Spankind should be the one we set - client", "client", + nr_span_event_get_spankind(event)); + + // Test : setting the spankind back and forth + nr_span_event_set_spankind(event, NR_SPANKIND_CONSUMER); + tlib_pass_if_str_equal("Spankind should be the one we set - consumer", + "consumer", nr_span_event_get_spankind(event)); + nr_span_event_destroy(&event); } @@ -434,6 +483,62 @@ static void test_span_events_extern_get_and_set(void) { nr_span_event_destroy(&span); } +static void test_span_event_message_string_get_and_set(void) { + nr_span_event_t* event = nr_span_event_create(); + + // Test : that is does not crash when we give the setter a NULL pointer + nr_span_event_set_message(NULL, NR_SPAN_MESSAGE_DESTINATION_NAME, "wallaby"); + tlib_pass_if_null( + "the destination name should still be NULL", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME)); + nr_span_event_set_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME, NULL); + tlib_pass_if_null( + "given a NULL value we should get a NULL", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME)); + + // Test : the getter should not crash when we send it an event with a NULL + // component + tlib_pass_if_null( + "NULL event -> NULL component", + nr_span_event_get_message(NULL, NR_SPAN_MESSAGE_DESTINATION_NAME)); + + // Test : send getter invalid range + tlib_pass_if_null("invalid range sent to nr_span_event_get_message", + nr_span_event_get_message(event, 54321)); + + // Test : setting the destination name back and forth behaves as expected + nr_span_event_set_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME, "chicken"); + tlib_pass_if_str_equal( + "should be the component we set 1", "chicken", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME)); + nr_span_event_set_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME, "oracle"); + tlib_pass_if_str_equal( + "should be the component we set 2", "oracle", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME)); + + // Test : setting the messaging system back and forth behaves as expected + nr_span_event_set_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM, "chicken"); + tlib_pass_if_str_equal( + "should be the component we set 1", "chicken", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM)); + nr_span_event_set_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM, "oracle"); + tlib_pass_if_str_equal( + "should be the component we set 2", "oracle", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM)); + + // Test : setting the server address back and forth behaves as expected + nr_span_event_set_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS, "chicken"); + tlib_pass_if_str_equal( + "should be the component we set 1", "chicken", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS)); + nr_span_event_set_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS, "oracle"); + tlib_pass_if_str_equal( + "should be the component we set 2", "oracle", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS)); + + nr_span_event_destroy(&event); +} + static void test_span_event_error(void) { nr_span_event_t* event = nr_span_event_create(); @@ -614,10 +719,12 @@ void test_main(void* p NRUNUSED) { test_span_event_name(); test_span_event_transaction_name(); test_span_event_category(); + test_span_event_spankind(); test_span_event_timestamp(); test_span_event_duration(); test_span_event_datastore_string_get_and_set(); test_span_events_extern_get_and_set(); + test_span_event_message_string_get_and_set(); test_span_event_error(); test_span_event_set_attribute_user(); test_span_event_txn_parent_attributes(); diff --git a/axiom/tests/test_txn.c b/axiom/tests/test_txn.c index 279bbbbee..5dc68deae 100644 --- a/axiom/tests/test_txn.c +++ b/axiom/tests/test_txn.c @@ -2006,7 +2006,7 @@ static nrtxn_t* create_full_txn_and_reset(nrapp_t* app) { nr_segment_t* seg = nr_segment_start(txn, NULL, NULL); seg->start_time = 5 * NR_TIME_DIVISOR; seg->stop_time = 6 * NR_TIME_DIVISOR; - seg->type = NR_SEGMENT_DATASTORE; + seg->type = NR_SEGMENT_MESSAGE; seg->typed_attributes = nr_zalloc(sizeof(nr_segment_typed_attributes_t)); nr_segment_end(&seg); } @@ -2962,6 +2962,7 @@ static void test_create_rollup_metrics(void) { txn.datastore_products = nr_string_pool_create(); nrm_force_add(txn.unscoped_metrics, "Datastore/all", 4 * NR_TIME_DIVISOR); nrm_force_add(txn.unscoped_metrics, "External/all", 1 * NR_TIME_DIVISOR); + nrm_force_add(txn.unscoped_metrics, "MessageBroker/all", 1 * NR_TIME_DIVISOR); nrm_force_add(txn.unscoped_metrics, "Datastore/MongoDB/all", 2 * NR_TIME_DIVISOR); nrm_force_add(txn.unscoped_metrics, "Datastore/SQLite/all", @@ -2977,6 +2978,9 @@ static void test_create_rollup_metrics(void) { "{\"name\":\"External\\/" "all\",\"data\":[1,1.00000,1.00000,1.00000,1.00000,1." "00000],\"forced\":true}," + "{\"name\":\"MessageBroker\\/" + "all\",\"data\":[1,1.00000,1.00000,1.00000,1.00000,1." + "00000],\"forced\":true}," "{\"name\":\"Datastore\\/MongoDB\\/" "all\",\"data\":[1,2.00000,2.00000,2.00000,2.00000,4." "00000],\"forced\":true}," @@ -2989,6 +2993,9 @@ static void test_create_rollup_metrics(void) { "{\"name\":\"External\\/" "allOther\",\"data\":[1,1.00000,1.00000,1.00000,1." "00000,1.00000],\"forced\":true}," + "{\"name\":\"MessageBroker\\/" + "allOther\",\"data\":[1,1.00000,1.00000,1.00000,1." + "00000,1.00000],\"forced\":true}," "{\"name\":\"Datastore\\/MongoDB\\/" "allOther\",\"data\":[1,2.00000,2.00000,2.00000,2." "00000,4.00000],\"forced\":true}," @@ -3910,6 +3917,7 @@ static void test_error_to_event(void) { nrm_add(txn.unscoped_metrics, "Datastore/all", 1 * NR_TIME_DIVISOR); nrm_add(txn.unscoped_metrics, "External/all", 2 * NR_TIME_DIVISOR); + nrm_add(txn.unscoped_metrics, "MessageBroker/all", 1 * NR_TIME_DIVISOR); nrm_add(txn.unscoped_metrics, "WebFrontend/QueueTime", 3 * NR_TIME_DIVISOR); event = nr_error_to_event(&txn); @@ -3926,8 +3934,10 @@ static void test_error_to_event(void) { "\"queueDuration\":3.00000," "\"externalDuration\":2.00000," "\"databaseDuration\":1.00000," + "\"messageDuration\":1.00000," "\"databaseCallCount\":1," "\"externalCallCount\":1," + "\"messageCallCount\":1," "\"nr.transactionGuid\":\"abcd\"," "\"guid\":\"abcd\"" "}," @@ -3951,8 +3961,10 @@ static void test_error_to_event(void) { "\"queueDuration\":3.00000," "\"externalDuration\":2.00000," "\"databaseDuration\":1.00000," + "\"messageDuration\":1.00000," "\"databaseCallCount\":1," "\"externalCallCount\":1," + "\"messageCallCount\":1," "\"nr.transactionGuid\":\"abcd\"," "\"guid\":\"abcd\"," "\"nr.referringTransactionGuid\":\"foo_guid\"," @@ -4041,6 +4053,7 @@ static void test_create_event(void) { nrm_add(txn.unscoped_metrics, "Datastore/all", 1 * NR_TIME_DIVISOR); nrm_add(txn.unscoped_metrics, "External/all", 2 * NR_TIME_DIVISOR); + nrm_add(txn.unscoped_metrics, "MessageBroker/all", 2 * NR_TIME_DIVISOR); nrm_add(txn.unscoped_metrics, "WebFrontend/QueueTime", 3 * NR_TIME_DIVISOR); event = nr_txn_to_event(&txn); @@ -4059,6 +4072,8 @@ static void test_create_event(void) { "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," + "\"messageDuration\":2.00000," + "\"messageCallCount\":1," "\"error\":false" "}," "{\"user_long\":1}," @@ -4082,6 +4097,8 @@ static void test_create_event(void) { "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," + "\"messageDuration\":2.00000," + "\"messageCallCount\":1," "\"error\":false" "}," "{\"user_long\":1}," @@ -4108,6 +4125,8 @@ static void test_create_event(void) { "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," + "\"messageDuration\":2.00000," + "\"messageCallCount\":1," "\"error\":false" "}," "{\"user_long\":1}," @@ -4132,6 +4151,8 @@ static void test_create_event(void) { "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," + "\"messageDuration\":2.00000," + "\"messageCallCount\":1," "\"error\":false" "}," "{\"user_long\":1}," @@ -4155,6 +4176,8 @@ static void test_create_event(void) { "\"externalCallCount\":1," "\"databaseDuration\":1.00000," "\"databaseCallCount\":1," + "\"messageDuration\":2.00000," + "\"messageCallCount\":1," "\"error\":false" "}," "{\"user_long\":1}," @@ -8059,7 +8082,8 @@ static void test_segment_record_error(void) { /* Do not add to current segment */ nr_txn_record_error(txn, 0.5, false /* do not add to current segment*/, - "low priority message", "low priority class", "[\"A\",\"B\"]"); + "low priority message", "low priority class", + "[\"A\",\"B\"]"); tlib_pass_if_not_null("Txn error event created", txn->error); tlib_pass_if_null("Segment error NOT created", segment->error); tlib_pass_if_str_equal("Correct txn error.message", "low priority message", @@ -8068,7 +8092,8 @@ static void test_segment_record_error(void) { nr_error_get_klass(txn->error)); /* Normal operation: txn error prioritized over previous */ - nr_txn_record_error(txn, 1, true, "error message", "error class", "[\"A\",\"B\"]"); + nr_txn_record_error(txn, 1, true, "error message", "error class", + "[\"A\",\"B\"]"); tlib_pass_if_not_null("Txn error event created", txn->error); tlib_pass_if_not_null("Segment error created", segment->error); diff --git a/tests/integration/synthetics/test_happy_path_with_dt.php b/tests/integration/synthetics/test_happy_path_with_dt.php index bd415e684..14c3b3b88 100644 --- a/tests/integration/synthetics/test_happy_path_with_dt.php +++ b/tests/integration/synthetics/test_happy_path_with_dt.php @@ -62,7 +62,7 @@ "nr.syntheticsJobId": "jjjjjjj-jjjj-1234-jjjj-jjjjjjjjjjjj", "nr.syntheticsMonitorId": "mmmmmmm-mmmm-1234-mmmm-mmmmmmmmmmmm", "externalDuration": "??", - "externalCallCount": 1, + "externalCallCount": 1, "guid": "??", "sampled": true, "priority": "??", From 3d71d47015eb27a00b9be955e5793b889a93179f Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Wed, 22 Jan 2025 15:18:39 -0700 Subject: [PATCH 57/62] feat(agent): Add aws-sdk-php SQS instrumentation (#1003) Uses message segments to create SQS instrumentation. Added unit tests and multiverse tests. --------- Co-authored-by: ZNeumann Co-authored-by: Michael Fulbright <89205663+mfulb@users.noreply.github.com> Co-authored-by: Michal Nowacki --- agent/lib_aws_sdk_php.c | 411 +++++++++++++++++++++++++++++ agent/lib_aws_sdk_php.h | 73 +++++ agent/php_execute.c | 23 +- agent/tests/test_lib_aws_sdk_php.c | 318 +++++++++++++++++++++- axiom/nr_segment_message.c | 8 +- 5 files changed, 826 insertions(+), 7 deletions(-) diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c index 51ef17fda..b706df518 100644 --- a/agent/lib_aws_sdk_php.c +++ b/agent/lib_aws_sdk_php.c @@ -14,10 +14,413 @@ #include "fw_hooks.h" #include "fw_support.h" #include "util_logging.h" +#include "nr_segment_message.h" #include "lib_aws_sdk_php.h" #define PHP_PACKAGE_NAME "aws/aws-sdk-php" +#if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO /* PHP8.1+ */ +/* Service instrumentation only supported above PHP 8.1+*/ + +/* +* Note: For SQS, the command_arg_array will contain the following arrays seen +below: +//clang-format off +$result = $client->receiveMessage(array( + // QueueUrl is required + 'QueueUrl' => 'string', + 'AttributeNames' => array('string', ... ), + 'MessageAttributeNames' => array('string', ... ), + 'MaxNumberOfMessages' => integer, + 'VisibilityTimeout' => integer, + 'WaitTimeSeconds' => integer, +)); + +$result = $client->sendMessage(array( + // QueueUrl is required + 'QueueUrl' => 'string', + // MessageBody is required + 'MessageBody' => 'string', + 'DelaySeconds' => integer, + 'MessageAttributes' => array( + // Associative array of custom 'String' key names + 'String' => array( + 'StringValue' => 'string', + 'BinaryValue' => 'string', + 'StringListValues' => array('string', ... ), + 'BinaryListValues' => array('string', ... ), + // DataType is required + 'DataType' => 'string', + ), + // ... repeated + ), +)); + +$result = $client->sendMessageBatch(array( + // QueueUrl is required + 'QueueUrl' => 'string', + // Entries is required + 'Entries' => array( + array( + // Id is required + 'Id' => 'string', + // MessageBody is required + 'MessageBody' => 'string', + 'DelaySeconds' => integer, + 'MessageAttributes' => array( + // Associative array of custom 'String' key names + 'String' => array( + 'StringValue' => 'string', + 'BinaryValue' => 'string', + 'StringListValues' => array('string', ... ), + 'BinaryListValues' => array('string', ... ), + // DataType is required + 'DataType' => 'string', + ), + // ... repeated + ), + ), + // ... repeated + ), +)); + +//clang-format on +*/ +void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* segment, + char* command_name_string, + size_t command_name_len, + NR_EXECUTE_PROTO) { + char* command_arg_value = NULL; + nr_segment_message_params_t message_params = { + .library = SQS_LIBRARY_NAME, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_QUEUE, + .messaging_system = AWS_SQS_MESSAGING_SERVICE, + }; + nr_segment_cloud_attrs_t cloud_attrs = {0}; + + if (NULL == segment) { + return; + } + + if (NULL == command_name_string || 0 == command_name_len) { + return; + } + +#define AWS_COMMAND_IS(CMD) \ + (command_name_len == (sizeof(CMD) - 1) && nr_streq(CMD, command_name_string)) + + /* Determine if we instrument this command. */ + if (AWS_COMMAND_IS("sendMessageBatch")) { + message_params.message_action = NR_SPANKIND_PRODUCER; + } else if (AWS_COMMAND_IS("sendMessage")) { + message_params.message_action = NR_SPANKIND_PRODUCER; + } else if (AWS_COMMAND_IS("receiveMessage")) { + message_params.message_action = NR_SPANKIND_CONSUMER; + } else { + /* Nothing to do here so exit. */ + return; + } +#undef AWS_COMMAND_IS + + cloud_attrs.aws_operation = command_name_string; + + command_arg_value = nr_lib_aws_sdk_php_get_command_arg_value( + AWS_SDK_PHP_SQSCLIENT_QUEUEURL_ARG, NR_EXECUTE_ORIG_ARGS); + + /* + * nr_lib_aws_sdk_php_sqs_parse_queueurl requires a modifiable string to + * populate message_params and cloud_attrs. + */ + nr_lib_aws_sdk_php_sqs_parse_queueurl(command_arg_value, &message_params, + &cloud_attrs); + + /* Add cloud attributes, if available. */ + + nr_segment_traces_add_cloud_attributes(segment, &cloud_attrs); + + /* Now end the instrumented segment as a message segment. */ + nr_segment_message_end(&segment, &message_params); + + nr_free(command_arg_value); +} + +void nr_lib_aws_sdk_php_sqs_parse_queueurl( + char* sqs_queueurl, + nr_segment_message_params_t* message_params, + nr_segment_cloud_attrs_t* cloud_attrs) { + char* region = NULL; + char* queue_name = NULL; + char* account_id = NULL; + char* queueurl_pointer = NULL; + + if (NULL == sqs_queueurl || NULL == message_params || NULL == cloud_attrs) { + return; + } + + /* + * AWS QueueUrl has a very specific format. + * The QueueUrl we are looking for will be of the following format: + * queueUrl = + * 'https://sqs.REGION_NAME.amazonaws.com/ACCOUNT_ID_NAME/SQS_QUEUE_NAME' + * where REGION_NAME, ACCOUNT_ID_NAME, and SQS_QUEUE_NAME are the acutal + * values such as: queueUrl = + * 'https://sqs.us-east-2.amazonaws.com/123456789012/my_amazing_queue' + * If we are unable to match any part of this, the whole decode is suspect and + * all values are discarded. + * + * Due to the overhead involved in escaping the original buffer, creating a + * regex, matching a regex, destroying a regex, this method was chosen as a + * more performant option because it's a very limited pattern. + */ + queueurl_pointer = sqs_queueurl; + + /* + * Find the pattern of the AWS queueurl that should immediately precede the + * region. + */ + if (0 + != strncmp(queueurl_pointer, AWS_QUEUEURL_PREFIX, + AWS_QUEUEURL_PREFIX_LEN)) { + /* Malformed queueurl, we can't decode this. */ + return; + } + + /* + * Find the start of the region. It follows the 12 chars of 'https://sqs.' + * and continues until the next '.' It is safe to move the pointer along at + * this point since we just verified the prefix exists. + */ + queueurl_pointer += AWS_QUEUEURL_PREFIX_LEN; + if (nr_strempty(queueurl_pointer)) { + /* Malformed queueurl, we can't decode this. */ + return; + } + + region = queueurl_pointer; + + /* Find the end of the region. */ + queueurl_pointer = nr_strchr(queueurl_pointer, '.'); + if (NULL == queueurl_pointer) { + /* Malformed queueurl, we can't decode this. */ + return; + } + *queueurl_pointer = '\0'; + + /* + * Move the pointer along. Again, we found a valid '.' so moving the pointer + * beyond that point should be safe and give us either more string or the end + * of the string. + */ + queueurl_pointer += 1; + if (nr_strempty(queueurl_pointer)) { + /* Malformed queueurl, we can't decode this. */ + return; + } + + /* Move past the next pattern to find the start of the account id. */ + if (0 + != strncmp(queueurl_pointer, AWS_QUEUEURL_AWS_POSTFIX, + AWS_QUEUEURL_AWS_POSTFIX_LEN)) { + /* Malformed queueurl, we can't decode this. */ + return; + } + + /* + * Move the pointer along. Since we found a valid pattern match moving the + * pointer beyond that point should be safe and give us either more string or + * the end of the string. + */ + queueurl_pointer += AWS_QUEUEURL_AWS_POSTFIX_LEN; + if (nr_strempty(queueurl_pointer)) { + /* Malformed queueurl, we can't decode this. */ + return; + } + + /* If it's not an empty string, we've found the start of the account_id*/ + account_id = queueurl_pointer; + + /* Find the end of account id which goes until the next forward slash. */ + queueurl_pointer = nr_strchr(queueurl_pointer, '/'); + if (NULL == queueurl_pointer) { + /* Malformed queueurl, we can't decode this. */ + return; + } + *queueurl_pointer = '\0'; + + /* Move the pointer along. */ + queueurl_pointer += 1; + if (nr_strempty(queueurl_pointer)) { + /* Malformed queueurl, we can't decode this. */ + return; + } + + /* This should be the start of the start of the queuename.*/ + queue_name = queueurl_pointer; + + /* + * Almost done. At this point, the string should only have queue name left. + * Let's check if there's another slash, if it isn't followed by empty string, + * the queueurl is malformed. + */ + queueurl_pointer = nr_strchr(queueurl_pointer, '/'); + if (NULL != queueurl_pointer) { + *queueurl_pointer = '\0'; + /* Let's check if it's followed by empty string */ + *queueurl_pointer += 1; + if (!nr_strempty(queueurl_pointer)) { + /* Malformed queueurl, we can't decode this. */ + return; + } + } + + /* + * SQS entity relationship requires: messaging.system, cloud.region, + * cloud.account.id, messaging.destination.name + */ + message_params->destination_name = queue_name; + cloud_attrs->cloud_account_id = account_id; + cloud_attrs->cloud_region = region; +} + +char* nr_lib_aws_sdk_php_get_command_arg_value(char* command_arg_name, + NR_EXECUTE_PROTO) { + zval* param_array = NULL; + zval* command_arg_array = NULL; + char* command_arg_value = NULL; + + if (NULL == command_arg_name) { + return NULL; + } + /* To extract the Aws/AwsClient::__call $argument, we get the second arg. */ + param_array = nr_php_arg_get(2, NR_EXECUTE_ORIG_ARGS); + + if (nr_php_is_zval_valid_array(param_array)) { + /* The first element in param_array is an array of parameters. */ + command_arg_array = nr_php_zend_hash_index_find(Z_ARRVAL_P(param_array), 0); + if (nr_php_is_zval_valid_array(command_arg_array)) { + zval* queueurl_arg = nr_php_zend_hash_find(Z_ARRVAL_P(command_arg_array), + command_arg_name); + + if (nr_php_is_zval_non_empty_string(queueurl_arg)) { + command_arg_value = nr_strdup(Z_STRVAL_P(queueurl_arg)); + } + } + } + + nr_php_arg_release(¶m_array); + return command_arg_value; +} + +/* + * For Aws/AwsClient::__call see + * https://github.com/aws/aws-sdk-php/blob/master/src/AwsClientInterface.php + * ALL + * client commands are handled by this function, so it is the start and end of + * any command. Creates and executes a command for an operation by name. + * When a class command isn't explicitly created as a function, the __call class + * handles the invocation. This means all AWS Client Service commands are + * handled by this call. Any invocation starts when this function starts, and + * ends when it ends. This function decodes the command name, determines the + * appropriate args, decodes the args, generates a guzzle request to send to the + * AWS Service, gets the guzzle response from the AWS Service, and bundles that + * response into an AswResult to return. + * + * @param string $name Name of the command to execute. + * @param array $arguments Arguments to pass to the getCommand method. + * + * @return ResultInterface + * @throws \Exception + */ + +NR_PHP_WRAPPER(nr_aws_client_call_before) { + (void)wraprec; + nr_segment_t* segment = NULL; + /* + * Start a segment in case it needs to become an external, message, or + * datastore segment. + */ + segment = nr_segment_start(NRPRG(txn), NULL, NULL); + if (NULL != segment) { + segment->wraprec = auto_segment->wraprec; + } +} +NR_PHP_WRAPPER_END + +NR_PHP_WRAPPER(nr_aws_client_call) { + (void)wraprec; + + zval* command_name = NULL; + const char* klass = NULL; + char* command_name_string = NULL; + char* real_class_and_command = NULL; + nr_segment_t* segment = NULL; + zend_class_entry* class_entry = NULL; + int klass_len = 0; + + class_entry = Z_OBJCE_P(nr_php_execute_scope(execute_data)); + if (NULL == class_entry) { + goto end; + } + + klass = nr_php_class_entry_name(class_entry); + + if (NULL == klass) { + goto end; + } + /* Get the arg command_name. */ + command_name = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS); + + if (!nr_php_is_zval_non_empty_string(command_name)) { + goto end; + } + command_name_string = Z_STRVAL_P(command_name); + klass_len = nr_php_class_entry_name_length(class_entry); + +#define AWS_CLASS_IS(KLASS, SHORT_KLASS) \ + (klass_len == (sizeof(KLASS) - 1) \ + && nr_striendswith(klass, klass_len, SHORT_KLASS, sizeof(SHORT_KLASS) - 1)) + + if (AWS_CLASS_IS("Aws\\Sqs\\SqsClient", "SqsClient")) { + nr_lib_aws_sdk_php_sqs_handle(auto_segment, command_name_string, + Z_STRLEN_P(command_name), + NR_EXECUTE_ORIG_ARGS); + } + +#undef AWS_CLASS_IS + + if (NR_SEGMENT_CUSTOM == auto_segment->type) { + /* + * We need to end the segment that we started in the 'before' wrapper if + * it wasn't handled and ended by the handling function. Handling + * function would have changed the segment type from from default + * (`NR_SEGMENT_CUSTOM`) if it ended it. + */ + nr_segment_discard(&auto_segment); + } + + /* + * Since we have klass and command_name, we can give the calling segment + * a more meaningful name than Aws/AwsClient::__call We can decode it to + * Aws/CALLING_CLASS_NAME/CALLING_CLASS_CLIENT::CALLING_CLASS_COMMAND + * + * EX: Aws\\Sqs\\SqsClient::sendMessage + */ + + segment = nr_txn_get_current_segment(NRPRG(txn), NULL); + if (NULL != segment) { + real_class_and_command + = nr_formatf("Custom/%s::%s", klass, command_name_string); + nr_segment_set_name(segment, real_class_and_command); + nr_free(real_class_and_command); + } + +end: + /* Release the command_name. */ + nr_php_arg_release(&command_name); +} +NR_PHP_WRAPPER_END + +#endif /* PHP >= 8.1*/ /* * In a normal course of events, the following line will always work * zend_eval_string("Aws\\Sdk::VERSION;", &retval, "Get AWS Version") @@ -162,4 +565,12 @@ void nr_aws_sdk_php_enable() { /* Called when initializing all Clients */ nr_php_wrap_user_function(NR_PSTR("Aws\\AwsClient::parseClass"), nr_create_aws_service_metric); + +#if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO /* PHP8.1+ */ + /* We only support instrumentation above PHP 8.1 */ + /* Called when a service command is issued from a Client */ + nr_php_wrap_user_function_before_after_clean( + NR_PSTR("Aws\\AwsClient::__call"), nr_aws_client_call_before, + nr_aws_client_call, nr_aws_client_call); +#endif } diff --git a/agent/lib_aws_sdk_php.h b/agent/lib_aws_sdk_php.h index 11ffcd7aa..6eb0c1e54 100644 --- a/agent/lib_aws_sdk_php.h +++ b/agent/lib_aws_sdk_php.h @@ -7,6 +7,20 @@ #ifndef LIB_AWS_SDK_PHP_HDR #define LIB_AWS_SDK_PHP_HDR +#if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO /* PHP8.1+ */ +/* Service instrumentation only supported above PHP 8.1+*/ + +/* SQS */ +#define SQS_LIBRARY_NAME "SQS" +#define AWS_SQS_MESSAGING_SERVICE "aws_sqs" +#define AWS_SDK_PHP_SQSCLIENT_QUEUEURL_ARG "QueueUrl" +#define AWS_QUEUEURL_PREFIX "https://sqs." +#define AWS_QUEUEURL_PREFIX_LEN sizeof(AWS_QUEUEURL_PREFIX) - 1 +#define AWS_QUEUEURL_AWS_POSTFIX "amazonaws.com/" +#define AWS_QUEUEURL_AWS_POSTFIX_LEN sizeof(AWS_QUEUEURL_AWS_POSTFIX) - 1 + +#endif /* PHP 8.1+ */ + #define PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX \ "Supportability/PHP/AWS/Services/" #define MAX_METRIC_NAME_LEN 256 @@ -20,4 +34,63 @@ extern void nr_lib_aws_sdk_php_handle_version(); extern void nr_lib_aws_sdk_php_add_supportability_service_metric( const char* service_name); +#if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO /* PHP8.1+ */ +/* Aside from service class and version detection, instrumentation is only + * supported with PHP 8.1+ */ + +/* + * Purpose : Parses the QueueUrl to extract cloud_region, cloud_account_id, and + * destination_name. The extraction sets all or none since the values are from + * the same string and if it is malformed, it cannot be used. + * + * Params : 1. The QueueUrl, MUST be a modifiable string + * 2. message_params to set message_params.destination_name + * 3. cloud_attrs to set message_params.cloud_region, + * message_params.cloud_account_id + * + * Returns : applicable cloud_attrs and message params fields will point to null + * terminated strings within the original string. + * + */ +extern void nr_lib_aws_sdk_php_sqs_parse_queueurl( + char* sqs_queueurl, + nr_segment_message_params_t* message_params, + nr_segment_cloud_attrs_t* cloud_attrs); + +/* + * Purpose : Handle when an SqsClient initiates a command + * + * Params : 1. segment : if we instrument the commandName, we'll need to end + * the segment as a message segment + * 2. command_name_string : the string of the command being called + * 3. command_name_len : the length of the command being called + * 4. NR_EXECUTE_ORIG_ARGS (execute_data, func_return_value) + * + * Returns : + * + */ +extern void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* segment, + char* command_name_string, + size_t command_name_len, + NR_EXECUTE_PROTO); + +/* + * Purpose : The second argument to the Aws/AwsClient::__call function should be + * an array, the first element of which is itself an array of arguments that + * were passed to the called function and are in name:value pairs. Given an + * argument name, this will return the value of the argument. + * + * Params : 1. arg_name: name of argument to extract from command arg array + * 2. NR_EXECUTE_PROTO (execute_data, func_return_value) + * + * Returns : the strduped value of the arg_name; NULL if does not exist + * + * Note: The caller is responsible for freeing the returned string value + * + */ +extern char* nr_lib_aws_sdk_php_get_command_arg_value(char* command_arg_name, + NR_EXECUTE_PROTO); + +#endif /* PHP8.1+ */ + #endif /* LIB_AWS_SDK_PHP_HDR */ diff --git a/agent/php_execute.c b/agent/php_execute.c index 058fea30c..4a8765f41 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -1255,12 +1255,27 @@ static inline void nr_php_execute_segment_add_metric( bool create_metric) { char buf[METRIC_NAME_MAX_LEN]; - nr_php_execute_metadata_metric(metadata, buf, sizeof(buf)); +/* + * If the name is not already set, use the metadata to get the class and + * function name to name the metric and the segment. + * + * If the segment name is already set, use that to name the metric. + */ + if (!segment->name) { + nr_php_execute_metadata_metric(metadata, buf, sizeof(buf)); - if (create_metric) { - nr_segment_add_metric(segment, buf, true); + if (create_metric) { + nr_segment_add_metric(segment, buf, true); + } + nr_segment_set_name(segment, buf); + } else { + /* Segment already named, so only create the metric with the name. */ + if (create_metric) { + nr_segment_add_metric( + segment, nr_string_get(segment->txn->trace_strings, segment->name), + true); + } } - nr_segment_set_name(segment, buf); } /* diff --git a/agent/tests/test_lib_aws_sdk_php.c b/agent/tests/test_lib_aws_sdk_php.c index 91fa88b26..0ac040424 100644 --- a/agent/tests/test_lib_aws_sdk_php.c +++ b/agent/tests/test_lib_aws_sdk_php.c @@ -6,12 +6,324 @@ #include "tlib_php.h" #include "php_agent.h" -#include "lib_aws_sdk_php.h" +#include "php_call.h" +#include "php_wrapper.h" #include "fw_support.h" +#include "nr_segment_message.h" +#include "lib_aws_sdk_php.h" tlib_parallel_info_t parallel_info = {.suggested_nthreads = -1, .state_size = 0}; +#if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO +/* + * Aside from service class and version detection, instrumentation is only + * supported with PHP 8.1+ + */ + +#define ARG_VALUE_FOR_TEST "curly_q" +#define COMMAND_NAME_FOR_TEST "uniquelyAwesome" +#define COMMAND_NAME_LEN_FOR_TEST sizeof(COMMAND_NAME_FOR_TEST) - 1 +#define ARG_TO_FIND_FOR_TEST AWS_SDK_PHP_SQSCLIENT_QUEUEURL_ARG +#define AWS_QUEUEURL_LEN_MAX 512 + +/* These wrappers are used so we don't have to mock up zend_execute_data. */ + +NR_PHP_WRAPPER(expect_arg_value_not_null) { + char* command_arg_value = NULL; + + (void)wraprec; + + command_arg_value = nr_lib_aws_sdk_php_get_command_arg_value( + ARG_TO_FIND_FOR_TEST, NR_EXECUTE_ORIG_ARGS); + tlib_pass_if_not_null( + "Expect a valid command_arg_value if a valid named arg exists.", + command_arg_value); + tlib_pass_if_str_equal("Arg name/value pair should match.", + ARG_VALUE_FOR_TEST, command_arg_value); + nr_free(command_arg_value); + NR_PHP_WRAPPER_CALL; +} +NR_PHP_WRAPPER_END + +NR_PHP_WRAPPER(expect_arg_value_null) { + char* command_arg_value = NULL; + + (void)wraprec; + + command_arg_value = nr_lib_aws_sdk_php_get_command_arg_value( + ARG_TO_FIND_FOR_TEST, NR_EXECUTE_ORIG_ARGS); + tlib_pass_if_null( + "Expect a null command_arg_value if no valid named arg exists.", + command_arg_value); + + NR_PHP_WRAPPER_CALL; +} +NR_PHP_WRAPPER_END + +static void test_nr_lib_aws_sdk_php_get_command_arg_value() { + zval* expr = NULL; + zval* first_arg = NULL; + zval* array_arg = NULL; + + /* + * nr_lib_aws_sdk_php_get_command_arg_value extracts an arg value from the 2nd + * argument in the argument list, so we need to have at least 2 args to + * extract properly. + */ + tlib_php_engine_create(""); + tlib_php_request_start(); + + tlib_php_request_eval("function one_param($a) { return; }"); + nr_php_wrap_user_function(NR_PSTR("one_param"), expect_arg_value_null); + tlib_php_request_eval("function two_param_valid($a, $b) { return; }"); + nr_php_wrap_user_function(NR_PSTR("two_param_valid"), + expect_arg_value_not_null); + tlib_php_request_eval("function two_param($a, $b) { return; }"); + nr_php_wrap_user_function(NR_PSTR("two_param"), expect_arg_value_null); + tlib_php_request_eval("function no_param() { return;}"); + nr_php_wrap_user_function(NR_PSTR("no_param"), expect_arg_value_null); + + /* + * The function isn't decoding this arg, so it doesn't matter what it is as + * long as it exists. + */ + first_arg = tlib_php_request_eval_expr("1"); + + /* Valid case. The wrapper should verify strings match. */ + + char* valid_array_args + = "array(" + " 0 => array(" + " 'QueueUrl' => 'curly_q'" + " )" + ")"; + array_arg = tlib_php_request_eval_expr(valid_array_args); + expr = nr_php_call(NULL, "two_param_valid", first_arg, array_arg); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + nr_php_zval_free(&array_arg); + + /* Test Invalid Cases*/ + + /* + * Invalid case: QueueUrl found but value was not a string. The wrapper + * should see the null return value. + */ + char* queueurl_not_string_arg + = "array(" + " 0 => array(" + " 'QueueUrl' => array(" + " 'Nope' => 'curly_q'" + " )" + " )" + ")"; + array_arg = tlib_php_request_eval_expr(queueurl_not_string_arg); + expr = nr_php_call(NULL, "two_param", first_arg, array_arg); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + nr_php_zval_free(&array_arg); + + /* Invalid case: only one parameter. The wrapper should see the null return + * value. */ + expr = nr_php_call(NULL, "one_param", first_arg); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + + /* Invalid case: no parameter. The wrapper should see the null return value. + */ + expr = nr_php_call(NULL, "no_param"); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + + /* + *Invalid case: QueueUrl not found in the argument array. The wrapper should + *see the null return value. + */ + char* no_queueurl_arg + = "array(" + " 0 => array(" + " 'Nope' => 'curly_q'" + " )" + ")"; + array_arg = tlib_php_request_eval_expr(no_queueurl_arg); + expr = nr_php_call(NULL, "two_param", first_arg, array_arg); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + nr_php_zval_free(&array_arg); + + /* + *Invalid case: inner arg in the argument array is not an array. The wrapper + *should see the null return value. + */ + char* arg_in_array_not_array + = "array(" + " 0 => '1'" + ")"; + array_arg = tlib_php_request_eval_expr(arg_in_array_not_array); + expr = nr_php_call(NULL, "two_param", first_arg, array_arg); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + nr_php_zval_free(&array_arg); + + /* + *Invalid case: empty argument array. The wrapper should see + * the null return value. + */ + char* no_arg_in_array + = "array(" + ")"; + array_arg = tlib_php_request_eval_expr(no_arg_in_array); + expr = nr_php_call(NULL, "two_param", first_arg, array_arg); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + nr_php_zval_free(&array_arg); + + /* + *Invalid case: The argument array is not an array. The wrapper should see + * the null return value. + */ + char* array_arg_not_array = "1"; + array_arg = tlib_php_request_eval_expr(array_arg_not_array); + expr = nr_php_call(NULL, "two_param", first_arg, array_arg); + tlib_pass_if_not_null("Expression should evaluate.", expr); + nr_php_zval_free(&expr); + nr_php_zval_free(&array_arg); + + nr_php_zval_free(&first_arg); + tlib_php_request_end(); + tlib_php_engine_destroy(); +} + +static inline void test_message_param_queueurl_settings_expect_val( + nr_segment_message_params_t* message_params, + nr_segment_cloud_attrs_t* cloud_attrs, + char* cloud_region, + char* cloud_account_id, + char* destination_name) { + tlib_pass_if_str_equal("cloud_region should match.", cloud_attrs->cloud_region, + cloud_region); + tlib_pass_if_str_equal("cloud_account_id should match.", + cloud_attrs->cloud_account_id, cloud_account_id); + tlib_pass_if_str_equal("destination_name should match.", + message_params->destination_name, destination_name); +} + +static inline void test_message_param_queueurl_settings_expect_null( + nr_segment_message_params_t* message_params, + nr_segment_cloud_attrs_t* cloud_attrs) { + if (NULL != cloud_attrs) { + tlib_pass_if_null("cloud_region should be null.", cloud_attrs->cloud_region); + tlib_pass_if_null("cloud_account_id should be null.", + cloud_attrs->cloud_account_id); + } + if (NULL != message_params) { + tlib_pass_if_null("destination_name should be null.", + message_params->destination_name); + } +} + +static void test_nr_lib_aws_sdk_php_sqs_parse_queueurl() { + /* + * nr_lib_aws_sdk_php_sqs_parse_queueurl extracts either ALL cloud_region, + * cloud_account_id, and destination_name or none. + */ + nr_segment_message_params_t message_params = {0}; + nr_segment_cloud_attrs_t cloud_attrs = {0}; + char modifiable_string[AWS_QUEUEURL_LEN_MAX]; + + tlib_php_engine_create(""); + +// clang-format off +#define VALID_QUEUE_URL "https://sqs.us-east-2.amazonaws.com/123456789012/SQS_QUEUE_NAME" +#define INVALID_QUEUE_URL_1 "https://us-east-2.amazonaws.com/123456789012/SQS_QUEUE_NAME" +#define INVALID_QUEUE_URL_2 "https://sqs.us-east-2.amazonaws.com/123456789012/" +#define INVALID_QUEUE_URL_3 "https://sqs.us-east-2.amazonaws.com/SQS_QUEUE_NAME" +#define INVALID_QUEUE_URL_4 "https://random.com" +#define INVALID_QUEUE_URL_5 "https://sqs.us-east-2.amazonaws.com/123456789012" +#define INVALID_QUEUE_URL_6 "https://sqs.us-east-2.amazonaws.com/" +#define INVALID_QUEUE_URL_7 "https://sqs.us-east-2.amazonaws.com" +#define INVALID_QUEUE_URL_8 "https://sqs.us-east-2.random.com/123456789012/SQS_QUEUE_NAME" + // clang-format on + + /* Test null queueurl. Extracted message_param values should be null.*/ + nr_lib_aws_sdk_php_sqs_parse_queueurl(NULL, &message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test null message_params. No values extracted, all values should be + * null.*/ + nr_lib_aws_sdk_php_sqs_parse_queueurl(NULL, NULL, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test null cloud_attrs. No values extracted, all values should be null.*/ + nr_lib_aws_sdk_php_sqs_parse_queueurl(NULL, &message_params, NULL); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_1); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_2); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_3); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_4); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_5); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_6); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_7); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* Test Invalid values. Extracted message_param values should be null.*/ + + nr_strcpy(modifiable_string, INVALID_QUEUE_URL_8); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + + /* + * Test 'https://sqs.us-east-2.amazonaws.com/123456789012/SQS_QUEUE_NAME'. + * Extracted message_param values should set. + */ + + nr_strcpy(modifiable_string, VALID_QUEUE_URL); + nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, + &cloud_attrs); + test_message_param_queueurl_settings_expect_val(&message_params, &cloud_attrs, + "us-east-2", "123456789012", + "SQS_QUEUE_NAME"); + + tlib_php_engine_destroy(); +} +#endif /* PHP 8.1+ */ + #if ZEND_MODULE_API_NO > ZEND_7_1_X_API_NO static void declare_aws_sdk_class(const char* ns, @@ -151,6 +463,10 @@ void test_main(void* p NRUNUSED) { test_nr_lib_aws_sdk_php_add_supportability_service_metric(); test_nr_lib_aws_sdk_php_handle_version(); tlib_php_engine_destroy(); +#if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO + test_nr_lib_aws_sdk_php_sqs_parse_queueurl(); + test_nr_lib_aws_sdk_php_get_command_arg_value(); +#endif /* PHP 8.1+ */ } #else void test_main(void* p NRUNUSED) {} diff --git a/axiom/nr_segment_message.c b/axiom/nr_segment_message.c index 56e9ed2b9..92f8babd1 100644 --- a/axiom/nr_segment_message.c +++ b/axiom/nr_segment_message.c @@ -189,6 +189,7 @@ bool nr_segment_message_end(nr_segment_t** segment_ptr, nr_segment_t* segment; nrtime_t duration = 0; char* scoped_metric = NULL; + nr_segment_t* child = NULL; if (NULL == segment_ptr) { return false; @@ -206,12 +207,15 @@ bool nr_segment_message_end(nr_segment_t** segment_ptr, * Additionally, because it makes http calls under the hood, * we don't want additional external calls created for this same txn. * Therefore, we delete all children of the message segment. + * By destroying the tree we are able to destroy all descendants vs just + * destroying the child which then reparents all it's children to the segment. */ if (segment) { for (size_t i = 0; i < nr_segment_children_size(&segment->children); i++) { - nr_segment_t* child = nr_segment_children_get(&segment->children, i); - nr_segment_discard(&child); + child = nr_segment_children_get(&segment->children, i); + nr_segment_destroy_tree(child); } + nr_segment_children_deinit(&segment->children); } nr_segment_message_set_attrs(segment, message_params); From 94a41f5b8f7575078d9f8426159183aef6935e49 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Thu, 30 Jan 2025 17:58:12 -0700 Subject: [PATCH 58/62] refactor(agent): reduce number of segments created (#1011) Instead of a blanket segment_start in the "before" function that needs to be discarded in the majority of the cases, just create the segment when it is needed, add the attributes/metrics, then close the segment. DONE:Multiverse SQS exception tests need to be updated. DONE:Needs additional testing against backend. --------- Co-authored-by: Michal Nowacki --- agent/lib_aws_sdk_php.c | 54 ++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c index b706df518..1bd144cca 100644 --- a/agent/lib_aws_sdk_php.c +++ b/agent/lib_aws_sdk_php.c @@ -86,11 +86,13 @@ //clang-format on */ -void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* segment, +void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* auto_segment, char* command_name_string, size_t command_name_len, NR_EXECUTE_PROTO) { char* command_arg_value = NULL; + nr_segment_t* message_segment = NULL; + nr_segment_message_params_t message_params = { .library = SQS_LIBRARY_NAME, .destination_type = NR_MESSAGE_DESTINATION_TYPE_QUEUE, @@ -98,7 +100,7 @@ void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* segment, }; nr_segment_cloud_attrs_t cloud_attrs = {0}; - if (NULL == segment) { + if (NULL == auto_segment) { return; } @@ -122,6 +124,17 @@ void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* segment, } #undef AWS_COMMAND_IS + /* + * By this point, it's been determined that this call will be instrumented so + * only create the segment now, grab the parent segment start time, add our + * special segment attributes/metrics then close the newly created segment. + */ + message_segment = nr_segment_start(NRPRG(txn), NULL, NULL); + if (NULL == message_segment) { + return; + } + /* re-use start time from auto_segment started in func_begin */ + message_segment->start_time = auto_segment->start_time; cloud_attrs.aws_operation = command_name_string; command_arg_value = nr_lib_aws_sdk_php_get_command_arg_value( @@ -136,10 +149,10 @@ void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* segment, /* Add cloud attributes, if available. */ - nr_segment_traces_add_cloud_attributes(segment, &cloud_attrs); + nr_segment_traces_add_cloud_attributes(message_segment, &cloud_attrs); /* Now end the instrumented segment as a message segment. */ - nr_segment_message_end(&segment, &message_params); + nr_segment_message_end(&message_segment, &message_params); nr_free(command_arg_value); } @@ -332,20 +345,6 @@ char* nr_lib_aws_sdk_php_get_command_arg_value(char* command_arg_name, * @throws \Exception */ -NR_PHP_WRAPPER(nr_aws_client_call_before) { - (void)wraprec; - nr_segment_t* segment = NULL; - /* - * Start a segment in case it needs to become an external, message, or - * datastore segment. - */ - segment = nr_segment_start(NRPRG(txn), NULL, NULL); - if (NULL != segment) { - segment->wraprec = auto_segment->wraprec; - } -} -NR_PHP_WRAPPER_END - NR_PHP_WRAPPER(nr_aws_client_call) { (void)wraprec; @@ -388,16 +387,6 @@ NR_PHP_WRAPPER(nr_aws_client_call) { #undef AWS_CLASS_IS - if (NR_SEGMENT_CUSTOM == auto_segment->type) { - /* - * We need to end the segment that we started in the 'before' wrapper if - * it wasn't handled and ended by the handling function. Handling - * function would have changed the segment type from from default - * (`NR_SEGMENT_CUSTOM`) if it ended it. - */ - nr_segment_discard(&auto_segment); - } - /* * Since we have klass and command_name, we can give the calling segment * a more meaningful name than Aws/AwsClient::__call We can decode it to @@ -406,11 +395,10 @@ NR_PHP_WRAPPER(nr_aws_client_call) { * EX: Aws\\Sqs\\SqsClient::sendMessage */ - segment = nr_txn_get_current_segment(NRPRG(txn), NULL); - if (NULL != segment) { + if (NULL != auto_segment) { real_class_and_command = nr_formatf("Custom/%s::%s", klass, command_name_string); - nr_segment_set_name(segment, real_class_and_command); + nr_segment_set_name(auto_segment, real_class_and_command); nr_free(real_class_and_command); } @@ -570,7 +558,7 @@ void nr_aws_sdk_php_enable() { /* We only support instrumentation above PHP 8.1 */ /* Called when a service command is issued from a Client */ nr_php_wrap_user_function_before_after_clean( - NR_PSTR("Aws\\AwsClient::__call"), nr_aws_client_call_before, - nr_aws_client_call, nr_aws_client_call); + NR_PSTR("Aws\\AwsClient::__call"), NULL, nr_aws_client_call, + nr_aws_client_call); #endif } From b0184fde856954a6c8380e8c17c0f0e097c44a6b Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Wed, 5 Feb 2025 11:03:50 -0700 Subject: [PATCH 59/62] fix(agent): fix memleak in Laravel Queue instrumentation (#1014) Free strings that were strdup-ed but not being freed. --- agent/fw_laravel_queue.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/agent/fw_laravel_queue.c b/agent/fw_laravel_queue.c index b4d5576e7..0ac042800 100644 --- a/agent/fw_laravel_queue.c +++ b/agent/fw_laravel_queue.c @@ -136,7 +136,6 @@ static void nr_laravel_queue_set_cat_txn(zval* job TSRMLS_DC) { } if (headers.dt_payload || headers.traceparent) { - nr_hashmap_t* header_map = nr_header_create_distributed_trace_map( headers.dt_payload, headers.traceparent, headers.tracestate); @@ -225,6 +224,11 @@ static char* nr_laravel_queue_job_txn_name(zval* job TSRMLS_DC) { name = nr_formatf("%s (%s:%s)", resolve_name, connection_name, queue_name); + nr_free(connection_name); + nr_free(resolve_name); + nr_free(queue_name); + + /* Caller is responsible for freeing name. */ return name; } @@ -252,6 +256,7 @@ NR_PHP_WRAPPER(nr_laravel_queue_syncqueue_raiseBeforeJobEvent_before) { job = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS); + /* txn_name needs to be freed by the caller. */ txn_name = nr_laravel_queue_job_txn_name(job); /* @@ -271,6 +276,7 @@ NR_PHP_WRAPPER(nr_laravel_queue_syncqueue_raiseBeforeJobEvent_before) { NR_OK_TO_OVERWRITE); } nr_php_arg_release(&job); + nr_free(txn_name); NR_PHP_WRAPPER_CALL; } NR_PHP_WRAPPER_END @@ -317,6 +323,7 @@ NR_PHP_WRAPPER(nr_laravel_queue_worker_raiseBeforeJobEvent_after) { nr_txn_set_path("Laravel", NRPRG(txn), txn_name, NR_PATH_TYPE_CUSTOM, NR_OK_TO_OVERWRITE); } + nr_free(txn_name); nr_php_arg_release(&job); NR_PHP_WRAPPER_CALL; } @@ -574,7 +581,7 @@ NR_PHP_WRAPPER(nr_laravel_queue_worker_process) { * as the first parameter. */ char* connection_name = NULL; - char* job_name; + char* job_name = NULL; char* txn_name = NULL; connection = nr_php_arg_get(1, NR_EXECUTE_ORIG_ARGS TSRMLS_CC); From 52a6e2338abdc9037a684fc1127064597f2821d4 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Fri, 7 Feb 2025 08:40:32 -0700 Subject: [PATCH 60/62] fix(agent): Fix nr_header_create_distributed_trace_map mem leak when hashmap is destroyed (#1017) This function created a new hashmap, but didn's pass the string dtor in so any strdupped values were not being freed when the hashmap was destroyed. valgrind output from a multiverse run showed: ==220== by 0x6AA4680: nr_strdup (util_memory.c:156) ==220== by 0x6A83BD3: nr_header_create_distributed_trace_map (nr_header.c:60) ==220== by 0x6A45D28: nr_php_amqplib_retrieve_dt_headers (lib_php_amqplib.c:503) ==220== by 0x6A45D28: nr_rabbitmq_basic_get (lib_php_amqplib.c:742) ==220== by 0x6A74993: nr_zend_call_orig_execute_special (php_user_instrument.c:105) ==220== by 0x6A52EAA: nr_php_instrument_func_end (php_execute.c:2086) ==220== by 0x6A54D5B: nr_php_observer_fcall_end (php_execute.c:2188) ==220== by 0x71D7ED: zend_observer_fcall_end (in /usr/local/bin/php) ==220== by 0x6E79FF: execute_ex (in /usr/local/bin/php) ==220== by 0x6F0B42: zend_execute (in /usr/local/bin/php) ==220== by 0x67C06F: zend_execute_scripts (in /usr/local/bin/php) ==220== by 0x60FA3D: php_execute_script (in /usr/local/bin/php) after applying the fix, valgrind had no issues. --- axiom/nr_header.c | 3 +- axiom/tests/test_header.c | 70 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/axiom/nr_header.c b/axiom/nr_header.c index f70398e4d..377096dd1 100644 --- a/axiom/nr_header.c +++ b/axiom/nr_header.c @@ -48,7 +48,8 @@ nr_hashmap_t* nr_header_create_distributed_trace_map(const char* nr_header, return NULL; } - header_map = nr_hashmap_create(NULL); + header_map = nr_hashmap_create((nr_hashmap_dtor_func_t)nr_hashmap_dtor_str); + if (nr_header) { nr_hashmap_set(header_map, NR_PSTR(NEWRELIC), nr_strdup(nr_header)); } diff --git a/axiom/tests/test_header.c b/axiom/tests/test_header.c index c34bd1d5b..3ff48e4f5 100644 --- a/axiom/tests/test_header.c +++ b/axiom/tests/test_header.c @@ -1702,6 +1702,75 @@ static void test_account_id_from_cross_process_id(void) { nr_header_account_id_from_cross_process_id("10#10")); } +static void test_nr_header_create_distributed_trace_map(void) { + nr_hashmap_t* header_map = NULL; + char* tracestate = "tracestate"; + char* traceparent = "traceparent"; + char* dt_payload = "newrelic"; + + header_map = nr_header_create_distributed_trace_map(NULL, NULL, NULL); + tlib_pass_if_null( + "NULL payload and NULL traceparent should return NULL header map", + header_map); + + header_map = nr_header_create_distributed_trace_map(NULL, NULL, tracestate); + tlib_pass_if_null( + "NULL payload and NULL traceparent should return NULL header map", + header_map); + + header_map = nr_header_create_distributed_trace_map(dt_payload, NULL, NULL); + tlib_pass_if_not_null("if valid dt_payload should return a header map", + header_map); + tlib_pass_if_size_t_equal( + "1 header passed in so should expect headers hashmap size of 1", 1, + nr_hashmap_count(header_map)); + nr_hashmap_destroy(&header_map); + + header_map + = nr_header_create_distributed_trace_map(dt_payload, traceparent, NULL); + tlib_pass_if_not_null("if valid dt_payload should return a header map", + header_map); + tlib_pass_if_size_t_equal( + "2 headers passed in so should expect headers hashmap size of 2", 2, + nr_hashmap_count(header_map)); + nr_hashmap_destroy(&header_map); + + header_map + = nr_header_create_distributed_trace_map(dt_payload, NULL, tracestate); + tlib_pass_if_not_null("if valid dt_payload should return a header map", + header_map); + tlib_pass_if_size_t_equal( + "2 headers passed in so should expect headers hashmap size of 2", 2, + nr_hashmap_count(header_map)); + nr_hashmap_destroy(&header_map); + + header_map = nr_header_create_distributed_trace_map(dt_payload, traceparent, + tracestate); + tlib_pass_if_not_null("if valid dt_payload should return a header map", + header_map); + tlib_pass_if_size_t_equal( + "3 headers passed in so should expect headers hashmap size of 3", 3, + nr_hashmap_count(header_map)); + nr_hashmap_destroy(&header_map); + + header_map + = nr_header_create_distributed_trace_map(NULL, traceparent, tracestate); + tlib_pass_if_not_null("if valid traceparent should return a header map", + header_map); + tlib_pass_if_size_t_equal( + "Two headers passed in so should expect headers hashmap size of 2", 2, + nr_hashmap_count(header_map)); + nr_hashmap_destroy(&header_map); + + header_map = nr_header_create_distributed_trace_map(NULL, traceparent, NULL); + tlib_pass_if_not_null("if valid traceparent should return a header map", + header_map); + tlib_pass_if_size_t_equal( + "1 header passed in so should expect headers hashmap size of 1", 1, + nr_hashmap_count(header_map)); + nr_hashmap_destroy(&header_map); +} + tlib_parallel_info_t parallel_info = {.suggested_nthreads = 2, .state_size = 0}; void test_main(void* p NRUNUSED) { @@ -1721,4 +1790,5 @@ void test_main(void* p NRUNUSED) { test_set_cat_txn(); test_set_synthetics_txn(); test_account_id_from_cross_process_id(); + test_nr_header_create_distributed_trace_map(); } From f3f3e96da92e60ff9b8dede9e853d029e216c389 Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Wed, 12 Feb 2025 07:55:34 -0700 Subject: [PATCH 61/62] security(daemon): upgrade golang to 1.23.6 (#1019) --- daemon/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/go.mod b/daemon/go.mod index 5685974d5..b76b8360f 100644 --- a/daemon/go.mod +++ b/daemon/go.mod @@ -2,7 +2,7 @@ module github.com/newrelic/newrelic-php-agent/daemon go 1.21 -toolchain go1.23.1 +toolchain go1.23.6 require ( github.com/golang/protobuf v1.5.3 From 0bd1728b8cb6f0a6d0be6f51efaf8509e8b47ded Mon Sep 17 00:00:00 2001 From: Amber Sistla Date: Thu, 13 Feb 2025 08:21:28 -0700 Subject: [PATCH 62/62] feat(agent): Add RabbitMQ instrumentation using the php-amqplib library (#1009) Most of the PR is basic instrumentation, retrieval of values and setting attributes or creating metrics and is very similar to patterns we've established in other instrumentation. The DT header insertion logic is the trickiest bit since we are modifying the headers in flight. (look to drupal and laravel for similar logic). Note: the DT header insertion logic, while trickiest, is something that can be turned off anytime by the user by setting newrelic.distributed_tracing_exclude_newrelic_header to true. Initial commit does the following: * Detect library via magic file * Detect package and version information. * Basic unit tests Subsequent commits: * Add attributes needed for rabbitMQ to message segment * Instrument basic_publish and basic_get * add unit tests, multiverse tests * added support for PHP 7.x * DT header insertion/retrieval * Added more multiverse tests, especially around the DT functionality --- agent/Makefile.frag | 1 + agent/config.m4 | 2 +- agent/fw_hooks.h | 1 + agent/lib_aws_sdk_php.c | 6 + agent/lib_php_amqplib.c | 833 +++++++++++++++++++++++++++++ agent/lib_php_amqplib.h | 34 ++ agent/php_execute.c | 4 + agent/tests/test_lib_php_amqplib.c | 144 +++++ axiom/nr_segment.c | 12 + axiom/nr_segment.h | 13 + axiom/nr_segment_message.c | 30 +- axiom/nr_segment_message.h | 17 +- axiom/nr_segment_private.c | 2 + axiom/nr_segment_traces.c | 10 + axiom/nr_span_event.c | 71 +++ axiom/nr_span_event.h | 23 +- axiom/nr_span_event_private.h | 3 + axiom/tests/test_segment_message.c | 221 +++++++- axiom/tests/test_span_event.c | 73 ++- 19 files changed, 1482 insertions(+), 18 deletions(-) create mode 100644 agent/lib_php_amqplib.c create mode 100644 agent/lib_php_amqplib.h create mode 100644 agent/tests/test_lib_php_amqplib.c diff --git a/agent/Makefile.frag b/agent/Makefile.frag index fbff46d69..2bfc562a8 100644 --- a/agent/Makefile.frag +++ b/agent/Makefile.frag @@ -93,6 +93,7 @@ TEST_BINARIES = \ tests/test_internal_instrument \ tests/test_hash \ tests/test_lib_aws_sdk_php \ + tests/test_lib_php_amqplib \ tests/test_memcached \ tests/test_mongodb \ tests/test_monolog \ diff --git a/agent/config.m4 b/agent/config.m4 index 6671bcd54..19785b2a3 100644 --- a/agent/config.m4 +++ b/agent/config.m4 @@ -231,7 +231,7 @@ if test "$PHP_NEWRELIC" = "yes"; then LIBRARIES="lib_aws_sdk_php.c lib_monolog.c lib_doctrine2.c lib_guzzle3.c \ lib_guzzle4.c lib_guzzle6.c lib_guzzle_common.c \ lib_mongodb.c lib_phpunit.c lib_predis.c lib_zend_http.c \ - lib_composer.c" + lib_composer.c lib_php_amqplib.c" PHP_NEW_EXTENSION(newrelic, $FRAMEWORKS $LIBRARIES $NEWRELIC_AGENT, $ext_shared,, $(NEWRELIC_CFLAGS)) PHP_SUBST(NEWRELIC_CFLAGS) diff --git a/agent/fw_hooks.h b/agent/fw_hooks.h index 711c3b618..93665862c 100644 --- a/agent/fw_hooks.h +++ b/agent/fw_hooks.h @@ -46,6 +46,7 @@ extern void nr_guzzle4_enable(TSRMLS_D); extern void nr_guzzle6_enable(TSRMLS_D); extern void nr_laminas_http_enable(TSRMLS_D); extern void nr_mongodb_enable(TSRMLS_D); +extern void nr_php_amqplib_enable(); extern void nr_phpunit_enable(TSRMLS_D); extern void nr_predis_enable(TSRMLS_D); extern void nr_zend_http_enable(TSRMLS_D); diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c index 1bd144cca..46a71ce3c 100644 --- a/agent/lib_aws_sdk_php.c +++ b/agent/lib_aws_sdk_php.c @@ -429,6 +429,12 @@ void nr_lib_aws_sdk_php_handle_version() { zval retval; int result = FAILURE; + /* + * The following block initializes nr_aws_sdk_version to the empty string. + * If it is able to extract the version, nr_aws_sdk_version is set to that. + * Nothing is needed in the catch block. + * The final return will either return a proper version or an empty string. + */ result = zend_eval_string( "(function() {" " $nr_aws_sdk_version = '';" diff --git a/agent/lib_php_amqplib.c b/agent/lib_php_amqplib.c new file mode 100644 index 000000000..94e15fe96 --- /dev/null +++ b/agent/lib_php_amqplib.c @@ -0,0 +1,833 @@ +/* + * Copyright 2024 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * Functions relating to instrumenting the php-ampqlib + * https://github.com/php-amqplib/php-amqplib + */ +#include "php_agent.h" +#include "php_api_distributed_trace.h" +#include "php_call.h" +#include "php_hash.h" +#include "php_wrapper.h" +#include "fw_hooks.h" +#include "fw_support.h" +#include "util_logging.h" +#include "lib_php_amqplib.h" +#include "nr_segment_message.h" +#include "nr_header.h" + +#define PHP_PACKAGE_NAME "php-amqplib/php-amqplib" + +/* + * With PHP 8+, we have access to all the zend_execute_data structures both + * before and after the function call so we can just maintain pointers into the + * struct. With PHP 7.x, without doing special handling, we don't have access + * to the values afterwards. Sometimes nr_php_arg_get is used as that DUPs the + * zval which then later needs to be freed with nr_php_arg_release. In this + * case, we don't need to go through the extra trouble of duplicating a ZVAL + * when we don't need to duplicate anything if there is no valid value. We + * check for a valid value, and if we want to store it, we'll strdup it. So + * instead of doing multiple zval dups all of the time, we do some strdups some + * of the time. + */ +#if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO /* PHP8.0+ */ +#define ENSURE_PERSISTENCE(x) x +#define UNDO_PERSISTENCE(x) +#else +#define ENSURE_PERSISTENCE(x) nr_strdup(x) +#define UNDO_PERSISTENCE(x) nr_free(x); +#endif + +/* + * See here for supported Amazon MQ for RabbitMQ engine versions + * https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/rabbitmq-version-management.html + * For instance: + * As of Feb 2025, 3.13 (recommended) + * + * See here for latest RabbitMQ Server https://www.rabbitmq.com/docs/download + * For instance: + * As of Feb 2025, the latest release of RabbitMQ Server is 4.0.5. + * + * https://www.rabbitmq.com/tutorials/tutorial-one-php + * Installing RabbitMQ + * + * While the RabbitMQ tutorial for using with the dockerized RabbitMQ setup + * correctly and loads the PhpAmqpLib\\Channel\\AMQPChannel class in time for + * the agent to wrap the instrumented functions, with AWS MQ_BROKER + * specific but valid scenarios where the PhpAmqpLib\\Channel\\AMQPChannel class + * file does not explicitly load and the instrumented + * functions are NEVER wrapped regardless of how many times they are called in + * one txn. + * Specifically, this centered around the very slight but impactful + * differences when using managing the AWS MQ_BROKER connect vs using the + * official RabbitMq Server, and this function is needed ONLY to support AWS's + * MQ_BROKER. + * + * When connecting via SSL with rabbitmq's official server is explicitly loaded. + * Hoever, when connecting via SSL with an MQ_BROKER that uses RabbitMQ(using + * the exact same php file and with only changes in the server name for the + * connection), the AMQPChannel file (and therefore class), the AMQPChannel file + * (and therefore class) is NOT explicitly loaded. + * + * Because the very key `PhpAmqpLib/Channel/AMQPChannel.php` file never gets + * explicitly loaded when interacting with the AWS MQ_BROKER, the class is not + * automatically loaded even though it is available and can be resolved if + * called from within PHP. Because of this, the instrumented functions NEVER + * get wrapped when connecting to the MQ_BROKER and therefore the + * instrumentation is never triggered. The explicit loading of the class is + * needed to work with MQ_BROKER. + */ + +/* + * Purpose : Ensures the php-amqplib instrumentation gets wrapped. + * + * Params : None + * + * Returns : None + */ +static void nr_php_amqplib_ensure_class() { + int result = FAILURE; + zend_class_entry* class_entry = NULL; + + class_entry = nr_php_find_class("phpamqplib\\channel\\amqpchannel"); + if (NULL == class_entry) { + result = zend_eval_stringl( + NR_PSTR("class_exists('PhpAmqpLib\\Channel\\AMQPChannel');"), NULL, + "nr_php_amqplib_class_exists_channel_amqpchannel"); + } + /* + * We don't need to check anything else at this point. If this fails, there's + * nothing else we can do anyway. + */ +} + +/* + * Version information will be pulled from PhpAmqpLib\\Package::VERSION + * nr_php_amqplib_handle_version will automatically load the class if it isn't + * loaded yet and then evaluate the string. To avoid the VERY unlikely but not + * impossible fatal error if the file/class doesn't exist, we need to wrap + * the call in a try/catch block and make it a lambda so that we avoid errors. + * This won't load the file if it doesn't exist, but by the time this is called, + * the existence of the php-amqplib is a known quantity so calling the following + * lambda will result in the PhpAmqpLib\\Package class being loaded. + */ +void nr_php_amqplib_handle_version() { + char* version = NULL; + zval retval_zpd; + int result = FAILURE; + + result = zend_eval_stringl( + NR_PSTR( + "(function() {" + " $nr_php_amqplib_version = null;" + " try {" + " $nr_php_amqplib_version = PhpAmqpLib\\Package::VERSION;" + " } catch (Throwable $e) {" + " }" + " return $nr_php_amqplib_version;" + "})();"), + &retval_zpd, "nr_php_amqplib_get_phpamqplib_package_version"); + + /* See if we got a non-empty/non-null string for version. */ + if (SUCCESS == result) { + if (nr_php_is_zval_valid_string(&retval_zpd)) { + version = Z_STRVAL(retval_zpd); + } + } + + if (NRINI(vulnerability_management_package_detection_enabled)) { + /* Add php package to transaction */ + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, version); + } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + version); + + zval_dtor(&retval_zpd); +} + +/* + * Purpose : Retrieves host and port from an AMQP Connection and sets the + * host/port values in the message_params. + * + * Params : 1. PhpAmqpLib\Connection family of connections that inherit from + * AbstractConnection + * 2. nr_segment_message_params_t* message_params that will be + * modified with port and host info, if available + * + * Returns : None + * + * See here for more information about the AbstractConnection class that all + * Connection classes inherit from: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Connection/AbstractConnection.php + */ +static inline void nr_php_amqplib_get_host_and_port( + zval* amqp_connection, + nr_segment_message_params_t* message_params) { + zval* amqp_server = NULL; + zval* amqp_port = NULL; + zval* connect_constructor_params = NULL; + + if (NULL == amqp_connection || NULL == message_params) { + return; + } + + if (!nr_php_is_zval_valid_object(amqp_connection)) { + return; + } + + /* construct_params are always saved to use for cloning purposes. */ + connect_constructor_params + = nr_php_get_zval_object_property(amqp_connection, "construct_params"); + if (!nr_php_is_zval_valid_array(connect_constructor_params)) { + return; + } + + amqp_server + = nr_php_zend_hash_index_find(Z_ARRVAL_P(connect_constructor_params), + AMQP_CONSTRUCT_PARAMS_SERVER_INDEX); + if (nr_php_is_zval_non_empty_string(amqp_server)) { + message_params->server_address + = ENSURE_PERSISTENCE(Z_STRVAL_P(amqp_server)); + } + + amqp_port = nr_php_zend_hash_index_find( + Z_ARRVAL_P(connect_constructor_params), AMQP_CONSTRUCT_PARAMS_PORT_INDEX); + if (nr_php_is_zval_valid_integer(amqp_port)) { + message_params->server_port = Z_LVAL_P(amqp_port); + } +} + +/* + * Purpose : Applies DT headers to an outbound AMQPMessage. + * Note: + * The DT header 'newrelic' will only be added if both + * newrelic.distributed_tracing_enabled is enabled and + * newrelic.distributed_tracing_exclude_newrelic_header is set to false in the + * INI settings. The W3C headers 'traceparent' and 'tracestate' will will only + * be added if newrelic.distributed_tracing_enabled is enabled in the + * newrelic.ini settings. + * + * Params : PhpAmqpLib\Message\AMQPMessage + * + * Returns : None + * + * Refer here for AMQPMessage: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Message/AMQPMessage.php + * Refer here for AMQPTable: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Wire/AMQPTable.php + */ + +static inline void nr_php_amqplib_insert_dt_headers(zval* amqp_msg) { + zval* amqp_properties_array = NULL; + zval* dt_headers_zvf = NULL; + zval* amqp_headers_table = NULL; + zval* retval_set_property_zvf = NULL; + zval* retval_set_table_zvf = NULL; + zval application_headers_zpd; + zval key_zval_zpd; + zval amqp_table_retval_zpd; + zval* key_exists = NULL; + zval* amqp_table_data = NULL; + zend_ulong key_num = 0; + nr_php_string_hash_key_t* key_str = NULL; + zval* val = NULL; + int retval = FAILURE; + + /* + * Note: + * The DT header 'newrelic' will only be added if both + * newrelic.distributed_tracing_enabled is enabled and + * newrelic.distributed_tracing_exclude_newrelic_header is set to false in the + * INI settings. The W3C headers 'traceparent' and 'tracestate' will will only + * be added if newrelic.distributed_tracing_enabled is enabled in the + * newrelic.ini settings. + */ + + /* + * Refer here for AMQPMessage: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Message/AMQPMessage.php + * Refer here for AMQPTable: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Wire/AMQPTable.php + */ + if (!nr_php_is_zval_valid_object(amqp_msg)) { + return; + } + + if (!NRPRG(txn)->options.distributed_tracing_enabled) { + return; + } + + amqp_properties_array + = nr_php_get_zval_object_property(amqp_msg, "properties"); + if (!nr_php_is_zval_valid_array(amqp_properties_array)) { + nrl_verbosedebug( + NRL_INSTRUMENT, + "AMQPMessage properties are invalid. AMQPMessage always sets " + "this to empty arrray by default so something is seriously wrong with " + "the message object. Exit."); + return; + } + + /* + * newrelic_get_request_metadata is an internal API that will only return the + * DT header 'newrelic' will only be added if both + * newrelic.distributed_tracing_enabled is enabled and + * newrelic.distributed_tracing_exclude_newrelic_header is set to false in the + * INI settings. The W3C headers 'traceparent' and 'tracestate' will will only + * be returned if newrelic.distributed_tracing_enabled is enabled in the + * newrelic.ini settings. + */ + dt_headers_zvf = nr_php_call(NULL, "newrelic_get_request_metadata"); + if (!nr_php_is_zval_valid_array(dt_headers_zvf)) { + nr_php_zval_free(&dt_headers_zvf); + return; + } + + /* + * The application_headers are stored in an encoded PhpAmqpLib\Wire\AMQPTable + * object + */ + + amqp_headers_table = nr_php_zend_hash_find(Z_ARRVAL_P(amqp_properties_array), + "application_headers"); + /* + * If the application_headers AMQPTable object doesn't exist, we'll have to + * create it with an empty array. + */ + if (!nr_php_is_zval_valid_object(amqp_headers_table)) { + retval = zend_eval_stringl( + NR_PSTR("(function() {" + " try {" + " return new PhpAmqpLib\\Wire\\AMQPTable(array());" + " } catch (Throwable $e) {" + " return null;" + " }" + "})();"), + &amqp_table_retval_zpd, "nr_php_amqplib_create_empty_amqptable"); + + if (FAILURE == retval) { + nrl_verbosedebug(NRL_INSTRUMENT, + "No application headers in AMQPTable, but couldn't " + "create one. Exit."); + goto end; + } + if (!nr_php_is_zval_valid_object(&amqp_table_retval_zpd)) { + nrl_verbosedebug(NRL_INSTRUMENT, + "No application headers in AMQPTable, but couldn't " + "create one. Exit."); + zval_ptr_dtor(&amqp_table_retval_zpd); + goto end; + } + /* + * Get application+_headers string in zval form for use with nr_php_call + */ + ZVAL_STRING(&application_headers_zpd, "application_headers"); + /* + * Set the valid AMQPTable on the AMQPMessage. + */ + retval_set_property_zvf = nr_php_call( + amqp_msg, "set", &application_headers_zpd, &amqp_table_retval_zpd); + + zval_ptr_dtor(&application_headers_zpd); + zval_ptr_dtor(&amqp_table_retval_zpd); + + if (NULL == retval_set_property_zvf) { + nrl_verbosedebug(NRL_INSTRUMENT, + "AMQPMessage had no application_headers AMQPTable, but " + "set failed for the AMQPTable wthat was just created " + "for the application headers. Unable to proceed, exit."); + goto end; + } + /* Should have valid AMQPTable objec on the AMQPMessage at this point. */ + amqp_headers_table = nr_php_zend_hash_find( + Z_ARRVAL_P(amqp_properties_array), "application_headers"); + if (!nr_php_is_zval_valid_object(amqp_headers_table)) { + nrl_info( + NRL_INSTRUMENT, + "AMQPMessage had no application_headers AMQPTable, but unable to " + "retrieve even after creating and setting. Unable to proceed, exit."); + goto end; + } + } + + /* + * This contains the application_headers data. It is an array of + * key/encoded_array_val pairs. + */ + amqp_table_data = nr_php_get_zval_object_property(amqp_headers_table, "data"); + + /* + * First check if it's a reference to another zval, and if so, get point to + * the actual zval. + */ + + if (IS_REFERENCE == Z_TYPE_P(amqp_table_data)) { + amqp_table_data = Z_REFVAL_P(amqp_table_data); + } + if (!nr_php_is_zval_valid_array(amqp_table_data)) { + /* + * This is a basic part of the AMQPTable, if this doesn't exist, something + * is seriously wrong. Cannot proceed, exit. + */ + goto end; + } + + /* + * Loop through the DT Header array and set the headers in the + * application_header AMQPTable if they do not already exist. + */ + + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(dt_headers_zvf), key_num, key_str, val) { + (void)key_num; + + if (NULL != key_str && nr_php_is_zval_valid_string(val)) { + key_exists + = nr_php_zend_hash_find(HASH_OF(amqp_table_data), ZSTR_VAL(key_str)); + if (NULL == key_exists) { + /* Key doesn't exist, so set the value in the AMQPTable. */ + + /* key_str is a zend_string. It needs to be a zval to pass to + * nr_php_call. */ + ZVAL_STR_COPY(&key_zval_zpd, key_str); + retval_set_table_zvf + = nr_php_call(amqp_headers_table, "set", &key_zval_zpd, val); + if (NULL == retval_set_table_zvf) { + nrl_verbosedebug(NRL_INSTRUMENT, + "%s didn't exist in the AMQPTable, but couldn't " + "set the key/val to the table.", + NRSAFESTR(ZSTR_VAL(key_str))); + } + zval_ptr_dtor(&key_zval_zpd); + nr_php_zval_free(&retval_set_table_zvf); + } + } + } + ZEND_HASH_FOREACH_END(); + +end: + nr_php_zval_free(&dt_headers_zvf); + nr_php_zval_free(&retval_set_property_zvf); +} + +/* + * Purpose : Retrieve any DT headers from an inbound AMQPMessage if + * newrelic.distributed_tracing_exclude_newrelic_header INI setting is false + * and apply to txn. + * + * Params : PhpAmqpLib\Message\AMQPMessage + * + * Returns : None + * + * Refer here for AMQPMessage: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Message/AMQPMessage.php + * Refer here for AMQPTable: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Wire/AMQPTable.php + */ +static inline void nr_php_amqplib_retrieve_dt_headers(zval* amqp_msg) { + zval* amqp_headers_native_data_zvf = NULL; + zval* amqp_properties_array = NULL; + zval* amqp_headers_table = NULL; + zval* amqp_table_data = NULL; + zval* dt_payload = NULL; + zval* traceparent = NULL; + zval* tracestate = NULL; + char* dt_payload_string = NULL; + char* traceparent_string = NULL; + char* tracestate_string = NULL; + zend_ulong key_num = 0; + nr_php_string_hash_key_t* key_str = NULL; + zval* val = NULL; + int retval = FAILURE; + + /* + * Refer here for AMQPMessage: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Message/AMQPMessage.php + * Refer here for AMQPTable: + * https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Wire/AMQPTable.php + */ + if (!nr_php_is_zval_valid_object(amqp_msg)) { + return; + } + + if (!NRPRG(txn)->options.distributed_tracing_enabled) { + return; + } + + amqp_properties_array + = nr_php_get_zval_object_property(amqp_msg, "properties"); + if (!nr_php_is_zval_valid_array(amqp_properties_array)) { + nrl_verbosedebug( + NRL_INSTRUMENT, + "AMQPMessage properties not valid. AMQPMessage always sets " + "this to empty arrray by default. something seriously wrong with " + "the message object. Unable to proceed, Exit"); + return; + } + + /* PhpAmqpLib\Wire\AMQPTable object*/ + amqp_headers_table = nr_php_zend_hash_find(Z_ARRVAL_P(amqp_properties_array), + "application_headers"); + if (!nr_php_is_zval_valid_object(amqp_headers_table)) { + /* No headers here, exit. */ + return; + } + + /* + * We can't use amqp table "data" property here because while it has the + * correct keys, the vals are encoded arrays. We need to use getNativeData + * so it will decode the values for us since it formats the AMQPTable as an + * array of unencoded key/val pairs. */ + amqp_headers_native_data_zvf + = nr_php_call(amqp_headers_table, "getNativeData"); + + if (!nr_php_is_zval_valid_array(amqp_headers_native_data_zvf)) { + nr_php_zval_free(&amqp_headers_native_data_zvf); + return; + } + + dt_payload + = nr_php_zend_hash_find(HASH_OF(amqp_headers_native_data_zvf), NEWRELIC); + dt_payload_string + = nr_php_is_zval_valid_string(dt_payload) ? Z_STRVAL_P(dt_payload) : NULL; + + traceparent = nr_php_zend_hash_find(HASH_OF(amqp_headers_native_data_zvf), + W3C_TRACEPARENT); + traceparent_string = nr_php_is_zval_valid_string(traceparent) + ? Z_STRVAL_P(traceparent) + : NULL; + + tracestate = nr_php_zend_hash_find(HASH_OF(amqp_headers_native_data_zvf), + W3C_TRACESTATE); + tracestate_string + = nr_php_is_zval_valid_string(tracestate) ? Z_STRVAL_P(tracestate) : NULL; + + if (NULL != dt_payload || NULL != traceparent) { + nr_hashmap_t* header_map = nr_header_create_distributed_trace_map( + dt_payload_string, traceparent_string, tracestate_string); + + /* + * nr_php_api_accept_distributed_trace_payload_httpsafe will add the headers + * to the txn if there have been no other inbound/outbound headers added + * already. + */ + nr_php_api_accept_distributed_trace_payload_httpsafe(NRPRG(txn), header_map, + "Queue"); + + nr_hashmap_destroy(&header_map); + } + nr_php_zval_free(&amqp_headers_native_data_zvf); + + return; +} + +/* + * Purpose : A wrapper to instrument the php-amqplib basic_publish. This + * retrieves values to populate a message segment and insert the DT headers, if + * applicable. + * + * Note: The DT header 'newrelic' will only be added if both + * newrelic.distributed_tracing_enabled is enabled and + * newrelic.distributed_tracing_exclude_newrelic_header is set to false in the + * INI settings. The W3C headers 'traceparent' and 'tracestate' will will only + * be added if newrelic.distributed_tracing_enabled is enabled in the + * newrelic.ini settings. + * + * PhpAmqpLib\Channel\AMQPChannel::basic_publish + * Publishes a message + * + * @param AMQPMessage $msg + * @param string $exchange + * @param string $routing_key + * @param bool $mandatory + * @param bool $immediate + * @param int|null $ticket + * @throws AMQPChannelClosedException + * @throws AMQPConnectionClosedException + * @throws AMQPConnectionBlockedException + * + */ + +NR_PHP_WRAPPER(nr_rabbitmq_basic_publish_before) { + zval* amqp_msg = NULL; + (void)wraprec; + + amqp_msg = nr_php_get_user_func_arg(1, NR_EXECUTE_ORIG_ARGS); + /* + * nr_php_amqplib_insert_dt_headers will check the validity of the object. + */ + nr_php_amqplib_insert_dt_headers(amqp_msg); +} +NR_PHP_WRAPPER_END + +NR_PHP_WRAPPER(nr_rabbitmq_basic_publish) { + zval* amqp_exchange = NULL; + zval* amqp_routing_key = NULL; + zval* amqp_connection = NULL; + nr_segment_t* message_segment = NULL; + + nr_segment_message_params_t message_params = { + .library = RABBITMQ_LIBRARY_NAME, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_EXCHANGE, + .message_action = NR_SPANKIND_PRODUCER, + .messaging_system = RABBITMQ_MESSAGING_SYSTEM, + }; + + (void)wraprec; + +#if ZEND_MODULE_API_NO < ZEND_8_0_X_API_NO /* PHP8.0+ */ + zval* amqp_msg = NULL; + amqp_msg = nr_php_get_user_func_arg(1, NR_EXECUTE_ORIG_ARGS); + /* + * nr_php_amqplib_insert_dt_headers will check the validity of the object. + */ + nr_php_amqplib_insert_dt_headers(amqp_msg); +#endif + + amqp_exchange = nr_php_get_user_func_arg(2, NR_EXECUTE_ORIG_ARGS); + if (nr_php_is_zval_non_empty_string(amqp_exchange)) { + /* + * In PHP 7.x, the following will create a strdup in + * message_params.destination_name that needs to be freed. + */ + message_params.destination_name + = ENSURE_PERSISTENCE(Z_STRVAL_P(amqp_exchange)); + } else { + /* + * For producer, this is exchange name. Exchange name is Default in case + * of empty string. + */ + if (nr_php_is_zval_valid_string(amqp_exchange)) { + message_params.destination_name = ENSURE_PERSISTENCE("Default"); + } + } + + amqp_routing_key = nr_php_get_user_func_arg(3, NR_EXECUTE_ORIG_ARGS); + if (nr_php_is_zval_non_empty_string(amqp_routing_key)) { + /* + * In PHP 7.x, the following will create a strdup in + * message_params.messaging_destination_routing_key that needs to be + * freed. + */ + message_params.messaging_destination_routing_key + = ENSURE_PERSISTENCE(Z_STRVAL_P(amqp_routing_key)); + } + + amqp_connection = nr_php_get_zval_object_property( + nr_php_execute_scope(execute_data), "connection"); + /* + * In PHP 7.x, the following will create a strdup in + * message_params.server_address that needs to be freed. + */ + nr_php_amqplib_get_host_and_port(amqp_connection, &message_params); + + /* For PHP 7.x compatibility. */ + NR_PHP_WRAPPER_CALL + + /* + * Now create and end the instrumented segment as a message segment. + * + * By this point, it's been determined that this call will be instrumented + * so only create the message segment now, grab the parent segment start + * time, add our message segment attributes/metrics then close the newly + * created message segment. + */ + + if (NULL == auto_segment) { + /* + * Must be checked after PHP_WRAPPER_CALL to ensure txn didn't end during + * the call. + */ + goto end; + } + + message_segment = nr_segment_start(NRPRG(txn), NULL, NULL); + if (NULL != message_segment) { + /* re-use start time from auto_segment started in func_begin */ + message_segment->start_time = auto_segment->start_time; + nr_segment_message_end(&message_segment, &message_params); + } + +end: + /* + * Because we had to strdup values to persist them beyond + * NR_PHP_WRAPPER_CALL, now we destroy them. There isn't a separate function + * to destroy all since some of the params are string literals and we don't + * want to strdup everything if we don't have to. RabbitMQ basic_publish + * PHP 7.x will only strdup server_address, destination_name, and + * messaging_destination_routing_key. + */ + UNDO_PERSISTENCE(message_params.server_address); + UNDO_PERSISTENCE(message_params.destination_name); + UNDO_PERSISTENCE(message_params.messaging_destination_routing_key); +} +NR_PHP_WRAPPER_END + +/* + * Purpose : A wrapper to instrument the php-amqplib basic_get. This + * retrieves values to populate a message segment. + * Note: + * The DT header 'newrelic' will only be considered if both + * newrelic.distributed_tracing_enabled is enabled and + * newrelic.distributed_tracing_exclude_newrelic_header is set to false in the + * INI settings. The W3C headers 'traceparent' and 'tracestate' will will only + * be considered if newrelic.distributed_tracing_enabled is enabled in the + * newrelic.ini settings. If settings are correct, it will + * retrieve the DT headers and, if applicable, apply to the txn. + * + * PhpAmqpLib\Channel\AMQPChannel::basic_get + * Direct access to a queue if no message was available in the queue, return + * null + * + * @param string $queue + * @param bool $no_ack + * @param int|null $ticket + * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified + * operation timeout was exceeded + * @return AMQPMessage|null + */ +NR_PHP_WRAPPER(nr_rabbitmq_basic_get) { + zval* amqp_queue = NULL; + zval* amqp_exchange = NULL; + zval* amqp_routing_key = NULL; + zval* amqp_connection = NULL; + nr_segment_t* message_segment = NULL; + zval** retval_ptr = NR_GET_RETURN_VALUE_PTR; + + nr_segment_message_params_t message_params = { + .library = RABBITMQ_LIBRARY_NAME, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_EXCHANGE, + .message_action = NR_SPANKIND_CONSUMER, + .messaging_system = RABBITMQ_MESSAGING_SYSTEM, + }; + + (void)wraprec; + + amqp_queue = nr_php_get_user_func_arg(1, NR_EXECUTE_ORIG_ARGS); + if (nr_php_is_zval_non_empty_string(amqp_queue)) { + /* For consumer, this is queue name. */ + message_params.destination_name + = ENSURE_PERSISTENCE(Z_STRVAL_P(amqp_queue)); + } + + amqp_connection = nr_php_get_zval_object_property( + nr_php_execute_scope(execute_data), "connection"); + /* + * In PHP 7.x, the following will create a strdup in + * message_params.server_address that needs to be freed. + */ + nr_php_amqplib_get_host_and_port(amqp_connection, &message_params); + + /* Compatibility with PHP 7.x */ + NR_PHP_WRAPPER_CALL; + + if (NULL == auto_segment) { + /* + * Must be checked after PHP_WRAPPER_CALL to ensure txn didn't end during + * the call. + */ + goto end; + } + /* + *The retval should be an AMQPMessage. nr_php_is_zval_* ops do NULL checks + * as well. + */ + if (NULL != retval_ptr && nr_php_is_zval_valid_object(*retval_ptr)) { + /* + * Get the exchange and routing key from the AMQPMessage + */ + amqp_exchange = nr_php_get_zval_object_property(*retval_ptr, "exchange"); + if (nr_php_is_zval_non_empty_string(amqp_exchange)) { + /* Used with consumer only; this is exchange name. Exchange name is + * Default in case of empty string. */ + message_params.messaging_destination_publish_name + = Z_STRVAL_P(amqp_exchange); + } else { + /* + * For consumer, this is exchange name. Exchange name is Default in + * case of empty string. + */ + if (nr_php_is_zval_valid_string(amqp_exchange)) { + message_params.messaging_destination_publish_name = "Default"; + } + } + + amqp_routing_key + = nr_php_get_zval_object_property(*retval_ptr, "routingKey"); + if (nr_php_is_zval_non_empty_string(amqp_routing_key)) { + message_params.messaging_destination_routing_key + = Z_STRVAL_P(amqp_routing_key); + } + + nr_php_amqplib_retrieve_dt_headers(*retval_ptr); + } + + /* Now create and end the instrumented segment as a message segment. */ + /* + * By this point, it's been determined that this call will be instrumented + * so only create the message segment now, grab the parent segment start + * time, add our message segment attributes/metrics then close the newly + * created message segment. + */ + message_segment = nr_segment_start(NRPRG(txn), NULL, NULL); + + if (NULL == message_segment) { + goto end; + } + + /* re-use start time from auto_segment started in func_begin */ + message_segment->start_time = auto_segment->start_time; + + nr_segment_message_end(&message_segment, &message_params); + +end: + /* + * Because we had to strdup values to persist them beyond + * NR_PHP_WRAPPER_CALL, now we destroy them. There isn't a separate function + * to destroy all since some of the params are string literals and we don't + * want to strdup everything if we don't have to. RabbitMQ basic_get PHP 7.x + * will only strdup server_address and destination_name. + */ + // amber make these peristent for all since retval of null clears the values + // from the cxn + UNDO_PERSISTENCE(message_params.server_address); + UNDO_PERSISTENCE(message_params.destination_name); +} +NR_PHP_WRAPPER_END + +void nr_php_amqplib_enable() { + /* + * Set the UNKNOWN package first, so it doesn't overwrite what we find with + * nr_php_amqplib_handle_version. + */ + if (NRINI(vulnerability_management_package_detection_enabled)) { + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); + } + + /* Extract the version */ + nr_php_amqplib_handle_version(); + nr_php_amqplib_ensure_class(); + +#if ZEND_MODULE_API_NO >= ZEND_8_0_X_API_NO /* less than PHP8.0 */ + nr_php_wrap_user_function_before_after_clean( + NR_PSTR("PhpAmqpLib\\Channel\\AMQPChannel::basic_publish"), + nr_rabbitmq_basic_publish_before, nr_rabbitmq_basic_publish, + nr_rabbitmq_basic_publish); + + nr_php_wrap_user_function_before_after_clean( + NR_PSTR("PhpAmqpLib\\Channel\\AMQPChannel::basic_get"), NULL, + nr_rabbitmq_basic_get, nr_rabbitmq_basic_get); +#else + nr_php_wrap_user_function( + NR_PSTR("PhpAmqpLib\\Channel\\AMQPChannel::basic_publish"), + nr_rabbitmq_basic_publish); + + nr_php_wrap_user_function( + NR_PSTR("PhpAmqpLib\\Channel\\AMQPChannel::basic_get"), + nr_rabbitmq_basic_get); +#endif +} diff --git a/agent/lib_php_amqplib.h b/agent/lib_php_amqplib.h new file mode 100644 index 000000000..b4e565b40 --- /dev/null +++ b/agent/lib_php_amqplib.h @@ -0,0 +1,34 @@ +/* + * Copyright 2024 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Functions relating to instrumenting AWS-SDK-PHP. + */ +#ifndef LIB_PHP_AMQPLIB +#define LIB_PHP_AMQPLIB + +#define RABBITMQ_LIBRARY_NAME "RabbitMQ" +#define RABBITMQ_MESSAGING_SYSTEM "rabbitmq" + +#define AMQP_CONSTRUCT_PARAMS_SERVER_INDEX 0 +#define AMQP_CONSTRUCT_PARAMS_PORT_INDEX 1 + +/* + * Purpose : Enable the library after detection. + * + * Params : None + * + * Returns : None + */ +extern void nr_aws_php_amqplib_enable(); + +/* + * Purpose : Detect the version and create package and metrics. + * + * Params : None + * + * Returns : None + */ +extern void nr_php_amqplib_handle_version(); + +#endif /* LIB_PHP_AMQPLIB */ diff --git a/agent/php_execute.c b/agent/php_execute.c index 4a8765f41..41c430d11 100644 --- a/agent/php_execute.c +++ b/agent/php_execute.c @@ -491,6 +491,10 @@ static nr_library_table_t libraries[] = { {"MongoDB", NR_PSTR("mongodb/src/client.php"), nr_mongodb_enable}, + /* php-amqplib RabbitMQ; PHP Agent supports php-amqplib >= 3.7 */ + {"php-amqplib", NR_PSTR("phpamqplib/connection/abstractconnection.php"), + nr_php_amqplib_enable}, + /* * The first path is for Composer installs, the second is for * /usr/local/bin. diff --git a/agent/tests/test_lib_php_amqplib.c b/agent/tests/test_lib_php_amqplib.c new file mode 100644 index 000000000..c0261cfc2 --- /dev/null +++ b/agent/tests/test_lib_php_amqplib.c @@ -0,0 +1,144 @@ +/* + * Copyright 2024 New Relic Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "tlib_php.h" + +#include "php_agent.h" +#include "lib_php_amqplib.h" +#include "fw_support.h" + +tlib_parallel_info_t parallel_info + = {.suggested_nthreads = -1, .state_size = 0}; + +#if ZEND_MODULE_API_NO > ZEND_7_1_X_API_NO + +static void declare_php_amqplib_package_class(const char* ns, + const char* klass, + const char* package_version) { + char* source = nr_formatf( + "namespace %s;" + "class %s{" + "const VERSION = '%s';" + "}", + ns, klass, package_version); + + tlib_php_request_eval(source); + + nr_free(source); +} + +static void test_nr_lib_php_amqplib_handle_version(void) { +#define LIBRARY_NAME "php-amqplib/php-amqplib" + const char* library_versions[] + = {"7", "10", "100", "4.23", "55.34", "6123.45", "0.4.5"}; + nr_php_package_t* p = NULL; +#define TEST_DESCRIPTION_FMT \ + "nr_lib_php_amqplib_handle_version with library_versions[%ld]=%s: package " \ + "major version metric - %s" + char* test_description = NULL; + size_t i = 0; + + /* + * If lib_php_amqplib_handle_version function is ever called, we have already + * detected the php-amqplib library. + */ + + /* + * PhpAmqpLib/Package class exists. Should create php-amqplib package metric + * suggestion with version + */ + for (i = 0; i < sizeof(library_versions) / sizeof(library_versions[0]); i++) { + tlib_php_request_start(); + + declare_php_amqplib_package_class("PhpAmqpLib", "Package", + library_versions[i]); + nr_php_amqplib_handle_version(); + + p = nr_php_packages_get_package( + NRPRG(txn)->php_package_major_version_metrics_suggestions, + LIBRARY_NAME); + + test_description = nr_formatf(TEST_DESCRIPTION_FMT, i, library_versions[i], + "suggestion created"); + tlib_pass_if_not_null(test_description, p); + nr_free(test_description); + + test_description = nr_formatf(TEST_DESCRIPTION_FMT, i, library_versions[i], + "suggested version set"); + tlib_pass_if_str_equal(test_description, library_versions[i], + p->package_version); + nr_free(test_description); + + tlib_php_request_end(); + } + + /* + * PhpAmqpLib/Package class does not exist, should create package metric + * suggestion with PHP_PACKAGE_VERSION_UNKNOWN version. This case should never + * happen in real situations. + */ + tlib_php_request_start(); + + nr_php_amqplib_handle_version(); + + p = nr_php_packages_get_package( + NRPRG(txn)->php_package_major_version_metrics_suggestions, LIBRARY_NAME); + + tlib_pass_if_not_null( + "nr_lib_php_amqplib_handle_version when PhpAmqpLib\\Package class is not " + "defined - " + "suggestion created", + p); + tlib_pass_if_str_equal( + "nr_lib_php_amqplib_handle_version when PhpAmqpLib\\Package class is not " + "defined - " + "suggested version set to PHP_PACKAGE_VERSION_UNKNOWN", + PHP_PACKAGE_VERSION_UNKNOWN, p->package_version); + + tlib_php_request_end(); + + /* + * PhpAmqpLib\\Package class exists but VERSION does not. + * Should create package metric suggestion with PHP_PACKAGE_VERSION_UNKNOWN + * version. This case should never happen in real situations. + */ + tlib_php_request_start(); + + char* source + = "namespace PhpAmqpLib;" + "class Package{" + "const SADLY_DEPRECATED = 5.4;" + "}"; + + tlib_php_request_eval(source); + + nr_php_amqplib_handle_version(); + + p = nr_php_packages_get_package( + NRPRG(txn)->php_package_major_version_metrics_suggestions, LIBRARY_NAME); + + tlib_pass_if_not_null( + "nr_lib_php_amqplib_handle_version when PhpAmqpLib\\Package class is SET " + "but the const VERSION does not exist - " + "suggestion created", + p); + tlib_pass_if_str_equal( + "nr_lib_php_amqplib_handle_version when PhpAmqpLib\\Package class is SET " + "but the const VERSION does not exist - " + "defined - " + "suggested version set to PHP_PACKAGE_VERSION_UNKNOWN", + PHP_PACKAGE_VERSION_UNKNOWN, p->package_version); + + tlib_php_request_end(); +} + +void test_main(void* p NRUNUSED) { + tlib_php_engine_create(""); + test_nr_lib_php_amqplib_handle_version(); + tlib_php_engine_destroy(); +} +#else +void test_main(void* p NRUNUSED) {} +#endif diff --git a/axiom/nr_segment.c b/axiom/nr_segment.c index 4aaf7c120..ade63d454 100644 --- a/axiom/nr_segment.c +++ b/axiom/nr_segment.c @@ -331,6 +331,15 @@ static void nr_populate_message_spans(nr_span_event_t* span_event, segment->typed_attributes->message.messaging_system); nr_span_event_set_message(span_event, NR_SPAN_MESSAGE_SERVER_ADDRESS, segment->typed_attributes->message.server_address); + nr_span_event_set_message( + span_event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY, + segment->typed_attributes->message.messaging_destination_routing_key); + nr_span_event_set_message( + span_event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME, + segment->typed_attributes->message.messaging_destination_publish_name); + nr_span_event_set_message_ulong( + span_event, NR_SPAN_MESSAGE_SERVER_PORT, + segment->typed_attributes->message.server_port); } static nr_status_t add_user_attribute_to_span_event(const char* key, @@ -640,7 +649,10 @@ bool nr_segment_set_message(nr_segment_t* segment, .message_action = message->message_action, .destination_name = nr_strempty(message->destination_name) ? NULL: nr_strdup(message->destination_name), .messaging_system = nr_strempty(message->messaging_system) ? NULL: nr_strdup(message->messaging_system), + .messaging_destination_routing_key = nr_strempty(message->messaging_destination_routing_key) ? NULL: nr_strdup(message->messaging_destination_routing_key), + .messaging_destination_publish_name = nr_strempty(message->messaging_destination_publish_name) ? NULL: nr_strdup(message->messaging_destination_publish_name), .server_address = nr_strempty(message->server_address) ? NULL: nr_strdup(message->server_address), + .server_port = message->server_port, }; // clang-format on diff --git a/axiom/nr_segment.h b/axiom/nr_segment.h index f35ab6224..646f11e5f 100644 --- a/axiom/nr_segment.h +++ b/axiom/nr_segment.h @@ -128,6 +128,19 @@ typedef struct _nr_segment_message_t { char* messaging_system; /* for ex: aws_sqs. Needed for SQS relationship.*/ char* server_address; /*The server domain name or IP address. Needed for MQBROKER relationship.*/ + char* + messaging_destination_publish_name; /* Otel attribute for message + consumers. (In the agent, this + means Action is Consume in the span + name). This attribute is equal to + the corresponding attribute + messaging.destination.name from the + producer. This attribute is needed + for apps using RabbitMQ and it + represents the exchange name.*/ + char* messaging_destination_routing_key; /* The routing key for a RabbitMQ + operation.*/ + uint64_t server_port; /*The server port.*/ } nr_segment_message_t; typedef struct _nr_segment_cloud_attrs_t { diff --git a/axiom/nr_segment_message.c b/axiom/nr_segment_message.c index 92f8babd1..d07a3217e 100644 --- a/axiom/nr_segment_message.c +++ b/axiom/nr_segment_message.c @@ -12,6 +12,7 @@ #include "nr_segment_private.h" #include "util_strings.h" #include "util_url.h" +#include "util_logging.h" /* * Purpose : Set all the typed message attributes on the segment. @@ -39,6 +40,11 @@ static void nr_segment_message_set_attrs( message_attributes.destination_name = params->destination_name; message_attributes.messaging_system = params->messaging_system; message_attributes.server_address = params->server_address; + message_attributes.messaging_destination_routing_key + = params->messaging_destination_routing_key; + message_attributes.messaging_destination_publish_name + = params->messaging_destination_publish_name; + message_attributes.server_port = params->server_port; } nr_segment_set_message(segment, &message_attributes); @@ -96,6 +102,8 @@ static char* nr_segment_message_create_metrics( const char* action_string = NULL; const char* destination_type_string = NULL; const char* library_string = NULL; + const char* final_destination_string = NULL; + const char* destination_string = NULL; char* rollup_metric = NULL; char* scoped_metric = NULL; @@ -156,6 +164,19 @@ static char* nr_segment_message_create_metrics( destination_type_string = ""; break; } + + destination_string = nr_strempty(message_params->destination_name) + ? "" + : message_params->destination_name; + /* + * messaging_destination_publish_name is only used if it exists; In all other + * cases, we use the value from destination_string. + */ + final_destination_string + = nr_strempty(message_params->messaging_destination_publish_name) + ? destination_string + : message_params->messaging_destination_publish_name; + /* * Create the scoped metric * MessageBroker/{Library}/{DestinationType}/{Action}/Named/{DestinationName} @@ -167,12 +188,9 @@ static char* nr_segment_message_create_metrics( scoped_metric = nr_formatf("MessageBroker/%s/%s/%s/Temp", library_string, destination_type_string, action_string); } else { - scoped_metric - = nr_formatf("MessageBroker/%s/%s/%s/Named/%s", library_string, - destination_type_string, action_string, - nr_strempty(message_params->destination_name) - ? "" - : message_params->destination_name); + scoped_metric = nr_formatf("MessageBroker/%s/%s/%s/Named/%s", + library_string, destination_type_string, + action_string, final_destination_string); } nr_segment_add_metric(segment, scoped_metric, true); diff --git a/axiom/nr_segment_message.h b/axiom/nr_segment_message.h index 2104e3f35..6917f78de 100644 --- a/axiom/nr_segment_message.h +++ b/axiom/nr_segment_message.h @@ -38,12 +38,27 @@ typedef struct { char* messaging_system; /* for ex: aws_sqs. Needed for SQS relationship.*/ char* server_address; /*The server domain name or IP address. Needed for MQBROKER relationship.*/ + char* + messaging_destination_publish_name; /* Otel attribute for message + consumers. (In the agent, this + means Action is Consume in the span + name). This attribute is equal to + the corresponding attribute + messaging.destination.name from the + producer. This attribute is needed + for apps using RabbitMQ and it + represents the exchange name.*/ + char* messaging_destination_routing_key; /* The routing key for a RabbitMQ + operation.*/ + uint64_t server_port; /*The server port.*/ + } nr_segment_message_params_t; /* * Purpose : End a message segment and record metrics. * - * Params : 1. nr_segment_message_params_t + * Params : 1. nr_segment_t** segment: Segment to apply message params to and end + * 2. const nr_segment_message_params_t* params: params to apply to segment * * Returns: true on success. */ diff --git a/axiom/nr_segment_private.c b/axiom/nr_segment_private.c index f063862b7..ea5bbf8cc 100644 --- a/axiom/nr_segment_private.c +++ b/axiom/nr_segment_private.c @@ -47,6 +47,8 @@ void nr_segment_message_destroy_fields(nr_segment_message_t* message) { nr_free(message->destination_name); nr_free(message->messaging_system); nr_free(message->server_address); + nr_free(message->messaging_destination_publish_name); + nr_free(message->messaging_destination_routing_key); } void nr_segment_destroy_typed_attributes( diff --git a/axiom/nr_segment_traces.c b/axiom/nr_segment_traces.c index 153ccd5c2..d2f1fddac 100644 --- a/axiom/nr_segment_traces.c +++ b/axiom/nr_segment_traces.c @@ -170,6 +170,16 @@ static void add_typed_attributes_to_buffer(nrbuf_t* buf, message->messaging_system, false); add_hash_key_value_to_buffer(buf, "server_address", message->server_address, false); + add_hash_key_value_to_buffer(buf, "messaging_destination_publish_name", + message->messaging_destination_publish_name, + false); + add_hash_key_value_to_buffer(buf, "messaging_destination_routing_key", + message->messaging_destination_routing_key, + false); + if (0 != message->server_port) { + add_hash_key_value_to_buffer_int(buf, "server_port", + &message->server_port); + } } break; case NR_SEGMENT_CUSTOM: default: diff --git a/axiom/nr_span_event.c b/axiom/nr_span_event.c index 00987881a..7c8c2dbe0 100644 --- a/axiom/nr_span_event.c +++ b/axiom/nr_span_event.c @@ -377,6 +377,42 @@ void nr_span_event_set_message(nr_span_event_t* event, nro_set_hash_string(event->agent_attributes, NR_ATTR_SERVER_ADDRESS, new_value); break; + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY: + nro_set_hash_string(event->agent_attributes, + NR_ATTR_MESSAGING_DESTINATION_ROUTING_KEY, new_value); + break; + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME: + nro_set_hash_string(event->agent_attributes, + NR_ATTR_MESSAGING_DESTINATION_PUBLISH_NAME, + new_value); + break; + case NR_SPAN_MESSAGE_SERVER_PORT: + break; + } +} + +void nr_span_event_set_message_ulong(nr_span_event_t* event, + nr_span_event_message_member_t member, + const uint64_t new_value) { + if (NULL == event || 0 == new_value) { + return; + } + + switch (member) { + case NR_SPAN_MESSAGE_SERVER_PORT: + nro_set_hash_ulong(event->agent_attributes, NR_ATTR_SERVER_PORT, + new_value); + break; + case NR_SPAN_MESSAGE_DESTINATION_NAME: + break; + case NR_SPAN_MESSAGE_MESSAGING_SYSTEM: + break; + case NR_SPAN_MESSAGE_SERVER_ADDRESS: + break; + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY: + break; + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME: + break; } } @@ -535,10 +571,45 @@ const char* nr_span_event_get_message(const nr_span_event_t* event, case NR_SPAN_MESSAGE_SERVER_ADDRESS: return nro_get_hash_string(event->agent_attributes, NR_ATTR_SERVER_ADDRESS, NULL); + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY: + return nro_get_hash_string(event->agent_attributes, + NR_ATTR_MESSAGING_DESTINATION_ROUTING_KEY, + NULL); + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME: + return nro_get_hash_string(event->agent_attributes, + NR_ATTR_MESSAGING_DESTINATION_PUBLISH_NAME, + NULL); + case NR_SPAN_MESSAGE_SERVER_PORT: + break; } return NULL; } +uint64_t nr_span_event_get_message_ulong( + const nr_span_event_t* event, + nr_span_event_message_member_t member) { + if (NULL == event) { + return 0; + } + + switch (member) { + case NR_SPAN_MESSAGE_SERVER_PORT: + return nro_get_hash_ulong(event->agent_attributes, NR_ATTR_SERVER_PORT, + NULL); + case NR_SPAN_MESSAGE_DESTINATION_NAME: + break; + case NR_SPAN_MESSAGE_MESSAGING_SYSTEM: + break; + case NR_SPAN_MESSAGE_SERVER_ADDRESS: + break; + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY: + break; + case NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME: + break; + } + return 0; +} + void nr_span_event_set_attribute_user(nr_span_event_t* event, const char* name, const nrobj_t* value) { diff --git a/axiom/nr_span_event.h b/axiom/nr_span_event.h index 2a87b2306..33dced5c2 100644 --- a/axiom/nr_span_event.h +++ b/axiom/nr_span_event.h @@ -15,7 +15,12 @@ #define NR_ATTR_MESSAGING_DESTINATION_NAME "messaging.destination.name" #define NR_ATTR_MESSAGING_SYSTEM "messaging.system" +#define NR_ATTR_MESSAGING_DESTINATION_ROUTING_KEY \ + "messaging.rabbitmq.destination.routing_key" +#define NR_ATTR_MESSAGING_DESTINATION_PUBLISH_NAME \ + "messaging.destination_publish.name" #define NR_ATTR_SERVER_ADDRESS "server.address" +#define NR_ATTR_SERVER_PORT "server.port" #define NR_ATTR_CLOUD_REGION "cloud.region" #define NR_ATTR_CLOUD_ACCOUNT_ID "cloud.account.id" #define NR_ATTR_CLOUD_RESOURCE_ID "cloud.resource_id" @@ -80,6 +85,9 @@ typedef enum { NR_SPAN_MESSAGE_DESTINATION_NAME, NR_SPAN_MESSAGE_MESSAGING_SYSTEM, NR_SPAN_MESSAGE_SERVER_ADDRESS, + NR_SPAN_MESSAGE_SERVER_PORT, + NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY, + NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME } nr_span_event_message_member_t; /* @@ -211,7 +219,7 @@ extern void nr_span_event_set_external_status(nr_span_event_t* event, const uint64_t status); /* - * Purpose : Set a message attribute. + * Purpose : Set a message attribute with a given string new_value. * * Params : 1. The target Span Event that should be changed. * 2. The message attribute to be set. @@ -222,6 +230,19 @@ extern void nr_span_event_set_message(nr_span_event_t* event, nr_span_event_message_member_t member, const char* new_value); +/* + * Purpose : Set a message attribute with a given ulong new_value. + * + * Params : 1. The target Span Event that should be changed. + * 2. The message attribute to be set. + * 3. The ulong value that the field will be after the function has + * executed. + */ +extern void nr_span_event_set_message_ulong( + nr_span_event_t* event, + nr_span_event_message_member_t member, + const uint64_t new_value); + /* * Purpose : Set a user attribute. * diff --git a/axiom/nr_span_event_private.h b/axiom/nr_span_event_private.h index 4f55c6f2f..01d544fc2 100644 --- a/axiom/nr_span_event_private.h +++ b/axiom/nr_span_event_private.h @@ -48,6 +48,9 @@ extern uint64_t nr_span_event_get_external_status(const nr_span_event_t* event); extern const char* nr_span_event_get_message( const nr_span_event_t* event, nr_span_event_message_member_t member); +extern uint64_t nr_span_event_get_message_ulong( + const nr_span_event_t* event, + nr_span_event_message_member_t member); extern const char* nr_span_event_get_error_message( const nr_span_event_t* event); extern const char* nr_span_event_get_error_class(const nr_span_event_t* event); diff --git a/axiom/tests/test_segment_message.c b/axiom/tests/test_segment_message.c index a68403caf..bdb944f39 100644 --- a/axiom/tests/test_segment_message.c +++ b/axiom/tests/test_segment_message.c @@ -31,6 +31,9 @@ typedef struct { const char* cloud_resource_id; const char* server_address; const char* aws_operation; + char* messaging_destination_publish_name; + char* messaging_destination_routing_key; + uint64_t server_port; } segment_message_expecteds_t; static nr_segment_t* mock_txn_segment(void) { @@ -86,6 +89,17 @@ static void test_message_segment(nr_segment_message_params_t* params, tlib_pass_if_str_equal(expecteds.test_name, seg->typed_attributes->message.server_address, expecteds.server_address); + tlib_pass_if_str_equal( + expecteds.test_name, + seg->typed_attributes->message.messaging_destination_publish_name, + expecteds.messaging_destination_publish_name); + tlib_pass_if_str_equal( + expecteds.test_name, + seg->typed_attributes->message.messaging_destination_routing_key, + expecteds.messaging_destination_routing_key); + tlib_pass_if_int_equal(expecteds.test_name, + seg->typed_attributes->message.server_port, + expecteds.server_port); nr_txn_destroy(&txn); } @@ -927,6 +941,197 @@ static void test_segment_message_aws_operation(void) { .aws_operation = "sendMessage"}); } +static void test_segment_message_server_port(void) { + /* + * server port values should NOT impact the creation + * of metrics. + */ + + /* Test server port not set, implicitly unset */ + test_message_segment( + &(nr_segment_message_params_t){ + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "server port not set, implicitly unset", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .server_port = 0}); + + /* Test server port explicitly set to 0 (unset) */ + test_message_segment( + &(nr_segment_message_params_t){ + .server_port = 0, + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "server port explicitly set to 0 (unset)", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .server_port = 0}); + + /* Test valid server_port */ + test_message_segment( + &(nr_segment_message_params_t){ + .server_port = 1234, + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid aws_operation", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .server_port = 1234}); +} + +static void test_segment_messaging_destination_publishing_name(void) { + /* + * messaging_destination_publish_name values should NOT impact the creation + * of metrics. + */ + + /* Test messaging_destination_publish_name is NULL */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_destination_publish_name = NULL, + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name + = "messaging_destination_publish_name is NULL, attribute " + "should be NULL, destination_name is used for metric/txn", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .messaging_destination_publish_name = NULL}); + + /* Test destination_publishing_name is empty string */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_destination_publish_name = "", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name + = "messaging_destination_publish_name is empty string, " + "attribute should be NULL, destination_name is used for metric/txn", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .messaging_destination_publish_name = NULL}); + + /* Test valid messaging_destination_publish_name */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_destination_publish_name = "publish_name", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid messaging_destination_publish_name is " + "non-empty string, attribute should be the string, " + "should be used for metric/txn", + .name = "MessageBroker/SQS/Topic/Produce/Named/publish_name", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .messaging_destination_publish_name = "publish_name"}); +} + +static void test_segment_messaging_destination_routing_key(void) { + /* + * messaging_destination_routing_key values should NOT impact the creation + * of metrics. + */ + + /* Test messaging_destination_routing_key is NULL */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_destination_routing_key = NULL, + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "messaging_destination_routing_key is NULL, attribute " + "should be NULL", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .messaging_destination_routing_key = NULL}); + + /* Test messaging_destination_routing_key is empty string */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_destination_routing_key = "", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "messaging_destination_routing_key is empty string, " + "attribute should be NULL", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .messaging_destination_routing_key = NULL}); + + /* Test valid messaging_destination_routing_key */ + test_message_segment( + &(nr_segment_message_params_t){ + .messaging_destination_routing_key = "key to the kingdom", + .library = "SQS", + .message_action = NR_SPANKIND_PRODUCER, + .destination_type = NR_MESSAGE_DESTINATION_TYPE_TOPIC, + .destination_name = "my_destination"}, + &(nr_segment_cloud_attrs_t){0}, true /* enable attributes */, + (segment_message_expecteds_t){ + .test_name = "Test valid messaging_destination_routing_key is " + "non-empty string, attribute should be the string", + .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .txn_rollup_metric = "MessageBroker/all", + .library_metric = "MessageBroker/SQS/all", + .num_metrics = 1, + .destination_name = "my_destination", + .messaging_destination_routing_key = "key to the kingdom"}); +} + static void test_segment_message_parameters_enabled(void) { /* * Attributes should be set based on value of parameters_enabled. @@ -935,6 +1140,9 @@ static void test_segment_message_parameters_enabled(void) { /* Test true message_parameters_enabled */ test_message_segment( &(nr_segment_message_params_t){ + .messaging_destination_routing_key = "key to the kingdom", + .messaging_destination_publish_name = "publish_name", + .server_port = 1234, .server_address = "localhost", .messaging_system = "my_system", .library = "SQS", @@ -948,7 +1156,7 @@ static void test_segment_message_parameters_enabled(void) { true /* enable attributes */, (segment_message_expecteds_t){ .test_name = "Test true message_parameters_enabled", - .name = "MessageBroker/SQS/Topic/Produce/Named/my_destination", + .name = "MessageBroker/SQS/Topic/Produce/Named/publish_name", .txn_rollup_metric = "MessageBroker/all", .library_metric = "MessageBroker/SQS/all", .num_metrics = 1, @@ -958,6 +1166,9 @@ static void test_segment_message_parameters_enabled(void) { .messaging_system = "my_system", .cloud_resource_id = "my_resource_id", .server_address = "localhost", + .messaging_destination_routing_key = "key to the kingdom", + .server_port = 1234, + .messaging_destination_publish_name = "publish_name", .aws_operation = "sendMessage"}); /* @@ -966,6 +1177,8 @@ static void test_segment_message_parameters_enabled(void) { */ test_message_segment( &(nr_segment_message_params_t){ + .messaging_destination_routing_key = "key to the kingdom", + .server_port = 1234, .server_address = "localhost", .messaging_system = "my_system", .library = "SQS", @@ -989,6 +1202,9 @@ static void test_segment_message_parameters_enabled(void) { .messaging_system = NULL, .cloud_resource_id = "my_resource_id", .server_address = NULL, + .messaging_destination_routing_key = NULL, + .server_port = 0, + .messaging_destination_publish_name = NULL, .aws_operation = "sendMessage"}); } @@ -1005,6 +1221,9 @@ void test_main(void* p NRUNUSED) { test_segment_message_messaging_system(); test_segment_message_cloud_resource_id(); test_segment_message_server_address(); + test_segment_message_server_port(); + test_segment_messaging_destination_publishing_name(); + test_segment_messaging_destination_routing_key(); test_segment_message_aws_operation(); test_segment_message_parameters_enabled(); } diff --git a/axiom/tests/test_span_event.c b/axiom/tests/test_span_event.c index ff44ab1cd..a00700a6b 100644 --- a/axiom/tests/test_span_event.c +++ b/axiom/tests/test_span_event.c @@ -483,7 +483,7 @@ static void test_span_events_extern_get_and_set(void) { nr_span_event_destroy(&span); } -static void test_span_event_message_string_get_and_set(void) { +static void test_span_event_message_get_and_set(void) { nr_span_event_t* event = nr_span_event_create(); // Test : that is does not crash when we give the setter a NULL pointer @@ -506,36 +506,93 @@ static void test_span_event_message_string_get_and_set(void) { tlib_pass_if_null("invalid range sent to nr_span_event_get_message", nr_span_event_get_message(event, 54321)); + // Test: the ulong getter should return 0 (unset) for any string values passed + // in + nr_span_event_set_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME, "chicken"); + tlib_pass_if_uint_equal( + "nr_span_event_get_message_ulong should return 0(unset) if given the " + "enum for a string value", + 0, + nr_span_event_get_message_ulong(event, NR_SPAN_MESSAGE_DESTINATION_NAME)); + + // Test: the string getter should return NULL if given the enum for a + // non-string value + nr_span_event_set_message_ulong(event, NR_SPAN_MESSAGE_SERVER_PORT, 1234); + tlib_pass_if_null( + "nr_span_event_get_message should return NULL if given the enum for a " + "non-string value", + nr_span_event_get_message(event, NR_SPAN_MESSAGE_SERVER_PORT)); + // Test : setting the destination name back and forth behaves as expected nr_span_event_set_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME, "chicken"); tlib_pass_if_str_equal( - "should be the component we set 1", "chicken", + "should be the destination name we set first", "chicken", nr_span_event_get_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME)); nr_span_event_set_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME, "oracle"); tlib_pass_if_str_equal( - "should be the component we set 2", "oracle", + "should be the destination name we set second", "oracle", nr_span_event_get_message(event, NR_SPAN_MESSAGE_DESTINATION_NAME)); // Test : setting the messaging system back and forth behaves as expected nr_span_event_set_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM, "chicken"); tlib_pass_if_str_equal( - "should be the component we set 1", "chicken", + "should be the messaging system we set first", "chicken", nr_span_event_get_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM)); nr_span_event_set_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM, "oracle"); tlib_pass_if_str_equal( - "should be the component we set 2", "oracle", + "should be the messaging system we set second", "oracle", nr_span_event_get_message(event, NR_SPAN_MESSAGE_MESSAGING_SYSTEM)); // Test : setting the server address back and forth behaves as expected nr_span_event_set_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS, "chicken"); tlib_pass_if_str_equal( - "should be the component we set 1", "chicken", + "should be the server address we set first", "chicken", nr_span_event_get_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS)); nr_span_event_set_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS, "oracle"); tlib_pass_if_str_equal( - "should be the component we set 2", "oracle", + "should be the server address we set second", "oracle", nr_span_event_get_message(event, NR_SPAN_MESSAGE_SERVER_ADDRESS)); + // Test : setting the destination pubishing name back and forth behaves as + // expected + nr_span_event_set_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME, "chicken"); + tlib_pass_if_str_equal( + "should be the destination publish name we set first", "chicken", + nr_span_event_get_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME)); + nr_span_event_set_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME, "oracle"); + tlib_pass_if_str_equal( + "should be the destination publish name we set second", "oracle", + nr_span_event_get_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_PUBLISH_NAME)); + + // Test : setting the destination routing key back and forth behaves as + // expected + nr_span_event_set_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY, "chicken"); + tlib_pass_if_str_equal( + "should be the destination routing key we set first", "chicken", + nr_span_event_get_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY)); + nr_span_event_set_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY, "oracle"); + tlib_pass_if_str_equal( + "should be the destination routing key we set second", "oracle", + nr_span_event_get_message( + event, NR_SPAN_MESSAGE_MESSAGING_DESTINATION_ROUTING_KEY)); + + // Test : setting the server port back and forth behaves as expected + nr_span_event_set_message_ulong(event, NR_SPAN_MESSAGE_SERVER_PORT, 1234); + tlib_pass_if_ulong_equal( + "should be the server port we set first", 1234, + nr_span_event_get_message_ulong(event, NR_SPAN_MESSAGE_SERVER_PORT)); + nr_span_event_set_message_ulong(event, NR_SPAN_MESSAGE_SERVER_PORT, 4321); + tlib_pass_if_ulong_equal( + "should be the server port we set first", 4321, + nr_span_event_get_message_ulong(event, NR_SPAN_MESSAGE_SERVER_PORT)); + nr_span_event_destroy(&event); } @@ -724,7 +781,7 @@ void test_main(void* p NRUNUSED) { test_span_event_duration(); test_span_event_datastore_string_get_and_set(); test_span_events_extern_get_and_set(); - test_span_event_message_string_get_and_set(); + test_span_event_message_get_and_set(); test_span_event_error(); test_span_event_set_attribute_user(); test_span_event_txn_parent_attributes();

    x6{bvVjo8@oh$zx1)%YkubS(@Zge1#0rtdIe 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%0Di6?5@$*jo9`0@s%XYf}sY+K>-7A?1F&-Ud~Ha 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