Commit 4c1ec21c authored by Bas Couwenberg's avatar Bas Couwenberg

Merge tag 'upstream/2.6.0'

Upstream version 2.6.0
parents 22c3ed3c 920c383a
......@@ -3,21 +3,15 @@ dist: trusty
sudo: false
php:
- '5.4'
- '5.5'
- '5.6'
- '7.0'
- '7.1'
- '7.2'
- nightly
matrix:
include:
- php: '5.3'
dist: precise
sudo: required
env:
- PHPCS_VERSION=2.9.1
- LOCALE_GEN=1
- ENABLE_LDAP=1
allow_failures:
- php: nightly
services:
- mysql
......
......@@ -13,6 +13,7 @@ Boden Garman <boden.garman@spintel.net.au>
bradynathan <bradynathan@gmail.com>
Carlos Cesario <carloscesario@gmail.com>
Carsten <carsten.koebke@gmx.de>
Carsten Koebke <carsten.koebke@koebbes.de>
Chris Reeves <chris.reeves@york.ac.uk>
Christopher Rüll <christopher.ruell@netways.de>
Christoph Niemann <kordolan@googlemail.com>
......@@ -29,6 +30,7 @@ Eric Jaw <naisanza@gmail.com>
Eric Lippmann <eric.lippmann@icinga.com>
Florian Strohmaier <florian.strohmaier@icinga.com>
Francesco Colista <fcolista@alpinelinux.org>
Francesco Mazzi <fmazzi@comune.genova.it>
Goran Rakic <grakic@devbase.net>
Gunnar Beutner <gunnar.beutner@netways.de>
hailthemelody@rm-laptop04 <hailthemelody@rm-laptop04>
......@@ -47,10 +49,12 @@ Lee Clemens <java@leeclemens.net>
Louis Sautier <sautier.louis@gmail.com>
mapa82 <maik.paetzold@akra.de>
Marc DeTrano <marc@gridshield.net>
Marcel Weinberg <marcel.weinberg@secucloud.com>
Marcus Cobden <marcus@marcuscobden.co.uk>
Marius Hein <marius.hein@netways.de>
Markus Frosch <markus.frosch@icinga.com>
Matthias Jentsch <matthias.jentsch@netways.de>
Matthias <pub@matthias-henning.de>
Max Stephan <xam.stephan@web.de>
mbaschnitzi <mbaschnitzi@users.noreply.github.com>
Michael Friedrich <michael.friedrich@icinga.com>
......
......@@ -4,6 +4,52 @@ Please make sure to always read our [Upgrading](doc/80-Upgrading.md) documentati
## What's New
### What's New in Version 2.6.0
You can find issues and features related to this release on our [Roadmap](https://github.com/Icinga/icingaweb2/milestone/48?closed=1).
#### Enabling you to do stuff you couldn't before
* Support for PHP 7.2 added
* Support for SQLite resources added
* Login and Command (monitoring) auditing added with the help of a dedicated [module](https://github.com/Icinga/icingaweb2-module-audit)
* Pluginoutput rendering is now hookable by modules which allows to render custom icons, emojis and .. cute kitties :octocat:
#### Avoiding that you miss something
* It's now possible to toggle between list- and grid-mode for the host- and servicegroup overviews
* The servicegrid now supports to flip its axes which allows it to be put into a [landscape mode](https://github.com/Icinga/icingaweb2/pull/3449#issue-185415579)
* Contacts only associated with services are visible now when restricted based on host filters
* Negated and combined membership filters now work as expected ([#2934](https://github.com/Icinga/icingaweb2/issues/2934))
* A more prominent error message in case the monitoring backend goes down
* The filter editor doesn't get cleared anymore upon hitting Enter
#### Making your life a bit easier
* The tactical overview is now filterable and can be safely put into [the dashboard](https://github.com/Icinga/icingaweb2/pull/3446#issue-185379142)
* It is now possible to register new announcements over the [REST Api](https://github.com/Icinga/icingaweb2/issues/2749#issuecomment-279667189)
* Filtering for custom variables now works in UTF8 environments
#### Ensuring you understand everything
* The monitoring health is now beautiful to look at and properly behaves in [narrow environments](https://github.com/Icinga/icingaweb2/pull/3515#issue-200075373)
* Updated German localization
* Updated Italian localization
#### Freeing you from unrealiable things
* Removed support for PHP < 5.6
* Removed support for persistent database connections
### What's New in Version 2.5.3
You can find issues and features related to this release on our [Roadmap](https://github.com/Icinga/icingaweb2/milestone/50?closed=1).
#### Fixes
A fix for an issue introduced with v2.5.2 that prevented service-only contacts from appearing in the UI resulted in long
database response times and has been reverted.
### What's New in Version 2.5.2
You can find issues and features related to this release on our [Roadmap](https://github.com/Icinga/icingaweb2/milestone/49?closed=1).
......
# Quality Assurance
# Release Workflow <a id="release-workflow"></a>
Review and test the changes and issues for this version.
https://github.com/icinga/icingaweb2
#### Table of Content
# Release Workflow
- [1. Preparations](#preparations)
- [1.1. Issues](#issues)
- [1.2. Backport Commits](#backport-commits)
- [1.3. Authors](#authors)
- [2. Version](#version)
- [3. Changelog](#changelog)
- [4. Git Tag](#git-tag)
- [5. Package Builds](#package-builds)
- [5.1. RPM Packages](#rpm-packages)
- [5.2. DEB Packages](#deb-packages)
- [6. Build Server](#build-server)
- [7. Release Tests](#release-tests)
- [8. GitHub Release](#github-release)
- [9. Post Release](#post-release)
- [9.1. Online Documentation](#online-documentation)
- [9.2. Announcement](#announcement)
- [9.3. Project Management](#project-management)
## Authors
## Preparations <a id="preparations"></a>
Specify the release version.
```
VERSION=2.6.0
```
Add your signing key to your Git configuration file, if not already there.
```
vim $HOME/.gitconfig
[user]
email = michael.friedrich@icinga.com
name = Michael Friedrich
signingkey = D14A1F16
```
### Issues <a id="issues"></a>
Check issues at https://github.com/Icinga/icingaweb2
### Backport Commits <a id="backport-commits"></a>
For minor versions not branched off git master you need
to manually backports any and all commits from the
master branch which should be part of this release.
### Authors <a id="authors"></a>
Update the [.mailmap](.mailmap) and [AUTHORS](AUTHORS) files:
$ git log --use-mailmap | grep ^Author: | cut -f2- -d' ' | sort | uniq > AUTHORS
```
git log --use-mailmap | grep '^Author:' | cut -f2- -d' ' | sort | uniq > AUTHORS
```
## Version
## Version <a id="version"></a>
Update the version number in the following files:
Update the version in the following files:
* [icingaweb2.spec] (ensure that the revision is properly set)
* [VERSION]
* Application Version: [library/Icinga/Application/Version.php]
* Module Versions in modules/*/module.info
* [VERSION](VERSION)
* Application Version: [library/Icinga/Application/Version.php](library/Icinga/Application/Version.php)
* Module Versions in `modules/*/module.info`
Commands:
VERSION=2.0.0
```
echo "v$VERSION" > VERSION
sed -i '' "s/const VERSION = '.*'/const VERSION = '$VERSION'/g" library/Icinga/Application/Version.php
find . -type f -name '*.info' -exec sed -i '' "s/Version: .*/Version: $VERSION/g" {} \;
```
## Changelog <a id="changelog"></a>
Link to the milestone and closed=1 as filter.
## Git Tag <a id="git-tag"></a>
```
git commit -v -a -m "Release version $VERSION"
```
Create a signed tag (tags/v<VERSION>) on the `master` branch (for major
releases) or the `support` branch (for minor releases).
```
git tag -s -m "Version $VERSION" v$VERSION
```
Push the tag:
```
git push --tags
```
**For major releases:** Create a new `support` branch:
```
git checkout master
git checkout -b support/2.6
git push -u origin support/2.6
```
## Package Builds <a id="package-builds"></a>
vim icingaweb2.spec
### RPM Packages <a id="rpm-packages"></a>
echo "v$VERSION" > VERSION
```
git clone git@github.com:icinga/rpm-icingaweb2.git && cd rpm-icingaweb2
```
sed -i '' "s/const VERSION = '.*'/const VERSION = '$VERSION'/g" library/Icinga/Application/Version.php
#### Branch Workflow
find . -type f -name '*.info' -exec sed -i '' "s/Version: .*/Version: $VERSION/g" {} \;
**Major releases** are branched off `master`.
## Changelog
```
git checkout master && git pull
```
Update the [ChangeLog](ChangeLog) file using
the changelog.py script.
**Bugfix releases** are created in the `release` branch and later merged to master.
Changelog:
```
git checkout release && git pull
```
$ ./changelog.py --version 2.0.0
#### Release Commit
Wordpress:
Set the `Version`, `Revision` and `changelog` inside the spec file.
$ ./changelog.py --version 2.0.0 --html --links
```
sed -i "s/Version: .*/Version: $VERSION/g" icingaweb2.spec
## Git Tag
vim icingaweb2.spec
Commit these changes to the "master" branch:
%changelog
* Fri Apr 27 2018 Eric.Lippmann <eric.lippmann@icinga.com> 2.5.3-1
- Update to 2.5.3
```
$ git commit -v -a -m "Release version <VERSION>"
```
git commit -av -m "Release 2.5.3-1"
git push
```
For minor releases: Cherry-pick this commit into the "support" branch.
**Note for major releases**: Update release branch to latest.
`git checkout release && git pull && git merge master && git push`
Create a signed tag (tags/v<VERSION>) on the "master" branch (for major
releases) or the "support" branch (for minor releases).
**Note for minor releases**: Cherry-pick the release commit into master.
`git checkout master && git pull && git cherry-pick release && git push`
$ git tag -m "Version <VERSION>" v<VERSION>
Push the tag.
### DEB Packages <a id="deb-packages"></a>
$ git push --tags
```
git clone git@github.com:icinga/deb-icingaweb2.git && cd deb-icingaweb2
```
For major releases: Create a new "support" branch:
#### Branch Workflow
$ git checkout master
$ git checkout -b support/2.x
$ git push -u origin support/2.x
**Major releases** are branched off `master`.
# External Dependencies
```
git checkout master && git pull
```
## Build Server
**Bugfix releases** are created in the `release` branch and later merged to master.
### Linux
```
git checkout release && git pull
```
#### Release Commit
Set the `Version`, `Revision` and `changelog` inside the spec file.
```
./dch 2.5.3-1 "Update to 2.5.3"
```
```
git commit -av -m "Release 2.5.3-1"
git push
```
```
git commit -av -m "Release 2.5.3-1"
```
**Note for major releases**: Update release branch to latest.
`git checkout release && git pull && git merge master && git push`
**Note for minor releases**: Cherry-pick the release commit into master.
`git checkout master && git pull && git cherry-pick release && git push`
#### DEB with dch on macOS
```
docker run -v `pwd`:/mnt/packaging -ti ubuntu:xenial bash
apt-get update
apt-get install git dev-tools vim
cd /mnt/packaging
git config --global user.name "Eric Lippmann"
git config --global user.email "eric.lippmann@icinga.com"
./dch 2.5.3-1 "Update to 2.5.3"
```
## Build Server <a id="build-server"></a>
* Verify package build changes for this version.
* Test the snapshot packages for all distributions beforehand.
* Build the newly created Git tag for Debian/RHEL/SuSE.
## Release Tests <a id="release-tests"></a>
* Build the newly created git tag for Debian/RHEL/SuSE.
* Provision the vagrant boxes and test the release packages.
## Github Release
## GitHub Release <a id="github-release"></a>
Create a new release for the newly created Git tag: https://github.com/Icinga/icingaweb2/releases
### Online Documentation <a id="online-documentation"></a>
Create a new release from the newly created git tag.
https://github.com/Icinga/icingaweb2/releases
Ask @bobapple to update the documentation at docs.icinga.com.
## Announcement
### Announcement <a id="announcement"></a>
* Create a new blog post on www.icinga.com/blog
* Send announcement mail to icinga-announce@lists.icinga.org
* Social media: [Twitter](https://twitter.com/icinga), [Facebook](https://www.facebook.com/icinga), [G+](http://plus.google.com/+icinga), [Xing](https://www.xing.com/communities/groups/icinga-da4b-1060043), [LinkedIn](https://www.linkedin.com/groups/Icinga-1921830/about)
* Social media: [Twitter](https://twitter.com/icinga), [Facebook](https://www.facebook.com/icinga), [G+](https://plus.google.com/+icinga), [Xing](https://www.xing.com/communities/groups/icinga-da4b-1060043), [LinkedIn](https://www.linkedin.com/groups/Icinga-1921830/about)
* Update IRC channel topic
### Project Management <a id="project-management"></a>
* Add new minor version on [GitHub](https://github.com/Icinga/icingaweb2/milestones).
* Close the released version on [GitHub](https://github.com/Icinga/icingaweb2/milestones).
ca7e886b820f0145999fdf7377f5c4132301eada 2018-04-27 10:24:56 +0200
cfe6c7b06587189b3ef688183cacd32594db071a 2018-07-19 09:34:58 +0200
......@@ -30,15 +30,6 @@ class WebCommand extends Command
*/
public function serveAction()
{
$minVersion = '5.4.0';
if (version_compare(PHP_VERSION, $minVersion) < 0) {
throw new IcingaException(
'You are running PHP %s, internal webserver requires %s.',
PHP_VERSION,
$minVersion
);
}
$fork = $this->params->get('daemonize');
$listen = $this->params->get('listen');
$port = $this->params->get('port');
......
......@@ -3,11 +3,12 @@
namespace Icinga\Controllers;
use Icinga\Application\Icinga;
use Icinga\Forms\AcknowledgeApplicationStateMessageForm;
use Icinga\Web\Announcement\AnnouncementCookie;
use Icinga\Web\Announcement\AnnouncementIniRepository;
use Icinga\Web\Controller;
use Icinga\Web\Session;
use Icinga\Web\Widget;
/**
* @TODO(el): https://dev.icinga.com/issues/10646
......@@ -16,10 +17,14 @@ class ApplicationStateController extends Controller
{
protected $requiresAuthentication = false;
public function indexAction()
public function init()
{
$this->_helper->layout()->disableLayout();
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
}
public function indexAction()
{
if ($this->Auth()->isAuthenticated()) {
if (isset($_COOKIE['icingaweb2-session'])) {
$last = (int) $_COOKIE['icingaweb2-session'];
......@@ -59,6 +64,31 @@ class ApplicationStateController extends Controller
}
}
$this->setAutorefreshInterval(60);
}
public function summaryAction()
{
if ($this->Auth()->isAuthenticated()) {
$this->getResponse()->setBody((string) Widget::create('ApplicationStateMessages'));
}
$this->setAutorefreshInterval(60);
}
public function acknowledgeMessageAction()
{
if (! $this->Auth()->isAuthenticated()) {
$this->getResponse()
->setHttpResponseCode(401)
->sendHeaders();
exit;
}
$this->assertHttpMethod('POST');
$this->getResponse()->setHeader('X-Icinga-Container', 'ignore', true);
(new AcknowledgeApplicationStateMessageForm())->handleRequest();
}
}
......@@ -3,8 +3,8 @@
namespace Icinga\Controllers;
use Icinga\Application\Icinga;
use Icinga\Web\Controller\ActionController;
use Icinga\Web\Menu;
/**
* Create complex layout parts
......@@ -18,7 +18,7 @@ class LayoutController extends ActionController
{
$this->setAutorefreshInterval(15);
$this->_helper->layout()->disableLayout();
$this->view->menuRenderer = Icinga::app()->getMenu()->getRenderer();
$this->view->menuRenderer = (new Menu())->getRenderer();
}
public function announcementsAction()
......
......@@ -5,7 +5,6 @@ namespace Icinga\Controllers;
use Exception;
use Icinga\Application\Config;
use Icinga\Application\Icinga;
use Icinga\Exception\NotFoundError;
use Icinga\Data\DataArray\ArrayDatasource;
use Icinga\Data\Filter\FilterMatchCaseInsensitive;
......@@ -13,6 +12,7 @@ use Icinga\Forms\ConfirmRemovalForm;
use Icinga\Forms\Navigation\NavigationConfigForm;
use Icinga\Web\Controller;
use Icinga\Web\Form;
use Icinga\Web\Menu;
use Icinga\Web\Navigation\Navigation;
use Icinga\Web\Notification;
use Icinga\Web\Url;
......@@ -419,7 +419,7 @@ class NavigationController extends Controller
'url' => Url::fromRequest()
));
$menu = Icinga::app()->getMenu();
$menu = new Menu();
$navigation = $menu->findItem($name);
......
......@@ -46,3 +46,12 @@ Font license info
Homepage: http://typicons.com/
## MFG Labs
Copyright (C) 2012 by Daniel Bruce
Author: MFG Labs
License: SIL (http://scripts.sil.org/OFL)
Homepage: http://www.mfglabs.com/
File mode changed from 100644 to 100755
......@@ -821,6 +821,18 @@
"css": "github-circled",
"code": 61595,
"src": "fontawesome"
},
{
"uid": "5eb43711f62fb4dcbef10d0224c28065",
"css": "th-thumb-empty",
"code": 61451,
"src": "mfglabs"
},
{
"uid": "1b58555745e7378f7634ee7c63eada46",
"css": "th-list",
"code": 61449,
"src": "mfglabs"
}
]
}
\ No newline at end of file
......@@ -132,6 +132,8 @@
.icon-check:before { content: '\e883'; } /* '' */
.icon-reschedule:before { content: '\e884'; } /* '' */
.icon-warning-empty:before { content: '\e885'; } /* '' */
.icon-th-list:before { content: '\f009'; } /* '' */
.icon-th-thumb-empty:before { content: '\f00b'; } /* '' */
.icon-github-circled:before { content: '\f09b'; } /* '' */
.icon-history:before { content: '\f1da'; } /* '' */
.icon-binoculars:before { content: '\f1e5'; } /* '' */
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -132,6 +132,8 @@
.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe883;&nbsp;'); }
.icon-reschedule { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe884;&nbsp;'); }
.icon-warning-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe885;&nbsp;'); }
.icon-th-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;&nbsp;'); }
.icon-th-thumb-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;&nbsp;'); }
.icon-github-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;&nbsp;'); }
.icon-history { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1da;&nbsp;'); }
.icon-binoculars { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1e5;&nbsp;'); }
\ No newline at end of file
......@@ -143,6 +143,8 @@
.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe883;&nbsp;'); }
.icon-reschedule { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe884;&nbsp;'); }
.icon-warning-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe885;&nbsp;'); }
.icon-th-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;&nbsp;'); }
.icon-th-thumb-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;&nbsp;'); }
.icon-github-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;&nbsp;'); }
.icon-history { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1da;&nbsp;'); }
.icon-binoculars { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1e5;&nbsp;'); }
\ No newline at end of file
@font-face {
font-family: 'ifont';
src: url('../font/ifont.eot?14085592');
src: url('../font/ifont.eot?14085592#iefix') format('embedded-opentype'),
url('../font/ifont.woff2?14085592') format('woff2'),
url('../font/ifont.woff?14085592') format('woff'),
url('../font/ifont.ttf?14085592') format('truetype'),
url('../font/ifont.svg?14085592#ifont') format('svg');
src: url('../font/ifont.eot?15561604');
src: url('../font/ifont.eot?15561604#iefix') format('embedded-opentype'),
url('../font/ifont.woff2?15561604') format('woff2'),
url('../font/ifont.woff?15561604') format('woff'),
url('../font/ifont.ttf?15561604') format('truetype'),
url('../font/ifont.svg?15561604#ifont') format('svg');
font-weight: normal;
font-style: normal;
}
......@@ -15,7 +15,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'ifont';
src: url('../font/ifont.svg?14085592#ifont') format('svg');
src: url('../font/ifont.svg?15561604#ifont') format('svg');
}
}
*/
......@@ -188,6 +188,8 @@
.icon-check:before { content: '\e883'; } /* '' */
.icon-reschedule:before { content: '\e884'; } /* '' */
.icon-warning-empty:before { content: '\e885'; } /* ''