Skip to content

Commit 06663f1

Browse files
committed
nginx version; webserver helper
1 parent c9bbeea commit 06663f1

6 files changed

Lines changed: 78 additions & 32 deletions

File tree

src/Collector/Application/WebServer/Nginx/NginxConfigurationCollector.php

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,52 @@ class NginxConfigurationCollector extends BasicCollector
1515

1616
public function collect(): array
1717
{
18+
$nginxInfo = $this->getNginxInfo();
19+
1820
return [
19-
'modules' => $this->getActiveNginxModules(),
21+
'version' => $nginxInfo['version'],
22+
'modules' => $nginxInfo['modules'],
2023
'nonLinkedSitesEnabled' => $this->getRealConfigFilesWithServerNames()
2124
];
2225
}
2326

24-
private function getActiveNginxModules(): array
27+
private function getNginxInfo(): array
2528
{
2629
$runner = Runner::getInstance();
2730
$result = $runner->run('nginx -V 2>&1');
2831

2932
if ($result->getExitCode() !== Command::SUCCESS) {
30-
return [];
33+
return [
34+
'version' => null,
35+
'modules' => [],
36+
];
3137
}
3238

3339
$output = Runner::outputToArray($result->getOutput());
3440

41+
$version = null;
3542
$modules = [];
3643

3744
foreach ($output as $line) {
45+
if (str_starts_with($line, 'nginx version:')) {
46+
if (preg_match('/nginx\/([^\s]+)/', $line, $matches)) {
47+
$version = $matches[1];
48+
}
49+
}
50+
3851
if (preg_match_all('/--with-(\S+)/', $line, $matches)) {
3952
foreach ($matches[1] as $module) {
40-
if (str_contains($module, '=')) continue;
41-
$modules[] = $module;
53+
if (!str_contains($module, '=')) {
54+
$modules[] = $module;
55+
}
4256
}
4357
}
4458
}
4559

46-
return $modules;
60+
return [
61+
'version' => $version,
62+
'modules' => $modules,
63+
];
4764
}
4865

4966
public function isNginxInstalled(): bool

src/Collector/Application/WebServer/Nginx/NginxServerNameCollector.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function collect(): array
3333

