Skip to content

Commit

Permalink
downtimes: Support automated removal
Browse files Browse the repository at this point in the history
  • Loading branch information
nilmerg committed Sep 18, 2024
1 parent 8da8ce6 commit 5d769c1
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 32 deletions.
70 changes: 43 additions & 27 deletions application/controllers/DowntimesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Icinga\Module\Icingadb\Controllers;

use GuzzleHttp\Psr7\ServerRequest;
use Icinga\Module\Icingadb\Common\CommandActions;
use Icinga\Module\Icingadb\Common\Links;
use Icinga\Module\Icingadb\Forms\Command\Object\DeleteDowntimeForm;
use Icinga\Module\Icingadb\Model\Downtime;
Expand All @@ -13,12 +14,16 @@
use Icinga\Module\Icingadb\Widget\ItemList\DowntimeList;
use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher;
use Icinga\Module\Icingadb\Widget\ShowMore;
use ipl\Orm\Model;
use ipl\Stdlib\Filter;
use ipl\Web\Control\LimitControl;
use ipl\Web\Control\SortControl;
use ipl\Web\Url;

class DowntimesController extends Controller
{
use CommandActions;

public function indexAction()
{
$this->addTitleTab(t('Downtimes'));
Expand Down Expand Up @@ -109,34 +114,9 @@ public function indexAction()

public function deleteAction()
{
$this->assertIsGrantedOnCommandTargets('icingadb/command/downtime/delete');
$this->setTitle(t('Cancel Downtimes'));

$db = $this->getDb();

$downtimes = Downtime::on($db)->with([
'host',
'host.state',
'service',
'service.host',
'service.host.state',
'service.state'
]);

$this->filter($downtimes);

$form = (new DeleteDowntimeForm())
->setObjects($downtimes)
->setRedirectUrl(Links::downtimes()->getAbsoluteUrl())
->on(DeleteDowntimeForm::ON_SUCCESS, function ($form) {
// This forces the column to reload nearly instantly after the redirect
// and ensures the effect of the command is visible to the user asap
$this->getResponse()->setAutoRefreshInterval(1);

$this->redirectNow($form->getRedirectUrl());
})
->handleRequest(ServerRequest::fromGlobals());

$this->addContent($form);
$this->handleCommandForm(DeleteDowntimeForm::class);
}

public function detailsAction()
Expand Down Expand Up @@ -200,4 +180,40 @@ public function searchEditorAction()
$this->getDocument()->add($editor);
$this->setTitle(t('Adjust Filter'));
}

protected function getCommandTargetsUrl(): Url
{
return Url::fromPath('__CLOSE__');
}

protected function fetchCommandTargets()
{
$downtimes = Downtime::on($this->getDb())->with([
'host',
'host.state',
'service',
'service.host',
'service.host.state',
'service.state'
]);

$this->filter($downtimes);

return $downtimes;
}

public function isGrantedOn(string $permission, Model $object): bool
{
if ($object->scheduled_by !== null) {
return false;
}

return parent::isGrantedOn($permission, $object->{$object->object_type});
}

public function isGrantedOnType(string $permission, string $type, Filter\Rule $filter, bool $cache = true): bool
{
return parent::isGrantedOnType($permission, 'host', $filter, $cache)
|| parent::isGrantedOnType($permission, 'service', $filter, $cache);
}
}
4 changes: 0 additions & 4 deletions application/forms/Command/Object/DeleteDowntimeForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,12 @@
use Icinga\Module\Icingadb\Forms\Command\CommandForm;
use Icinga\Web\Notification;
use ipl\Orm\Model;
use ipl\Web\Common\RedirectOption;
use ipl\Web\Widget\Icon;
use Iterator;
use Traversable;

class DeleteDowntimeForm extends CommandForm
{
use RedirectOption;

protected $defaultAttributes = ['class' => 'inline'];

public function __construct()
Expand All @@ -38,7 +35,6 @@ public function __construct()

protected function assembleElements()
{
$this->addElement($this->createRedirectOption());
}

protected function assembleSubmitButton()
Expand Down
10 changes: 10 additions & 0 deletions doc/09-Automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,16 @@ None.
| hours | y | Number | flexible |
| minutes | y | Number | flexible |

### Delete Downtimes

#### Routes

* icingadb/downtimes/delete

#### Options

None.

### Send Custom Notification

#### Routes
Expand Down
1 change: 0 additions & 1 deletion library/Icingadb/Widget/Detail/DowntimeDetail.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ protected function createCancelDowntimeForm()

return (new DeleteDowntimeForm())
->setObjects([$this->downtime])
->populate(['redirect' => '__BACK__'])
->setAction($action->getAbsoluteUrl());
}

Expand Down

0 comments on commit 5d769c1

Please sign in to comment.