Skip to content

Commit e0e8991

Browse files
committed
do something useful with all that package data
Save package and version information obtained from composer for vulnerability management package data payload. Additionally use it also to generate package supportability metrics.
1 parent 0ed35f1 commit e0e8991

File tree

5 files changed

+44
-1
lines changed

5 files changed

+44
-1
lines changed

agent/php_execute.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1055,8 +1055,13 @@ static void nr_execute_handle_autoload_composer_get_packages_information(const c
10551055
}
10561056
}
10571057
zval_dtor(&retval2);
1058-
nrl_verbosedebug(NRL_TXN, "package %s, version %s",
1058+
nrl_verbosedebug(NRL_INSTRUMENT, "package %s, version %s",
10591059
NRSAFESTR(Z_STRVAL_P(value)), NRSAFESTR(version));
1060+
if (NRINI(vulnerability_management_package_detection_enabled)) {
1061+
nr_txn_add_php_package(NRPRG(txn), NRSAFESTR(Z_STRVAL_P(value)), NRSAFESTR(version));
1062+
}
1063+
nr_fw_support_add_package_supportability_metric(NRPRG(txn), NRSAFESTR(Z_STRVAL_P(value)),
1064+
NRSAFESTR(version));
10601065
}
10611066
ZEND_HASH_FOREACH_END();
10621067
} else {

daemon/internal/newrelic/integration/php_packages.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,18 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro
371371
if 0 < len(version) {
372372
pkgs.packages = append(pkgs.packages, PhpPackage{"wordpress", version})
373373
}
374+
} else if 1 < len(splitCmd) && "composer-show.php" == splitCmd[1] {
375+
lines := strings.Split(string(out), "\n")
376+
version := ""
377+
for _, line := range lines {
378+
//fmt.Printf("line is |%s|\n", line)
379+
splitLine := strings.Split(line, "=>")
380+
if 2 == len(splitLine) {
381+
name := strings.TrimSpace(splitLine[0])
382+
version = strings.TrimSpace(splitLine[1])
383+
pkgs.packages = append(pkgs.packages, PhpPackage{name, version})
384+
}
385+
}
374386
} else {
375387
return nil, fmt.Errorf("ERROR - unknown method '%s'\n", splitCmd[0])
376388
}

tests/integration/autoloader/autoload-with-composer/vendor/composer/InstalledVersions.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,11 @@ public static function getInstalledPackages()
3030
// Return the package names
3131
return array_keys(self::$installed);
3232
}
33+
34+
// Mock of 'composer show' used by integration tests to generate list of packages:
35+
public static function show() {
36+
foreach (self::$installed as $package => $version) {
37+
echo "$package => $version\n";
38+
}
39+
}
3340
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
/*
4+
* Copyright 2020 New Relic Corporation. All rights reserved.
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
/*DESCRIPTION
9+
Mock of 'composer show' used by integration tests to generate list of packages.
10+
*/
11+
12+
13+
include "autoload-with-composer/vendor/composer/InstalledVersions.php";
14+
Composer\InstalledVersions::show();

tests/integration/autoloader/test_autoloader_with_composer.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
/*INI
1414
*/
1515

16+
/*EXPECT_PHP_PACKAGES
17+
command=php composer-show.php
18+
expected_packages=vendor1/package1, vendor2/package2
19+
*/
20+
1621
/*EXPECT_METRICS_EXIST
1722
Supportability/library/Autoloader/detected, 1
1823
Supportability/library/Composer/detected, 1

0 commit comments

Comments
 (0)