3434
foreach ($configurations as $configuration) {
3535
$config = $this->extractServerData($configuration);
36-
if (!empty($config['serverName'])) {
36+
if (!empty($config['serverName']) && $config['serverName'] !== 'localhost') {
3737
$result[$config['serverName']] = $config;
3838
}
3939
}

src/Collector/Frameworks/Php/SymfonyCollector.php

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
namespace Startwind\Inventorio\Collector\Frameworks\Php;
44

5-
use Startwind\Inventorio\Collector\Application\WebServer\Apache\ApacheServerNameCollector;
65
use Startwind\Inventorio\Collector\BasicCollector;
76
use Startwind\Inventorio\Collector\InventoryAwareCollector;
87
use Startwind\Inventorio\Exec\File;
8+
use Startwind\Inventorio\Util\WebserverUtil;
99

1010
class SymfonyCollector extends BasicCollector implements InventoryAwareCollector
1111
{
@@ -19,20 +19,13 @@ public function setInventory(array $inventory): void
1919

2020
public function collect(): array
2121
{
22-
if (!array_key_exists(ApacheServerNameCollector::COLLECTION_IDENTIFIER, $this->inventory)
23-
|| !is_array($this->inventory[ApacheServerNameCollector::COLLECTION_IDENTIFIER])
24-
) return [];
25-
26-
$configs = $this->inventory[ApacheServerNameCollector::COLLECTION_IDENTIFIER];
27-
2822
$file = File::getInstance();
2923

3024
$symfonyDomains = [];
3125

32-
foreach ($configs as $config) {
33-
$domain = $config[ApacheServerNameCollector::FIELD_SERVER_NAME];
34-
$documentRoot = $config[ApacheServerNameCollector::FIELD_DOCUMENT_ROOT];
26+
$documentRoots = WebserverUtil::extractDocumentRoots($this->inventory);
3527

28+
foreach ($documentRoots as $domain => $documentRoot) {
3629
if ($file->fileExists($documentRoot . '/../composer.lock')) {
3730
$composerLockRaw = File::getInstance()->getContents($documentRoot . '/../composer.lock');
3831
$composerLock = json_decode($composerLockRaw, true);

src/Collector/Metrics/MetricThresholdCollector.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use Startwind\Inventorio\Collector\BasicCollector;
66
use Startwind\Inventorio\Metrics\Collector\Metric\Webserver\ApacheAccessLogMetric;
77
use Startwind\Inventorio\Metrics\Collector\Metric\Webserver\ApacheErrorLogMetric;
8+
use Startwind\Inventorio\Metrics\Collector\Metric\Webserver\NginxAccessLogMetric;
9+
use Startwind\Inventorio\Metrics\Collector\Metric\Webserver\NginxErrorLogMetric;
810
use Startwind\Inventorio\Metrics\Memory\Memory;
911

1012
class MetricThresholdCollector extends BasicCollector
@@ -32,7 +34,17 @@ class MetricThresholdCollector extends BasicCollector
3234
'type' => self::THRESHOLD_STANDARD_DEVIATION,
3335
'factor' => 3,
3436
'outlinerMinLimit' => 10
35-
]
37+
],
38+
NginxErrorLogMetric::IDENTIFIER => [
39+
'type' => self::THRESHOLD_STANDARD_DEVIATION,
40+
'factor' => 3,
41+
'outlinerMinLimit' => 10
42+
],
43+
NginxAccessLogMetric::IDENTIFIER => [
44+
'type' => self::THRESHOLD_STANDARD_DEVIATION,
45+
'factor' => 3,
46+
'outlinerMinLimit' => 10
47+
],
3648
];
3749

3850
public function collect(): array

src/Collector/Website/WordPress/WordPressCollector.php

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
namespace Startwind\Inventorio\Collector\Website\WordPress;
44

5-
use Startwind\Inventorio\Collector\Application\WebServer\Apache\ApacheServerNameCollector;
65
use Startwind\Inventorio\Collector\BasicCollector;
76
use Startwind\Inventorio\Collector\InventoryAwareCollector;
87
use Startwind\Inventorio\Exec\File;
98
use Startwind\Inventorio\Exec\Runner;
9+
use Startwind\Inventorio\Util\WebserverUtil;
1010

1111
class WordPressCollector extends BasicCollector implements InventoryAwareCollector
1212
{
@@ -23,22 +23,12 @@ public function setInventory(array $inventory): void
2323

2424
public function collect(): array
2525
{
26-
$configs = [];
27-
28-
if (array_key_exists(ApacheServerNameCollector::COLLECTION_IDENTIFIER, $this->inventory)
29-
&& is_array($this->inventory[ApacheServerNameCollector::COLLECTION_IDENTIFIER])
30-
) {
31-
$configs = array_merge($configs, $this->inventory[ApacheServerNameCollector::COLLECTION_IDENTIFIER]);
32-
}
33-
34-
$wordPressInstallations = [];
35-
3626
$runner = Runner::getInstance();
27+
$wordPressInstallations = [];
3728

38-
foreach ($configs as $config) {
39-
$domain = $config[ApacheServerNameCollector::FIELD_SERVER_NAME];
40-
$documentRoot = $config[ApacheServerNameCollector::FIELD_DOCUMENT_ROOT];
29+
$documentRoots = WebserverUtil::extractDocumentRoots($this->inventory);
4130

31+
foreach ($documentRoots as $domain => $documentRoot) {
4232
if ($runner->fileExists($documentRoot . '/wp-config.php')) {
4333
if (!str_ends_with($documentRoot, '/')) {
4434
$documentRoot .= '/';

src/Util/WebserverUtil.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Startwind\Inventorio\Util;
4+
5+
use Startwind\Inventorio\Collector\Application\WebServer\Apache\ApacheServerNameCollector;
6+
use Startwind\Inventorio\Collector\Application\WebServer\Nginx\NginxServerNameCollector;
7+
8+
abstract class WebserverUtil
9+
{
10+
public static function extractDocumentRoots(array $inventory): array
11+
{
12+
$documentRoots = self::extractDocumentRootByKey($inventory, ApacheServerNameCollector::COLLECTION_IDENTIFIER);
13+
$documentRoots = array_merge($documentRoots, self::extractDocumentRootByKey($inventory, NginxServerNameCollector::COLLECTION_IDENTIFIER));
14+
15+
return array_unique($documentRoots);
16+
}
17+
18+
private static function extractDocumentRootByKey(array $inventory, string $key): array
19+
{
20+
if (!array_key_exists($key, $inventory)
21+
|| !is_array($inventory[$key])
22+
) return [];
23+
24+
$configs = $inventory[$key];
25+
26+
$documentRoots = [];
27+
28+
foreach ($configs as $config) {
29+
$documentRoots[$config[ApacheServerNameCollector::FIELD_SERVER_NAME]] = $config[ApacheServerNameCollector::FIELD_DOCUMENT_ROOT];
30+
}
31+
32+
return $documentRoots;
33+
}
34+
}

0 commit comments

Comments
 (0)