diff options
Diffstat (limited to '')
-rw-r--r-- | lib/icinga/notification.ti | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/lib/icinga/notification.ti b/lib/icinga/notification.ti new file mode 100644 index 0000000..ab633c5 --- /dev/null +++ b/lib/icinga/notification.ti @@ -0,0 +1,107 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#include "icinga/customvarobject.hpp" +#impl_include "icinga/notificationcommand.hpp" +#impl_include "icinga/service.hpp" + +library icinga; + +namespace icinga +{ + +code {{{ +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 +{ + 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, navigation] name(TimePeriod) period (PeriodRaw) { + navigate {{{ + return TimePeriod::GetByName(GetPeriodRaw()); + }}} + }; + [config, signal_with_old_value] array(name(User)) users (UsersRaw); + [config, signal_with_old_value] array(name(UserGroup)) user_groups (UserGroupsRaw); + [config] Dictionary::Ptr times; + [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, no_user_view, no_user_modify] int suppressed_notifications { + default {{{ return 0; }}} + }; + + [config, navigation] name(Endpoint) command_endpoint (CommandEndpointRaw) { + navigate {{{ + return Endpoint::GetByName(GetCommandEndpointRaw()); + }}} + }; +}; + +validator Notification { + Dictionary times { + Number begin; + Number end; + }; +}; + +} |