feature: Adds support for enabling / disabling modules per OS (#4963)

* fixes #4946
first try, should be checked first
only discovery first

* add OS modules status indication

* add debug output
add os poller module support

* fix some whitespaces

* fix missing semicolon

* fix some whitespaces

* Modify the modules page

It now shows unset for unset device settings.
Also, `$os_module_status = $config['os'][$device['os']]['poller_modules'][$module];` doesn't work like you would expect. Fix that behavior.

* Fix mangled tabs

* optimize debug output
add docs

* text highlighting

* Streamline docs #1
* Update docs
* Spell out Global, OS, Device.
This commit is contained in:
Vitali Kari
2016-11-13 20:46:05 +01:00
committed by Tony Murray
parent dd640af530
commit 8841eece94
5 changed files with 87 additions and 9 deletions

View File

@@ -88,6 +88,20 @@ $config['discovery_modules']['services'] = 1;
$config['discovery_modules']['charge'] = 1;
```
#### OS based Discovery config
You can enable or disable modules for a specific OS by add corresponding line in `includes/definitions.inc.php`
OS based settings have preference over global. Device based settings have preference over all others
Discover performance improvement can be achieved by deactivating all modules that are not supported by specific OS.
E.g. to deactivate spanning tree but activate discovery-arp module for linux OS
```php
$config['os']['linux']['discovery_modules']['stp'] = 0;
$config['os']['linux']['discovery_modules']['discovery-arp'] = 1;
```
#### Discovery modules
`os`: Os detection. This module will pick up the OS of the device.

View File

@@ -76,6 +76,20 @@ $config['poller_modules']['cisco-asa-firewall'] = 1;
$config['poller_modules']['mib'] = 0;
```
#### OS based Poller config
You can enable or disable modules for a specific OS by add corresponding line in `includes/definitions.inc.php`
OS based settings have preference over global. Device based settings have preference over all others
Poller performance improvement can be achieved by deactivating all modules that are not supported by specific OS.
E.g. to deactivate spanning tree but activate unix-agent module for linux OS
```php
$config['os']['linux']['poller_modules']['stp'] = 0;
$config['os']['linux']['poller_modules']['unix-agent'] = 1;
```
#### Poller modules
`unix-agent`: Enable the check_mk agent for external support for applications.

View File

@@ -13,6 +13,7 @@
<tr>
<th>Module</th>
<th>Global</th>
<th>OS</th>
<th>Device</th>
<th></th>
</tr>
@@ -33,6 +34,22 @@ foreach ($poller_modules as $module => $module_status) {
echo('<span class="text-danger">Disabled</span>');
}
echo('
</td>
<td>');
if (isset($config['os'][$device['os']]['poller_modules'][$module])) {
if ($config['os'][$device['os']]['poller_modules'][$module]) {
echo('<span class="text-success">Enabled</span>');
$module_status = 1;
} else {
echo('<span class="text-danger">Disabled</span>');
$module_status = 0;
}
} else {
echo('<span>Unset</span>');
}
echo('
</td>
<td>
@@ -47,11 +64,10 @@ foreach ($poller_modules as $module => $module_status) {
$module_checked = '';
}
} else {
echo('<span id="poller-module-'.$module.'">Unset</span>');
if ($module_status == 1) {
echo('<span id="poller-module-'.$module.'"class="text-success">Enabled</span>');
$module_checked = 'checked';
} else {
echo('<span id="poller-module-'.$module.'"class="text-danger">Disabled</span>');
$module_checked = '';
}
}
@@ -78,6 +94,7 @@ foreach ($poller_modules as $module => $module_status) {
<tr>
<th>Module</th>
<th>Global</th>
<th>OS</th>
<th>Device</th>
<th></th>
</tr>
@@ -101,6 +118,22 @@ foreach ($discovery_modules as $module => $module_status) {
echo('<span class="text-danger">Disabled</span>');
}
echo('
</td>
<td>');
if (isset($config['os'][$device['os']]['discovery_modules'][$module])) {
if ($config['os'][$device['os']]['discovery_modules'][$module]) {
echo('<span class="text-success">Enabled</span>');
$module_status = 1;
} else {
echo('<span class="text-danger">Disabled</span>');
$module_status = 0;
}
} else {
echo('<span>Unset</span>');
}
echo('
</td>
<td>');
@@ -114,11 +147,10 @@ foreach ($discovery_modules as $module => $module_status) {
$module_checked = '';
}
} else {
echo('<span id="discovery-module-'.$module.'">Unset</span>');
if ($module_status == 1) {
echo('<span id="discovery-module-'.$module.'" class="text-success">Enabled</span>');
$module_checked = 'checked';
} else {
echo('<span id="discovery-module-'.$module.'" class="text-danger">Disabled</span>');
$module_checked = '';
}
}

View File

@@ -135,9 +135,16 @@ function discover_device($device, $options = null)
}
}
foreach ($config['discovery_modules'] as $module => $module_status) {
if ($force_module === true || $attribs['discover_' . $module] || ( $module_status && !isset($attribs['discover_' . $module]))) {
$os_module_status = $config['os'][$device['os']]['discovery_modules'][$module];
d_echo("Modules status: Global" . (isset($module_status) ? ($module_status ? '+ ' : '- ') : ' '));
d_echo("OS" . (isset($os_module_status) ? ($os_module_status ? '+ ' : '- ') : ' '));
d_echo("Device" . (isset($attribs['discover_' . $module]) ? ($attribs['discover_' . $module] ? '+ ' : '- ') : ' '));
if ($force_module === true ||
$attribs['discover_' . $module] ||
($os_module_status && !isset($attribs['discover_' . $module])) ||
($module_status && !isset($os_module_status) && !isset($attribs['discover_' . $module]))) {
$module_start = microtime(true);
echo "#### Load disco module $module ####\n";
echo "\n#### Load disco module $module ####\n";
include "includes/discovery/$module.inc.php";
$module_time = microtime(true) - $module_start;
$module_time = substr($module_time, 0, 5);
@@ -145,6 +152,8 @@ function discover_device($device, $options = null)
echo "#### Unload disco module $module ####\n\n";
} elseif (isset($attribs['discover_' . $module]) && $attribs['discover_' . $module] == '0') {
echo "Module [ $module ] disabled on host.\n\n";
} elseif (isset($os_module_status) && $os_module_status == '0') {
echo "Module [ $module ] disabled on os.\n\n";
} else {
echo "Module [ $module ] disabled globally.\n\n";
}

View File

@@ -247,7 +247,14 @@ function poll_device($device, $options)
}
}
foreach ($config['poller_modules'] as $module => $module_status) {
if ($force_module === true || $attribs['poll_'.$module] || ( $module_status && !isset($attribs['poll_'.$module]))) {
$os_module_status = $config['os'][$device['os']]['poller_modules'][$module];
d_echo("Modules status: Global" . (isset($module_status) ? ($module_status ? '+ ' : '- ') : ' '));
d_echo("OS" . (isset($os_module_status) ? ($os_module_status ? '+ ' : '- ') : ' '));
d_echo("Device" . (isset($attribs['poll_' . $module]) ? ($attribs['poll_' . $module] ? '+ ' : '- ') : ' '));
if ($force_module === true ||
$attribs['poll_'.$module] ||
($os_module_status && !isset($attribs['poll_'.$module])) ||
($module_status && !isset($os_module_status) && !isset($attribs['poll_' . $module]))) {
$module_start = 0;
$module_time = 0;
$module_start = microtime(true);
@@ -274,9 +281,11 @@ function poll_device($device, $options)
unlink($oldrrd);
}
} elseif (isset($attribs['poll_'.$module]) && $attribs['poll_'.$module] == '0') {
echo "Module [ $module ] disabled on host.\n";
echo "Module [ $module ] disabled on host.\n\n";
} elseif (isset($os_module_status) && $os_module_status == '0') {
echo "Module [ $module ] disabled on os.\n\n";
} else {
echo "Module [ $module ] disabled globally.\n";
echo "Module [ $module ] disabled globally.\n\n";
}
}