summaryrefslogtreecommitdiffstats
path: root/modules/monitoring/application/controllers/DowntimesController.php
blob: 48912033974dd3bba5b13da422e804921b1399e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
/* Icinga Web 2 | (c) 2015 Icinga Development Team | GPLv2+ */

namespace Icinga\Module\Monitoring\Controllers;

use Icinga\Data\Filter\Filter;
use Icinga\Module\Monitoring\Controller;
use Icinga\Module\Monitoring\Forms\Command\Object\DeleteDowntimesCommandForm;
use Icinga\Web\Url;

/**
 * Display detailed information about downtimes
 */
class DowntimesController extends Controller
{
    /**
     * The downtimes view
     *
     * @var \Icinga\Module\Monitoring\DataView\Downtime
     */
    protected $downtimes;

    /**
     * Filter from request
     *
     * @var Filter
     */
    protected $filter;

    /**
     * Fetch all downtimes matching the current filter and add tabs
     */
    public function init()
    {
        $this->filter = Filter::fromQueryString(str_replace(
            'downtime_id',
            'downtime_internal_id',
            (string) $this->params
        ));
        $query = $this->backend->select()->from('downtime', array(
            'id'              => 'downtime_internal_id',
            'objecttype'      => 'object_type',
            'comment'         => 'downtime_comment',
            'author_name'     => 'downtime_author_name',
            'start'           => 'downtime_start',
            'scheduled_start' => 'downtime_scheduled_start',
            'scheduled_end'   => 'downtime_scheduled_end',
            'end'             => 'downtime_end',
            'duration'        => 'downtime_duration',
            'is_flexible'     => 'downtime_is_flexible',
            'is_fixed'        => 'downtime_is_fixed',
            'is_in_effect'    => 'downtime_is_in_effect',
            'entry_time'      => 'downtime_entry_time',
            'name'            => 'downtime_name',
            'host_state',
            'service_state',
            'host_name',
            'service_description',
            'host_display_name',
            'service_display_name'
        ))->addFilter($this->filter);
        $this->applyRestriction('monitoring/filter/objects', $query);

        $this->downtimes = $query;

        $this->view->title = $this->translate('Downtimes');
        $this->getTabs()->add(
            'downtimes',
            array(
                'icon'  => 'plug',
                'label' => $this->translate('Downtimes') . sprintf(' (%d)', $query->count()),
                'title' => $this->translate('Display detailed information about multiple downtimes.'),
                'url'   =>'monitoring/downtimes/show'
            )
        )->activate('downtimes');
    }

    /**
     * Display the detail view for a downtime list
     */
    public function showAction()
    {
        $this->view->downtimes = $this->downtimes;
        $this->view->listAllLink = Url::fromPath('monitoring/list/downtimes')
            ->setQueryString($this->filter->toQueryString());
        $this->view->removeAllLink = Url::fromPath('monitoring/downtimes/delete-all')->setParams($this->params);
    }

    /**
     * Display the form for removing a downtime list
     */
    public function deleteAllAction()
    {
        $this->assertPermission('monitoring/command/downtime/delete');
        $this->view->downtimes = $this->downtimes;
        $this->view->listAllLink = Url::fromPath('monitoring/list/downtimes')
                ->setQueryString($this->filter->toQueryString());
        $delDowntimeForm = new DeleteDowntimesCommandForm();
        $delDowntimeForm->setTitle($this->view->translate('Remove all Downtimes'));
        $delDowntimeForm->addDescription(sprintf(
            $this->translate('Confirm removal of %d downtimes.'),
            $this->downtimes->count()
        ));
        $delDowntimeForm->setRedirectUrl(Url::fromPath('monitoring/list/downtimes'));
        $delDowntimeForm->setDowntimes($this->downtimes->fetchAll())->handleRequest();
        $this->view->delAllDowntimeForm = $delDowntimeForm;
    }
}