]> granicus.if.org Git - icinga2/blobdiff - lib/icinga/notification.ti
Correct current_concurrent_checks to actually running checks
[icinga2] / lib / icinga / notification.ti
index 1f26d1b32f91ccc899dd538a5752be2b154fe8e2..0212a144a58228d01c0f49f1f069e75149486afa 100644 (file)
@@ -1,33 +1,24 @@
-/******************************************************************************
- * Icinga 2                                                                   *
- * Copyright (C) 2012-2015 Icinga Development Team (http://www.icinga.org)    *
- *                                                                            *
- * This program is free software; you can redistribute it and/or              *
- * modify it under the terms of the GNU General Public License                *
- * as published by the Free Software Foundation; either version 2             *
- * of the License, or (at your option) any later version.                     *
- *                                                                            *
- * This program is distributed in the hope that it will be useful,            *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
- * GNU General Public License for more details.                               *
- *                                                                            *
- * You should have received a copy of the GNU General Public License          *
- * along with this program; if not, write to the Free Software Foundation     *
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
- ******************************************************************************/
+/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
 
 #include "icinga/customvarobject.hpp"
+#include "icinga/notificationresult.hpp"
+#include "base/array.hpp"
+#impl_include "icinga/notificationcommand.hpp"
+#impl_include "icinga/service.hpp"
+
+library icinga;
 
 namespace icinga
 {
 
 code {{{
-class I2_ICINGA_API NotificationNameComposer : public NameComposer
+class NotificationNameComposer : public NameComposer
 {
 public:
        virtual String MakeName(const String& shortName, const Object::Ptr& context) const;
+       virtual Dictionary::Ptr ParseName(const String& name) const;
 };
+
 }}}
 
 class Notification : CustomVarObject < NotificationNameComposer
@@ -35,53 +26,81 @@ class Notification : CustomVarObject < NotificationNameComposer
        load_after Host;
        load_after Service;
 
-       [config, protected, required] name(NotificationCommand) command (CommandRaw);
+       [config, protected, required, navigation] name(NotificationCommand) command (CommandRaw) {
+               navigate {{{
+                       return NotificationCommand::GetByName(GetCommandRaw());
+               }}}
+       };
        [config] double interval {
                default {{{ return 1800; }}}
        };
-       [config] name(TimePeriod) period (PeriodRaw);
-       [config, protected] Array::Ptr users (UsersRaw);
-       [config, protected] Array::Ptr user_groups (UserGroupsRaw);
+       [config, navigation] name(TimePeriod) period (PeriodRaw) {
+               navigate {{{
+                       return TimePeriod::GetByName(GetPeriodRaw());
+               }}}
+       };
+       [config, protected] array(name(User)) users (UsersRaw);
+       [config, protected] array(name(UserGroup)) user_groups (UserGroupsRaw);
        [config] Dictionary::Ptr times;
-       [config] Array::Ptr types;
-       int type_filter_real (TypeFilter);
-       [config] Array::Ptr states;
-       int state_filter_real (StateFilter);
-       [config, protected, required] name(Host) host_name;
-       [config, protected] String service_name;
-
-       [state] Array::Ptr notified_users {
-               default {{{ return new Array(); }}}
+       [config] array(Value) types;
+       [no_user_view, no_user_modify] int type_filter_real (TypeFilter);
+       [config] array(Value) states;
+       [no_user_view, no_user_modify] int state_filter_real (StateFilter);
+       [config, protected, required, navigation(host)] name(Host) host_name {
+               navigate {{{
+                       return Host::GetByName(GetHostName());
+               }}}
        };
+       [config, protected, navigation(service)] String service_name {
+               track {{{
+                       if (!oldValue.IsEmpty()) {
+                               Service::Ptr service = Service::GetByNamePair(GetHostName(), oldValue);
+                               DependencyGraph::RemoveDependency(this, service.get());
+                       }
 
-       [state] double last_notification;
-       [state, set_protected] double next_notification (NextNotificationRaw);
-       [state, set_protected] Value notification_number;
-       [state] double last_problem_notification;
+                       if (!newValue.IsEmpty()) {
+                               Service::Ptr service = Service::GetByNamePair(GetHostName(), newValue);
+                               DependencyGraph::AddDependency(this, service.get());
+                       }
+               }}}
+               navigate {{{
+                       if (GetServiceName().IsEmpty())
+                               return nullptr;
 
-       [config] name(Endpoint) command_endpoint (CommandEndpointRaw);
-};
+                       Host::Ptr host = Host::GetByName(GetHostName());
+                       return host->GetServiceByShortName(GetServiceName());
+               }}}
+       };
 
-validator Notification {
-       Array users {
-               name(User) "*";
+       [state, no_user_modify] Array::Ptr notified_problem_users {
+               default {{{ return new Array(); }}}
        };
 
-       Array user_groups {
-               name(UserGroup) "*";
+       [state, no_user_modify] bool no_more_notifications {
+               default {{{ return false; }}}
        };
 
-       Dictionary times {
-               Number begin;
-               Number end;
+       [state, no_user_view, no_user_modify] Array::Ptr stashed_notifications {
+               default {{{ return new Array(); }}}
        };
 
-       Array types {
-               Number "*";
+       [state] Timestamp last_notification;
+       [state] Timestamp next_notification;
+       [state] int notification_number;
+       [state] Timestamp last_problem_notification;
+       [state] NotificationResult::Ptr last_notification_result;
+
+       [config, navigation] name(Endpoint) command_endpoint (CommandEndpointRaw) {
+               navigate {{{
+                       return Endpoint::GetByName(GetCommandEndpointRaw());
+               }}}
        };
+};
 
-       Array states {
-               Number "*";
+validator Notification {
+       Dictionary times {
+               Number begin;
+               Number end;
        };
 };