mirror of
https://github.com/opnsense/plugins.git
synced 2026-05-28 04:34:15 -04:00
sysutils/monit: merge version 1.4 from master
This commit is contained in:
parent
ed11592ce7
commit
a6abecc7ee
7 changed files with 217 additions and 10 deletions
|
|
@ -1,5 +1,5 @@
|
|||
PLUGIN_NAME= monit
|
||||
PLUGIN_VERSION= 1.3
|
||||
PLUGIN_VERSION= 1.4
|
||||
PLUGIN_COMMENT= Proactive system monitoring
|
||||
PLUGIN_MAINTAINER= frank.brendel@eurolog.com
|
||||
PLUGIN_DEPENDS= monit
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
namespace OPNsense\Monit\Api;
|
||||
|
||||
use \OPNsense\Base\ApiControllerBase;
|
||||
use \OPNsense\Monit\Monit;
|
||||
|
||||
/**
|
||||
* Class StatusController
|
||||
|
|
@ -54,6 +55,13 @@ class StatusController extends ApiControllerBase
|
|||
|
||||
// get monit status page
|
||||
$request = "GET /_status?format=text HTTP/1.0\r\n";
|
||||
|
||||
// get credentials if configured
|
||||
$mdlMonit = new Monit();
|
||||
if ($mdlMonit->general->httpdUsername->__toString() != null && trim($mdlMonit->general->httpdUsername->__toString()) !== "" &&
|
||||
$mdlMonit->general->httpdPassword->__toString() != null && trim($mdlMonit->general->httpdPassword->__toString()) !== "") {
|
||||
$request .= "Authorization: Basic " . base64_encode($mdlMonit->general->httpdUsername->__toString() . ":" . $mdlMonit->general->httpdPassword->__toString()) . "\r\n";
|
||||
}
|
||||
$request .= "\r\n";
|
||||
$count = fwrite($socket, $request);
|
||||
$result['count'] = $count;
|
||||
|
|
|
|||
|
|
@ -49,4 +49,76 @@
|
|||
<type>checkbox</type>
|
||||
<help><![CDATA[Enable encryption.]]></help>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.logfile</id>
|
||||
<label>Log File</label>
|
||||
<type>text</type>
|
||||
<help><![CDATA[The log file of the Monit process. This can be the keyword <i>syslog</i> or the path to a file.]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.statefile</id>
|
||||
<label>State File</label>
|
||||
<type>text</type>
|
||||
<help><![CDATA[The state file of the Monit process.]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.eventqueuePath</id>
|
||||
<label>Eventqueue Path</label>
|
||||
<type>text</type>
|
||||
<help><![CDATA[The path to the eventqueue directory.]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.eventqueueSlots</id>
|
||||
<label>Eventqueue Slots</label>
|
||||
<type>text</type>
|
||||
<help><![CDATA[The number of eventqueue slots.]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.httpdEnabled</id>
|
||||
<label>Enable HTTPD</label>
|
||||
<type>checkbox</type>
|
||||
<help><![CDATA[Start the Monit httpd service.]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.httpdPort</id>
|
||||
<label>Monit HTTPD Port</label>
|
||||
<type>text</type>
|
||||
<help><![CDATA[The listen port of the Monit httpd service.]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.httpdAllow</id>
|
||||
<label>Monit HTTPD Access List</label>
|
||||
<type>select_multiple</type>
|
||||
<style>tokenize</style>
|
||||
<allownew>true</allownew>
|
||||
<help><![CDATA[The username:password or host/network etc. for accessing the Monit httpd service.<br>See <a rel="help" target="_blank" href="https://mmonit.com/monit/documentation/monit.html#Authentication">Monit Authentication</a>]]></help>
|
||||
<advanced>true</advanced>
|
||||
<hint>user:password, @group... Finish with TAB.</hint>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.mmonitUrl</id>
|
||||
<label>M/Monit URL</label>
|
||||
<type>text</type>
|
||||
<help><![CDATA[The M/Monit URL.<br><i>https://user:pass@192.168.1.10:8443/collector</i><br>If you want to control Monit services from your M/Monit instance you have to configure the Monit Port too and add corresponding firewall rules as well.]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.mmonitTimeout</id>
|
||||
<label>M/Monit Timeout</label>
|
||||
<type>text</type>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
<field>
|
||||
<id>monit.general.mmonitRegisterCredentials</id>
|
||||
<label>M/Monit Register Credentials</label>
|
||||
<type>checkbox</type>
|
||||
<help><![CDATA[Automatically register in M/Monit by sending Monit credentials (see Monit Access List above).]]></help>
|
||||
<advanced>true</advanced>
|
||||
</field>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<model>
|
||||
<mount>//OPNsense/monit</mount>
|
||||
<version>1.0.0</version>
|
||||
<version>1.0.1</version>
|
||||
<description>Monit settings</description>
|
||||
<items>
|
||||
<general>
|
||||
|
|
@ -46,6 +46,57 @@
|
|||
<default>0</default>
|
||||
<Required>Y</Required>
|
||||
</ssl>
|
||||
<logfile type="TextField">
|
||||
<Required>N</Required>
|
||||
<default>syslog facility log_daemon</default>
|
||||
<mask>/^(\/[^\/ ]*)+\/?|syslog.*$/</mask>
|
||||
<ValidationMessage>Should be a valid absolute path to the log file or the keyword "syslog".</ValidationMessage>
|
||||
</logfile>
|
||||
<statefile type="TextField">
|
||||
<Required>N</Required>
|
||||
<mask>/^(\/[^\/ ]*)+\/?$/</mask>
|
||||
<ValidationMessage>Should be a valid absolute path to the state file.</ValidationMessage>
|
||||
</statefile>
|
||||
<eventqueuePath type="TextField">
|
||||
<Required>N</Required>
|
||||
<mask>/^(\/[^\/ ]*)+\/?$/</mask>
|
||||
<ValidationMessage>Should be a valid absolute path to the eventqueue directory.</ValidationMessage>
|
||||
</eventqueuePath>
|
||||
<eventqueueSlots type="IntegerField">
|
||||
<Required>N</Required>
|
||||
<ValidationMessage>Eventqueue Slots must be a numeric value.</ValidationMessage>
|
||||
</eventqueueSlots>
|
||||
<httpdEnabled type="BooleanField">
|
||||
<default>0</default>
|
||||
<Required>Y</Required>
|
||||
</httpdEnabled>
|
||||
<httpdUsername type="TextField"/>
|
||||
<httpdPassword type="TextField"/>
|
||||
<httpdPort type="IntegerField">
|
||||
<default>2812</default>
|
||||
<Required>Y</Required>
|
||||
<MinimumValue>1</MinimumValue>
|
||||
<MaximumValue>65535</MaximumValue>
|
||||
<ValidationMessage>Local Monit Port needs to be an integer value between 0 and 65535</ValidationMessage>
|
||||
</httpdPort>
|
||||
<httpdAllow type="CSVListField">
|
||||
<Required>N</Required>
|
||||
<multiple>Y</multiple>
|
||||
</httpdAllow>
|
||||
<mmonitUrl type="TextField">
|
||||
<Required>N</Required>
|
||||
</mmonitUrl>
|
||||
<mmonitTimeout type="IntegerField">
|
||||
<default>5</default>
|
||||
<Required>Y</Required>
|
||||
<MinimumValue>0</MinimumValue>
|
||||
<MaximumValue>86400</MaximumValue>
|
||||
<ValidationMessage>M/Monit Timeout needs to be an integer value between 0 and 86400</ValidationMessage>
|
||||
</mmonitTimeout>
|
||||
<mmonitRegisterCredentials type="BooleanField">
|
||||
<default>1</default>
|
||||
<Required>Y</Required>
|
||||
</mmonitRegisterCredentials>
|
||||
</general>
|
||||
<alert type="ArrayField">
|
||||
<enabled type="BooleanField">
|
||||
|
|
|
|||
|
|
@ -68,6 +68,30 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
updateServiceStatusUI(data['status']);
|
||||
});
|
||||
});
|
||||
|
||||
// show/hide httpd/mmonit options
|
||||
function ShowHideGeneralFields(){
|
||||
if ($('#monit\\.general\\.httpdEnabled')[0].checked) {
|
||||
$('tr[for="monit.general.httpdPort"]').removeClass('hidden');
|
||||
$('tr[for="monit.general.httpdAllow"]').removeClass('hidden');
|
||||
$('tr[for="monit.general.mmonitUrl"]').removeClass('hidden');
|
||||
$('tr[for="monit.general.mmonitTimeout"]').removeClass('hidden');
|
||||
$('tr[for="monit.general.mmonitRegisterCredentials"]').removeClass('hidden');
|
||||
} else {
|
||||
$('tr[for="monit.general.httpdPort"]').addClass('hidden');
|
||||
$('tr[for="monit.general.httpdAllow"]').addClass('hidden');
|
||||
$('tr[for="monit.general.mmonitUrl"]').addClass('hidden');
|
||||
$('tr[for="monit.general.mmonitTimeout"]').addClass('hidden');
|
||||
$('tr[for="monit.general.mmonitRegisterCredentials"]').addClass('hidden');
|
||||
}
|
||||
};
|
||||
$('#monit\\.general\\.httpdEnabled').unbind('click').click(function(){
|
||||
ShowHideGeneralFields();
|
||||
});
|
||||
$('#show_advanced_frm_GeneralSettings').click(function(){
|
||||
ShowHideGeneralFields();
|
||||
});
|
||||
|
||||
$('#btn_ApplyGeneralSettings').unbind('click').click(function(){
|
||||
$("#frm_GeneralSettings_progress").addClass("fa fa-spinner fa-pulse");
|
||||
var frm_id = 'frm_GeneralSettings';
|
||||
|
|
@ -257,7 +281,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
</ul>
|
||||
<div class="tab-content content-box tab-content">
|
||||
<div id="general" class="tab-pane fade in active">
|
||||
<!-- monit geral settings -->
|
||||
<!-- monit general settings -->
|
||||
{{ partial("layout_partials/base_form",['fields':formGeneralSettings,'id':'frm_GeneralSettings','apply_btn_id':'btn_ApplyGeneralSettings'])}}
|
||||
</div>
|
||||
<div id="alerts" class="tab-pane fade in">
|
||||
|
|
|
|||
|
|
@ -37,16 +37,29 @@ use OPNsense\Monit\Monit;
|
|||
|
||||
$mdlMonit = new OPNsense\Monit\Monit;
|
||||
|
||||
$cfg = Config::getInstance();
|
||||
$cfgObj = $cfg->object();
|
||||
$shellObj = new OPNsense\Core\Shell;
|
||||
$generalNode = $mdlMonit->getNodeByReference('general');
|
||||
|
||||
// generate password for local Monit plugin user
|
||||
if (empty($cfgObj->general->httpdUsername) && empty($cfgObj->general->httpdPassword)) {
|
||||
srand();
|
||||
$generalNode->setNodes(array(
|
||||
"httpdUsername" => "root",
|
||||
"httpdPassword" => substr(str_shuffle(str_repeat('0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz', 32)), rand(0, 16), rand(17, 32))
|
||||
)
|
||||
);
|
||||
$mdlMonit->serializeToConfig(false, true);
|
||||
$cfg->save();
|
||||
}
|
||||
|
||||
$nodes = $mdlMonit->getNodes();
|
||||
// test if Monit is already configured
|
||||
if (count($nodes['service']) != 0 || count($nodes['test']) != 0) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$cfg = Config::getInstance();
|
||||
$cfgObj = $cfg->object();
|
||||
$shellObj = new OPNsense\Core\Shell;
|
||||
|
||||
// get number of cpus and calculate load average limits
|
||||
$nCPU = array();
|
||||
$shellObj->exec('/sbin/sysctl -n kern.smp.cpus', false, $nCPU);
|
||||
|
|
@ -130,7 +143,6 @@ $systemService['tests'] = substr($systemService['tests'], 0, -1);
|
|||
$rootFsService['tests'] = substr($rootFsService['tests'], 0, -1);
|
||||
|
||||
// set general properties
|
||||
$generalNode = $mdlMonit->getNodeByReference('general');
|
||||
$generalNode->setNodes($generalSettings);
|
||||
|
||||
// add an alert with (almost) default settings
|
||||
|
|
|
|||
|
|
@ -2,12 +2,52 @@
|
|||
|
||||
{% from 'OPNsense/Macros/interface.macro' import physical_interface %}
|
||||
{% if helpers.exists('OPNsense.monit.general') %}
|
||||
{% if helpers.exists('OPNsense.monit.general.httpdEnabled') and OPNsense.monit.general.httpdEnabled|default('0') == '1' %}
|
||||
{% set httpdCredentials = OPNsense.monit.general.httpdUsername ~ ':"' ~ OPNsense.monit.general.httpdPassword ~ '"' %}
|
||||
{% set httpdport = "port " ~ OPNsense.monit.general.httpdPort %}
|
||||
set httpd unixsocket /var/run/monit.sock {{ httpdport }}
|
||||
allow localhost
|
||||
allow {{ httpdCredentials }}
|
||||
{% if helpers.exists('OPNsense.monit.general.httpdAllow') %}
|
||||
{% for allow in OPNsense.monit.general.httpdAllow.split(",") %}
|
||||
{% set cred = allow.split(":") %}
|
||||
{% if cred[1] %}
|
||||
{% set pass = cred[1].split() %}
|
||||
{% set allow = cred[0] ~ ':"' ~ pass[0] ~ '" ' ~ pass[1] %}
|
||||
{% endif %}
|
||||
allow {{ allow }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if helpers.exists('OPNsense.monit.general.mmonitUrl') and OPNsense.monit.general.mmonitUrl|default('') != '' %}
|
||||
{% set mregister = 'register without credentials' if OPNsense.monit.general.mmonitRegisterCredentials|default('1') == '0' %}
|
||||
|
||||
set mmonit {{ OPNsense.monit.general.mmonitUrl }} timeout {{ OPNsense.monit.general.mmonitTimeout }} seconds {{ mregister }}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
set httpd unixsocket /var/run/monit.sock
|
||||
allow localhost
|
||||
allow localhost
|
||||
{% endif %}
|
||||
|
||||
set daemon {{ OPNsense.monit.general.interval }} with start delay {{ OPNsense.monit.general.startdelay }}
|
||||
|
||||
{% if helpers.exists('OPNsense.monit.general.logfile') and OPNsense.monit.general.logfile|default('') != '' %}
|
||||
set logfile {{ OPNsense.monit.general.logfile }}
|
||||
{% else %}
|
||||
set logfile syslog facility log_daemon
|
||||
{% endif %}
|
||||
|
||||
{% if helpers.exists('OPNsense.monit.general.statefile') and OPNsense.monit.general.statefile|default('') != '' %}
|
||||
set statefile {{ OPNsense.monit.general.statefile }}
|
||||
{% endif %}
|
||||
|
||||
{% if helpers.exists('OPNsense.monit.general.eventqueuePath') and OPNsense.monit.general.eventqueuePath|default('') != '' %}
|
||||
{% set slots = '' %}
|
||||
{% if helpers.exists('OPNsense.monit.general.eventqueueSlots') %}
|
||||
{% set slots = "slots " ~ OPNsense.monit.general.eventqueueSlots %}
|
||||
{% endif %}
|
||||
|
||||
set eventqueue basedir {{ OPNsense.monit.general.eventqueuePath }} {{ slots }}
|
||||
{% endif %}
|
||||
|
||||
{% if helpers.exists('OPNsense.monit.general.mailserver') %}
|
||||
{% set port = "port " ~ OPNsense.monit.general.port if OPNsense.monit.general.port|default('') != '' %}
|
||||
|
|
@ -15,7 +55,7 @@ set logfile syslog facility log_daemon
|
|||
{% set password = '' %}
|
||||
{% if helpers.exists('OPNsense.monit.general.username') and helpers.exists('OPNsense.monit.general.password') %}
|
||||
{% set username = "username " ~ OPNsense.monit.general.username %}
|
||||
{% set password = "password " ~ OPNsense.monit.general.password %}
|
||||
{% set password = "password " ~ '"' ~ OPNsense.monit.general.password ~ '"' %}
|
||||
{% endif %}
|
||||
{% set ssl = 'using ssl' if OPNsense.monit.general.ssl|default('0') == '1' %}
|
||||
set mailserver {{ OPNsense.monit.general.mailserver }} {{ port }} {{ username }} {{ password }} {{ ssl }}
|
||||
|
|
|
|||
Loading…
Reference in a new issue