Merge remote-tracking branch 'origin/master' into feature/add-to-dashboard-4537

This commit is contained in:
Marius Hein 2014-11-18 17:48:27 +01:00
commit f3846645f0
5 changed files with 240 additions and 95 deletions

View File

@ -1,117 +1,62 @@
# <a id="installation"></a> Installation
# Installation
The preferred way of installing Icinga Web 2 is to use the official package repositories depending on which operating
system and distribution you are running. But it is also possible to install Icinga Web 2 directly from source.
## Requirements
## <a id="installation-requirements"></a> Installing Requirements
* Apache2 with PHP >= 5.3.0 enabled
* PHP Zend Framework
* PHP with MySQL or PostgreSQL libraries
* MySQL or PostgreSQL server and client software
* Icinga 1.x or Icinga 2 as backend providers
* A web server, e.g. Apache or nginx
* PHP >= 5.3.0
* MySQL or PostgreSQL PHP libraries when using a database for authentication or storing user preferences into a database
* LDAP PHP library when using Active Directory or LDAP for authentication
* Icinga 1.x w/ Livestatus or IDO, Icinga 2 w/ Livestatus or IDO feature enabled
RHEL/CentOS requires the EPEL repository enabled (which provides the `php-ZendFramework`
package). OpenSUSE requires the [server monitoring](https://build.opensuse.org/project/show/server:monitoring) repository (which provides the `php5-ZendFramework` package) enabled.
## <a id="installation-from-package"></a> Installing Icinga Web 2 from Package
## configure && make
A guide on how to install Icinga Web 2 from package will follow shortly.
### Basic installation
## <a id="installation-from-source"></a> Installing Icinga Web 2 from Source
If you like to configurea and install icinga2-web from the command line or
if you want to create packages, configure and make is the best choice for installation.
**Step 1: Getting the Source**
./configure && make install && make install-apache2-config
First of all, you need to download the sources. Icinga Web 2 is available through a Git repository. You can clone this
repository either via git or http protocol using the following URLs:
will install the application to the default target (/usr/local/icinga2-web). Also
an apache configuration entry is added to your apache server, so you should restart
your web server according to your systems configuration.
* git://git.icinga.org/icingaweb2.git
* http://git.icinga.org/icingaweb2.git
### Installation directory
There is also a browsable version available at
[gi.icinga.org](https://git.icinga.org/?p=icingaweb2.git;a=summary "Icinga Web 2 Git Repository").
This version also offers snapshots for easy download which you can use if you do not have git present on your system.
If you want to install the application to a different directory, use the --prefix flag in your
configure call:
````
git clone git://git.icinga.org/icingaweb2.git
````
./configure --prefix=/my/target/directory
**Step 2: Install the Source**
Choose a target directory and move Icinga Web 2 there.
### Authentication
````
mv icingaweb2 /usr/share/icingaweb2
````
By default, icinga2-web will be installed to authenticate againts its internal database,
but you can configure it to use ldap-authentication by adding the `--with-ldap-authentication`
flag. You must provide the authentication details for your ldap server by using the --with-ldap-* flags.
To see a full list of the flags, call `./configure --help`
**Step 3: Configuring the Web Server**
### Icinga backend
Use `icingacli` to generate web server configuration for either Apache or nginx.
The default option for icinga2web is to configure all icinga backends with the default settings (for example
/usr/local/icinga/ as the icinga directory) but only enable statusdat. To use a different backend,
call `--with-icinga-backend=` and provide ido, livestatus or statusdat as an option. To further configure
your backend, take a look at the various options described in `./configure --help`
*Apache*
### Databases
````
./bin/icingacli setup config webserver apache
````
It is required to set up all used Databases correctly, which basically means to create all needed user accounts and to
create all database tables. You will find the installation guides for the different databases in the sections below:
*nginx*
*IMPORTANT*: Select a secure password instead of "icingaweb" and alter the config/authentication.ini accordingly.
````
./bin/icingacli setup config webserver nginx
````
**Step 4: Web Setup**
#### MySQL
1. Create the user and the database
mysql -u root -p
mysql> CREATE USER `icingaweb`@`localhost` IDENTIFIED BY 'icingaweb';
mysql> CREATE DATABASE `icingaweb`;
mysql> GRANT ALL PRIVILEGES ON `icingaweb`.* TO `icingaweb`@`localhost`;
mysql> FLUSH PRIVILEGES;
mysql> quit
2. Create all tables (You need to be in the icinga2-web folder)
> **Note**
>
> RPM packages install the schema into /usr/share/doc/icingaweb-&lt;version&gt;/schema
bash$ mysql -u root -p icingaweb < etc/schema/mysql.sql
#### PostgreSQL
1. Create the user and the database
sudo su postgres
psql
postgres=# CREATE USER icingaweb WITH PASSWORD 'icingaweb';
postgres=# CREATE DATABASE icingaweb;
postgres=# \q
2. Enable trust authentication on localhost
Add the following lines to your pg_hba.conf (etc/postgresql/X.x/main/pg_hba.conf under debian, /var/lib/pgsql/data/pg_hba.conf for Redhat/Fedora)
to enable trust authentication for the icingaweb user when connecting from the localhost.
local icingaweb icingaweb trust
host icingaweb icingaweb 127.0.0.1/32 trust
host icingaweb icingaweb ::1/128 trust
And restart your database ('service postgresql restart' or '/etc/init.d/postgresql-X.x reload' while being root)
3. Create all tables (You need to be in the icinga2-web folder)
> **Note**
>
> RPM packages install the schema into /usr/share/doc/icingaweb-&lt;version&gt;/schema
bash$ psql -U icingaweb -a -f etc/schema/pgsql.sql
Quick and Dirty
----------------
tdb.
Visit Icinga Web 2 in your browser and complete installation using the web setup.

View File

@ -537,6 +537,24 @@ class Monitoring_ListController extends Controller
}
$this->addTitleTab('eventhistory', $this->translate('Event Overview'));
$form = new EventOverviewForm();
$form->handleRequest($this->getRequest());
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
// update filter string
$filters = $form->getFilter();
$url = $this->_request->getUrl();
$url->setQueryString($filters->toQueryString());
if ($this->getParam('sort') !== null) {
$url->setParam('sort', $this->getParam('sort'));
}
if ($this->getParam('dir') !== null) {
$url->setParam('dir', $this->getParam('dir'));
}
return $this->redirectNow($url);
}
$query = $this->backend->select()->from('eventHistory', array(
'host_name',
'service_description',
@ -550,6 +568,9 @@ class Monitoring_ListController extends Controller
'host',
'service'
));
if ($this->getParam('state')) {
$query->applyFilter(Filter::expression('state', '=', $this->getParam('state')));
}
$this->setupSortControl(array(
'timestamp' => 'Occurence'

View File

@ -0,0 +1,160 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Module\Monitoring\Forms;
use Icinga\Data\Filter\FilterNot;
use Icinga\Web\Url;
use \Zend_Form;
use Icinga\Web\Form;
use Icinga\Data\Filter\Filter;
/**
* Configure the filter for the event overview
*/
class EventOverviewForm extends Form
{
/**
* Initialize this form
*/
public function init()
{
$this->setName('form_event_overview');
$this->setDecorators(array(
'FormElements',
array('HtmlTag', array('tag' => 'div', 'class' => 'hbox')),
'Form'
));
}
/**
* @see Form::createElements()
*/
public function createElements(array $formData)
{
$decorators = array(
array('Label', array('class' => 'optional')),
'ViewHelper',
array('HtmlTag', array('tag' => 'div', 'class' => 'hbox-item optionbox')),
);
$url = Url::fromRequest()->getAbsoluteUrl();
$this->addElement(
'checkbox',
'statechange',
array(
'label' => t('State Changes'),
'class' => 'autosubmit',
'decorators' => $decorators,
'value' => strpos($url, $this->stateChangeFilter()->toQueryString()) === false ? 0 : 1
)
);
$this->addElement(
'checkbox',
'downtime',
array(
'label' => t('Downtimes'),
'class' => 'autosubmit',
'decorators' => $decorators,
'value' => strpos($url, $this->downtimeFilter()->toQueryString()) === false ? 0 : 1
)
);
$this->addElement(
'checkbox',
'comment',
array(
'label' => t('Comments'),
'class' => 'autosubmit',
'decorators' => $decorators,
'value' => strpos($url, $this->commentFilter()->toQueryString()) === false ? 0 : 1
)
);
$this->addElement(
'checkbox',
'notification',
array(
'label' => t('Notifications'),
'class' => 'autosubmit',
'decorators' => $decorators,
'value' => strpos($url, $this->notificationFilter()->toQueryString()) === false ? 0 : 1
)
);
$this->addElement(
'checkbox',
'flapping',
array(
'label' => t('Flapping'),
'class' => 'autosubmit',
'decorators' => $decorators,
'value' => strpos($url, $this->flappingFilter()->toQueryString()) === false ? 0 : 1
)
);
}
/**
* Return the corresponding filter-object
*
* @returns Filter
*/
public function getFilter()
{
$filters = array();
if ($this->getValue('statechange', 1)) {
$filters[] = $this->stateChangeFilter();
}
if ($this->getValue('comment', 1)) {
$filters[] = $this->commentFilter();
}
if ($this->getValue('notification', 1)) {
$filters[] = $this->notificationFilter();
}
if ($this->getValue('downtime', 1)) {
$filters[] = $this->downtimeFilter();
}
if ($this->getValue('flapping', 1)) {
$filters[] = $this->flappingFilter();
}
return Filter::matchAny($filters);
}
public function stateChangeFilter()
{
return Filter::matchAny(
Filter::expression('type', '=', 'hard_state'),
Filter::expression('type', '=', 'soft_state')
);
}
public function commentFilter()
{
return Filter::matchAny(
Filter::expression('type', '=', 'comment'),
Filter::expression('type', '=', 'comment_deleted'),
Filter::expression('type', '=', 'dt_comment'),
Filter::expression('type', '=', 'dt_comment_deleted'),
Filter::expression('type', '=', 'ack')
);
}
public function notificationFilter()
{
return Filter::expression('type', '=', 'notify');
}
public function downtimeFilter()
{
return Filter::matchAny(
Filter::expression('type', '=', 'downtime_start'),
Filter::expression('type', '=', 'downtime_end')
);
}
public function flappingFilter()
{
return Filter::matchAny(
Filter::expression('type', '=', 'flapping'),
Filter::expression('type', '=', 'flapping_deleted')
);
}
}

View File

@ -4,6 +4,9 @@
<div style="margin: 1em" class="dontprint">
<?= $this->translate('Sort by'); ?> <?= $this->sortControl->render($this); ?>
</div>
<?= $form ?>
<br/>
<?= $this->widget('limiter', array('url' => $this->url, 'max' => $this->history->count())); ?>
<?= $this->paginationControl($history, null, null, array('preserve' => $this->preserve)); ?>
</div>

View File

@ -195,3 +195,19 @@ textarea {
input, select, textarea {
display: inline;
}
.optionbox {
margin-left: 0em;
margin-right: 3em;
}
.optionbox label {
max-width: 6.5em;
text-align: left;
vertical-align: middle;
margin-right: 0em;
}
.optionbox input {
vertical-align: middle;
}