]> granicus.if.org Git - icinga2/blobdiff - lib/icinga/notification.ti
Correct current_concurrent_checks to actually running checks
[icinga2] / lib / icinga / notification.ti
index f73af49a44656fd66f57f3d8fac42998bf3aabc4..0212a144a58228d01c0f49f1f069e75149486afa 100644 (file)
+/* 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 Dictionary::Ptr props) const;
+       virtual String MakeName(const String& shortName, const Object::Ptr& context) const;
+       virtual Dictionary::Ptr ParseName(const String& name) const;
 };
+
 }}}
 
 class Notification : CustomVarObject < NotificationNameComposer
 {
-       [config, protected] String command (CommandRaw);
+       load_after Host;
+       load_after Service;
+
+       [config, protected, required, navigation] name(NotificationCommand) command (CommandRaw) {
+               navigate {{{
+                       return NotificationCommand::GetByName(GetCommandRaw());
+               }}}
+       };
        [config] double interval {
                default {{{ return 1800; }}}
        };
-       [config] String period (PeriodRaw);
-       [config] Dictionary::Ptr macros;
-       [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] String host_name;
-       [config, protected] String service_name;
-
-       [state] double last_notification;
-       [state, set_protected] double next_notification (NextNotificationRaw);
-       [state, set_protected] Value notification_number;
-       [state] double last_problem_notification;
+       [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());
+                       }
+
+                       if (!newValue.IsEmpty()) {
+                               Service::Ptr service = Service::GetByNamePair(GetHostName(), newValue);
+                               DependencyGraph::AddDependency(this, service.get());
+                       }
+               }}}
+               navigate {{{
+                       if (GetServiceName().IsEmpty())
+                               return nullptr;
+
+                       Host::Ptr host = Host::GetByName(GetHostName());
+                       return host->GetServiceByShortName(GetServiceName());
+               }}}
+       };
+
+       [state, no_user_modify] Array::Ptr notified_problem_users {
+               default {{{ return new Array(); }}}
+       };
+
+       [state, no_user_modify] bool no_more_notifications {
+               default {{{ return false; }}}
+       };
+
+       [state, no_user_view, no_user_modify] Array::Ptr stashed_notifications {
+               default {{{ return new Array(); }}}
+       };
+
+       [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());
+               }}}
+       };
+};
+
+validator Notification {
+       Dictionary times {
+               Number begin;
+               Number end;
+       };
 };
 
 }