Skip to content

Feature/mobile quick actions #604

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 49 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
a4e62bd
QuickActions: Update markup for mobile
flourish86 Jul 21, 2022
2df65ca
CSS: Ensure controls are above content
flourish86 Jul 21, 2022
cf44a98
CSS: Style mobile quick-actions
flourish86 Jul 21, 2022
833fc1c
Show host badges in objects-detail for multi-selected hosts
raviks789 Jun 21, 2022
bc71657
ObjectAuthorization: Don't use `columns()` of ipl/sql to specify colu…
yhabteab Jun 27, 2022
0ff8b79
Don't sort perfData which can't be visualized
yhabteab Jun 27, 2022
87cf2e5
Update README.md
lippserd Jun 15, 2022
48d4160
Docs: Update About
lippserd Jun 15, 2022
91fee47
Docs: Update Installation
lippserd Jun 15, 2022
b7860d3
Docs: Update Configuration
lippserd Jun 15, 2022
7cddcbc
Docs: Fix table borders
lippserd Jun 15, 2022
f66ac08
Rename blacklist to denylist
lippserd Jun 15, 2022
1fcd40c
Docs: Update Migration
lippserd Jun 20, 2022
b129c0a
Docs: Add Upgrading
lippserd Jun 27, 2022
77038ff
Add `check_` prefix to `attempt,timeout` columns in `*_state` tables
yhabteab Jun 23, 2022
9555b8d
StateHistory: Change `attempt` column -> `check_attempt`
yhabteab Jun 24, 2022
ae39b93
Add `check_` prefix everywhere where `attempt` & `timeout` is used
yhabteab Jun 24, 2022
8c94520
Redis: Apply volatile state results directly to the state model
yhabteab Jun 27, 2022
39f2ce8
hostgroup/index: Pass a result set to the host list
nilmerg Jun 28, 2022
c83f0be
servicegroup/index: Pass a result set to the service list
nilmerg Jun 28, 2022
c371e26
VolatileStateResults: Don't fail completely if redis is unavailable
nilmerg Jun 28, 2022
289bf39
Introduce new widget `Notice`
nilmerg Jun 28, 2022
3df335a
StateList: Prepend a notice if redis is unavailable
nilmerg Jun 28, 2022
e94f1c3
css: Hide notices in controls
nilmerg Jun 28, 2022
cce083b
VolatileStateResults: Don't override `is_overdue`
nilmerg Jun 29, 2022
27a7ce3
Docs/About: Remove link to license
lippserd Jun 29, 2022
8e0953e
ObjectSuggestions: Fix that group columns are not suggested
raviks789 Jun 21, 2022
7159fe0
BoolCast: Cast input to string in the switch statement
nilmerg Jun 30, 2022
2a25e55
VolatileStateResults: Transform `state_type` by ourselves for now
nilmerg Jun 30, 2022
b7f083c
.mailmap: display me always as "Alexander A. Klimov <alexander.klimov…
Al2Klimov Jun 30, 2022
5c6ff16
ApplicationState: Check the availability of `IcingaRedis` first
sukhwinder33445 Jun 23, 2022
2174ed1
RedisHealth: Set state to `critical` if an exception has occurred
sukhwinder33445 Jun 23, 2022
9f0f7b2
Update AUTHORS
nilmerg Jun 29, 2022
e9cab48
Update CHANGELOG
nilmerg Jun 29, 2022
58364b6
Increase version to 1.0.0
nilmerg Jun 29, 2022
505172f
CHANGELOG: Correct documentation link
nilmerg Jun 30, 2022
9c82e35
README.md: Fix wrong latest doc link
yhabteab Jul 12, 2022
a3c4f1c
ObjectSuggestions: Remove suffixes from user and usergroup columns
nilmerg Jul 11, 2022
c1b6d4b
Enhance column labels
nilmerg Jul 11, 2022
f0083ff
ObjectSuggestions: Implement method `shouldShowRelationFor()`
nilmerg Jul 13, 2022
00abe5c
ObjectSuggestions: Also hide `id` columns
nilmerg Jul 13, 2022
9d81bc2
ObjectSuggestions: Only suggest cols of selected hasOne relations
nilmerg Jul 13, 2022
1dc06e9
More column label enhancements
nilmerg Jul 14, 2022
984454b
Notification: Use more human readable column labels
nilmerg Jul 15, 2022
97021a1
CheckStatistics: Add EmptyState
sukhwinder33445 Jul 6, 2022
9158b11
BaseHistoryListItem: Show correct flapping event details
nilmerg Jul 6, 2022
3648c3d
Change `overflow` property to `overflow-x` in `performance-data-table…
raviks789 Jul 5, 2022
5872bd6
Show expiration time of comments in the comments list if it is set
raviks789 Jul 4, 2022
1896ee8
css: Rename `.actions` class to `.object-detail-actions`
nilmerg Jul 20, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
Alexander A. Klimov <[email protected]> <[email protected]>
Feu Mourek <[email protected]> <[email protected]>
Florian Strohmaier <[email protected]> <[email protected]>
Florian Strohmaier <[email protected]> <[email protected]>
Expand Down
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ Marius Hein <[email protected]>
Noah Hilverling <[email protected]>
Ravi Kumar Kempapura Srinivasa <[email protected]>
Sukhwinder Dhillon <[email protected]>
VerboEse <[email protected]>
Yonas Habteab <[email protected]>
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Icinga DB Web Changelog

Please make sure to always read our [Upgrading](https://icinga.com/docs/icinga-db-web/latest/doc/05-Upgrading/)
documentation before switching to a new version.

## 1.0.0 (2022-06-30)

First stable release

## 1.0.0 RC2 (2021-11-12)

Second release candidate
Expand Down
81 changes: 31 additions & 50 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,85 +4,66 @@
![Build Status](https://github.com/icinga/icingaweb2-module-icingadb/workflows/PHP%20Tests/badge.svg?branch=master)
[![Github Tag](https://img.shields.io/github/tag/Icinga/icingaweb2-module-icingadb.svg)](https://github.com/Icinga/icingaweb2-module-icingadb)

![Icinga Logo](https://icinga.com/wp-content/uploads/2014/06/icinga_logo.png)
Icinga DB is a set of components for publishing, synchronizing and
visualizing monitoring data in the Icinga ecosystem, consisting of:

1. [Documentation](#documentation)
2. [Installation](#installation)
3. [Configuration](#configuration)
4. [Migration](#migration)
5. [New Features](#new-features)
6. [Concepts](#concepts)
* Icinga DB Web which connects to both a Redis server and a database to view and work with
most up-to-date monitoring data
* Icinga 2 with its [Icinga DB feature](https://icinga.com/docs/icinga-2/latest/doc/14-features/#icinga-db) enabled,
responsible for publishing the data to the Redis server, i.e. configuration and its runtime updates, check results, state changes,
downtimes, acknowledgements, notifications, and other events such as flapping
* And the [Icinga DB daemon](https://icinga.com/docs/icinga-db),
which synchronizes the data between the Redis server and the database

**Icinga DB Web** pushes your monitoring stack to the next level.

Based on the lessons learnt with the base monitoring module, it offers a modern
and streamlined design to provide a clear and concise overview of your monitoring
environment.
![Icinga DB Architecture](doc/res/icingadb-architecture.png)

## Documentation

The documentation is located in the [doc/](doc/) directory and also available
on [icinga.com/docs](https://icinga.com/docs/icingadb-web/latest/).

## Installation

For installing Icinga DB Web please check the [installation](https://icinga.com/docs/icingadb-web/latest/doc/02-Installation/)
chapter.

## Configuration

To configure Icinga DB Web please check the [configuration](https://icinga.com/docs/icingadb-web/latest/doc/03-Configuration/)
chapter.
Icinga DB Web documentation is available at [icinga.com/docs](https://icinga.com/docs/icinga-db-web/latest/).

## Migration
## Features

To migrate from the monitoring module to Icinga DB Web check the [migration](https://icinga.com/docs/icingadb-web/latest/doc/10-Migration/)
chapter.
Icinga DB Web offers a modern and streamlined design to provide a clear and
concise view of your monitoring environment, also with dark and light mode support.

## New Features
![Icinga DB Dashboard](doc/res/icingadb-dashboard.png)

### Multiple List Layouts
### Various List Layouts

The new view switcher displayed in the controls of lists allows to change their layout.
The majority of lists use this to switch between various levels of detail. The service
list below for example uses it to show a check's output at different lengths.
The view switcher allows to control the level of detail displayed in host and service list views:

![View Switcher Preview](doc/res/view-switcher-preview.png)

### New Search With Auto-Completion
### Search with Autocomplete

We have greatly expanded the search functionality in list views. The so called search-bar
allows experienced users full control by keyboard to write their filters. It also aids
with contextual auto completion. There's also an editor for a more easy manipulation.
The search bar in list views can be used for everything from simple searches to creating complex filters.
It allows full keyboard control and also supports contextual auto-completion.
In addition, there is an editor for easier filter creation.

![Searchbar Completion Preview](doc/res/searchbar-completion-preview.png)

### Cleaner Detail Views
### Clean Detail Views

A host's or service's detail view has been restructured to show more details but also
to make more use of the available space. Important details also got moved to the top
so that they are visible right away without having to scroll down.
Host and service detail views are structured to make best use of available space.
Related information is grouped and important information is at the top for instant access without having to scroll down.

![Service Detail Preview](doc/res/service-detail-preview.png)

### Modal Dialogs

Acknowledging a problem, scheduling a downtime or sending a custom notification does
not take you away from where you've been. Instead a modal dialog is shown on top of
your current view.
Any interaction that requires user input, such as acknowledging problems, scheduling downtimes, etc.,
shows a modal dialog over the current view to preserve context and focus on interaction.

![Modal Dialog Preview](doc/res/modal-dialog-preview.png)

### Bulk Operations

If you ever wanted to perform really big bulk acknowledgements or downtime schedules,
now is the time for it. Simply filter for the hosts or services you want to operate on
and then click on the little forward icon on the right. No more *shift-click* nightmares!
(Which are still possible, for the die-hard)
Bulk interactions such as scheduling downtimes for multiple objects, acknowledging multiple problems, etc.
are easily accomplished with the `Continue With` control that operates on filtered lists.

![Continue With Preview](doc/res/continue-with-preview.png)

## Concepts
## License

To learn more about our widget/view designs check the [concepts](https://icinga.com/docs/icinga-db/latest/icinga-db-web/doc/11-Concepts/)
chapter.
Icinga DB Web and the Icinga DB Web documentation are licensed under the terms of the
[GNU General Public License Version 2](LICENSE).
2 changes: 1 addition & 1 deletion application/controllers/HostgroupController.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public function indexAction()
$paginationControl = $this->createPaginationControl($hosts);
$viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl);

$hostList = (new HostList($hosts))
$hostList = (new HostList($hosts->execute()))
->setViewMode($viewModeSwitcher->getViewMode());

yield $this->export($hosts);
Expand Down
2 changes: 1 addition & 1 deletion application/controllers/ServicegroupController.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public function indexAction()
$paginationControl = $this->createPaginationControl($services);
$viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl);

$serviceList = (new ServiceList($services))
$serviceList = (new ServiceList($services->execute()))
->setViewMode($viewModeSwitcher->getViewMode());

yield $this->export($services);
Expand Down
32 changes: 16 additions & 16 deletions configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,12 +118,12 @@
);

$this->provideRestriction(
'icingadb/blacklist/routes',
'icingadb/denylist/routes',
$this->translate('Prevent access to routes that are part of the list')
);

$this->provideRestriction(
'icingadb/blacklist/variables',
'icingadb/denylist/variables',
$this->translate('Hide custom variables of Icinga objects that are part of the list')
);

Expand Down Expand Up @@ -333,15 +333,15 @@
'icon' => 'cog'
]);
$auth = Auth::getInstance();
$routeBlacklist = [];
$routeDenylist = [];
if ($auth->isAuthenticated() && ! $auth->getUser()->isUnrestricted()) {
// The empty array is for PHP pre 7.4, older versions require at least a single param for array_merge
$routeBlacklist = array_flip(array_merge([], ...array_map(function ($restriction) {
$routeDenylist = array_flip(array_merge([], ...array_map(function ($restriction) {
return StringHelper::trimSplit($restriction);
}, $auth->getRestrictions('icingadb/blacklist/routes'))));
}, $auth->getRestrictions('icingadb/denylist/routes'))));
}

if (! array_key_exists('hostgroups', $routeBlacklist)) {
if (! array_key_exists('hostgroups', $routeDenylist)) {
$overviewSection->add(N_('Host Groups'), [
'description' => $this->translate('List host groups'),
'url' => 'icingadb/hostgroups',
Expand All @@ -350,7 +350,7 @@
]);
}

if (! array_key_exists('servicegroups', $routeBlacklist)) {
if (! array_key_exists('servicegroups', $routeDenylist)) {
$overviewSection->add(N_('Service Groups'), [
'description' => $this->translate('List service groups'),
'url' => 'icingadb/servicegroups',
Expand All @@ -359,7 +359,7 @@
]);
}

if (! array_key_exists('usergroups', $routeBlacklist)) {
if (! array_key_exists('usergroups', $routeDenylist)) {
$overviewSection->add(N_('User Groups'), [
'description' => $this->translate('List user groups'),
'url' => 'icingadb/usergroups',
Expand All @@ -368,7 +368,7 @@
]);
}

if (! array_key_exists('users', $routeBlacklist)) {
if (! array_key_exists('users', $routeDenylist)) {
$overviewSection->add(N_('Users'), [
'description' => $this->translate('List users'),
'url' => 'icingadb/users',
Expand Down Expand Up @@ -463,15 +463,15 @@


$auth = Auth::getInstance();
$routeBlacklist = [];
$routeDenylist = [];
if ($auth->isAuthenticated() && ! $auth->getUser()->isUnrestricted()) {
// The empty array is for PHP pre 7.4, older versions require at least a single param for array_merge
$routeBlacklist = array_flip(array_merge([], ...array_map(function ($restriction) {
$routeDenylist = array_flip(array_merge([], ...array_map(function ($restriction) {
return StringHelper::trimSplit($restriction);
}, $auth->getRestrictions('icingadb/blacklist/routes'))));
}, $auth->getRestrictions('icingadb/denylist/routes'))));
}

if (! array_key_exists('hostgroups', $routeBlacklist)) {
if (! array_key_exists('hostgroups', $routeDenylist)) {
$section->add(N_('Host Groups'), [
'url' => 'icingadb/hostgroups',
'priority' => 50,
Expand All @@ -480,7 +480,7 @@
]);
}

if (! array_key_exists('servicegroups', $routeBlacklist)) {
if (! array_key_exists('servicegroups', $routeDenylist)) {
$section->add(N_('Service Groups'), [
'url' => 'icingadb/servicegroups',
'priority' => 60,
Expand All @@ -489,7 +489,7 @@
]);
}

if (! array_key_exists('usergroups', $routeBlacklist)) {
if (! array_key_exists('usergroups', $routeDenylist)) {
$section->add(N_('User Groups'), [
'url' => 'icingadb/usergroups',
'priority' => 70,
Expand All @@ -498,7 +498,7 @@
]);
}

if (! array_key_exists('users', $routeBlacklist)) {
if (! array_key_exists('users', $routeDenylist)) {
$section->add(N_('Users'), [
'url' => 'icingadb/users',
'priority' => 80,
Expand Down
77 changes: 34 additions & 43 deletions doc/01-About.md
Original file line number Diff line number Diff line change
@@ -1,73 +1,64 @@
# About Icinga DB Web
# Icinga DB Web

1. [Installation](#installation)
2. [Configuration](#configuration)
3. [Migration](#migration)
4. [New Features](#new-features)
5. [Concepts](#concepts)
Icinga DB is a set of components for publishing, synchronizing and
visualizing monitoring data in the Icinga ecosystem, consisting of:

**Icinga DB Web** pushes your monitoring stack to the next level.
* Icinga DB Web which connects to both a Redis server and a database to view and work with monitoring data
* Icinga 2 with its [Icinga DB feature](https://icinga.com/docs/icinga-2/latest/14-features/#icinga-db) enabled,
responsible for publishing monitoring configuration, check results,
states changes and history items to the Redis server
* And the [Icinga DB daemon](https://icinga.com/docs/icinga-db/latest/01-About/),
which synchronizes monitoring data between the Redis server and the database

Based on the lessons learnt with the base monitoring module, it offers a modern
and streamlined design to provide a clear and concise overview of your monitoring
environment.
![Icinga DB Architecture](res/icingadb-architecture.png)

## Installation

For installing Icinga DB Web please check the [installation](02-Installation.md) chapter.

## Configuration

To configure Icinga DB Web please check the [configuration](03-Configuration.md) chapter.
## Features

## Migration
Icinga DB Web offers a modern and streamlined design to provide a clear and
concise overview of your monitoring environment, also with dark and light mode support.

To migrate from the monitoring module to Icinga DB Web check the [migration](10-Migration.md)
chapter.
![Icinga DB Dashboard](res/icingadb-dashboard.png)

## New Features
### Various List Layouts

### Multiple List Layouts

The new view switcher displayed in the controls of lists allows to change their layout.
The majority of lists use this to switch between various levels of detail. The service
list below for example uses it to show a check's output at different lengths.
The view switcher allows to control the level of detail displayed in host and service list views:

![View Switcher Preview](res/view-switcher-preview.png)

### New Search With Auto-Completion
### Search with Autocomplete

We have greatly expanded the search functionality in list views. The so called search-bar
allows experienced users full control by keyboard to write their filters. It also aids
with contextual auto completion. There's also an editor for a more easy manipulation.
The search bar in list views can be used for everything from simple searches to creating complex filters.
It allows full keyboard control and also supports contextual auto-completion.
In addition, there is an editor for easier filter creation.

![Searchbar Completion Preview](res/searchbar-completion-preview.png)

### Cleaner Detail Views
### Clean Detail Views

A host's or service's detail view has been restructured to show more details but also
to make more use of the available space. Important details also got moved to the top
so that they are visible right away without having to scroll down.
Host and service detail views are structured to make best use of available space.
Related information is grouped and important information is at the top for instant access without having to scroll down.

![Service Detail Preview](res/service-detail-preview.png)

### Modal Dialogs

Acknowledging a problem, scheduling a downtime or sending a custom notification does
not take you away from where you've been. Instead a modal dialog is shown on top of
your current view.
Any interaction that requires user input, such as acknowledging problems, scheduling downtimes, etc.,
shows a modal dialog over the current view to preserve context and focus on interaction.

![Modal Dialog Preview](res/modal-dialog-preview.png)

### Bulk Operations

If you ever wanted to perform really big bulk acknowledgements or downtime schedules,
now is the time for it. Simply filter for the hosts or services you want to operate on
and then click on the little forward icon on the right. No more *shift-click* nightmares!
(Which are still possible, for the die-hard)
Bulk interactions such as scheduling downtimes for multiple objects, acknowledging multiple problems, etc.
are easily accomplished with the `Continue With` control that operates on filtered lists.

![Continue With Preview](res/continue-with-preview.png)

## Concepts
## Installation

To install Icinga DB Web see [Installation](02-Installation.md).

## License

To learn more about our widget/view designs check the [concepts](11-Concepts.md) chapter.
Icinga DB Web and the Icinga DB Web documentation are licensed under the terms of the
GNU General Public License Version 2.
Loading