]> granicus.if.org Git - icinga2/commitdiff
Update documentation
authorGunnar Beutner <gunnar@beutner.name>
Wed, 21 Jan 2015 07:01:49 +0000 (08:01 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 21 Jan 2015 07:48:38 +0000 (08:48 +0100)
14 files changed:
doc/1-about.md
doc/10-object-types.md [new file with mode: 0644]
doc/11-icinga-template-library.md [new file with mode: 0644]
doc/12-appendix.md [moved from doc/9-appendix.md with 100% similarity]
doc/2-getting-started.md
doc/3-monitoring-basics.md [moved from doc/4-monitoring-basics.md with 99% similarity]
doc/4-monitoring-remote-systems.md [moved from doc/5-monitoring-remote-systems.md with 99% similarity]
doc/5-addons-plugins.md [moved from doc/6-addons-plugins.md with 98% similarity]
doc/6-troubleshooting.md [moved from doc/3-troubleshooting.md with 94% similarity]
doc/7-configuring-icinga-2.md [deleted file]
doc/7-migrating-from-icinga-1x.md [moved from doc/8-migration.md with 100% similarity]
doc/8-language-reference.md [new file with mode: 0644]
doc/9-library-reference.md [new file with mode: 0644]
lib/base/math-script.cpp

index 19c81eacdc51dd29ffc92129533d71e21a9a830c..ea828008a25af12d27a7f2ad0a212bcf7c2fecb0 100644 (file)
@@ -141,7 +141,7 @@ Icinga 2 is available as [Vagrant Demo VM](#vagrant).
 * Bug #7726: Windows wizard is missing --zone argument
 * Bug #7730: Restart Icinga - Error Restoring program state from file '/var/lib/icinga2/icinga2.state'
 * Bug #7735: 2.2.0 has out-of-date icinga2 man page
-* Bug #7738: Systemd rpm scripts are run in wrong package
+* Bug #7738: systemd rpm scripts are run in wrong package
 * Bug #7740: /usr/sbin/icinga-prepare-dirs conflicts in the bin and common package
 * Bug #7741: Icinga 2.2 misses the build requirement libyajl-devel for SUSE distributions
 * Bug #7743: Icinga2 node add failed with unhandled exception
@@ -173,7 +173,7 @@ Icinga 2 is available as [Vagrant Demo VM](#vagrant).
     * `icinga2 object list` replaces `icinga2-list-objects` script  #7251
     * `icinga2 pki` replaces` icinga2-build-{ca,key}` scripts  #7247
     * `icinga2 repository` manages `/etc/icinga2/repository.d` which must be included in `icinga2.conf` #7255
-    * `icinga2 node` cli command provides node (master, satellite, agent) setup (wizard) and management functionality #7248
+    * `icinga2 node` CLI command provides node (master, satellite, agent) setup (wizard) and management functionality #7248
     * `icinga2 daemon` for existing daemon arguments (`-c`, `-C`). Removed `-u` and `-g` parameters in favor of [init.conf](#init-conf).
     * bash auto-completion & terminal colors #7396
 * Configuration
@@ -194,7 +194,7 @@ Icinga 2 is available as [Vagrant Demo VM](#vagrant).
     * [PerfdataWriter](#writing-performance-data-files): Don't change perfdata, pass through from plugins #7268
     * [GraphiteWriter](#graphite-carbon-cache-writer): Add warn/crit/min/max perfdata and downtime_depth stats values #7366 #6946
 * Packages
-    * `python-icinga2` package dropped in favor of integrated cli commands #7245
+    * `python-icinga2` package dropped in favor of integrated CLI commands #7245
     * Windows Installer for the agent parts #7243
 
 > **Note**
@@ -277,7 +277,7 @@ Icinga 2 is available as [Vagrant Demo VM](#vagrant).
 * Bug #7373: Wrong usermod command for external command pipe setup
 * Bug #7378: Commands are auto-completed when they shouldn't be
 * Bug #7379: failed en/disable feature should return error
-* Bug #7380: Debian package root permissions interfere with icinga2 cli commands as icinga user
+* Bug #7380: Debian package root permissions interfere with icinga2 CLI commands as icinga user
 * Bug #7392: Schema upgrade files are missing in /usr/share/icinga2-ido-{mysql,pgsql}
 * Bug #7417: CMake warnings on OS X
 * Bug #7428: Documentation: 1-about contribute links to non-existing report a bug howto
@@ -327,14 +327,14 @@ Compiling from source is not recommended.
 [Cluster](#distributed-monitoring-high-availability) model for distributed setups, load balancing
 and High-Availability installations (or a combination of them). On-demand configuration
 synchronisation between zones is available, but not mandatory (for example when config management
-tools such as Puppet are used). Secured by SSL x509 certificates, supporting IPv4 and IPv6.
+tools such as Puppet are used). Secured by TLS with certificates, supporting IPv4 and IPv6.
 High Availability for DB IDO: Only active on the current zone master, failover happens automatically.
 
 * Monitoring Remote Clients
 
 Built on proven [cluster](#distributed-monitoring-high-availability) stack,
 [Icinga 2 clients](#icinga2-remote-client-monitoring) can be installed acting as remote satellite or
-agent. Secured communication by SSL x509 certificates, install them with [cli commands](#cli-commands),
+agent. Secured communication by TLS with certificates, install them with [CLI commands](#cli-commands),
 and configure them either locally with discovery on the master, or use them for executing checks and
 event handlers remotely.
 
@@ -355,7 +355,7 @@ That way you are not blind (anymore) during a configuration reload and benefit f
 
 Enable only the [features](#cli-command-feature) which are currently disabled,
 [list objects](#cli-command-object) generated from [apply rules](#using-apply) or
-[generate SSL x509 certificates](#cli-command-pki) for remote clients or cluster setup.
+[generate X.509 certificates](#cli-command-pki) for remote clients or cluster setup.
 Start/stop the Icinga 2 [daemon](#cli-command-daemon) or validate your configuration,
 [manage and install](#cli-command-node) remote clients and service discovery helped
 with black- and whitelists.
diff --git a/doc/10-object-types.md b/doc/10-object-types.md
new file mode 100644 (file)
index 0000000..6925e61
--- /dev/null
@@ -0,0 +1,1226 @@
+# <a id="object-types"></a> Object Types
+
+## <a id="objecttype-host"></a> Host
+
+A host.
+
+Example:
+
+    object Host "localhost" {
+      display_name = "The best host there is"
+      address = "127.0.0.1"
+      address6 = "::1"
+
+      groups = [ "all-hosts" ]
+
+      check_command = "hostalive"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  display_name    |**Optional.** A short description of the host.
+  address         |**Optional.** The host's address. Available as command runtime macro `$address$` if set.
+  address6        |**Optional.** The host's address. Available as command runtime macro `$address6$` if set.
+  groups          |**Optional.** A list of host groups this host belongs to.
+  vars            |**Optional.** A dictionary containing custom attributes that are specific to this host.
+  check\_command  |**Required.** The name of the check command.
+  max\_check\_attempts|**Optional.** The number of times a host is re-checked before changing into a hard state. Defaults to 3.
+  check\_period   |**Optional.** The name of a time period which determines when this host should be checked. Not set by default.
+  check\_interval |**Optional.** The check interval (in seconds). This interval is used for checks when the host is in a `HARD` state. Defaults to 5 minutes.
+  retry\_interval |**Optional.** The retry interval (in seconds). This interval is used for checks when the host is in a `SOFT` state. Defaults to 1 minute.
+  enable\_notifications|**Optional.** Whether notifications are enabled. Defaults to true.
+  enable\_active\_checks|**Optional.** Whether active checks are enabled. Defaults to true.
+  enable\_passive\_checks|**Optional.** Whether passive checks are enabled. Defaults to true.
+  enable\_event\_handler|**Optional.** Enables event handlers for this host. Defaults to true.
+  enable\_flapping|**Optional.** Whether flap detection is enabled. Defaults to true.
+  enable\_perfdata|**Optional.** Whether performance data processing is enabled. Defaults to true.
+  event\_command  |**Optional.** The name of an event command that should be executed every time the host's state changes or the host is in a `SOFT` state.
+  flapping\_threshold|**Optional.** The flapping threshold in percent when a host is considered to be flapping.
+  volatile        |**Optional.** The volatile setting enables always `HARD` state types if `NOT-OK` state changes occur.
+  zone           |**Optional.** The zone this object is a member of.
+  command\_endpoint|**Optional.** The endpoint where commands are executed on.
+  notes           |**Optional.** Notes for the host.
+  notes\_url      |**Optional.** Url for notes for the host (for example, in notification commands).
+  action\_url     |**Optional.** Url for actions for the host (for example, an external graphing tool).
+  icon\_image     |**Optional.** Icon image for the host. Used by external interfaces only.
+  icon\_image\_alt|**Optional.** Icon image description for the host. Used by external interface only.
+
+> **Best Practice**
+>
+> The `address` and `address6` attributes are required for running commands using
+> the `$address$` and `$address6$` runtime macros.
+
+
+## <a id="objecttype-hostgroup"></a> HostGroup
+
+A group of hosts.
+
+> **Best Practice**
+>
+> Assign host group members using the [group assign](#group-assign) rules.
+
+Example:
+
+    object HostGroup "my-hosts" {
+      display_name = "My hosts"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  display_name    |**Optional.** A short description of the host group.
+  groups          |**Optional.** An array of nested group names.
+
+## <a id="objecttype-service"></a> Service
+
+Service objects describe network services and how they should be checked
+by Icinga 2.
+
+> **Best Practice**
+>
+> Rather than creating a `Service` object for a specific host it is usually easier
+> to just create a `Service` template and use the `apply` keyword to assign the
+> service to a number of hosts.
+> Check the [apply](#using-apply) chapter for details.
+
+Example:
+
+    object Service "uptime" {
+      host_name = "localhost"
+
+      display_name = "localhost Uptime"
+
+      check_command = "check_snmp"
+
+      vars.community = "public"
+      vars.oid = "DISMAN-EVENT-MIB::sysUpTimeInstance"
+
+      check_interval = 60s
+      retry_interval = 15s
+
+      groups = [ "all-services", "snmp" ]
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  display_name    |**Optional.** A short description of the service.
+  host_name       |**Required.** The host this service belongs to. There must be a `Host` object with that name.
+  name            |**Required.** The service name. Must be unique on a per-host basis (Similar to the service_description attribute in Icinga 1.x).
+  groups          |**Optional.** The service groups this service belongs to.
+  vars            |**Optional.** A dictionary containing custom attributes that are specific to this service.
+  check\_command  |**Required.** The name of the check command.
+  max\_check\_attempts|**Optional.** The number of times a service is re-checked before changing into a hard state. Defaults to 3.
+  check\_period   |**Optional.** The name of a time period which determines when this service should be checked. Not set by default.
+  check\_interval |**Optional.** The check interval (in seconds). This interval is used for checks when the service is in a `HARD` state. Defaults to 5 minutes.
+  retry\_interval |**Optional.** The retry interval (in seconds). This interval is used for checks when the service is in a `SOFT` state. Defaults to 1 minute.
+  enable\_notifications|**Optional.** Whether notifications are enabled. Defaults to true.
+  enable\_active\_checks|**Optional.** Whether active checks are enabled. Defaults to true.
+  enable\_passive\_checks|**Optional.** Whether passive checks are enabled. Defaults to true.
+  enable\_event\_handler|**Optional.** Enables event handlers for this host. Defaults to true.
+  enable\_flapping|**Optional.** Whether flap detection is enabled. Defaults to true.
+  enable\_perfdata|**Optional.** Whether performance data processing is enabled. Defaults to true.
+  event\_command  |**Optional.** The name of an event command that should be executed every time the service's state changes or the service is in a `SOFT` state.
+  flapping\_threshold|**Optional.** The flapping threshold in percent when a service is considered to be flapping.
+  volatile        |**Optional.** The volatile setting enables always `HARD` state types if `NOT-OK` state changes occur.
+  zone           |**Optional.** The zone this object is a member of.
+  command\_endpoint|**Optional.** The endpoint where commands are executed on.
+  notes           |**Optional.** Notes for the service.
+  notes\_url      |**Optional.** Url for notes for the service (for example, in notification commands).
+  action_url      |**Optional.** Url for actions for the service (for example, an external graphing tool).
+  icon\_image     |**Optional.** Icon image for the service. Used by external interfaces only.
+  icon\_image\_alt|**Optional.** Icon image description for the service. Used by external interface only.
+
+
+Service objects have composite names, i.e. their names are based on the host_name attribute and the name you specified. This means
+you can define more than one object with the same (short) name as long as the `host_name` attribute has a different value.
+
+## <a id="objecttype-servicegroup"></a> ServiceGroup
+
+A group of services.
+
+> **Best Practice**
+>
+> Assign service group members using the [group assign](#group-assign) rules.
+
+Example:
+
+    object ServiceGroup "snmp" {
+      display_name = "SNMP services"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  display_name    |**Optional.** A short description of the service group.
+  groups          |**Optional.** An array of nested group names.
+
+
+## <a id="objecttype-user"></a> User
+
+A user.
+
+Example:
+
+    object User "icingaadmin" {
+      display_name = "Icinga 2 Admin"
+      groups = [ "icingaadmins" ]
+      email = "icinga@localhost"
+      pager = "icingaadmin@localhost.localdomain"
+
+      period = "24x7"
+
+      states = [ OK, Warning, Critical, Unknown ]
+      types = [ Problem, Recovery ]
+
+      vars.additional_notes = "This is the Icinga 2 Admin account."
+    }
+
+Available notification state filters:
+
+    OK
+    Warning
+    Critical
+    Unknown
+    Up
+    Down
+
+Available notification type filters:
+
+    DowntimeStart
+    DowntimeEnd
+    DowntimeRemoved
+    Custom
+    Acknowledgement
+    Problem
+    Recovery
+    FlappingStart
+    FlappingEnd
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  display_name    |**Optional.** A short description of the user.
+  email           |**Optional.** An email string for this user. Useful for notification commands.
+  pager           |**Optional.** A pager string for this user. Useful for notification commands.
+  vars            |**Optional.** A dictionary containing custom attributes that are specific to this user.
+  groups          |**Optional.** An array of group names.
+  enable_notifications|**Optional.** Whether notifications are enabled for this user.
+  period          |**Optional.** The name of a time period which determines when a notification for this user should be triggered. Not set by default.
+  types           |**Optional.** A set of type filters when this notification should be triggered. By default everything is matched.
+  states          |**Optional.** A set of state filters when this notification should be triggered. By default everything is matched.
+  zone           |**Optional.** The zone this object is a member of.
+
+
+## <a id="objecttype-usergroup"></a> UserGroup
+
+A user group.
+
+> **Best Practice**
+>
+> Assign user group members using the [group assign](#group-assign) rules.
+
+Example:
+
+    object UserGroup "icingaadmins" {
+        display_name = "Icinga 2 Admin Group"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  display_name    |**Optional.** A short description of the user group.
+  groups          |**Optional.** An array of nested group names.
+  zone           |**Optional.** The zone this object is a member of.
+
+
+
+## <a id="objecttype-checkcommand"></a> CheckCommand
+
+A check command definition. Additional default command custom attributes can be
+defined here.
+
+Example:
+
+    object CheckCommand "check_http" {
+      import "plugin-check-command"
+
+      command = [ PluginDir + "/check_http" ]
+
+      arguments = {
+        "-H" = "$http_vhost$"
+        "-I" = "$http_address$"
+        "-u" = "$http_uri$"
+        "-p" = "$http_port$"
+        "-S" = {
+          set_if = "$http_ssl$"
+        }
+        "--sni" = {
+          set_if = "$http_sni$"
+        }
+        "-a" = {
+          value = "$http_auth_pair$"
+          description = "Username:password on sites with basic authentication"
+        }
+        "--no-body" = {
+          set_if = "$http_ignore_body$"
+        }
+        "-r" = "$http_expect_body_regex$"
+        "-w" = "$http_warn_time$"
+        "-c" = "$http_critical_time$"
+        "-e" = "$http_expect$"
+      }
+
+      vars.http_address = "$address$"
+      vars.http_ssl = false
+      vars.http_sni = false
+    }
+
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  execute         |**Required.** The "execute" script method takes care of executing the check. In virtually all cases you should import the "plugin-check-command" template to take care of this setting.
+  command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command. When using the "arguments" attribute this must be an array.
+  env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
+  vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
+  timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
+  zone           |**Optional.** The zone this object is a member of.
+  arguments       |**Optional.** A dictionary of command arguments.
+
+
+### <a id="objecttype-checkcommand-arguments"></a> CheckCommand Arguments
+
+Command arguments can be defined as key-value-pairs in the `arguments`
+dictionary. If the argument requires additional configuration for example
+a `description` attribute or an optional condition, the value can be defined
+as dictionary specifying additional options.
+
+Service:
+
+    vars.x_val = "My command argument value."
+    vars.have_x = "true"
+
+CheckCommand:
+
+    arguments = {
+      "-X" = {
+        value = "$x_val$"
+       key = "-Xnew"       /* optional, set a new key identifier */
+        description = "My plugin requires this argument for doing X."
+        required = false    /* optional, no error if not set */
+        skip_key = false    /* always use "-X <value>" */
+        set_if = "$have_x$" /* only set if variable defined and resolves to a numeric value. String values are not supported */
+        order = -1          /* first position */
+       repeat_key = true   /* if `value` is an array, repeat the key as parameter: ... 'key' 'value[0]' 'key' 'value[1]' 'key' 'value[2]' ... */
+      }
+      "-Y" = {
+        value = "$y_val$"
+        description = "My plugin requires this argument for doing Y."
+        required = false    /* optional, no error if not set */
+        skip_key = true     /* don't prefix "-Y" only use "<value>" */
+        set_if = "$have_y$" /* only set if variable defined and resolves to a numeric value. String values are not supported */
+        order = 0           /* second position */
+       repeat_key = false  /* if `value` is an array, do not repeat the key as parameter: ... 'key' 'value[0]' 'value[1]' 'value[2]' ... */
+      }
+    }
+
+  Option      | Description
+  ------------|--------------
+  value       | Optional argument value.
+  key        | Optional argument key overriding the key identifier.
+  description | Optional argument description.
+  required    | Required argument. Execution error if not set. Defaults to false (optional).
+  skip_key    | Use the value as argument and skip the key.
+  set_if      | Argument is added if the macro resolves to a defined numeric value. String values are not supported.
+  order       | Set if multiple arguments require a defined argument order.
+  repeat_key  | If the argument value is an array, repeat the argument key, or not. Defaults to true (repeat).
+
+Argument order:
+
+    `..., -3, -2, -1, <un-ordered keys>, 1, 2, 3, ...`
+
+Argument array `repeat_key = true`:
+
+    `'key' 'value[0]' 'key' 'value[1]' 'key' 'value[2]'`
+
+Argument array `repeat_key = false`:
+
+    `'key' 'value[0]' 'value[1]' 'value[2]'`
+
+
+## <a id="objecttype-notificationcommand"></a> NotificationCommand
+
+A notification command definition.
+
+Example:
+
+    object NotificationCommand "mail-service-notification" {
+      import "plugin-notification-command"
+
+      command = [
+        SysconfDir + "/icinga2/scripts/mail-notification.sh"
+      ]
+
+      env = {
+        NOTIFICATIONTYPE = "$notification.type$"
+        SERVICEDESC = "$service.name$"
+        HOSTALIAS = "$host.display_name$"
+        HOSTADDRESS = "$address$"
+        SERVICESTATE = "$service.state$"
+        LONGDATETIME = "$icinga.long_date_time$"
+        SERVICEOUTPUT = "$service.output$"
+        NOTIFICATIONAUTHORNAME = "$notification.author$"
+        NOTIFICATIONCOMMENT = "$notification.comment$"
+        HOSTDISPLAYNAME = "$host.display_name$"
+        SERVICEDISPLAYNAME = "$service.display_name$"
+        USEREMAIL = "$user.email$"
+      }
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  execute         |**Required.** The "execute" script method takes care of executing the notification. In virtually all cases you should import the "plugin-notification-command" template to take care of this setting.
+  command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
+  env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
+  vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
+  timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
+  zone           |**Optional.** The zone this object is a member of.
+  arguments       |**Optional.** A dictionary of command arguments.
+
+Command arguments can be used the same way as for [CheckCommand objects](#objecttype-checkcommand-arguments).
+
+
+## <a id="objecttype-eventcommand"></a> EventCommand
+
+An event command definition.
+
+Example:
+
+    object EventCommand "restart-httpd-event" {
+      import "plugin-event-command"
+
+      command = "/opt/bin/restart-httpd.sh"
+    }
+
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  execute         |**Required.** The "execute" script method takes care of executing the event handler. In virtually all cases you should import the "plugin-event-command" template to take care of this setting.
+  command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
+  env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
+  vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
+  timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
+  arguments       |**Optional.** A dictionary of command arguments.
+
+Command arguments can be used the same way as for [CheckCommand objects](#objecttype-checkcommand-arguments).
+
+
+## <a id="objecttype-notification"></a> Notification
+
+Notification objects are used to specify how users should be notified in case
+of host and service state changes and other events.
+
+> **Best Practice**
+>
+> Rather than creating a `Notification` object for a specific host or service it is
+> usually easier to just create a `Notification` template and use the `apply` keyword
+> to assign the notification to a number of hosts or services. Use the `to` keyword
+> to set the specific target type for `Host` or `Service`.
+> Check the [notifications](#notifications) chapter for detailed examples.
+
+Example:
+
+    object Notification "localhost-ping-notification" {
+      host_name = "localhost"
+      service_name = "ping4"
+
+      command = "mail-notification"
+
+      users = [ "user1", "user2" ]
+
+      types = [ Problem, Recovery ]
+    }
+
+Attributes:
+
+  Name                      | Description
+  --------------------------|----------------
+  host_name                 | **Required.** The name of the host this notification belongs to.
+  service_name              | **Optional.** The short name of the service this notification belongs to. If omitted this notification object is treated as host notification.
+  vars                      | **Optional.** A dictionary containing custom attributes that are specific to this notification object.
+  users                     | **Optional.** A list of user names who should be notified.
+  user_groups               | **Optional.** A list of user group names who should be notified.
+  times                     | **Optional.** A dictionary containing `begin` and `end` attributes for the notification.
+  command                   | **Required.** The name of the notification command which should be executed when the notification is triggered.
+  interval                  | **Optional.** The notification interval (in seconds). This interval is used for active notifications. Defaults to 30 minutes. If set to 0, [re-notifications](#disable-renotification) are disabled.
+  period                    | **Optional.** The name of a time period which determines when this notification should be triggered. Not set by default.
+  zone                     |**Optional.** The zone this object is a member of.
+  types                     | **Optional.** A list of type filters when this notification should be triggered. By default everything is matched.
+  states                    | **Optional.** A list of state filters when this notification should be triggered. By default everything is matched.
+
+Available notification state filters:
+
+    OK
+    Warning
+    Critical
+    Unknown
+    Up
+    Down
+
+Available notification type filters:
+
+    DowntimeStart
+    DowntimeEnd
+    DowntimeRemoved
+    Custom
+    Acknowledgement
+    Problem
+    Recovery
+    FlappingStart
+    FlappingEnd
+
+
+
+## <a id="objecttype-timeperiod"></a> TimePeriod
+
+Time periods can be used to specify when hosts/services should be checked or to limit
+when notifications should be sent out.
+
+Example:
+
+    object TimePeriod "24x7" {
+      import "legacy-timeperiod"
+
+      display_name = "Icinga 2 24x7 TimePeriod"
+
+      ranges = {
+        monday = "00:00-24:00"
+        tuesday = "00:00-24:00"
+        wednesday = "00:00-24:00"
+        thursday = "00:00-24:00"
+        friday = "00:00-24:00"
+        saturday = "00:00-24:00"
+        sunday = "00:00-24:00"
+      }
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  display_name    |**Optional.** A short description of the time period.
+  update          |**Required.** The "update" script method takes care of updating the internal representation of the time period. In virtually all cases you should import the "legacy-timeperiod" template to take care of this setting.
+  zone           |**Optional.** The zone this object is a member of.
+  ranges          |**Required.** A dictionary containing information which days and durations apply to this timeperiod.
+
+The `/etc/icinga2/conf.d/timeperiods.conf` file is usually used to define
+timeperiods including this one.
+
+
+## <a id="objecttype-scheduleddowntime"></a> ScheduledDowntime
+
+ScheduledDowntime objects can be used to set up recurring downtimes for hosts/services.
+
+> **Best Practice**
+>
+> Rather than creating a `ScheduledDowntime` object for a specific host or service it is usually easier
+> to just create a `ScheduledDowntime` template and use the `apply` keyword to assign the
+> scheduled downtime to a number of hosts or services. Use the `to` keyword to set the specific target
+> type for `Host` or `Service`.
+> Check the [recurring downtimes](#recurring-downtimes) example for details.
+
+Example:
+
+    object ScheduledDowntime "some-downtime" {
+      host_name = "localhost"
+      service_name = "ping4"
+
+      author = "icingaadmin"
+      comment = "Some comment"
+
+      fixed = false
+      duration = 30m
+
+      ranges = {
+        "sunday" = "02:00-03:00"
+      }
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  host_name       |**Required.** The name of the host this scheduled downtime belongs to.
+  service_name    |**Optional.** The short name of the service this scheduled downtime belongs to. If omitted this downtime object is treated as host downtime.
+  author          |**Required.** The author of the downtime.
+  comment         |**Required.** A comment for the downtime.
+  fixed           |**Optional.** Whether this is a fixed downtime. Defaults to true.
+  duration        |**Optional.** How long the downtime lasts. Only has an effect for flexible (non-fixed) downtimes.
+  zone           |**Optional.** The zone this object is a member of.
+  ranges          |**Required.** A dictionary containing information which days and durations apply to this timeperiod.
+
+ScheduledDowntime objects have composite names, i.e. their names are based
+on the `host_name` and `service_name` attributes and the
+name you specified. This means you can define more than one object
+with the same (short) name as long as one of the `host_name` and
+`service_name` attributes has a different value.
+
+
+## <a id="objecttype-dependency"></a> Dependency
+
+Dependency objects are used to specify dependencies between hosts and services. Dependencies
+can be defined as Host-to-Host, Service-to-Service, Service-to-Host, or Host-to-Service
+relations.
+
+> **Best Practice**
+>
+> Rather than creating a `Dependency` object for a specific host or service it is usually easier
+> to just create a `Dependency` template and use the `apply` keyword to assign the
+> dependency to a number of hosts or services. Use the `to` keyword to set the specific target
+> type for `Host` or `Service`.
+> Check the [dependencies](#dependencies) chapter for detailed examples.
+
+Service-to-Service Example:
+
+    object Dependency "webserver-internet" {
+      parent_host_name = "internet"
+      parent_service_name = "ping4"
+
+      child_host_name = "webserver"
+      child_service_name = "ping4"
+
+      states = [ OK, Warning ]
+
+      disable_checks = true
+    }
+
+Host-to-Host Example:
+
+    object Dependency "webserver-internet" {
+      parent_host_name = "internet"
+
+      child_host_name = "webserver"
+
+      states = [ Up ]
+
+      disable_checks = true
+    }
+
+Attributes:
+
+  Name                  |Description
+  ----------------------|----------------
+  parent_host_name      |**Required.** The parent host.
+  parent_service_name   |**Optional.** The parent service. If omitted this dependency object is treated as host dependency.
+  child_host_name       |**Required.** The child host.
+  child_service_name    |**Optional.** The child service. If omitted this dependency object is treated as host dependency.
+  disable_checks        |**Optional.** Whether to disable checks when this dependency fails. Defaults to false.
+  disable_notifications |**Optional.** Whether to disable notifications when this dependency fails. Defaults to true.
+  period                |**Optional.** Time period during which this dependency is enabled.
+  zone                 |**Optional.** The zone this object is a member of.
+  states               |**Optional.** A list of state filters when this dependency should be OK. Defaults to [ OK, Warning ] for services and [ Up ] for hosts.
+
+Available state filters:
+
+    OK
+    Warning
+    Critical
+    Unknown
+    Up
+    Down
+
+When using [apply rules](#using-apply) for dependencies, you can leave out certain attributes which will be
+automatically determined by Icinga 2.
+
+Service-to-Host Dependency Example:
+
+    apply Dependency "internet" to Service {
+      parent_host_name = "dsl-router"
+      disable_checks = true
+
+      assign where host.name != "dsl-router"
+    }
+
+This example sets all service objects matching the assign condition into a dependency relation to
+the parent host object `dsl-router` as implicit child services.
+
+Service-to-Service-on-the-same-Host Dependency Example:
+
+    apply Dependency "disable-nrpe-checks" to Service {
+      parent_service_name = "nrpe-health"
+
+      assign where service.check_command == "nrpe"
+      ignore where service.name == "nrpe-health"
+    }
+
+This example omits the `parent_host_name` attribute and Icinga 2 automatically sets its value to the name of the
+host object matched by the apply rule condition. All services where apply matches are made implicit child services
+in this dependency relation.
+
+
+Dependency objects have composite names, i.e. their names are based on the `child_host_name` and `child_service_name` attributes and the
+name you specified. This means you can define more than one object with the same (short) name as long as one of the `child_host_name` and
+`child_service_name` attributes has a different value.
+
+
+## <a id="objecttype-perfdatawriter"></a> PerfdataWriter
+
+Writes check result performance data to a defined path using macro
+pattern consisting of custom attributes and runtime macros.
+
+Example:
+
+    library "perfdata"
+
+    object PerfdataWriter "pnp" {
+      host_perfdata_path = "/var/spool/icinga2/perfdata/host-perfdata"
+
+      service_perfdata_path = "/var/spool/icinga2/perfdata/service-perfdata"
+
+      host_format_template = "DATATYPE::HOSTPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tHOSTPERFDATA::$host.perfdata$\tHOSTCHECKCOMMAND::$host.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$"
+      service_format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tSERVICEDESC::$service.name$\tSERVICEPERFDATA::$service.perfdata$\tSERVICECHECKCOMMAND::$service.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$\tSERVICESTATE::$service.state$\tSERVICESTATETYPE::$service.state_type$"
+
+      rotation_interval = 15s
+    }
+
+Attributes:
+
+  Name                    |Description
+  ------------------------|----------------
+  host_perfdata\_path     |**Optional.** Path to the host performance data file. Defaults to LocalStateDir + "/spool/icinga2/perfdata/host-perfdata".
+  service_perfdata\_path  |**Optional.** Path to the service performance data file. Defaults to LocalStateDir + "/spool/icinga2/perfdata/service-perfdata".
+  host_temp\_path         |**Optional.** Path to the temporary host file. Defaults to LocalStateDir + "/spool/icinga2/tmp/host-perfdata".
+  service_temp\_path      |**Optional.** Path to the temporary service file. Defaults to LocalStateDir + "/spool/icinga2/tmp/service-perfdata".
+  host_format\_template   |**Optional.** Host Format template for the performance data file. Defaults to a template that's suitable for use with PNP4Nagios.
+  service_format\_template|**Optional.** Service Format template for the performance data file. Defaults to a template that's suitable for use with PNP4Nagios.
+  rotation\_interval      |**Optional.** Rotation interval for the files specified in `{host,service}_perfdata_path`. Defaults to 30 seconds.
+
+When rotating the performance data file the current UNIX timestamp is appended to the path specified
+in `host_perfdata_path` and `service_perfdata_path` to generate a unique filename.
+
+
+## <a id="objecttype-graphitewriter"></a> GraphiteWriter
+
+Writes check result metrics and performance data to a defined
+Graphite Carbon host.
+
+Example:
+
+    library "perfdata"
+
+    object GraphiteWriter "graphite" {
+      host = "127.0.0.1"
+      port = 2003
+    }
+
+Attributes:
+
+  Name                 |Description
+  ----------------------|----------------------
+  host                 |**Optional.** Graphite Carbon host address. Defaults to '127.0.0.1'.
+  port                 |**Optional.** Graphite Carbon port. Defaults to 2003.
+  host_name_template   |**Optional.** Metric prefix for host name. Defaults to "icinga.$host.name$".
+  service_name_template |**Optional.** Metric prefix for service name. Defaults to "icinga.$host.name$.$service.name$".
+
+Metric prefix names can be modified using [runtime macros](#runtime-macros).
+
+Example with your custom [global constant](#constants) `GraphiteEnv`:
+
+    const GraphiteEnv = "icinga.env1"
+
+    host_name_template = GraphiteEnv + ".$host.name$"
+    service_name_template = GraphiteEnv + ".$host.name$.$service.name$"
+
+## <a id="objecttype-gelfwriter"></a> GelfWriter
+
+Writes event log entries to a defined GELF receiver host (Graylog2, Logstash).
+
+Example:
+
+    library "perfdata"
+
+    object GelfWriter "gelf" {
+      host = "127.0.0.1"
+      port = 12201
+    }
+
+Attributes:
+
+  Name                 |Description
+  ----------------------|----------------------
+  host                 |**Optional.** GELF receiver host address. Defaults to '127.0.0.1'.
+  port                 |**Optional.** GELF receiver port. Defaults to `12201`.
+  source               |**Optional.** Source name for this instance. Defaults to `icinga2`.
+
+
+## <a id="objecttype-idomysqlconnection"></a> IdoMySqlConnection
+
+IDO database adapter for MySQL.
+
+Example:
+
+    library "db_ido_mysql"
+
+    object IdoMysqlConnection "mysql-ido" {
+      host = "127.0.0.1"
+      port = 3306
+      user = "icinga"
+      password = "icinga"
+      database = "icinga"
+      table_prefix = "icinga_"
+      instance_name = "icinga2"
+      instance_description = "icinga2 instance"
+
+      cleanup = {
+        downtimehistory_age = 48h
+        logentries_age = 31d
+      }
+
+      categories = DbCatConfig | DbCatState
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  host            |**Optional.** MySQL database host address. Defaults to "localhost".
+  port            |**Optional.** MySQL database port. Defaults to 3306.
+  socket_path     |**Optional.** MySQL socket path.
+  user            |**Optional.** MySQL database user with read/write permission to the icinga database. Defaults to "icinga".
+  password        |**Optional.** MySQL database user's password. Defaults to "icinga".
+  database        |**Optional.** MySQL database name. Defaults to "icinga".
+  table\_prefix   |**Optional.** MySQL database table prefix. Defaults to "icinga\_".
+  instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
+  instance\_description|**Optional.** Description for the Icinga 2 instance.
+  enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability-db-ido). Defaults to "true".
+  failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](#high-availability-db-ido). Must not be lower than 60s. Defaults to "60s".
+  cleanup         |**Optional.** Dictionary with items for historical table cleanup.
+  categories      |**Optional.** The types of information that should be written to the database.
+
+Cleanup Items:
+
+  Name            | Description
+  ----------------|----------------
+  acknowledgements_age |**Optional.** Max age for acknowledgements table rows (entry_time). Defaults to 0 (never).
+  commenthistory_age |**Optional.** Max age for commenthistory table rows (entry_time). Defaults to 0 (never).
+  contactnotifications_age |**Optional.** Max age for contactnotifications table rows (start_time). Defaults to 0 (never).
+  contactnotificationmethods_age |**Optional.** Max age for contactnotificationmethods table rows (start_time). Defaults to 0 (never).
+  downtimehistory_age |**Optional.** Max age for downtimehistory table rows (entry_time). Defaults to 0 (never).
+  eventhandlers_age |**Optional.** Max age for eventhandlers table rows (start_time). Defaults to 0 (never).
+  externalcommands_age |**Optional.** Max age for externalcommands table rows (entry_time). Defaults to 0 (never).
+  flappinghistory_age |**Optional.** Max age for flappinghistory table rows (event_time). Defaults to 0 (never).
+  hostchecks_age |**Optional.** Max age for hostalives table rows (start_time). Defaults to 0 (never).
+  logentries_age |**Optional.** Max age for logentries table rows (logentry_time). Defaults to 0 (never).
+  notifications_age |**Optional.** Max age for notifications table rows (start_time). Defaults to 0 (never).
+  processevents_age |**Optional.** Max age for processevents table rows (event_time). Defaults to 0 (never).
+  statehistory_age |**Optional.** Max age for statehistory table rows (state_time). Defaults to 0 (never).
+  servicechecks_age |**Optional.** Max age for servicechecks table rows (start_time). Defaults to 0 (never).
+  systemcommands_age |**Optional.** Max age for systemcommands table rows (start_time). Defaults to 0 (never).
+
+Data Categories:
+
+  Name                 | Description            | Required by
+  ---------------------|------------------------|--------------------
+  DbCatConfig          | Configuration data     | Icinga Web/Reporting
+  DbCatState           | Current state data     | Icinga Web/Reporting
+  DbCatAcknowledgement | Acknowledgements       | Icinga Web/Reporting
+  DbCatComment         | Comments               | Icinga Web/Reporting
+  DbCatDowntime        | Downtimes              | Icinga Web/Reporting
+  DbCatEventHandler    | Event handler data     | Icinga Web/Reporting
+  DbCatExternalCommand | External commands      | Icinga Web/Reporting
+  DbCatFlapping        | Flap detection data    | Icinga Web/Reporting
+  DbCatCheck           | Check results          | --
+  DbCatLog             | Log messages           | Icinga Web/Reporting
+  DbCatNotification    | Notifications          | Icinga Web/Reporting
+  DbCatProgramStatus   | Program status data    | Icinga Web/Reporting
+  DbCatRetention       | Retention data         | Icinga Web/Reporting
+  DbCatStateHistory    | Historical state data  | Icinga Web/Reporting
+
+Multiple categories can be combined using the `|` operator. In addition to
+the category flags listed above the `DbCatEverything` flag may be used as
+a shortcut for listing all flags.
+
+External interfaces like Icinga Web require everything except `DbCatCheck`
+which is the default value if `categories` is not set.
+
+## <a id="objecttype-idomysqlconnection"></a> IdoPgSqlConnection
+
+IDO database adapter for PostgreSQL.
+
+Example:
+
+    library "db_ido_pgsql"
+
+    object IdoMysqlConnection "pgsql-ido" {
+      host = "127.0.0.1"
+      port = 5432
+      user = "icinga"
+      password = "icinga"
+      database = "icinga"
+      table_prefix = "icinga_"
+      instance_name = "icinga2"
+      instance_description = "icinga2 instance"
+
+      cleanup = {
+        downtimehistory_age = 48h
+        logentries_age = 31d
+      }
+
+      categories = DbCatConfig | DbCatState
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  host            |**Optional.** PostgreSQL database host address. Defaults to "localhost".
+  port            |**Optional.** PostgreSQL database port. Defaults to "5432".
+  user            |**Optional.** PostgreSQL database user with read/write permission to the icinga database. Defaults to "icinga".
+  password        |**Optional.** PostgreSQL database user's password. Defaults to "icinga".
+  database        |**Optional.** PostgreSQL database name. Defaults to "icinga".
+  table\_prefix   |**Optional.** PostgreSQL database table prefix. Defaults to "icinga\_".
+  instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
+  instance\_description|**Optional.** Description for the Icinga 2 instance.
+  enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability-db-ido). Defaults to "true".
+  failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](#high-availability-db-ido). Must not be lower than 60s. Defaults to "60s".
+  cleanup         |**Optional.** Dictionary with items for historical table cleanup.
+  categories      |**Optional.** The types of information that should be written to the database.
+
+Cleanup Items:
+
+  Name            | Description
+  ----------------|----------------
+  acknowledgements_age |**Optional.** Max age for acknowledgements table rows (entry_time). Defaults to 0 (never).
+  commenthistory_age |**Optional.** Max age for commenthistory table rows (entry_time). Defaults to 0 (never).
+  contactnotifications_age |**Optional.** Max age for contactnotifications table rows (start_time). Defaults to 0 (never).
+  contactnotificationmethods_age |**Optional.** Max age for contactnotificationmethods table rows (start_time). Defaults to 0 (never).
+  downtimehistory_age |**Optional.** Max age for downtimehistory table rows (entry_time). Defaults to 0 (never).
+  eventhandlers_age |**Optional.** Max age for eventhandlers table rows (start_time). Defaults to 0 (never).
+  externalcommands_age |**Optional.** Max age for externalcommands table rows (entry_time). Defaults to 0 (never).
+  flappinghistory_age |**Optional.** Max age for flappinghistory table rows (event_time). Defaults to 0 (never).
+  hostchecks_age |**Optional.** Max age for hostalives table rows (start_time). Defaults to 0 (never).
+  logentries_age |**Optional.** Max age for logentries table rows (logentry_time). Defaults to 0 (never).
+  notifications_age |**Optional.** Max age for notifications table rows (start_time). Defaults to 0 (never).
+  processevents_age |**Optional.** Max age for processevents table rows (event_time). Defaults to 0 (never).
+  statehistory_age |**Optional.** Max age for statehistory table rows (state_time). Defaults to 0 (never).
+  servicechecks_age |**Optional.** Max age for servicechecks table rows (start_time). Defaults to 0 (never).
+  systemcommands_age |**Optional.** Max age for systemcommands table rows (start_time). Defaults to 0 (never).
+
+Data Categories:
+
+  Name                 | Description            | Required by
+  ---------------------|------------------------|--------------------
+  DbCatConfig          | Configuration data     | Icinga Web/Reporting
+  DbCatState           | Current state data     | Icinga Web/Reporting
+  DbCatAcknowledgement | Acknowledgements       | Icinga Web/Reporting
+  DbCatComment         | Comments               | Icinga Web/Reporting
+  DbCatDowntime        | Downtimes              | Icinga Web/Reporting
+  DbCatEventHandler    | Event handler data     | Icinga Web/Reporting
+  DbCatExternalCommand | External commands      | Icinga Web/Reporting
+  DbCatFlapping        | Flap detection data    | Icinga Web/Reporting
+  DbCatCheck           | Check results          | --
+  DbCatLog             | Log messages           | Icinga Web/Reporting
+  DbCatNotification    | Notifications          | Icinga Web/Reporting
+  DbCatProgramStatus   | Program status data    | Icinga Web/Reporting
+  DbCatRetention       | Retention data         | Icinga Web/Reporting
+  DbCatStateHistory    | Historical state data  | Icinga Web/Reporting
+
+Multiple categories can be combined using the `|` operator. In addition to
+the category flags listed above the `DbCatEverything` flag may be used as
+a shortcut for listing all flags.
+
+External interfaces like Icinga Web require everything except `DbCatCheck`
+which is the default value if `categories` is not set.
+
+## <a id="objecttype-livestatuslistener"></a> LiveStatusListener
+
+Livestatus API interface available as TCP or UNIX socket. Historical table queries
+require the `CompatLogger` feature enabled pointing to the log files using the
+`compat_log_path` configuration attribute.
+
+Example:
+
+    library "livestatus"
+
+    object LivestatusListener "livestatus-tcp" {
+      socket_type = "tcp"
+      bind_host = "127.0.0.1"
+      bind_port = "6558"
+    }
+
+    object LivestatusListener "livestatus-unix" {
+      socket_type = "unix"
+      socket_path = "/var/run/icinga2/cmd/livestatus"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  socket\_type      |**Optional.** Specifies the socket type. Can be either "tcp" or "unix". Defaults to "unix".
+  bind\_host        |**Optional.** Only valid when socket\_type is "tcp". Host address to listen on for connections. Defaults to "127.0.0.1".
+  bind\_port        |**Optional.** Only valid when `socket_type` is "tcp". Port to listen on for connections. Defaults to 6558.
+  socket\_path      |**Optional.** Only valid when `socket_type` is "unix". Specifies the path to the UNIX socket file. Defaults to RunDir + "/icinga2/cmd/livestatus".
+  compat\_log\_path |**Optional.** Required for historical table queries. Requires `CompatLogger` feature enabled. Defaults to LocalStateDir + "/log/icinga2/compat"
+
+> **Note**
+>
+> UNIX sockets are not supported on Windows.
+
+## <a id="objecttype-statusdatawriter"></a> StatusDataWriter
+
+Periodically writes status data files which are used by the Classic UI and other third-party tools.
+
+Example:
+
+    library "compat"
+
+    object StatusDataWriter "status" {
+        status_path = "/var/cache/icinga2/status.dat"
+        objects_path = "/var/cache/icinga2/objects.cache"
+        update_interval = 30s
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  status\_path    |**Optional.** Path to the status.dat file. Defaults to LocalStateDir + "/cache/icinga2/status.dat".
+  objects\_path   |**Optional.** Path to the objects.cache file. Defaults to LocalStateDir + "/cache/icinga2/objects.cache".
+  update\_interval|**Optional.** The interval in which the status files are updated. Defaults to 15 seconds.
+
+
+## <a id="objecttype-externalcommandlistener"></a> ExternalCommandListener
+
+Implements the Icinga 1.x command pipe which can be used to send commands to Icinga.
+
+Example:
+
+    library "compat"
+
+    object ExternalCommandListener "external" {
+        command_path = "/var/run/icinga2/cmd/icinga2.cmd"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  command\_path   |**Optional.** Path to the command pipe. Defaults to RunDir + "/icinga2/cmd/icinga2.cmd".
+
+## <a id="objecttype-compatlogger"></a> CompatLogger
+
+Writes log files in a format that's compatible with Icinga 1.x.
+
+Example:
+
+    library "compat"
+
+    object CompatLogger "my-log" {
+      log_dir = "/var/log/icinga2/compat"
+      rotation_method = "HOURLY"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  log\_dir        |**Optional.** Path to the compat log directory. Defaults to LocalStateDir + "/log/icinga2/compat".
+  rotation\_method|**Optional.** Specifies when to rotate log files. Can be one of "HOURLY", "DAILY", "WEEKLY" or "MONTHLY". Defaults to "HOURLY".
+
+
+## <a id="objecttype-checkresultreader"></a> CheckResultReader
+
+Reads Icinga 1.x check results from a directory. This functionality is provided
+to help existing Icinga 1.x users and might be useful for certain cluster
+scenarios.
+
+Example:
+
+    library "compat"
+
+    object CheckResultReader "reader" {
+      spool_dir = "/data/check-results"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  spool\_dir      |**Optional.** The directory which contains the check result files. Defaults to LocalStateDir + "/lib/icinga2/spool/checkresults/".
+
+
+## <a id="objecttype-checkcomponent"></a> CheckerComponent
+
+The checker component is responsible for scheduling active checks. There are no configurable options.
+
+Example:
+
+    library "checker"
+
+    object CheckerComponent "checker" { }
+
+
+## <a id="objecttype-notificationcomponent"></a> NotificationComponent
+
+The notification component is responsible for sending notifications. There are no configurable options.
+
+Example:
+
+    library "notification"
+
+    object NotificationComponent "notification" { }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability). Defaults to "true".
+
+
+## <a id="objecttype-filelogger"></a> FileLogger
+
+Specifies Icinga 2 logging to a file.
+
+Example:
+
+    object FileLogger "debug-file" {
+      severity = "debug"
+      path = "/var/log/icinga2/debug.log"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  path            |**Required.** The log path.
+  severity        |**Optional.** The minimum severity for this log. Can be "debug", "notice", "information", "warning" or "critical". Defaults to "information".
+
+
+## <a id="objecttype-sysloglogger"></a> SyslogLogger
+
+Specifies Icinga 2 logging to syslog.
+
+Example:
+
+    object SyslogLogger "crit-syslog" {
+      severity = "critical"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  severity        |**Optional.** The minimum severity for this log. Can be "debug", "notice", "information", "notice", "warning" or "critical". Defaults to "warning".
+
+
+
+## <a id="objecttype-icingastatuswriter"></a> IcingaStatusWriter
+
+The IcingaStatusWriter feature periodically dumps the current status
+and performance data from Icinga 2 and all registered features into
+a defined JSON file.
+
+Example:
+
+    object IcingaStatusWriter "status" {
+      status_path = LocalStateDir + "/cache/icinga2/status.json"
+      update_interval = 15s
+    }
+
+Attributes:
+
+  Name                      |Description
+  --------------------------|--------------------------
+  status\_path              |**Optional.** Path to cluster status file. Defaults to LocalStateDir + "/cache/icinga2/status.json"
+  update\_interval          |**Optional.** The interval in which the status files are updated. Defaults to 15 seconds.
+
+
+## <a id="objecttype-apilistener"></a> ApiListener
+
+ApiListener objects are used for distributed monitoring setups
+specifying the certificate files used for ssl authorization.
+
+The `NodeName` constant must be defined in [constants.conf](#constants-conf).
+
+Example:
+
+    object ApiListener "api" {
+      cert_path = SysconfDir + "/icinga2/pki/" + NodeName + ".crt"
+      key_path = SysconfDir + "/icinga2/pki/" + NodeName + ".key"
+      ca_path = SysconfDir + "/icinga2/pki/ca.crt"
+    }
+
+
+Attributes:
+
+  Name                      |Description
+  --------------------------|--------------------------
+  cert\_path                |**Required.** Path to the public key.
+  key\_path                 |**Required.** Path to the private key.
+  ca\_path                  |**Required.** Path to the CA certificate file.
+  crl\_path                 |**Optional.** Path to the CRL file.
+  bind\_host                |**Optional.** The IP address the api listener should be bound to. Defaults to `0.0.0.0`.
+  bind\_port                |**Optional.** The port the api listener should be bound to. Defaults to `5665`.
+  accept\_config            |**Optional.** Accept zone configuration. Defaults to `false`.
+  accept\_commands          |**Optional.** Accept remote commands. Defaults to `false`.
+
+
+## <a id="objecttype-endpoint"></a> Endpoint
+
+Endpoint objects are used to specify connection information for remote
+Icinga 2 instances.
+
+Example:
+
+    object Endpoint "icinga2b" {
+      host = "192.168.5.46"
+      port = 5665
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  host            |**Optional.** The hostname/IP address of the remote Icinga 2 instance.
+  port            |**Optional.** The service name/port of the remote Icinga 2 instance. Defaults to `5665`.
+  log_duration    |**Optional.** Duration for keeping replay logs on connection loss. Defaults to `1d`.
+
+
+## <a id="objecttype-zone"></a> Zone
+
+Zone objects are used to specify which Icinga 2 instances are located in a zone.
+All zone endpoints elect one active master instance among them (required for High-Availability setups).
+
+Example:
+
+    object Zone "config-ha-master" {
+      endpoints = [ "icinga2a", "icinga2b" ]
+
+    }
+
+    object Zone "check-satellite" {
+      endpoints = [ "icinga2c" ]
+      parent = "config-ha-master"
+    }
+
+Attributes:
+
+  Name            |Description
+  ----------------|----------------
+  endpoints       |**Optional.** Dictionary with endpoints located in this zone.
+  parent          |**Optional.** The name of the parent zone.
+
diff --git a/doc/11-icinga-template-library.md b/doc/11-icinga-template-library.md
new file mode 100644 (file)
index 0000000..3094306
--- /dev/null
@@ -0,0 +1,792 @@
+# <a id="icinga-template-library"></a> Icinga Template Library
+
+## <a id="itl-overview"></a> Overview
+
+The Icinga Template Library (ITL) implements standard templates and object
+definitions for commonly used services.
+
+By default the ITL is included in the `icinga2.conf` configuration file:
+
+    include <itl>
+
+## <a id="itl-generic-templates"></a> Generic Templates
+
+These templates are imported by the provided example configuration.
+
+### <a id="itl-plugin-check-command"></a> plugin-check-command
+
+Command template for check plugins executed by Icinga 2.
+
+The `plugin-check-command` command does not support any vars.
+
+### <a id="itl-plugin-notification-command"></a> plugin-notification-command
+
+Command template for notification scripts executed by Icinga 2.
+
+The `plugin-notification-command` command does not support any vars.
+
+### <a id="itl-plugin-event-command"></a> plugin-event-command
+
+Command template for event handler scripts executed by Icinga 2.
+
+The `plugin-event-command` command does not support any vars.
+
+## <a id="itl-check-commands"></a> Check Commands
+
+These check commands are embedded into Icinga 2 and do not require any external
+plugin scripts.
+
+### <a id="itl-icinga"></a> icinga
+
+Check command for the built-in `icinga` check. This check returns performance
+data for the current Icinga instance.
+
+The `icinga` check command does not support any vars.
+
+### <a id="itl-icinga-cluster"></a> cluster
+
+Check command for the built-in `cluster` check. This check returns performance
+data for the current Icinga instance and connected endpoints.
+
+The `cluster` check command does not support any vars.
+
+### <a id="itl-icinga-cluster-zone"></a> cluster-zone
+
+Check command for the built-in `cluster-zone` check.
+
+Cluster Attributes:
+
+Name         | Description
+-------------|---------------
+cluster_zone | **Optional.** The zone name. Defaults to "$host.name$".
+
+# <a id="plugin-check-commands"></a> Plugin Check Commands
+
+## <a id="plugin-check-command-overview"></a> Overview
+
+The Plugin Check Commands provides example configuration for plugin check commands
+provided by the Monitoring Plugins project.
+
+By default the Plugin Check Commands are included in the `icinga2.conf` configuration
+file:
+
+    include <plugins>
+
+The plugin check commands assume that there's a global constant named `PluginDir`
+which contains the path of the plugins from the Monitoring Plugins project.
+
+
+### <a id="plugin-check-command-ping4"></a> ping4
+
+Check command object for the `check_ping` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+ping_address    | **Optional.** The host's IPv4 address. Defaults to "$address$".
+ping_wrta       | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
+ping_wpl        | **Optional.** The packet loss warning threshold in %. Defaults to 5.
+ping_crta       | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
+ping_cpl        | **Optional.** The packet loss critical threshold in %. Defaults to 15.
+ping_packets    | **Optional.** The number of packets to send. Defaults to 5.
+ping_timeout    | **Optional.** The plugin timeout in seconds. Defaults to 0 (no timeout).
+
+### <a id="plugin-check-command-ping6"></a> ping6
+
+Check command object for the `check_ping` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+ping_address    | **Optional.** The host's IPv6 address. Defaults to "$address6$".
+ping_wrta       | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
+ping_wpl        | **Optional.** The packet loss warning threshold in %. Defaults to 5.
+ping_crta       | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
+ping_cpl        | **Optional.** The packet loss critical threshold in %. Defaults to 15.
+ping_packets    | **Optional.** The number of packets to send. Defaults to 5.
+ping_timeout    | **Optional.** The plugin timeout in seconds. Defaults to 0 (no timeout).
+
+### <a id="plugin-check-command-hostalive"></a> hostalive
+
+Check command object for the `check_ping` plugin with host check default values.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+ping_address    | **Optional.** The host's IPv4 address. Defaults to "$address$".
+ping_wrta       | **Optional.** The RTA warning threshold in milliseconds. Defaults to 3000.
+ping_wpl        | **Optional.** The packet loss warning threshold in %. Defaults to 80.
+ping_crta       | **Optional.** The RTA critical threshold in milliseconds. Defaults to 5000.
+ping_cpl        | **Optional.** The packet loss critical threshold in %. Defaults to 100.
+ping_packets    | **Optional.** The number of packets to send. Defaults to 5.
+ping_timeout    | **Optional.** The plugin timeout in seconds. Defaults to 0 (no timeout).
+
+### <a id="plugin-check-command-fping4"></a> fping4
+
+Check command object for the `check_fping` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+fping_address   | **Optional.** The host's IPv4 address. Defaults to "$address$".
+fping_wrta      | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
+fping_wpl       | **Optional.** The packet loss warning threshold in %. Defaults to 5.
+fping_crta      | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
+fping_cpl       | **Optional.** The packet loss critical threshold in %. Defaults to 15.
+fping_number    | **Optional.** The number of packets to send. Defaults to 5.
+fping_interval  | **Optional.** The interval between packets in milli-seconds. Defaults to 500.
+fping_bytes    | **Optional.** The size of ICMP packet.
+fping_target_timeout | **Optional.** The target timeout in milli-seconds.
+fping_source_ip | **Optional.** The name or ip address of the source ip.
+fping_source_interface | **Optional.** The source interface name.
+
+### <a id="plugin-check-command-fping6"></a> fping6
+
+Check command object for the `check_fping` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+fping_address   | **Optional.** The host's IPv6 address. Defaults to "$address6$".
+fping_wrta      | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
+fping_wpl       | **Optional.** The packet loss warning threshold in %. Defaults to 5.
+fping_crta      | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
+fping_cpl       | **Optional.** The packet loss critical threshold in %. Defaults to 15.
+fping_number    | **Optional.** The number of packets to send. Defaults to 5.
+fping_interval  | **Optional.** The interval between packets in milli-seconds. Defaults to 500.
+fping_bytes    | **Optional.** The size of ICMP packet.
+fping_target_timeout | **Optional.** The target timeout in milli-seconds.
+fping_source_ip | **Optional.** The name or ip address of the source ip.
+fping_source_interface | **Optional.** The source interface name.
+
+
+### <a id="plugin-check-command-dummy"></a> dummy
+
+Check command object for the `check_dummy` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+dummy_state     | **Optional.** The state. Can be one of 0 (ok), 1 (warning), 2 (critical) and 3 (unknown). Defaults to 0.
+dummy_text      | **Optional.** Plugin output. Defaults to "Check was successful.".
+
+### <a id="plugin-check-command-passive"></a> passive
+
+Specialised check command object for passive checks executing the `check_dummy` plugin with appropriate default values.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+dummy_state     | **Optional.** The state. Can be one of 0 (ok), 1 (warning), 2 (critical) and 3 (unknown). Defaults to 3.
+dummy_text      | **Optional.** Plugin output. Defaults to "No Passive Check Result Received.".
+
+### <a id="plugin-check-command-tcp"></a> tcp
+
+Check command object for the `check_tcp` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+tcp_address     | **Optional.** The host's address. Defaults to "$address$".
+tcp_port        | **Required.** The port that should be checked.
+
+### <a id="plugin-check-command-ssl"></a> ssl
+
+Check command object for the `check_tcp` plugin, using ssl-related options.
+
+Custom Attributes:
+
+Name                          | Description
+------------------------------|--------------
+ssl_address                   | **Optional.** The host's address. Defaults to "$address$".
+ssl_port                      | **Required.** The port that should be checked.
+ssl_timeout                   | **Optional.** Timeout in seconds for the connect and handshake. The plugin default is 10 seconds.
+ssl_cert_valid_days_warn      | **Optional.** Warning threshold for days before the certificate will expire. When used, ssl_cert_valid_days_critical must also be set.
+ssl_cert_valid_days_critical  | **Optional.** Critical threshold for days before the certificate will expire. When used, ssl_cert_valid_days_warn must also be set.
+
+### <a id="plugin-check-command-udp"></a> udp
+
+Check command object for the `check_udp` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+udp_address     | **Optional.** The host's address. Defaults to "$address$".
+udp_port        | **Required.** The port that should be checked.
+
+### <a id="plugin-check-command-http"></a> http
+
+Check command object for the `check_http` plugin.
+
+Custom Attributes:
+
+Name                     | Description
+-------------------------|--------------
+http_address             | **Optional.** The host's address. Defaults to "$address".
+http_vhost               | **Optional.** The virtual host that should be sent in the "Host" header.
+http_uri                 | **Optional.** The request URI.
+http_port                | **Optional.** The TCP port. Defaults to 80 when not using SSL, 443 otherwise.
+http_ssl                 | **Optional.** Whether to use SSL. Defaults to false.
+http_sni                 | **Optional.** Whether to use SNI. Defaults to false.
+http_auth_pair           | **Optional.** Add 'username:password' authorization pair.
+http_proxy_auth_pair     | **Optional.** Add 'username:password' authorization pair for proxy.
+http_ignore_body         | **Optional.** Don't download the body, just the headers.
+http_linespan            | **Optional.** Allow regex to span newline.
+http_expect_body_regex   | **Optional.** A regular expression which the body must match against. Incompatible with http_ignore_body.
+http_expect_body_eregi   | **Optional.** A case-insensitive expression which the body must match against. Incompatible with http_ignore_body.
+http_invertregex         | **Optional.** Changes behaviour of http_expect_body_regex and http_expect_body_eregi to return CRITICAL if found, OK if not.
+http_warn_time           | **Optional.** The warning threshold.
+http_critical_time       | **Optional.** The critical threshold.
+http_expect              | **Optional.** Comma-delimited list of strings, at least one of them is expected in the first (status) line of the server response. Default: HTTP/1.
+http_certificate         | **Optional.** Minimum number of days a certificate has to be valid. Port defaults to 443.
+http_clientcert          | **Optional.** Name of file contains the client certificate (PEM format).
+http_privatekey          | **Optional.** Name of file contains the private key (PEM format).
+http_headerstring        | **Optional.** String to expect in the response headers.
+http_string              | **Optional.** String to expect in the content.
+http_post                | **Optional.** URL encoded http POST data.
+http_method              | **Optional.** Set http method (for example: HEAD, OPTIONS, TRACE, PUT, DELETE).
+http_maxage              | **Optional.** Warn if document is more than seconds old.
+http_contenttype         | **Optional.** Specify Content-Type header when POSTing.
+http_useragent           | **Optional.** String to be sent in http header as User Agent.
+http_header              | **Optional.** Any other tags to be sent in http header.
+http_extendedperfdata    | **Optional.** Print additional perfdata. Defaults to "false".
+http_onredirect          | **Optional.** How to handle redirect pages. Possible values: "ok" (default), "warning", "critical", "follow", "sticky" (like follow but stick to address), "stickyport" (like sticky but also to port)
+http_pagesize            | **Optional.** Minimum page size required:Maximum page size required.
+http_timeout             | **Optional.** Seconds before connection times out.
+
+
+### <a id="plugin-check-command-ftp"></a> ftp
+
+Check command object for the `check_ftp` plugin.
+
+Custom Attributes:
+
+Name               | Description
+-------------------|--------------
+ftp_address        | **Optional.** The host's address. Defaults to "$address$".
+
+### <a id="plugin-check-command-smtp"></a> smtp
+
+Check command object for the `check_smtp` plugin.
+
+Custom Attributes:
+
+Name                 | Description
+---------------------|--------------
+smtp_address         | **Optional.** The host's address. Defaults to "$address$".
+smtp_port            | **Optional.** The port that should be checked. Defaults to 25.
+smtp_mail_from       | **Optional.** Test a MAIL FROM command with the given email address.
+
+### <a id="plugin-check-command-ssmtp"></a> ssmtp
+
+Check command object for the `check_ssmtp` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+ssmtp_address   | **Required.** The host's address. Defaults to "$address$".
+ssmtp_port      | **Optional.** The port that should be checked. Defaults to 465.
+ssmtp_mail_from | **Optional.** Test a MAIL FROM command with the given email address.
+
+### <a id="plugin-check-command-imap"></a> imap
+
+Check command object for the `check_imap` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+imap_address    | **Optional.** The host's address. Defaults to "$address$".
+imap_port       | **Optional.** The port that should be checked. Defaults to 143.
+
+### <a id="plugin-check-command-simap"></a> simap
+
+Check command object for the `check_simap` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+simap_address   | **Optional.** The host's address. Defaults to "$address$".
+simap_port      | **Optional.** The host's port.
+
+### <a id="plugin-check-command-pop"></a> pop
+
+Check command object for the `check_pop` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+pop_address     | **Optional.** The host's address. Defaults to "$address$".
+pop_port        | **Optional.** The port that should be checked. Defaults to 110.
+
+### <a id="plugin-check-command-spop"></a> spop
+
+Check command object for the `check_spop` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+spop_address    | **Optional.** The host's address. Defaults to "$address$".
+spop_port       | **Optional.** The host's port.
+
+### <a id="plugin-check-command-ntp-time"></a> ntp_time
+
+Check command object for the `check_ntp_time` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+ntp_address     | **Optional.** The host's address. Defaults to "$address$".
+
+### <a id="plugin-check-command-ssh"></a> ssh
+
+Check command object for the `check_ssh` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+ssh_address     | **Optional.** The host's address. Defaults to "$address$".
+ssh_port        | **Optional.** The port that should be checked. Defaults to 22.
+ssh_timeout     | **Optional.** Seconds before connection times out. Defaults to 10.
+
+### <a id="plugin-check-command-disk"></a> disk
+
+Check command object for the `check_disk` plugin.
+
+Custom Attributes:
+
+Name                   | Description
+------------------------|------------------------
+disk_wfree             | **Optional.** The free space warning threshold in %. Defaults to 20.
+disk_cfree             | **Optional.** The free space critical threshold in %. Defaults to 10.
+disk_inode_wfree       | **Optional.** The free inode warning threshold.
+disk_inode_cfree       | **Optional.** The free inode critical threshold.
+disk_partition         | **Optional.** The partition. **Deprecated in 2.3.**
+disk_partition_excluded | **Optional.** The excluded partition. **Deprecated in 2.3.**
+disk_partitions                | **Optional.** The partition(s). Multiple partitions must be defined as array.
+disk_partitions_excluded | **Optional.** The excluded partition(s). Multiple partitions must be defined as array.
+
+### <a id="plugin-check-command-users"></a> users
+
+Check command object for the `check_users` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+users_wgreater  | **Optional.** The user count warning threshold. Defaults to 20.
+users_cgreater  | **Optional.** The user count critical threshold. Defaults to 50.
+
+### <a id="plugin-check-command-processes"></a> procs
+
+Check command object for the `check_procs` plugin.
+
+Custom Attributes:
+
+Name                 | Description
+---------------------|--------------
+procs_warning        | **Optional.** The process count warning threshold. Defaults to 250.
+procs_critical       | **Optional.** The process count critical threshold. Defaults to 400.
+procs_metric         | **Optional.** Check thresholds against metric.
+procs_timeout        | **Optional.** Seconds before plugin times out.
+procs_traditional    | **Optional.** Filter own process the traditional way by PID instead of /proc/pid/exe. Defaults to "false".
+procs_state          | **Optional.** Only scan for processes that have one or more of the status flags you specify.
+procs_ppid           | **Optional.** Only scan for children of the parent process ID indicated.
+procs_vsz            | **Optional.** Only scan for processes with VSZ higher than indicated.
+procs_rss            | **Optional.** Only scan for processes with RSS higher than indicated.
+procs_pcpu           | **Optional.** Only scan for processes with PCPU higher than indicated.
+procs_user           | **Optional.** Only scan for processes with user name or ID indicated.
+procs_argument       | **Optional.** Only scan for processes with args that contain STRING.
+procs_argument_regex | **Optional.** Only scan for processes with args that contain the regex STRING.
+procs_command        | **Optional.** Only scan for exact matches of COMMAND (without path).
+procs_nokthreads     | **Optional.** Only scan for non kernel threads. Defaults to "false".
+
+### <a id="plugin-check-command-swap"></a> swap
+
+Check command object for the `check_swap` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+swap_wfree      | **Optional.** The free swap space warning threshold in %. Defaults to 50.
+swap_cfree      | **Optional.** The free swap space critical threshold in %. Defaults to 25.
+
+### <a id="plugin-check-command-load"></a> load
+
+Check command object for the `check_load` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+load_wload1     | **Optional.** The 1-minute warning threshold. Defaults to 5.
+load_wload5     | **Optional.** The 5-minute warning threshold. Defaults to 4.
+load_wload15    | **Optional.** The 15-minute warning threshold. Defaults to 3.
+load_cload1     | **Optional.** The 1-minute critical threshold. Defaults to 10.
+load_cload5     | **Optional.** The 5-minute critical threshold. Defaults to 6.
+load_cload15    | **Optional.** The 15-minute critical threshold. Defaults to 4.
+
+### <a id="plugin-check-command-snmp"></a> snmp
+
+Check command object for the `check_snmp` plugin.
+
+Custom Attributes:
+
+Name                | Description
+--------------------|--------------
+snmp_address        | **Optional.** The host's address. Defaults to "$address$".
+snmp_oid            | **Required.** The SNMP OID.
+snmp_community      | **Optional.** The SNMP community. Defaults to "public".
+snmp_warn           | **Optional.** The warning threshold.
+snmp_crit           | **Optional.** The critical threshold.
+snmp_string         | **Optional.** Return OK state if the string matches exactly with the output value
+snmp_ereg           | **Optional.** Return OK state if extended regular expression REGEX matches with the output value
+snmp_eregi          | **Optional.** Return OK state if case-insensitive extended REGEX matches with the output value
+snmp_label          | **Optional.** Prefix label for output value
+snmp_invert_search  | **Optional.** Invert search result and return CRITICAL state if found
+snmp_units          | **Optional.** Units label(s) for output value (e.g., 'sec.').
+snmp_timeout        | **Optional.** The command timeout in seconds. Defaults to 10 seconds.
+
+### <a id="plugin-check-command-snmp"></a> snmpv3
+
+Check command object for the `check_snmp` plugin, using SNMPv3 authentication and encryption options.
+
+Custom Attributes:
+
+Name              | Description
+------------------|--------------
+snmpv3_address    | **Optional.** The host's address. Defaults to "$address$".
+snmpv3_user       | **Required.** The username to log in with.
+snmpv3_auth_alg   | **Optional.** The authentication algorithm. Defaults to SHA.
+snmpv3_auth_key   | **Required.** The authentication key.
+snmpv3_priv_alg   | **Optional.** The encryption algorithm. Defaults to AES.
+snmpv3_priv_key   | **Required.** The encryption key.
+snmpv3_oid        | **Required.** The SNMP OID.
+snmpv3_warn       | **Optional.** The warning threshold.
+snmpv3_crit       | **Optional.** The critical threshold.
+snmpv3_label      | **Optional.** Prefix label for output value.
+
+### <a id="plugin-check-command-snmp-uptime"></a> snmp-uptime
+
+Check command object for the `check_snmp` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+snmp_address    | **Optional.** The host's address. Defaults to "$address$".
+snmp_oid        | **Optional.** The SNMP OID. Defaults to "1.3.6.1.2.1.1.3.0".
+snmp_community  | **Optional.** The SNMP community. Defaults to "public".
+
+### <a id="plugin-check-command-dns"></a> dns
+
+Check command object for the `check_dns` plugin.
+
+Custom Attributes:
+
+Name                 | Description
+---------------------|--------------
+dns_lookup           | **Optional.** The hostname or IP to query the DNS for. Defaults to $host_name$.
+dns_server           | **Optional.** The DNS server to query. Defaults to the server configured in the OS.
+dns_expected_answer  | **Optional.** The answer to look for. A hostname must end with a dot. **Deprecated in 2.3.**
+dns_expected_answers | **Optional.** The answer(s) to look for. A hostname must end with a dot. Multiple answers must be defined as array.
+dns_authoritative    | **Optional.** Expect the server to send an authoritative answer.
+
+### <a id="plugin-check-command-dig"></a> dig
+
+Check command object for the `check_dig` plugin.
+
+Custom Attributes:
+
+Name                 | Description
+---------------------|--------------
+dig_server           | **Optional.** The DNS server to query. Defaults to "127.0.0.1".
+dig_lookup           | **Optional.** The address that should be looked up.
+
+### <a id="plugin-check-command-dhcp"></a> dhcp
+
+Check command object for the `check_dhcp` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+dhcp_serverip   | **Optional.** The IP address of the DHCP server which we should get a response from.
+dhcp_requestedip| **Optional.** The IP address which we should be offered by a DHCP server.
+dhcp_timeout    | **Optional.** The timeout in seconds.
+dhcp_interface  | **Optional.** The interface to use.
+dhcp_mac        | **Optional.** The MAC address to use in the DHCP request.
+dhcp_unicast    | **Optional.** Whether to use unicast requests. Defaults to false.
+
+### <a id="plugin-check-command-nscp"></a> nscp
+
+Check command object for the `check_nt` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+nscp_address    | **Optional.** The host's address. Defaults to "$address$".
+nscp_port       | **Optional.** The NSClient++ port. Defaults to 12489.
+nscp_password   | **Optional.** The NSClient++ password.
+nscp_variable   | **Required.** The variable that should be checked.
+nscp_params     | **Optional.** Parameters for the query. Multiple parameters must be defined as array.
+nscp_warn       | **Optional.** The warning threshold.
+nscp_crit       | **Optional.** The critical threshold.
+nscp_timeout    | **Optional.** The query timeout in seconds.
+
+### <a id="plugin-check-command-by-ssh"></a> by_ssh
+
+Check command object for the `check_by_ssh` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+by_ssh_address  | **Optional.** The host's address. Defaults to "$address$".
+by_ssh_port     | **Optional.** The SSH port. Defaults to 22.
+by_ssh_command  | **Optional.** The command that should be executed.
+by_ssh_logname  | **Optional.** The SSH username.
+by_ssh_identity | **Optional.** The SSH identity.
+by_ssh_quiet    | **Optional.** Whether to suppress SSH warnings. Defaults to false.
+by_ssh_warn     | **Optional.** The warning threshold.
+by_ssh_crit     | **Optional.** The critical threshold.
+by_ssh_timeout  | **Optional.** The timeout in seconds.
+
+### <a id="plugin-check-command-ups"></a> ups
+
+Check command object for the `check_ups` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+ups_address     | **Optional.** The host's address. Defaults to "$address$".
+ups_name        | **Optional.** The UPS name. Defaults to `ups`.
+
+
+### <a id="plugin-check-command-nrpe"></a> nrpe
+
+Check command object for the `check_nrpe` plugin.
+
+Custom Attributes:
+
+Name            | Description
+----------------|--------------
+nrpe_address    | **Optional.** The host's address. Defaults to "$address$".
+nrpe_port       | **Optional.** The NRPE port. Defaults to 5668.
+nrpe_command    | **Optional.** The command that should be executed.
+nrpe_no_ssl     | **Optional.** Whether to disable SSL or not. Defaults to `false`.
+nrpe_timeout_unknown | **Optional.** Whether to set timeouts to unknown instead of critical state. Defaults to `false`.
+nrpe_timeout    | **Optional.** The timeout in seconds.
+nrpe_arguments | **Optional.** Arguments that should be passed to the command. Multiple arguments must be defined as array.
+
+### <a id="plugin-check-command-apt"></a> apt
+
+Check command for the `check_apt` plugin.
+
+The `apt` check command does not support any vars.
+
+
+### <a id="plugin-check-command-running-kernel"></a> running_kernel
+
+Check command object for the `check_running_kernel` plugin
+provided by the `nagios-plugins-contrib` package on Debian.
+
+The `running_kernel` check command does not support any vars.
+
+
+# <a id="snmp-manubulon-plugin-check-commands"></a> SNMP Manubulon Plugin Check Commands
+
+## <a id="snmp-manubulon-plugin-check-commands-overview"></a> Overview
+
+The `SNMP Manubulon Plugin Check Commands` provide example configuration for plugin check
+commands provided by the [SNMP Manubulon project](http://nagios.manubulon.com/index_snmp.html).
+
+The SNMP manubulon plugin check commands assume that the global constant named `ManubulonPluginDir`
+is set to the path where the Manubublon SNMP plugins are installed.
+
+You can enable these plugin check commands by adding the following the include directive in your
+configuration [icinga2.conf](#icinga2-conf) file:
+
+    include <manubulon>
+
+## Checks by Host Type
+
+**N/A**      : Not available for this type.
+
+**SNMP**     : Available for simple SNMP query.
+
+**??**       : Untested.
+
+**Specific** : Script name for platform specific checks.
+
+
+  Host type               | Interface  | storage  | load/cpu  | mem | process  | env | specific
+  ------------------------|------------|----------|-----------|-----|----------|-----|-------------------------
+  Linux                   |   Yes      |   Yes    |   Yes     | Yes |   Yes    | No  |
+  Windows                 |   Yes      |   Yes    |   Yes     | Yes |   Yes    | No  | check_snmp_win.pl
+  Cisco router/switch     |   Yes      |   N/A    |   Yes     | Yes |   N/A    | Yes |
+  HP router/switch        |   Yes      |   N/A    |   Yes     | Yes |   N/A    | No  |
+  Bluecoat proxy          |   Yes      |   SNMP   |   Yes     | SNMP|   No     | Yes |
+  CheckPoint on SPLAT     |   Yes      |   Yes    |   Yes     | Yes |   Yes    | No  | check_snmp_cpfw.pl
+  CheckPoint on Nokia IP  |   Yes      |   Yes    |   Yes     | No  |   ??     | No  | check_snmp_vrrp.pl
+  Boostedge               |   Yes      |   Yes    |   Yes     | Yes |   ??     | No  | check_snmp_boostedge.pl
+  AS400                   |   Yes      |   Yes    |   Yes     | Yes |   No     | No  |
+  NetsecureOne Netbox     |   Yes      |   Yes    |   Yes     | ??  |   Yes    | No  |
+  Radware Linkproof       |   Yes      |   N/A    |   SNMP    | SNMP|   No     | No  | check_snmp_linkproof_nhr <br> check_snmp_vrrp.pl
+  IronPort                |   Yes      |   SNMP   |   SNMP    | SNMP|   No     | Yes |
+  Cisco CSS               |   Yes      |   ??     |   Yes     | Yes |   No     | ??  | check_snmp_css.pl
+
+
+### <a id="plugin-check-command-snmp-load"></a> snmp-load
+
+Check command object for the [check_snmp_load.pl](http://nagios.manubulon.com/snmp_load.html) plugin.
+
+Custom Attributes:
+
+
+Name                    | Description
+------------------------|--------------
+snmp_address            | **Optional.** The host's address. Defaults to "$address$".
+snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
+snmp_community          | **Optional.** The SNMP community. Defaults to "public".
+snmp_port               | **Optional.** The SNMP port connection.
+snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
+snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
+snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
+snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
+snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
+snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
+snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default.
+snmp_warn               | **Optional.** The warning threshold. Change the `snmp_load_type` var to "netsl" for using 3 values.
+snmp_crit               | **Optional.** The critical threshold. Change the `snmp_load_type` var to "netsl" for using 3 values.
+snmp_load_type          | **Optional.** Load type. Defaults to "stand". Check all available types in the [snmp load](http://nagios.manubulon.com/snmp_load.html) documentation.
+snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
+snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
+
+### <a id="plugin-check-command-snmp-memory"></a> snmp-memory
+
+Check command object for the [check_snmp_mem.pl](http://nagios.manubulon.com/snmp_mem.html) plugin.
+
+Custom Attributes:
+
+Name                    | Description
+------------------------|--------------
+snmp_address            | **Optional.** The host's address. Defaults to "$address$".
+snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
+snmp_community          | **Optional.** The SNMP community. Defaults to "public".
+snmp_port               | **Optional.** The SNMP port connection.
+snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
+snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
+snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
+snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
+snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
+snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
+snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default.
+snmp_warn               | **Optional.** The warning threshold.
+snmp_crit               | **Optional.** The critical threshold.
+snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
+snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
+
+### <a id="plugin-check-command-snmp-storage"></a> snmp-storage
+
+Check command object for the [check_snmp_storage.pl](http://nagios.manubulon.com/snmp_storage.html) plugin.
+
+Custom Attributes:
+
+Name                    | Description
+------------------------|--------------
+snmp_address            | **Optional.** The host's address. Defaults to "$address$".
+snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
+snmp_community          | **Optional.** The SNMP community. Defaults to "public".
+snmp_port               | **Optional.** The SNMP port connection.
+snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
+snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
+snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
+snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
+snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
+snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
+snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default.
+snmp_warn               | **Optional.** The warning threshold.
+snmp_crit               | **Optional.** The critical threshold.
+snmp_storage_name       | **Optional.** Storage name. Default to regex "^/$$". More options available in the [snmp storage](http://nagios.manubulon.com/snmp_storage.html) documentation.
+snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
+snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
+
+### <a id="plugin-check-command-snmp-interface"></a> snmp-interface
+
+Check command object for the [check_snmp_int.pl](http://nagios.manubulon.com/snmp_int.html) plugin.
+
+Custom Attributes:
+
+Name                        | Description
+----------------------------|--------------
+snmp_address                | **Optional.** The host's address. Defaults to "$address$".
+snmp_nocrypt                | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
+snmp_community              | **Optional.** The SNMP community. Defaults to "public".
+snmp_port                   | **Optional.** The SNMP port connection.
+snmp_v2                     | **Optional.** SNMP version to 2c. Defaults to "false".
+snmp_v3                     | **Optional.** SNMP version to 3. Defaults to "false".
+snmp_login                  | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
+snmp_password               | **Required.** SNMP version 3 password. No value defined as default.
+snmp_v3_use_privpass        | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
+snmp_authprotocol           | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
+snmp_privpass               | **Required.** SNMP version 3 priv password. No value defined as default.
+snmp_warn                   | **Optional.** The warning threshold.
+snmp_crit                   | **Optional.** The critical threshold.
+snmp_interface              | **Optional.** Network interface name. Default to regex "eth0".
+snmp_interface_perf         | **Optional.** Check the input/ouput bandwidth of the interface. Defaults to "true".
+snmp_interface_label        | **Optional.** Add label before speed in output: in=, out=, errors-out=, etc...
+snmp_interface_bits_bytes   | **Optional.** Output performance data in bits/s or Bytes/s. **Depends** on snmp_interface_kbits set to "true". Defaults to "true".
+snmp_interface_percent      | **Optional.** Output performance data in % of max speed. Defaults to "false".
+snmp_interface_kbits        | **Optional.** Make the warning and critical levels in KBits/s. Defaults to "true".
+snmp_interface_megabytes    | **Optional.** Make the warning and critical levels in Mbps or MBps. **Depends** on snmp_interface_kbits set to "true". Defaults to "true".
+snmp_interface_64bit        | **Optional.** Use 64 bits counters instead of the standard counters when checking bandwidth & performance data for interface >= 1Gbps. Defaults to "false".
+snmp_interface_errors       | **Optional.** Add error & discard to Perfparse output. Defaults to "true".
+snmp_interface_noregexp     | **Optional.** Do not use regexp to match interface name in description OID. Defaults to "false".
+snmp_interface_delta        | **Optional.** Delta time of perfcheck. Defaults to "300" (5 min).
+snmp_warncrit_percent       | **Optional.** Make the warning and critical levels in % of reported interface speed. If set **snmp_interface_megabytes** needs to be set to "false". Defaults to "false".
+snmp_perf                   | **Optional.** Enable perfdata values. Defaults to "true".
+snmp_timeout                | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
+
+### <a id="plugin-check-command-snmp-process"></a> snmp-process
+
+Check command object for the [check_snmp_process.pl](http://nagios.manubulon.com/snmp_process.html) plugin.
+
+Custom Attributes:
+
+Name                    | Description
+------------------------|--------------
+snmp_address            | **Optional.** The host's address. Defaults to "$address$".
+snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
+snmp_community          | **Optional.** The SNMP community. Defaults to "public".
+snmp_port               | **Optional.** The SNMP port connection.
+snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
+snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
+snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
+snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
+snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
+snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
+snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default..
+snmp_warn               | **Optional.** The warning threshold.
+snmp_crit               | **Optional.** The critical threshold.
+snmp_process_name       | **Optional.** Name of the process (regexp). No trailing slash!. Defaults to ".*".
+snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
+snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
similarity index 100%
rename from doc/9-appendix.md
rename to doc/12-appendix.md
index 1ed7255f7acb8055ca27609b737a683797e35711..e2100f0808768be70b9704d06de9e23085649118 100644 (file)
@@ -17,7 +17,7 @@ and distribution you are running.
   Debian                  | [Upstream](https://packages.debian.org/sid/icinga2), [DebMon](http://debmon.org/packages/debmon-wheezy/icinga2), [Icinga Repository](http://packages.icinga.org/debian/)
   Ubuntu                  | [Upstream](https://launchpad.net/ubuntu/+source/icinga2), [Icinga PPA](https://launchpad.net/~formorer/+archive/ubuntu/icinga), [Icinga Repository](http://packages.icinga.org/ubuntu/)
   RHEL/CentOS             | [Icinga Repository](http://packages.icinga.org/epel/)
-  OpenSUSE                | [Icinga Repository](http://packages.icinga.org/openSUSE/), [Server Monitoring Repository](https://build.opensuse.org/package/show/server:monitoring/icinga2)
+  openSUSE                | [Icinga Repository](http://packages.icinga.org/openSUSE/), [Server Monitoring Repository](https://build.opensuse.org/package/show/server:monitoring/icinga2)
   SLES                    | [Icinga Repository](http://packages.icinga.org/SUSE/)
   Gentoo                  | [Upstream](http://packages.gentoo.org/package/net-analyzer/icinga2)
   FreeBSD                 | [Upstream](http://www.freshports.org/net-mgmt/icinga2)
@@ -60,7 +60,7 @@ SLES:
     # zypper ar http://packages.icinga.org/SUSE/ICINGA-release.repo
     # zypper ref
 
-OpenSUSE:
+openSUSE:
 
     # zypper ar http://packages.icinga.org/openSUSE/ICINGA-release.repo
     # zypper ref
@@ -83,17 +83,17 @@ RHEL/CentOS/Fedora:
 
     # yum install icinga2
 
-SLES/OpenSUSE:
+SLES/openSUSE:
 
     # zypper install icinga2
 
-On RHEL/CentOS and SLES you will need to use `chkconfig` to enable the
-`icinga2` service. You can manually start Icinga 2 using `service icinga2 start`.
+On RHEL/CentOS and SLES you will need to use `chkconfig` and `service` to enable and start
+the `icinga2` service:
 
     # chkconfig icinga2 on
     # service icinga2 start
 
-RHEL/CentOS 7 use [Systemd](#systemd-service) with `systemctl {enable,start} icinga2`.
+RHEL/CentOS 7 and Fedora use [systemd](#systemd-service):
 
     # systemctl enable icinga2
     # systemctl start icinga2
@@ -1505,13 +1505,13 @@ By default the Icinga 2 daemon is running as `icinga` user and group
 using the init script. Using Debian packages the user and group are set to `nagios`
 for historical reasons.
 
-### <a id="systemd-service"></a> Systemd Service
+### <a id="systemd-service"></a> systemd Service
 
-Modern distributions (Fedora, OpenSUSE, etc.) already use `Systemd` natively. Enterprise-grade
-distributions such as RHEL7 changed to `Systemd` recently. Icinga 2 Packages will install the
+Some distributions (e.g. Fedora and openSUSE) already use `systemd`. Other
+distributions such as RHEL7 changed to `systemd` recently. Icinga 2 Packages will install the
 service automatically.
 
-The Icinga 2 `Systemd` service can be (re)started, reloaded, stopped and also queried for its current status.
+The Icinga 2 `systemd` service can be (re)started, reloaded, stopped and also queried for its current status.
 
     # systemctl status icinga2
     icinga2.service - Icinga host/service/network monitoring system
@@ -1532,7 +1532,7 @@ The Icinga 2 `Systemd` service can be (re)started, reloaded, stopped and also qu
     Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 8 Dependency(s).
     Jul 23 13:39:38 nbmif systemd[1]: Started Icinga host/service/network monitoring system.
 
-`Systemd` supports the following command actions:
+`systemd` supports the following command actions:
 
   Command             | Description
   --------------------|------------------------
@@ -1554,16 +1554,16 @@ If you're stuck with configuration errors, you can manually invoke the [configur
 
 ### <a id="cli-commands"></a> Icinga 2 CLI Commands
 
-Icinga 2 ships its own integrated cli commands supporting bash-autocompletion.
+Icinga 2 ships its own integrated CLI commands supporting bash-autocompletion.
 
-These cli commands will allow you to use certain functionality
+These CLI commands will allow you to use certain functionality
 provided by and around the Icinga 2 daemon.
 
 > **Note**
 >
-> The cli commands are available in Icinga 2 starting with *2.2*.
+> The CLI commands are available in Icinga 2 starting with *2.2*.
 
-Each cli command provides its own help and usage information, so please
+Each CLI command provides its own help and usage information, so please
 make sure to always run them withthe  `--help` parameter.
 
 Run `icinga2` without any arguments (or using `--help`) to get a list of
@@ -1686,7 +1686,7 @@ added.
 
 #### <a id="cli-command-daemon"></a> Cli command: Daemon
 
-The cli command `daemon` provides the functionality to start/stop Icinga 2.
+The CLI command `daemon` provides the functionality to start/stop Icinga 2.
 Furthermore it provides the [configuration validation](#config-validation).
 
     # icinga2 daemon --help
@@ -1736,7 +1736,7 @@ is returned. More details in the [configuration validation](#config-validation)
 
 #### <a id="cli-command-feature"></a> Cli command: Feature
 
-The cli commands for `enable` and `disable` feature support bash auto-completion
+The CLI commands for `enable` and `disable` feature support bash auto-completion
 and will only suggest features for the corresponding context. Like disabling a
 feature will only bring up all enabled features.
 
@@ -1793,7 +1793,7 @@ nodes in a [remote monitoring ](#icinga2-remote-client-monitoring) or
 
 #### <a id="cli-command-object"></a> Cli command: Object
 
-The `object` cli command can be used to list all configuration objects and their
+The `object` CLI command can be used to list all configuration objects and their
 attributes. The command also shows where each of the attributes was modified.
 That way you can also identify which objects have been created from your [apply rules](#apply).
 
@@ -1827,7 +1827,7 @@ More information can be found in the [troubleshooting](#list-configuration-objec
 
 #### <a id="cli-command-pki"></a> Cli command: Pki
 
-Provides the cli commands to
+Provides the CLI commands to
 
 * generate a new local CA
 * generate a new CSR or self-signed certificate
@@ -1836,7 +1836,7 @@ Provides the cli commands to
 * request a signed certificate from the master
 * generate a new ticket for the client setup
 
-This functionality is used by the [node setup/wizard](#cli-command-pki) cli commands too.
+This functionality is used by the [node setup/wizard](#cli-command-pki) CLI commands too.
 
     # icinga2 pki --help
     icinga2 - The Icinga 2 network monitoring daemon (version: v2.1.1-299-gf695275)
@@ -1877,7 +1877,7 @@ cleared after review.
 
 > **Note**
 >
-> The cli command `repository` only supports basic configuration manipulation (add, remove)
+> The CLI command `repository` only supports basic configuration manipulation (add, remove)
 > and a limited set of objects required for the [remote client] integration. Future
 > versions will support more options (set, etc.).
 >
@@ -1961,9 +1961,9 @@ Lists all configured variables (constants) in a similar fasion like [object list
 Icinga 2 provides configuration files for some commonly used features. These
 are installed in the `/etc/icinga2/features-available` directory and can be
 enabled and disabled using the `icinga2 feature enable` and `icinga2 feature disable`
-[cli commands](#cli-command-feature), respectively.
+[CLI commands](#cli-command-feature), respectively.
 
-The `icinga2 feature enable` cli command creates symlinks in the
+The `icinga2 feature enable` CLI command creates symlinks in the
 `/etc/icinga2/features-enabled` directory which is included by default
 in the example configuration file.
 
@@ -2012,8 +2012,8 @@ Validate the configuration with the init script option `checkconfig`:
 
 > **Note**
 >
-> Using [Systemd](#systemd-service) you need to manually validate the configuration using
-> the cli command below.
+> Using [systemd](#systemd-service) you need to manually validate the configuration using
+> the CLI command below.
 
 Or manually passing the `-C` argument:
 
@@ -2041,7 +2041,7 @@ Or manually passing the `-C` argument:
 If you encouter errors during configuration validation, please make sure
 to read the [troubleshooting](#troubleshooting) chapter.
 
-You can also use the [cli command](#cli-command-object) `icinga2 object list`
+You can also use the [CLI command](#cli-command-object) `icinga2 object list`
 after validation passes to analyze object attributes, inheritance or created
 objects by apply rules.
 Find more on troubleshooting with `object list` in [this chapter](#list-configuration-objects).
similarity index 99%
rename from doc/4-monitoring-basics.md
rename to doc/3-monitoring-basics.md
index caf21b146489288c11978180dd566f4f521b86e8..dbec2ef95d07bec5499b36e49c265367fac069b8 100644 (file)
@@ -37,12 +37,6 @@ Here is an example of a host object which defines two child services:
 The example creates two services `ping4` and `http` which belong to the
 host `my-server1`.
 
-> **Note**
->
-> When using [apply](#using-apply) rules, a service apply definition will
-> implicitely create a relationship to each host by setting the `host_name`
-> attribute.
-
 It also specifies that the host should perform its own check using the `hostalive`
 check command.
 
@@ -254,7 +248,7 @@ dictionaries](#using-apply-for) for example provided by
 > **Tip**
 >
 > Building configuration in that dynamic way requires detailed information
-> of the generated objects. Use the `object list` [cli command](#cli-command-object)
+> of the generated objects. Use the `object list` [CLI command](#cli-command-object)
 > after successful [configuration validation](#config-validation).
 
 
@@ -443,7 +437,7 @@ This can be achieved by wrapping them into the [string()](#function-calls) funct
 > **Tip**
 >
 > Building configuration in that dynamic way requires detailed information
-> of the generated objects. Use the `object list` [cli command](#cli-command-object)
+> of the generated objects. Use the `object list` [CLI command](#cli-command-object)
 > after successful [configuration validation](#config-validation).
 
 
similarity index 99%
rename from doc/5-monitoring-remote-systems.md
rename to doc/4-monitoring-remote-systems.md
index d17411c9fef8214b9618ad5b0622ffa3ee1c5dfd..eccab124c6a80398c73f8dea08c623d503645dfa 100644 (file)
@@ -7,7 +7,7 @@ Icinga 2 uses its own unique and secure communitication protol amongst instances
 Be it an High-Availability cluster setup, distributed load-balanced setup or just a single
 agent [monitoring a remote client](#icinga2-remote-client-monitoring).
 
-All communication is secured by SSL x509, and fully supports IPv4 and IPv6.
+All communication is secured by TLS with certificates, and fully supports IPv4 and IPv6.
 
 If you are planning to use the native Icinga 2 cluster feature for distributed
 monitoring and high-availability, please continue reading in
@@ -82,7 +82,7 @@ Your master setup requires the following
 * Enabled API feature, and a local Endpoint and Zone object configuration
 * Firewall ACLs for the communication port (default 5665)
 
-You can use the [cli command](#cli-command-node) `node wizard` for setting up a new node
+You can use the [CLI command](#cli-command-node) `node wizard` for setting up a new node
 on the master. The command must be run as root, all Icinga 2 specific files
 will be updated to the icinga user the daemon is running as (certificate files
 for example).
@@ -148,7 +148,7 @@ The setup wizard does not automatically restart Icinga 2.
 ## <a id="icinga2-remote-monitoring-client"></a> Client Setup for Remote Monitoring
 
 Icinga 2 can be installed on Linux/Unix and Windows. While
-[Linux/Unix](#icinga2-remote-monitoring-client-linux) will be using the [cli command](#cli-command-node)
+[Linux/Unix](#icinga2-remote-monitoring-client-linux) will be using the [CLI command](#cli-command-node)
 `node wizard` for a guided setup, you will need to use the
 graphical installer for Windows based client setup.
 
@@ -213,7 +213,7 @@ are fulfilled, or that you're using [manual SSL certificate generation](#manual-
 > You don't need any features (DB IDO, Livestatus) or user interfaces on the remote client.
 > Install them only if you're planning to use them.
 
-Once the package installation succeeded, use the `node wizard` cli command to install
+Once the package installation succeeded, use the `node wizard` CLI command to install
 a new Icinga 2 node as client setup.
 
 You'll need the following configuration details:
@@ -455,7 +455,7 @@ This is considered as independant satellite using a local scheduler, configurati
 and the possibility to add Icinga 2 features on demand.
 
 Local configured checks are transferred to the central master and helped
-with discovery cli commands.
+with discovery CLI commands.
 
 Please follow the instructions closely in order to deploy your fully featured
 client, or `agent` as others might call it.
@@ -472,11 +472,11 @@ The following convention applies to remote clients:
 The default setup routine will install a new host based on your FQDN in `repository.d/hosts` with all
 services in separate configuration files a directory underneath.
 
-The repository can be managed using the cli command `repository`.
+The repository can be managed using the CLI command `repository`.
 
 > **Note**
 >
-> The cli command `repository` only supports basic configuration manipulation (add, remove). Future
+> The CLI command `repository` only supports basic configuration manipulation (add, remove). Future
 > versions will support more options (set, etc.). Please check the Icinga 2 development roadmap
 > for that.
 
@@ -513,7 +513,7 @@ You can control that by calling the `node list` command:
 #### <a id="icinga2-remote-monitoring-master-discovery-remove"></a> Remove Discovered Clients
 
 If you don't require a connected agent, you can manually remove it and its discovered hosts and services
-using the following cli command:
+using the following CLI command:
 
     # icinga2 node remove my-discovered-agent
 
@@ -539,13 +539,13 @@ By default, the following additional configuration is generated:
 
 > **Note**
 >
-> If there are existing hosts/services defined or modified, the cli command will not overwrite these (modified)
+> If there are existing hosts/services defined or modified, the CLI command will not overwrite these (modified)
 > configuration files.
 >
 > If hosts or services disappeared from the client discovery, it will remove the existing configuration objects
 > from the config repository.
 
-The `update-config` cli command will fail, if there are uncommitted changes for the
+The `update-config` CLI command will fail, if there are uncommitted changes for the
 configuration repository.
 Please review these changes manually, or clear the commit and try again. This is a
 safety hook to prevent unwanted manual changes to be committed by a updating the
@@ -561,7 +561,7 @@ After updating the configuration repository, make sure to reload Icinga 2.
 
     # service icinga2 reload
 
-Using Systemd:
+Using systemd:
     # systemctl reload icinga2.service
 
 
@@ -1011,7 +1011,7 @@ Before you start deploying, keep the following things in mind:
 
 ### <a id="manual-certificate-generation"></a> Manual SSL Certificate Generation
 
-Icinga 2 ships [cli commands](#cli-command-pki) assisting with CA and node certificate creation
+Icinga 2 ships [CLI commands](#cli-command-pki) assisting with CA and node certificate creation
 for your Icinga 2 distributed setup.
 
 > **Note**
similarity index 98%
rename from doc/6-addons-plugins.md
rename to doc/5-addons-plugins.md
index 8484f076f37896bffbec0b9be3cafe4db23546ba..c704d0e940f4eb43358cc1080683b84605f0d72f 100644 (file)
@@ -54,7 +54,7 @@ list of popular community sites which host check plugins:
 * [Icinga Wiki](https://wiki.icinga.org)
 
 The recommended way of setting up these plugins is to copy them to a common directory
-and create an extra global constant, e.g. `CustomPluginDir` in your [constants.conf](#constants-conf)
+and create a new global constant, e.g. `CustomPluginDir` in your [constants.conf](#constants-conf)
 configuration file:
 
     # cp check_snmp_int.pl /opt/plugins
similarity index 94%
rename from doc/3-troubleshooting.md
rename to doc/6-troubleshooting.md
index f60f7ae4ac4882f4193746a9cbb61c06e5491786..27a8729bb890f679ace4ddf1d6775ae24827a5ec 100644 (file)
@@ -1,9 +1,5 @@
 # <a id="troubleshooting"></a> Icinga 2 Troubleshooting
 
-For a more verbose output of the Icinga 2 daemon increase the
-`severity` attribute of the [logs](#logging) to `notice` or
-`debug`.
-
 ## <a id="troubleshooting-information-required"></a> Which information is required
 
 * Which distribution and version
@@ -19,9 +15,12 @@ For a more verbose output of the Icinga 2 daemon increase the
 Run Icinga 2 in the foreground with debugging enabled. Specify the console
 log severity as an additional parameter argument to `-x`.
 
-    # /usr/sbin/icinga2 daemon -c /etc/icinga2/icinga2.conf -x notice
+    # /usr/sbin/icinga2 daemon -x notice
+
+The log level can be one of `critical`, `warning`, `information`, `notice`
+and `debug`.
 
-Additionally you can enable the debug log using
+Alternatively you can enable the debug log:
 
     # icinga2 feature enable debuglog
     # service icinga2 restart
@@ -29,7 +28,7 @@ Additionally you can enable the debug log using
 
 ## <a id="list-configuration-objects"></a> List Configuration Objects
 
-The `icinga2 object list` cli command can be used to list all configuration objects and their
+The `icinga2 object list` CLI command can be used to list all configuration objects and their
 attributes. The tool also shows where each of the attributes was modified.
 
 That way you can also identify which objects have been created from your [apply rules](#apply).
@@ -60,7 +59,7 @@ That way you can also identify which objects have been created from your [apply
 
     [...]
 
-You can filter by name or type too.
+You can also filter by name and type:
 
     # icinga2 object list --name *ssh* --type Service
     Object 'localhost!ssh' of type 'Service':
@@ -97,8 +96,8 @@ included using
     include <itl>
     include <plugins>
 
-in [icinga2.conf](#icinga2-conf). These configurations will be overridden on upgrade, so please
-send modifications as proposed patches upstream. The default include path is set to
+in the [icinga2.conf](#icinga2-conf) configuration file. These configurations will be overridden
+on upgrade, so please send modifications as proposed patches upstream. The default include path is set to
 `LocalStateDir + "/share/icinga2/includes"`.
 
 You should add your own command definitions to a new file in `conf.d/` called `commands.conf`
@@ -235,27 +234,41 @@ The Icinga 2 packages provide a debug package which must be
 installed separately for all involved binaries, like `icinga2-bin`
 or `icinga2-ido-mysql`.
 
+Debian/Ubuntu:
+
+    # apt-get install icinga2-dbg
+
+RHEL/CentOS:
+
     # yum install icinga2-debuginfo
 
+SLES/openSUSE:
+
     # zypper install icinga2-bin-debuginfo icinga2-ido-mysql-debuginfo
+   
 
-    # apt-get install icinga2-dbg
-    
-Furthermore, boost and gcc require their debug symbols installed as well.
+Furthermore, you may also have to install debug symbols for Boost and your C library.
 
-Compiled binaries require the `-DCMAKE_BUILD_TYPE=RelWithDebInfo` or
-`-DCMAKE_BUILD_TYPE=Debug` cmake build flags.
+If you're building your own binaries you should use the `-DCMAKE_BUILD_TYPE=Debug` cmake
+build flag for debug builds.
 
 
 ### <a id="development-debug-gdb"></a> GDB
 
 Install gdb:
 
+Debian/Ubuntu:
+
+    # apt-get install gdb
+
+RHEL/CentOS/Fedora:
+
     # yum install gdb
 
+SLES/openSUSE:
+
     # zypper install gdb
 
-    # apt-get install gdb
 
 Install the `boost`, `python` and `icinga2` pretty printers. Absolute paths are required,
 so please make sure to update the installation paths accordingly (`pwd`).
diff --git a/doc/7-configuring-icinga-2.md b/doc/7-configuring-icinga-2.md
deleted file mode 100644 (file)
index c12c2f2..0000000
+++ /dev/null
@@ -1,3042 +0,0 @@
-# <a id="configuring-icinga2"></a> Configuring Icinga 2
-
-## <a id="configuration-syntax"></a> Configuration Syntax
-
-### <a id="object-definition"></a> Object Definition
-
-Icinga 2 features an object-based configuration format. You can define new
-objects using the `object` keyword:
-
-    object Host "host1.example.org" {
-      display_name = "host1"
-
-      address = "192.168.0.1"
-      address6 = "::1"
-    }
-
-In general you need to write each statement on a new line. Expressions started
-with `{`, `(` and `[` extend until the matching closing character and can be broken
-up into multiple lines.
-
-Alternatively you can write multiple statements on a single line by separating
-them with a semicolon:
-
-    object Host "host1.example.org" {
-      display_name = "host1"
-
-      address = "192.168.0.1"; address6 = "::1"
-    }
-
-Each object is uniquely identified by its type (`Host`) and name
-(`host1.example.org`). Some types have composite names, e.g. the
-`Service` type which uses the `host_name` attribute and the name
-you specified to generate its object name.
-
-Exclamation marks (!) are not permitted in object names.
-
-Objects can contain a comma-separated list of property
-declarations. Instead of commas semicolons may also be used.
-The following data types are available for property values:
-
-### Expressions
-
-The following expressions can be used on the right-hand side of assignments.
-
-#### <a id="numeric-literals"></a> Numeric Literals
-
-A floating-point number.
-
-Example:
-
-    -27.3
-
-#### <a id="duration-literals"></a> Duration Literals
-
-Similar to floating-point numbers except for the fact that they support
-suffixes to help with specifying time durations.
-
-Example:
-
-    2.5m
-
-Supported suffixes include ms (milliseconds), s (seconds), m (minutes),
-h (hours) and d (days).
-
-Duration literals are converted to seconds by the config parser and
-are treated like numeric literals.
-
-#### <a id="string-literals"></a> String Literals
-
-A string.
-
-Example:
-
-    "Hello World!"
-
-Certain characters need to be escaped. The following escape sequences
-are supported:
-
-Character                 | Escape sequence
---------------------------|------------------------------------
-"                         | \\"
-\\                        | \\\\
-&lt;TAB&gt;               | \\t
-&lt;CARRIAGE-RETURN&gt;   | \\r
-&lt;LINE-FEED&gt;         | \\n
-&lt;BEL&gt;               | \\b
-&lt;FORM-FEED&gt;         | \\f
-
-In addition to these pre-defined escape sequences you can specify
-arbitrary ASCII characters using the backslash character (\\) followed
-by an ASCII character in octal encoding.
-
-#### <a id="multiline-string-literals"></a> Multi-line String Literals
-
-Strings spanning multiple lines can be specified by enclosing them in
-{{{ and }}}.
-
-Example:
-
-    {{{This
-    is
-    a multi-line
-    string.}}}
-
-Unlike in ordinary strings special characters do not have to be escaped
-in multi-line string literals.
-
-#### <a id="boolean-literals"></a> Boolean Literals
-
-The keywords `true` and `false` are used to denote truth values.
-
-#### <a id="null-value"></a> Null Value
-
-The `null` keyword can be used to specify an empty value.
-
-#### <a id="dictionary"></a> Dictionary
-
-An unordered list of key-value pairs. Keys must be unique and are
-compared in a case-sensitive manner.
-
-Individual key-value pairs must either be comma-separated or on separate lines.
-The comma after the last key-value pair is optional.
-
-Example:
-
-    {
-      address = "192.168.0.1"
-      port = 443
-    }
-
-Identifiers may not contain certain characters (e.g. space) or start
-with certain characters (e.g. digits). If you want to use a dictionary
-key that is not a valid identifier you can enclose the key in double
-quotes.
-
-#### <a id="array"></a> Array
-
-An ordered list of values.
-
-Individual array elements must be comma-separated.
-The comma after the last element is optional.
-
-Example:
-
-    [ "hello", 42 ]
-
-An array may simultaneously contain values of different types, such as
-strings and numbers.
-
-#### <a id="expression-operators"></a> Operators
-
-The following operators are supported in expressions:
-
-Operator | Examples (Result)                             | Description
----------|-----------------------------------------------|--------------------------------
-!        | !"Hello" (false), !false (true)               | Logical negation of the operand
-~        | ~true (false)                                 | Bitwise negation of the operand
-+        | 1 + 3 (4), "hello " + "world" ("hello world") | Adds two numbers; concatenates strings
--        | 3 - 1 (2)                                     | Subtracts two numbers
-*        | 5m * 10 (3000)                                | Multiplies two numbers
-/        | 5m / 5 (60)                                   | Divides two numbers
-%        | 17 % 12 (5)                                   | Remainder after division
-^        | 17 ^ 12 (29)                                  | Bitwise XOR
-&        | 7 & 3 (3)                                     | Binary AND
-&#124;   | 2 &#124; 3 (3)                                | Binary OR
-&&       | true && false (false)                         | Logical AND
-&#124;&#124; | true &#124;&#124; false (true)            | Logical OR
-<        | 3 < 5 (true)                                  | Less than
->        | 3 > 5 (false)                                 | Greater than
-<=       | 3 <= 3 (true)                                 | Less than or equal
->=       | 3 >= 3 (true)                                 | Greater than or equal
-<<       | 4 << 8 (1024)                                 | Left shift
->>       | 1024 >> 4 (64)                                | Right shift
-==       | "hello" == "hello" (true), 3 == 5 (false)     | Equal to
-!=       | "hello" != "world" (true), 3 != 3 (false)     | Not equal to
-in       | "foo" in [ "foo", "bar" ] (true)              | Element contained in array
-!in      | "foo" !in [ "bar", "baz" ] (true)             | Element not contained in array
-()       | (3 + 3) * 5                                   | Groups sub-expressions
-
-Constants may be used in expressions:
-
-    const MyCheckInterval = 10m
-
-    ...
-
-    {
-      check_interval = MyCheckInterval / 2.5
-    }
-
-#### <a id="function-calls"></a> Function Calls
-
-Functions can be called using the `()` operator:
-
-    const MyGroups = [ "test1", "test" ]
-
-    {
-      check_interval = len(MyGroups) * 1m
-    }
-
-> **Tip**
->
-> Use these functions in [apply](#using-apply) rule expressions.
-
-    assign where match("192.168.*", host.address)
-
-A list of available functions is available in the [Built-in functions and methods](#builtin-functions) chapter.
-
-### <a id="dictionary-operators"></a> Assignments
-
-In addition to the `=` operator shown above a number of other operators
-to manipulate attributes are supported. Here's a list of all
-available operators:
-
-#### <a id="operator-assignment"></a> Operator =
-
-Sets an attribute to the specified value.
-
-Example:
-
-    {
-      a = 5
-      a = 7
-    }
-
-In this example `a` has the value `7` after both instructions are executed.
-
-#### <a id="operator-additive-assignment"></a> Operator +=
-
-The += operator is a shortcut. The following expression:
-
-    {
-      a = [ "hello" ]
-      a += [ "world" ]
-    }
-
-is equivalent to:
-
-    {
-      a = [ "hello" ]
-      a = a + [ "world" ]
-    }
-
-#### <a id="operator-substractive-assignment"></a> Operator -=
-
-The -= operator is a shortcut. The following expression:
-
-    {
-      a = 10
-      a -= 5
-    }
-
-is equivalent to:
-
-    {
-      a = 10
-      a = a - 5
-    }
-
-#### <a id="operator-multiply-assignment"></a> Operator \*=
-
-The *= operator is a shortcut. The following expression:
-
-    {
-      a = 60
-      a *= 5
-    }
-
-is equivalent to:
-
-    {
-      a = 60
-      a = a * 5
-    }
-
-#### <a id="operator-dividing-assignment"></a> Operator /=
-
-The /= operator is a shortcut. The following expression:
-
-    {
-      a = 300
-      a /= 5
-    }
-
-is equivalent to:
-
-    {
-      a = 300
-      a = a / 5
-    }
-
-### <a id="indexer"></a> Indexer
-
-The indexer syntax provides a convenient way to set dictionary elements.
-
-Example:
-
-    {
-      hello.key = "world"
-    }
-
-Example (alternative syntax):
-
-    {
-      hello["key"] = "world"
-    }
-
-This is equivalent to writing:
-
-    {
-      hello += {
-        key = "world"
-      }
-    }
-
-If the `hello` attribute does not already have a value it is automatically initialized to an empty dictionary.
-
-### <a id="template-imports"></a> Template Imports
-
-Objects can import attributes from other objects.
-
-Example:
-
-    template Host "default-host" {
-      vars.colour = "red"
-    }
-
-    template Host "test-host" {
-      import "default-host"
-
-      vars.colour = "blue"
-    }
-
-    object Host "localhost" {
-      import "test-host"
-
-      address = "127.0.0.1"
-      address6 = "::1"
-    }
-
-The `default-host` and `test-host` objects are marked as templates
-using the `template` keyword. Unlike ordinary objects templates are not
-instantiated at run-time. Parent objects do not necessarily have to be
-templates, however in general they are.
-
-The `vars` dictionary for the `localhost` object contains all three
-custom attributes and the custom attribute `colour` has the value `"blue"`.
-
-Parent objects are resolved in the order they're specified using the
-`import` keyword.
-
-### <a id="constants"></a> Constants
-
-Global constants can be set using the `const` keyword:
-
-    const VarName = "some value"
-
-Once defined a constant can be accessed from any file. Constants cannot be changed
-once they are set.
-
-Icinga 2 provides a number of special global constants. Some of them can be overridden using the `--define` command line parameter:
-
-Variable            |Description
---------------------|-------------------
-PrefixDir           |**Read-only.** Contains the installation prefix that was specified with cmake -DCMAKE_INSTALL_PREFIX. Defaults to "/usr/local".
-SysconfDir          |**Read-only.** Contains the path of the sysconf directory. Defaults to PrefixDir + "/etc".
-ZonesDir            |**Read-only.** Contains the path of the zones.d directory. Defaults to SysconfDir + "/zones.d".
-LocalStateDir       |**Read-only.** Contains the path of the local state directory. Defaults to PrefixDir + "/var".
-RunDir              |**Read-only.** Contains the path of the run directory. Defaults to LocalStateDir + "/run".
-PkgDataDir          |**Read-only.** Contains the path of the package data directory. Defaults to PrefixDir + "/share/icinga2".
-StatePath           |**Read-write.** Contains the path of the Icinga 2 state file. Defaults to LocalStateDir + "/lib/icinga2/icinga2.state".
-ObjectsPath         |**Read-write.** Contains the path of the Icinga 2 objects file. Defaults to LocalStateDir + "/cache/icinga2/icinga2.debug".
-PidPath             |**Read-write.** Contains the path of the Icinga 2 PID file. Defaults to RunDir + "/icinga2/icinga2.pid".
-Vars                |**Read-write.** Contains a dictionary with global custom attributes. Not set by default.
-NodeName            |**Read-write.** Contains the cluster node name. Set to the local hostname by default.
-ApplicationType     |**Read-write.** Contains the name of the Application type. Defaults to "icinga/IcingaApplication".
-EnableNotifications |**Read-write.** Whether notifications are globally enabled. Defaults to true.
-EnableEventHandlers |**Read-write.** Whether event handlers are globally enabled. Defaults to true.
-EnableFlapping      |**Read-write.** Whether flap detection is globally enabled. Defaults to true.
-EnableHostChecks    |**Read-write.** Whether active host checks are globally enabled. Defaults to true.
-EnableServiceChecks |**Read-write.** Whether active service checks are globally enabled. Defaults to true.
-EnablePerfdata      |**Read-write.** Whether performance data processing is globally enabled. Defaults to true.
-UseVfork            |**Read-write.** Whether to use vfork(). Only available on *NIX. Defaults to true.
-RunAsUser              |**Read-write.** Defines the user the Icinga 2 daemon is running as. Used in [init.conf](#init-conf).
-RunAsGroup             |**Read-write.** Defines the group the Icinga 2 daemon is running as. Used in [init.conf](#init-conf).
-
-### <a id="apply"></a> Apply
-
-The `apply` keyword can be used to create new objects which are associated with
-another group of objects.
-
-    apply Service "ping" to Host {
-      import "generic-service"
-
-      check_command = "ping4"
-
-      assign where host.name == "localhost"
-    }
-
-In this example the `assign where` condition is a boolean expression which is
-evaluated for all objects of type `Host` and a new service with name "ping"
-is created for each matching host. [Expression operators](#expression-operators)
-may be used in `assign where` conditions.
-
-The `to` keyword and the target type may be omitted if there is only one target
-type, e.g. for the `Service` type.
-
-Depending on the object type used in the `apply` expression additional local
-variables may be available for use in the `where` condition:
-
-Source Type       | Target Type | Variables
-------------------|-------------|--------------
-Service           | Host        | host
-Dependency        | Host        | host
-Dependency        | Service     | host, service
-Notification      | Host        | host
-Notification      | Service     | host, service
-ScheduledDowntime | Host        | host
-ScheduledDowntime | Service     | host, service
-
-Any valid config attribute can be accessed using the `host` and `service`
-variables. For example, `host.address` would return the value of the host's
-"address" attribute - or null if that attribute isn't set.
-
-### <a id="group-assign"></a> Group Assign
-
-Group objects can be assigned to specific member objects using the `assign where`
-and `ignore where` conditions.
-
-    object HostGroup "linux-servers" {
-      display_name = "Linux Servers"
-
-      assign where host.vars.os == "Linux"
-    }
-
-In this example the `assign where` condition is a boolean expression which is evaluated
-for all objects of the type `Host`. Each matching host is added as member to the host group
-with the name "linux-servers". Membership exclusion can be controlled using the `ignore where`
-condition. [Expression operators](#expression-operators) may be used in `assign where` and
-`ignore where` conditions.
-
-Source Type       | Variables
-------------------|--------------
-HostGroup         | host
-ServiceGroup      | host, service
-UserGroup         | user
-
-
-### <a id="boolean-values"></a> Boolean Values
-
-The `assign where` and `ignore where` statements, the `!`, `&&` and `||`
-operators as well as the `bool()` function convert their arguments to a
-boolean value based on the following rules:
-
-Description          | Example Value     | Boolean Value
----------------------|-------------------|--------------
-Empty value          | null              | false
-Zero                 | 0                 | false
-Non-zero integer     | -23945            | true
-Empty string         | ""                | false
-Non-empty string     | "Hello"           | true
-Empty array          | []                | false
-Non-empty array      | [ "Hello" ]       | true
-Empty dictionary     | {}                | false
-Non-empty dictionary | { key = "value" } | true
-
-For a list of supported expression operators for `assign where` and `ignore where`
-statements, see [expression operators](#expression-operators).
-
-### <a id="comments"></a> Comments
-
-The Icinga 2 configuration format supports C/C++-style and shell-style comments.
-
-Example:
-
-    /*
-     This is a comment.
-     */
-    object Host "localhost" {
-      check_interval = 30 // this is also a comment.
-      retry_interval = 15 # yet another comment
-    }
-
-### <a id="includes"></a> Includes
-
-Other configuration files can be included using the `include` directive.
-Paths must be relative to the configuration file that contains the
-`include` directive.
-
-Example:
-
-    include "some/other/file.conf"
-    include "conf.d/*.conf"
-
-Wildcard includes are not recursive.
-
-Icinga also supports include search paths similar to how they work in a
-C/C++ compiler:
-
-    include <itl>
-
-Note the use of angle brackets instead of double quotes. This causes the
-config compiler to search the include search paths for the specified
-file. By default $PREFIX/share/icinga2/include is included in the list of search
-paths. Additional include search paths can be added using
-[command-line options](#cmdline).
-
-Wildcards are not permitted when using angle brackets.
-
-### <a id="recursive-includes"></a> Recursive Includes
-
-The `include_recursive` directive can be used to recursively include all
-files in a directory which match a certain pattern.
-
-Example:
-
-    include_recursive "conf.d", "*.conf"
-    include_recursive "templates"
-
-The first parameter specifies the directory from which files should be
-recursively included.
-
-The file names need to match the pattern given in the second parameter.
-When no pattern is specified the default pattern "*.conf" is used.
-
-### <a id="library"></a> Library directive
-
-The `library` directive can be used to manually load additional
-libraries. Libraries can be used to provide additional object types and
-functions.
-
-Example:
-
-    library "snmphelper"
-
-### <a id="functions"></a> Functions
-
-Functions can be defined using the `function` keyword.
-
-Example:
-
-    function multiply(a, b) {
-         return a * b
-       }
-
-When encountering the `return` keyword further execution of the function is terminated and
-the specified value is supplied to the caller of the function:
-
-    log(multiply(3, 5))
-
-In this example the `multiply` function we declared earlier is invoked with two arguments (3 and 5).
-The function computes the product of those arguments and makes the result available to the
-function's caller.
-
-When no value is supplied for the `return` statement the function returns `null`.
-
-Functions which do not have a `return` statement have their return value set to the value of the
-last expression which was performed by the function. For example, we could have also written our
-`multiply` function like this:
-
-    function multiply(a, b) {
-         a * b
-       }
-
-Anonymous functions can be created by omitting the name in the function definition. The
-resulting function object can be used like any other value:
-
-    var fn = function() { 3 }
-       
-       fn() /* Returns 3 */
-
-### <a id="lambdas"></a> Lambda Expressions
-
-Functions can also be declared using the alternative lambda syntax.
-
-Example:
-
-    f = (x) => x * x
-
-Multiple statements can be used by putting the function body into braces:
-
-    f = (x) => {
-         log("Lambda called")
-         x * x
-    }
-
-Just like with ordinary functions the return value is the value of the last statement.
-
-For lambdas which take exactly one argument the braces around the arguments can be omitted:
-
-    f = x => x * x
-
-### <a id="variable-scopes"></a> Variable Scopes
-
-When setting a variable Icinga checks the following scopes in this order whether the variable
-already exists there:
-
-* Local Scope
-* `this` Scope
-* Global Scope
-
-The local scope contains variables which only exist during the invocation of the current function,
-object or apply statement. Local variables can be declared using the `var` keyword:
-
-    function multiply(a, b) {
-         var temp = a * b
-         return temp
-       }
-
-Each time the `multiply` function is invoked a new `temp` variable is used which is in no way
-related to previous invocations of the function.
-
-When setting a variable which has not previously been declared as local using the `var` keyword
-the `this` scope is used.
-
-The `this` scope refers to the current object which the function or object/apply statement
-operates on.
-
-    object Host "localhost" {
-         check_interval = 5m
-    }
-
-In this example the `this` scope refers to the "localhost" object. The `check_interval` attribute
-is set for this particular host.
-
-You can explicitly access the `this` scope using the `this` keyword:
-
-    object Host "localhost" {
-         var check_interval = 5m
-  
-      /* This explicitly specifies that the attribute should be set
-       * for the host, if we had omitted `this.` the (poorly named)
-       * local variable `check_interval` would have been modified instead.
-       */
-      this.check_interval = 1m 
-  }
-
-Similarly the keywords `locals` and `globals` are available to access the local and global scope.
-
-Functions also have a `this` scope. However unlike for object/apply statements the `this` scope for
-a function is set to whichever object was used to invoke the function. Here's an example:
-
-     hm = {
-          h_word = null
-                
-          function init(word) {
-            h_word = word
-          }
-        }
-        
-        /* Let's invoke the init() function */
-        hm.init("hello")
-
-We're using `hm.init` to invoke the function which causes the value of `hm` to become the `this`
-scope for this function call.
-
-### <a id="conditional-statements"></a> Conditional Statements
-
-Sometimes it can be desirable to only evaluate statements when certain conditions are met. The if/else
-construct can be used to accomplish this.
-
-Example:
-
-    a = 3
-
-       if (a < 5) {
-      a *= 7
-       } else {
-         a *= 2
-       }
-
-An if/else construct can also be used in place of any other value. The value of an if/else statement
-is the value of the last statement which was evaluated for the branch which was taken:
-
-    a = if (true) {
-         log("Taking the 'true' branch")
-         7 * 3
-       } else {
-         log("Taking the 'false' branch")
-         9
-       }
-
-This example prints the log message "Taking the 'true' branch" and the `a` variable is set to 21 (7 * 3).
-
-The value of an if/else construct is null if the condition evaluates to false and no else branch is given.
-
-## <a id="for-loops"></a> For Loops
-
-The `for` statement can be used to iterate over arrays and dictionaries.
-
-Example:
-
-    var list = [ "a", "b", "c" ]
-       
-       for (item in list) {
-         log("Item: " + item)
-       }
-
-The loop body is evaluated once for each item in the array. The variable `item` is declared as a local
-variable just as if the `var` keyword had been used.
-
-Iterating over dictionaries can be accomplished in a similar manner:
-
-    var dict = { a = 3, b = 7 }
-       
-       for (key => value in dict) {
-         log("Key: " + key + ", Value: " + value)
-    }
-
-## <a id="types"></a> Types
-
-All values have a static type. The `typeof` function can be used to determine the type of a value:
-
-    typeof(3) /* Returns an object which represents the type for numbers */
-
-The following built-in types are available:
-
-Type       | Examples          | Description
------------|-------------------|------------------------
-Number     | 3.7               | A numerical value.
-Boolean    | true, false       | A boolean value.
-String     | "hello"           | A string.
-Array      | [ "a", "b" ]      | An array.
-Dictionary | { a = 3 }         | A dictionary.
-
-Depending on which other libraries are loaded other types may become available. The `icinga`
-library implements a whole bunch of other types, e.g. Host, Service, CheckCommand, etc.
-
-Each type has an associated type object which describes the type's semantics. These
-type objects are made available using global variables which match the type's name:
-
-    /* This logs 'true' */
-    log(typeof(3) == Number)
-
-The type object's `prototype` property can be used to find out which methods a certain type
-supports:
-
-       /* This returns: ["find","len","lower","replace","split","substr","to_string","upper"] */
-    keys(String.prototype)
-
-## <a id="reserved-keywords"></a> Reserved Keywords
-
-These keywords are reserved and must not be used as constants or custom attributes.
-
-    object
-    template
-    include
-    include_recursive
-    library
-    null
-    true
-    false
-    const
-    var
-    this
-    use
-    apply
-    to
-    where
-    import
-    assign
-    ignore
-    function
-    return
-    for
-    if
-    else
-    in
-
-You can escape reserved keywords using the `@` character. The following example
-tries to set `vars.include` which references a reserved keyword and generates
-an error:
-
-    [2014-09-15 17:24:00 +0200] critical/config: Location:
-    /etc/icinga2/conf.d/hosts/localhost.conf(13):   vars.sla = "24x7"
-    /etc/icinga2/conf.d/hosts/localhost.conf(14):
-    /etc/icinga2/conf.d/hosts/localhost.conf(15):   vars.include = "some cmdb export field"
-                                                         ^^^^^^^
-    /etc/icinga2/conf.d/hosts/localhost.conf(16): }
-    /etc/icinga2/conf.d/hosts/localhost.conf(17):
-
-    Config error: in /etc/icinga2/conf.d/hosts/localhost.conf: 15:8-15:14: syntax error, unexpected include (T_INCLUDE), expecting T_IDENTIFIER
-    [2014-09-15 17:24:00 +0200] critical/config: 1 errors, 0 warnings.
-
-You can escape the `include` keyword by prefixing it with an additional `@` character:
-
-    object Host "localhost" {
-      import "generic-host"
-
-      address = "127.0.0.1"
-      address6 = "::1"
-
-      vars.os = "Linux"
-      vars.sla = "24x7"
-
-      vars.@include = "some cmdb export field"
-    }
-
-## <a id="builtin-functions"></a> Built-in functions and methods
-
-### <a id="global-functions"></a> Global functions
-
-Function                        | Description
---------------------------------|-----------------------
-regex(pattern, text)            | Returns true if the regex pattern matches the text, false otherwise.
-match(pattern, text)            | Returns true if the wildcard pattern matches the text, false otherwise.
-len(value)                      | Returns the length of the value, i.e. the number of elements for an array or dictionary, or the length of the string in bytes.
-union(array, array, ...)        | Returns an array containing all unique elements from the specified arrays.
-intersection(array, array, ...) | Returns an array containing all unique elements which are common to all specified arrays.
-keys(dict)                      | Returns an array containing the dictionary's keys.
-string(value)                   | Converts the value to a string.
-number(value)                   | Converts the value to a number.
-bool(value)                     | Converts the value to a bool.
-random()                        | Returns a random value between 0 and RAND_MAX (as defined in stdlib.h).
-log(value)                      | Writes a message to the log. Non-string values are converted to a JSON string.
-log(severity, facility, value)  | Writes a message to the log. `severity` can be one of `LogDebug`, `LogNotice`, `LogInformation`, `LogWarning`, and `LogCritical`. Non-string values are converted to a JSON string.
-exit(integer)                   | Terminates the application.
-
-### <a id="number-type"></a> Number type
-
-#### <a id="number-to_string"></a> Number#to_string
-
-Signature:
-
-    function to_string();
-
-The `to_string` method returns a string representation of the number.
-
-Example:
-
-    var example = 7
-       example.to_string() /* Returns "7" */
-
-### <a id="boolean-type"></a> Boolean type
-
-#### <a id="boolean-to_string"></a> Boolean#to_string
-
-Signature:
-
-    function to_string();
-
-The `to_string` method returns a string representation of the boolean value.
-
-Example:
-
-    var example = true
-       example.to_string() /* Returns "true" */
-
-### <a id="string-type"></a> String type
-
-#### <a id="string-find"></a> String#find
-
-Signature:
-
-    function find(str, start);
-
-Returns the zero-based index at which the string `str` was found in the string. If the string
-was not found -1 is returned. `start` specifies the zero-based index at which `find` should
-start looking for the string (defaults to 0 when not specified).
-
-Example:
-
-    "Hello World".find("World") /* Returns 6 */
-
-#### <a id="string-len"></a> String#len
-
-Signature
-
-    function len();
-
-Returns the length of the string in bytes. Note that depending on the encoding type of the string
-this is not necessarily the number of characters.
-
-Example:
-
-    "Hello World".len() /* Returns 11 */
-
-#### <a id="string-lower"></a> String#lower
-
-Signature:
-
-    function lower();
-
-Returns a copy of the string with all of its characters converted to lower-case.
-
-Example:
-
-    "Hello World".lower() /* Returns "hello world" */
-
-#### <a id="string-upper"></a> String#upper
-
-Signature:
-
-    function upper();
-
-Returns a copy of the string with all of its characters converted to upper-case.
-
-Example:
-
-    "Hello World".upper() /* Returns "HELLO WORLD" */
-
-#### <a id="string-replace"></a> String#replace
-
-Signature:
-
-    function replace(search, replacement);
-
-Returns a copy of the string with all occurences of the string specified in `search` replaced
-with the string specified in `replacement`.
-
-#### <a id="string-split"></a> String#split
-
-Signature:
-
-    function split(delimiters);
-
-Splits a string into individual parts and returns them as an array. The `delimiters` argument
-specifies the characters which should be used as delimiters between parts.
-
-Example:
-
-    "x-7,y".split("-,") /* Returns [ "x", "7", "y" ] */
-
-#### <a id="string-substr"></a> String#substr
-
-Signature:
-
-    function substr(start, len);
-
-Returns a part of a string. The `start` argument specifies the zero-based index at which the part begins.
-The optional `len` argument specifies the length of the part ("until the end of the string" if omitted).
-
-Example:
-
-    "Hello World".substr(6) /* Returns "World" */
-
-#### <a id="string-to_string"></a> String#to_string
-
-Signature:
-
-    function to_string();
-
-Returns a copy of the string.
-
-### <a id="array-type"> Array type
-
-#### <a id="array-add"> Array#add
-#### <a id="array-clear"> Array#clear
-#### <a id="array-clone"> Array#clone
-#### <a id="array-contains"> Array#contains
-#### <a id="array-len"> Array#len
-#### <a id="array-remove"> Array#remove
-#### <a id="array-set"> Array#set
-#### <a id="array-sort"> Array#sort
-
-Signature:
-
-    function sort(less_cmp);
-
-Returns a copy of the array where all items are sorted. The items are
-compared using the `<` (less-than) operator. A custom comparator function
-can be specified with the `less_cmp` argument.
-
-### <a id="dictionary-type"> Dictionary type
-
-#### <a id="dictionary-clone"> Dictionary#clone
-#### <a id="dictionary-contains"> Dictionary#contains
-#### <a id="dictionary-len"> Dictionary#len
-#### <a id="dictionary-remove"> Dictionary#remove
-#### <a id="dictionary-set"> Dictionary#set
-
-### <a id="scriptfunction-type"> ScriptFunction type
-
-#### <a id="scriptfunction-call"> ScriptFunction#call
-
-Signature:
-
-    function call(thisArg, ...);
-
-Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
-scope for the function. All other arguments are passed directly to the function.
-
-Example:
-
-    function set_x(val) {
-         this.x = val
-       }
-       
-       dict = {}
-       
-       set_x.call(dict, 7) /* Invokes set_x using `dict` as `this` */
-
-#### <a id="scriptfunction-callv"> ScriptFunction#callv
-
-Signature:
-
-    function call(thisArg, args);
-
-Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
-scope for the function. The items in the `args` array are passed to the function as individual arguments.
-
-Example:
-
-    function set_x(val) {
-         this.x = val
-       }
-       
-       var dict = {}
-       
-       var args = [ 7 ]
-       
-       set_x.callv(dict, args) /* Invokes set_x using `dict` as `this` */
-
-## <a id="object-types"></a> Object Types
-
-### <a id="objecttype-host"></a> Host
-
-A host.
-
-Example:
-
-    object Host "localhost" {
-      display_name = "The best host there is"
-      address = "127.0.0.1"
-      address6 = "::1"
-
-      groups = [ "all-hosts" ]
-
-      check_command = "hostalive"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  display_name    |**Optional.** A short description of the host.
-  address         |**Optional.** The host's address. Available as command runtime macro `$address$` if set.
-  address6        |**Optional.** The host's address. Available as command runtime macro `$address6$` if set.
-  groups          |**Optional.** A list of host groups this host belongs to.
-  vars            |**Optional.** A dictionary containing custom attributes that are specific to this host.
-  check\_command  |**Required.** The name of the check command.
-  max\_check\_attempts|**Optional.** The number of times a host is re-checked before changing into a hard state. Defaults to 3.
-  check\_period   |**Optional.** The name of a time period which determines when this host should be checked. Not set by default.
-  check\_interval |**Optional.** The check interval (in seconds). This interval is used for checks when the host is in a `HARD` state. Defaults to 5 minutes.
-  retry\_interval |**Optional.** The retry interval (in seconds). This interval is used for checks when the host is in a `SOFT` state. Defaults to 1 minute.
-  enable\_notifications|**Optional.** Whether notifications are enabled. Defaults to true.
-  enable\_active\_checks|**Optional.** Whether active checks are enabled. Defaults to true.
-  enable\_passive\_checks|**Optional.** Whether passive checks are enabled. Defaults to true.
-  enable\_event\_handler|**Optional.** Enables event handlers for this host. Defaults to true.
-  enable\_flapping|**Optional.** Whether flap detection is enabled. Defaults to true.
-  enable\_perfdata|**Optional.** Whether performance data processing is enabled. Defaults to true.
-  event\_command  |**Optional.** The name of an event command that should be executed every time the host's state changes or the host is in a `SOFT` state.
-  flapping\_threshold|**Optional.** The flapping threshold in percent when a host is considered to be flapping.
-  volatile        |**Optional.** The volatile setting enables always `HARD` state types if `NOT-OK` state changes occur.
-  zone           |**Optional.** The zone this object is a member of.
-  command\_endpoint|**Optional.** The endpoint where commands are executed on.
-  notes           |**Optional.** Notes for the host.
-  notes\_url      |**Optional.** Url for notes for the host (for example, in notification commands).
-  action\_url     |**Optional.** Url for actions for the host (for example, an external graphing tool).
-  icon\_image     |**Optional.** Icon image for the host. Used by external interfaces only.
-  icon\_image\_alt|**Optional.** Icon image description for the host. Used by external interface only.
-
-> **Best Practice**
->
-> The `address` and `address6` attributes are required for running commands using
-> the `$address$` and `$address6$` runtime macros.
-
-
-### <a id="objecttype-hostgroup"></a> HostGroup
-
-A group of hosts.
-
-> **Best Practice**
->
-> Assign host group members using the [group assign](#group-assign) rules.
-
-Example:
-
-    object HostGroup "my-hosts" {
-      display_name = "My hosts"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  display_name    |**Optional.** A short description of the host group.
-  groups          |**Optional.** An array of nested group names.
-
-### <a id="objecttype-service"></a> Service
-
-Service objects describe network services and how they should be checked
-by Icinga 2.
-
-> **Best Practice**
->
-> Rather than creating a `Service` object for a specific host it is usually easier
-> to just create a `Service` template and use the `apply` keyword to assign the
-> service to a number of hosts.
-> Check the [apply](#using-apply) chapter for details.
-
-Example:
-
-    object Service "uptime" {
-      host_name = "localhost"
-
-      display_name = "localhost Uptime"
-
-      check_command = "check_snmp"
-
-      vars.community = "public"
-      vars.oid = "DISMAN-EVENT-MIB::sysUpTimeInstance"
-
-      check_interval = 60s
-      retry_interval = 15s
-
-      groups = [ "all-services", "snmp" ]
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  display_name    |**Optional.** A short description of the service.
-  host_name       |**Required.** The host this service belongs to. There must be a `Host` object with that name.
-  name            |**Required.** The service name. Must be unique on a per-host basis (Similar to the service_description attribute in Icinga 1.x).
-  groups          |**Optional.** The service groups this service belongs to.
-  vars            |**Optional.** A dictionary containing custom attributes that are specific to this service.
-  check\_command  |**Required.** The name of the check command.
-  max\_check\_attempts|**Optional.** The number of times a service is re-checked before changing into a hard state. Defaults to 3.
-  check\_period   |**Optional.** The name of a time period which determines when this service should be checked. Not set by default.
-  check\_interval |**Optional.** The check interval (in seconds). This interval is used for checks when the service is in a `HARD` state. Defaults to 5 minutes.
-  retry\_interval |**Optional.** The retry interval (in seconds). This interval is used for checks when the service is in a `SOFT` state. Defaults to 1 minute.
-  enable\_notifications|**Optional.** Whether notifications are enabled. Defaults to true.
-  enable\_active\_checks|**Optional.** Whether active checks are enabled. Defaults to true.
-  enable\_passive\_checks|**Optional.** Whether passive checks are enabled. Defaults to true.
-  enable\_event\_handler|**Optional.** Enables event handlers for this host. Defaults to true.
-  enable\_flapping|**Optional.** Whether flap detection is enabled. Defaults to true.
-  enable\_perfdata|**Optional.** Whether performance data processing is enabled. Defaults to true.
-  event\_command  |**Optional.** The name of an event command that should be executed every time the service's state changes or the service is in a `SOFT` state.
-  flapping\_threshold|**Optional.** The flapping threshold in percent when a service is considered to be flapping.
-  volatile        |**Optional.** The volatile setting enables always `HARD` state types if `NOT-OK` state changes occur.
-  zone           |**Optional.** The zone this object is a member of.
-  command\_endpoint|**Optional.** The endpoint where commands are executed on.
-  notes           |**Optional.** Notes for the service.
-  notes\_url      |**Optional.** Url for notes for the service (for example, in notification commands).
-  action_url      |**Optional.** Url for actions for the service (for example, an external graphing tool).
-  icon\_image     |**Optional.** Icon image for the service. Used by external interfaces only.
-  icon\_image\_alt|**Optional.** Icon image description for the service. Used by external interface only.
-
-
-Service objects have composite names, i.e. their names are based on the host_name attribute and the name you specified. This means
-you can define more than one object with the same (short) name as long as the `host_name` attribute has a different value.
-
-### <a id="objecttype-servicegroup"></a> ServiceGroup
-
-A group of services.
-
-> **Best Practice**
->
-> Assign service group members using the [group assign](#group-assign) rules.
-
-Example:
-
-    object ServiceGroup "snmp" {
-      display_name = "SNMP services"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  display_name    |**Optional.** A short description of the service group.
-  groups          |**Optional.** An array of nested group names.
-
-
-### <a id="objecttype-user"></a> User
-
-A user.
-
-Example:
-
-    object User "icingaadmin" {
-      display_name = "Icinga 2 Admin"
-      groups = [ "icingaadmins" ]
-      email = "icinga@localhost"
-      pager = "icingaadmin@localhost.localdomain"
-
-      period = "24x7"
-
-      states = [ OK, Warning, Critical, Unknown ]
-      types = [ Problem, Recovery ]
-
-      vars.additional_notes = "This is the Icinga 2 Admin account."
-    }
-
-Available notification state filters:
-
-    OK
-    Warning
-    Critical
-    Unknown
-    Up
-    Down
-
-Available notification type filters:
-
-    DowntimeStart
-    DowntimeEnd
-    DowntimeRemoved
-    Custom
-    Acknowledgement
-    Problem
-    Recovery
-    FlappingStart
-    FlappingEnd
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  display_name    |**Optional.** A short description of the user.
-  email           |**Optional.** An email string for this user. Useful for notification commands.
-  pager           |**Optional.** A pager string for this user. Useful for notification commands.
-  vars            |**Optional.** A dictionary containing custom attributes that are specific to this user.
-  groups          |**Optional.** An array of group names.
-  enable_notifications|**Optional.** Whether notifications are enabled for this user.
-  period          |**Optional.** The name of a time period which determines when a notification for this user should be triggered. Not set by default.
-  types           |**Optional.** A set of type filters when this notification should be triggered. By default everything is matched.
-  states          |**Optional.** A set of state filters when this notification should be triggered. By default everything is matched.
-  zone           |**Optional.** The zone this object is a member of.
-
-
-### <a id="objecttype-usergroup"></a> UserGroup
-
-A user group.
-
-> **Best Practice**
->
-> Assign user group members using the [group assign](#group-assign) rules.
-
-Example:
-
-    object UserGroup "icingaadmins" {
-        display_name = "Icinga 2 Admin Group"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  display_name    |**Optional.** A short description of the user group.
-  groups          |**Optional.** An array of nested group names.
-  zone           |**Optional.** The zone this object is a member of.
-
-
-
-### <a id="objecttype-checkcommand"></a> CheckCommand
-
-A check command definition. Additional default command custom attributes can be
-defined here.
-
-Example:
-
-    object CheckCommand "check_http" {
-      import "plugin-check-command"
-
-      command = [ PluginDir + "/check_http" ]
-
-      arguments = {
-        "-H" = "$http_vhost$"
-        "-I" = "$http_address$"
-        "-u" = "$http_uri$"
-        "-p" = "$http_port$"
-        "-S" = {
-          set_if = "$http_ssl$"
-        }
-        "--sni" = {
-          set_if = "$http_sni$"
-        }
-        "-a" = {
-          value = "$http_auth_pair$"
-          description = "Username:password on sites with basic authentication"
-        }
-        "--no-body" = {
-          set_if = "$http_ignore_body$"
-        }
-        "-r" = "$http_expect_body_regex$"
-        "-w" = "$http_warn_time$"
-        "-c" = "$http_critical_time$"
-        "-e" = "$http_expect$"
-      }
-
-      vars.http_address = "$address$"
-      vars.http_ssl = false
-      vars.http_sni = false
-    }
-
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  execute         |**Required.** The "execute" script method takes care of executing the check. In virtually all cases you should import the "plugin-check-command" template to take care of this setting.
-  command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command. When using the "arguments" attribute this must be an array.
-  env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
-  vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
-  timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
-  zone           |**Optional.** The zone this object is a member of.
-  arguments       |**Optional.** A dictionary of command arguments.
-
-
-#### <a id="objecttype-checkcommand-arguments"></a> CheckCommand Arguments
-
-Command arguments can be defined as key-value-pairs in the `arguments`
-dictionary. If the argument requires additional configuration for example
-a `description` attribute or an optional condition, the value can be defined
-as dictionary specifying additional options.
-
-Service:
-
-    vars.x_val = "My command argument value."
-    vars.have_x = "true"
-
-CheckCommand:
-
-    arguments = {
-      "-X" = {
-        value = "$x_val$"
-       key = "-Xnew"       /* optional, set a new key identifier */
-        description = "My plugin requires this argument for doing X."
-        required = false    /* optional, no error if not set */
-        skip_key = false    /* always use "-X <value>" */
-        set_if = "$have_x$" /* only set if variable defined and resolves to a numeric value. String values are not supported */
-        order = -1          /* first position */
-       repeat_key = true   /* if `value` is an array, repeat the key as parameter: ... 'key' 'value[0]' 'key' 'value[1]' 'key' 'value[2]' ... */
-      }
-      "-Y" = {
-        value = "$y_val$"
-        description = "My plugin requires this argument for doing Y."
-        required = false    /* optional, no error if not set */
-        skip_key = true     /* don't prefix "-Y" only use "<value>" */
-        set_if = "$have_y$" /* only set if variable defined and resolves to a numeric value. String values are not supported */
-        order = 0           /* second position */
-       repeat_key = false  /* if `value` is an array, do not repeat the key as parameter: ... 'key' 'value[0]' 'value[1]' 'value[2]' ... */
-      }
-    }
-
-  Option      | Description
-  ------------|--------------
-  value       | Optional argument value.
-  key        | Optional argument key overriding the key identifier.
-  description | Optional argument description.
-  required    | Required argument. Execution error if not set. Defaults to false (optional).
-  skip_key    | Use the value as argument and skip the key.
-  set_if      | Argument is added if the macro resolves to a defined numeric value. String values are not supported.
-  order       | Set if multiple arguments require a defined argument order.
-  repeat_key  | If the argument value is an array, repeat the argument key, or not. Defaults to true (repeat).
-
-Argument order:
-
-    `..., -3, -2, -1, <un-ordered keys>, 1, 2, 3, ...`
-
-Argument array `repeat_key = true`:
-
-    `'key' 'value[0]' 'key' 'value[1]' 'key' 'value[2]'`
-
-Argument array `repeat_key = false`:
-
-    `'key' 'value[0]' 'value[1]' 'value[2]'`
-
-
-### <a id="objecttype-notificationcommand"></a> NotificationCommand
-
-A notification command definition.
-
-Example:
-
-    object NotificationCommand "mail-service-notification" {
-      import "plugin-notification-command"
-
-      command = [
-        SysconfDir + "/icinga2/scripts/mail-notification.sh"
-      ]
-
-      env = {
-        NOTIFICATIONTYPE = "$notification.type$"
-        SERVICEDESC = "$service.name$"
-        HOSTALIAS = "$host.display_name$"
-        HOSTADDRESS = "$address$"
-        SERVICESTATE = "$service.state$"
-        LONGDATETIME = "$icinga.long_date_time$"
-        SERVICEOUTPUT = "$service.output$"
-        NOTIFICATIONAUTHORNAME = "$notification.author$"
-        NOTIFICATIONCOMMENT = "$notification.comment$"
-        HOSTDISPLAYNAME = "$host.display_name$"
-        SERVICEDISPLAYNAME = "$service.display_name$"
-        USEREMAIL = "$user.email$"
-      }
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  execute         |**Required.** The "execute" script method takes care of executing the notification. In virtually all cases you should import the "plugin-notification-command" template to take care of this setting.
-  command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
-  env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
-  vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
-  timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
-  zone           |**Optional.** The zone this object is a member of.
-  arguments       |**Optional.** A dictionary of command arguments.
-
-Command arguments can be used the same way as for [CheckCommand objects](#objecttype-checkcommand-arguments).
-
-
-### <a id="objecttype-eventcommand"></a> EventCommand
-
-An event command definition.
-
-Example:
-
-    object EventCommand "restart-httpd-event" {
-      import "plugin-event-command"
-
-      command = "/opt/bin/restart-httpd.sh"
-    }
-
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  execute         |**Required.** The "execute" script method takes care of executing the event handler. In virtually all cases you should import the "plugin-event-command" template to take care of this setting.
-  command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
-  env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
-  vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
-  timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
-  arguments       |**Optional.** A dictionary of command arguments.
-
-Command arguments can be used the same way as for [CheckCommand objects](#objecttype-checkcommand-arguments).
-
-
-### <a id="objecttype-notification"></a> Notification
-
-Notification objects are used to specify how users should be notified in case
-of host and service state changes and other events.
-
-> **Best Practice**
->
-> Rather than creating a `Notification` object for a specific host or service it is
-> usually easier to just create a `Notification` template and use the `apply` keyword
-> to assign the notification to a number of hosts or services. Use the `to` keyword
-> to set the specific target type for `Host` or `Service`.
-> Check the [notifications](#notifications) chapter for detailed examples.
-
-Example:
-
-    object Notification "localhost-ping-notification" {
-      host_name = "localhost"
-      service_name = "ping4"
-
-      command = "mail-notification"
-
-      users = [ "user1", "user2" ]
-
-      types = [ Problem, Recovery ]
-    }
-
-Attributes:
-
-  Name                      | Description
-  --------------------------|----------------
-  host_name                 | **Required.** The name of the host this notification belongs to.
-  service_name              | **Optional.** The short name of the service this notification belongs to. If omitted this notification object is treated as host notification.
-  vars                      | **Optional.** A dictionary containing custom attributes that are specific to this notification object.
-  users                     | **Optional.** A list of user names who should be notified.
-  user_groups               | **Optional.** A list of user group names who should be notified.
-  times                     | **Optional.** A dictionary containing `begin` and `end` attributes for the notification.
-  command                   | **Required.** The name of the notification command which should be executed when the notification is triggered.
-  interval                  | **Optional.** The notification interval (in seconds). This interval is used for active notifications. Defaults to 30 minutes. If set to 0, [re-notifications](#disable-renotification) are disabled.
-  period                    | **Optional.** The name of a time period which determines when this notification should be triggered. Not set by default.
-  zone                     |**Optional.** The zone this object is a member of.
-  types                     | **Optional.** A list of type filters when this notification should be triggered. By default everything is matched.
-  states                    | **Optional.** A list of state filters when this notification should be triggered. By default everything is matched.
-
-Available notification state filters:
-
-    OK
-    Warning
-    Critical
-    Unknown
-    Up
-    Down
-
-Available notification type filters:
-
-    DowntimeStart
-    DowntimeEnd
-    DowntimeRemoved
-    Custom
-    Acknowledgement
-    Problem
-    Recovery
-    FlappingStart
-    FlappingEnd
-
-
-
-### <a id="objecttype-timeperiod"></a> TimePeriod
-
-Time periods can be used to specify when hosts/services should be checked or to limit
-when notifications should be sent out.
-
-Example:
-
-    object TimePeriod "24x7" {
-      import "legacy-timeperiod"
-
-      display_name = "Icinga 2 24x7 TimePeriod"
-
-      ranges = {
-        monday = "00:00-24:00"
-        tuesday = "00:00-24:00"
-        wednesday = "00:00-24:00"
-        thursday = "00:00-24:00"
-        friday = "00:00-24:00"
-        saturday = "00:00-24:00"
-        sunday = "00:00-24:00"
-      }
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  display_name    |**Optional.** A short description of the time period.
-  update          |**Required.** The "update" script method takes care of updating the internal representation of the time period. In virtually all cases you should import the "legacy-timeperiod" template to take care of this setting.
-  zone           |**Optional.** The zone this object is a member of.
-  ranges          |**Required.** A dictionary containing information which days and durations apply to this timeperiod.
-
-The `/etc/icinga2/conf.d/timeperiods.conf` file is usually used to define
-timeperiods including this one.
-
-
-### <a id="objecttype-scheduleddowntime"></a> ScheduledDowntime
-
-ScheduledDowntime objects can be used to set up recurring downtimes for hosts/services.
-
-> **Best Practice**
->
-> Rather than creating a `ScheduledDowntime` object for a specific host or service it is usually easier
-> to just create a `ScheduledDowntime` template and use the `apply` keyword to assign the
-> scheduled downtime to a number of hosts or services. Use the `to` keyword to set the specific target
-> type for `Host` or `Service`.
-> Check the [recurring downtimes](#recurring-downtimes) example for details.
-
-Example:
-
-    object ScheduledDowntime "some-downtime" {
-      host_name = "localhost"
-      service_name = "ping4"
-
-      author = "icingaadmin"
-      comment = "Some comment"
-
-      fixed = false
-      duration = 30m
-
-      ranges = {
-        "sunday" = "02:00-03:00"
-      }
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  host_name       |**Required.** The name of the host this scheduled downtime belongs to.
-  service_name    |**Optional.** The short name of the service this scheduled downtime belongs to. If omitted this downtime object is treated as host downtime.
-  author          |**Required.** The author of the downtime.
-  comment         |**Required.** A comment for the downtime.
-  fixed           |**Optional.** Whether this is a fixed downtime. Defaults to true.
-  duration        |**Optional.** How long the downtime lasts. Only has an effect for flexible (non-fixed) downtimes.
-  zone           |**Optional.** The zone this object is a member of.
-  ranges          |**Required.** A dictionary containing information which days and durations apply to this timeperiod.
-
-ScheduledDowntime objects have composite names, i.e. their names are based
-on the `host_name` and `service_name` attributes and the
-name you specified. This means you can define more than one object
-with the same (short) name as long as one of the `host_name` and
-`service_name` attributes has a different value.
-
-
-### <a id="objecttype-dependency"></a> Dependency
-
-Dependency objects are used to specify dependencies between hosts and services. Dependencies
-can be defined as Host-to-Host, Service-to-Service, Service-to-Host, or Host-to-Service
-relations.
-
-> **Best Practice**
->
-> Rather than creating a `Dependency` object for a specific host or service it is usually easier
-> to just create a `Dependency` template and use the `apply` keyword to assign the
-> dependency to a number of hosts or services. Use the `to` keyword to set the specific target
-> type for `Host` or `Service`.
-> Check the [dependencies](#dependencies) chapter for detailed examples.
-
-Service-to-Service Example:
-
-    object Dependency "webserver-internet" {
-      parent_host_name = "internet"
-      parent_service_name = "ping4"
-
-      child_host_name = "webserver"
-      child_service_name = "ping4"
-
-      states = [ OK, Warning ]
-
-      disable_checks = true
-    }
-
-Host-to-Host Example:
-
-    object Dependency "webserver-internet" {
-      parent_host_name = "internet"
-
-      child_host_name = "webserver"
-
-      states = [ Up ]
-
-      disable_checks = true
-    }
-
-Attributes:
-
-  Name                  |Description
-  ----------------------|----------------
-  parent_host_name      |**Required.** The parent host.
-  parent_service_name   |**Optional.** The parent service. If omitted this dependency object is treated as host dependency.
-  child_host_name       |**Required.** The child host.
-  child_service_name    |**Optional.** The child service. If omitted this dependency object is treated as host dependency.
-  disable_checks        |**Optional.** Whether to disable checks when this dependency fails. Defaults to false.
-  disable_notifications |**Optional.** Whether to disable notifications when this dependency fails. Defaults to true.
-  period                |**Optional.** Time period during which this dependency is enabled.
-  zone                 |**Optional.** The zone this object is a member of.
-  states               |**Optional.** A list of state filters when this dependency should be OK. Defaults to [ OK, Warning ] for services and [ Up ] for hosts.
-
-Available state filters:
-
-    OK
-    Warning
-    Critical
-    Unknown
-    Up
-    Down
-
-When using [apply rules](#using-apply) for dependencies, you can leave out certain attributes which will be
-automatically determined by Icinga 2.
-
-Service-to-Host Dependency Example:
-
-    apply Dependency "internet" to Service {
-      parent_host_name = "dsl-router"
-      disable_checks = true
-
-      assign where host.name != "dsl-router"
-    }
-
-This example sets all service objects matching the assign condition into a dependency relation to
-the parent host object `dsl-router` as implicit child services.
-
-Service-to-Service-on-the-same-Host Dependency Example:
-
-    apply Dependency "disable-nrpe-checks" to Service {
-      parent_service_name = "nrpe-health"
-
-      assign where service.check_command == "nrpe"
-      ignore where service.name == "nrpe-health"
-    }
-
-This example omits the `parent_host_name` attribute and Icinga 2 automatically sets its value to the name of the
-host object matched by the apply rule condition. All services where apply matches are made implicit child services
-in this dependency relation.
-
-
-Dependency objects have composite names, i.e. their names are based on the `child_host_name` and `child_service_name` attributes and the
-name you specified. This means you can define more than one object with the same (short) name as long as one of the `child_host_name` and
-`child_service_name` attributes has a different value.
-
-
-### <a id="objecttype-perfdatawriter"></a> PerfdataWriter
-
-Writes check result performance data to a defined path using macro
-pattern consisting of custom attributes and runtime macros.
-
-Example:
-
-    library "perfdata"
-
-    object PerfdataWriter "pnp" {
-      host_perfdata_path = "/var/spool/icinga2/perfdata/host-perfdata"
-
-      service_perfdata_path = "/var/spool/icinga2/perfdata/service-perfdata"
-
-      host_format_template = "DATATYPE::HOSTPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tHOSTPERFDATA::$host.perfdata$\tHOSTCHECKCOMMAND::$host.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$"
-      service_format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tSERVICEDESC::$service.name$\tSERVICEPERFDATA::$service.perfdata$\tSERVICECHECKCOMMAND::$service.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$\tSERVICESTATE::$service.state$\tSERVICESTATETYPE::$service.state_type$"
-
-      rotation_interval = 15s
-    }
-
-Attributes:
-
-  Name                    |Description
-  ------------------------|----------------
-  host_perfdata\_path     |**Optional.** Path to the host performance data file. Defaults to LocalStateDir + "/spool/icinga2/perfdata/host-perfdata".
-  service_perfdata\_path  |**Optional.** Path to the service performance data file. Defaults to LocalStateDir + "/spool/icinga2/perfdata/service-perfdata".
-  host_temp\_path         |**Optional.** Path to the temporary host file. Defaults to LocalStateDir + "/spool/icinga2/tmp/host-perfdata".
-  service_temp\_path      |**Optional.** Path to the temporary service file. Defaults to LocalStateDir + "/spool/icinga2/tmp/service-perfdata".
-  host_format\_template   |**Optional.** Host Format template for the performance data file. Defaults to a template that's suitable for use with PNP4Nagios.
-  service_format\_template|**Optional.** Service Format template for the performance data file. Defaults to a template that's suitable for use with PNP4Nagios.
-  rotation\_interval      |**Optional.** Rotation interval for the files specified in `{host,service}_perfdata_path`. Defaults to 30 seconds.
-
-When rotating the performance data file the current UNIX timestamp is appended to the path specified
-in `host_perfdata_path` and `service_perfdata_path` to generate a unique filename.
-
-
-### <a id="objecttype-graphitewriter"></a> GraphiteWriter
-
-Writes check result metrics and performance data to a defined
-Graphite Carbon host.
-
-Example:
-
-    library "perfdata"
-
-    object GraphiteWriter "graphite" {
-      host = "127.0.0.1"
-      port = 2003
-    }
-
-Attributes:
-
-  Name                 |Description
-  ----------------------|----------------------
-  host                 |**Optional.** Graphite Carbon host address. Defaults to '127.0.0.1'.
-  port                 |**Optional.** Graphite Carbon port. Defaults to 2003.
-  host_name_template   |**Optional.** Metric prefix for host name. Defaults to "icinga.$host.name$".
-  service_name_template |**Optional.** Metric prefix for service name. Defaults to "icinga.$host.name$.$service.name$".
-
-Metric prefix names can be modified using [runtime macros](#runtime-macros).
-
-Example with your custom [global constant](#constants) `GraphiteEnv`:
-
-    const GraphiteEnv = "icinga.env1"
-
-    host_name_template = GraphiteEnv + ".$host.name$"
-    service_name_template = GraphiteEnv + ".$host.name$.$service.name$"
-
-### <a id="objecttype-gelfwriter"></a> GelfWriter
-
-Writes event log entries to a defined GELF receiver host (Graylog2, Logstash).
-
-Example:
-
-    library "perfdata"
-
-    object GelfWriter "gelf" {
-      host = "127.0.0.1"
-      port = 12201
-    }
-
-Attributes:
-
-  Name                 |Description
-  ----------------------|----------------------
-  host                 |**Optional.** GELF receiver host address. Defaults to '127.0.0.1'.
-  port                 |**Optional.** GELF receiver port. Defaults to `12201`.
-  source               |**Optional.** Source name for this instance. Defaults to `icinga2`.
-
-
-### <a id="objecttype-idomysqlconnection"></a> IdoMySqlConnection
-
-IDO database adapter for MySQL.
-
-Example:
-
-    library "db_ido_mysql"
-
-    object IdoMysqlConnection "mysql-ido" {
-      host = "127.0.0.1"
-      port = 3306
-      user = "icinga"
-      password = "icinga"
-      database = "icinga"
-      table_prefix = "icinga_"
-      instance_name = "icinga2"
-      instance_description = "icinga2 instance"
-
-      cleanup = {
-        downtimehistory_age = 48h
-        logentries_age = 31d
-      }
-
-      categories = DbCatConfig | DbCatState
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  host            |**Optional.** MySQL database host address. Defaults to "localhost".
-  port            |**Optional.** MySQL database port. Defaults to 3306.
-  socket_path     |**Optional.** MySQL socket path.
-  user            |**Optional.** MySQL database user with read/write permission to the icinga database. Defaults to "icinga".
-  password        |**Optional.** MySQL database user's password. Defaults to "icinga".
-  database        |**Optional.** MySQL database name. Defaults to "icinga".
-  table\_prefix   |**Optional.** MySQL database table prefix. Defaults to "icinga\_".
-  instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
-  instance\_description|**Optional.** Description for the Icinga 2 instance.
-  enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability-db-ido). Defaults to "true".
-  failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](#high-availability-db-ido). Must not be lower than 60s. Defaults to "60s".
-  cleanup         |**Optional.** Dictionary with items for historical table cleanup.
-  categories      |**Optional.** The types of information that should be written to the database.
-
-Cleanup Items:
-
-  Name            | Description
-  ----------------|----------------
-  acknowledgements_age |**Optional.** Max age for acknowledgements table rows (entry_time). Defaults to 0 (never).
-  commenthistory_age |**Optional.** Max age for commenthistory table rows (entry_time). Defaults to 0 (never).
-  contactnotifications_age |**Optional.** Max age for contactnotifications table rows (start_time). Defaults to 0 (never).
-  contactnotificationmethods_age |**Optional.** Max age for contactnotificationmethods table rows (start_time). Defaults to 0 (never).
-  downtimehistory_age |**Optional.** Max age for downtimehistory table rows (entry_time). Defaults to 0 (never).
-  eventhandlers_age |**Optional.** Max age for eventhandlers table rows (start_time). Defaults to 0 (never).
-  externalcommands_age |**Optional.** Max age for externalcommands table rows (entry_time). Defaults to 0 (never).
-  flappinghistory_age |**Optional.** Max age for flappinghistory table rows (event_time). Defaults to 0 (never).
-  hostchecks_age |**Optional.** Max age for hostalives table rows (start_time). Defaults to 0 (never).
-  logentries_age |**Optional.** Max age for logentries table rows (logentry_time). Defaults to 0 (never).
-  notifications_age |**Optional.** Max age for notifications table rows (start_time). Defaults to 0 (never).
-  processevents_age |**Optional.** Max age for processevents table rows (event_time). Defaults to 0 (never).
-  statehistory_age |**Optional.** Max age for statehistory table rows (state_time). Defaults to 0 (never).
-  servicechecks_age |**Optional.** Max age for servicechecks table rows (start_time). Defaults to 0 (never).
-  systemcommands_age |**Optional.** Max age for systemcommands table rows (start_time). Defaults to 0 (never).
-
-Data Categories:
-
-  Name                 | Description            | Required by
-  ---------------------|------------------------|--------------------
-  DbCatConfig          | Configuration data     | Icinga Web/Reporting
-  DbCatState           | Current state data     | Icinga Web/Reporting
-  DbCatAcknowledgement | Acknowledgements       | Icinga Web/Reporting
-  DbCatComment         | Comments               | Icinga Web/Reporting
-  DbCatDowntime        | Downtimes              | Icinga Web/Reporting
-  DbCatEventHandler    | Event handler data     | Icinga Web/Reporting
-  DbCatExternalCommand | External commands      | Icinga Web/Reporting
-  DbCatFlapping        | Flap detection data    | Icinga Web/Reporting
-  DbCatCheck           | Check results          | --
-  DbCatLog             | Log messages           | Icinga Web/Reporting
-  DbCatNotification    | Notifications          | Icinga Web/Reporting
-  DbCatProgramStatus   | Program status data    | Icinga Web/Reporting
-  DbCatRetention       | Retention data         | Icinga Web/Reporting
-  DbCatStateHistory    | Historical state data  | Icinga Web/Reporting
-
-Multiple categories can be combined using the `|` operator. In addition to
-the category flags listed above the `DbCatEverything` flag may be used as
-a shortcut for listing all flags.
-
-External interfaces like Icinga Web require everything except `DbCatCheck`
-which is the default value if `categories` is not set.
-
-### <a id="objecttype-idomysqlconnection"></a> IdoPgSqlConnection
-
-IDO database adapter for PostgreSQL.
-
-Example:
-
-    library "db_ido_pgsql"
-
-    object IdoMysqlConnection "pgsql-ido" {
-      host = "127.0.0.1"
-      port = 5432
-      user = "icinga"
-      password = "icinga"
-      database = "icinga"
-      table_prefix = "icinga_"
-      instance_name = "icinga2"
-      instance_description = "icinga2 instance"
-
-      cleanup = {
-        downtimehistory_age = 48h
-        logentries_age = 31d
-      }
-
-      categories = DbCatConfig | DbCatState
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  host            |**Optional.** PostgreSQL database host address. Defaults to "localhost".
-  port            |**Optional.** PostgreSQL database port. Defaults to "5432".
-  user            |**Optional.** PostgreSQL database user with read/write permission to the icinga database. Defaults to "icinga".
-  password        |**Optional.** PostgreSQL database user's password. Defaults to "icinga".
-  database        |**Optional.** PostgreSQL database name. Defaults to "icinga".
-  table\_prefix   |**Optional.** PostgreSQL database table prefix. Defaults to "icinga\_".
-  instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
-  instance\_description|**Optional.** Description for the Icinga 2 instance.
-  enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability-db-ido). Defaults to "true".
-  failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](#high-availability-db-ido). Must not be lower than 60s. Defaults to "60s".
-  cleanup         |**Optional.** Dictionary with items for historical table cleanup.
-  categories      |**Optional.** The types of information that should be written to the database.
-
-Cleanup Items:
-
-  Name            | Description
-  ----------------|----------------
-  acknowledgements_age |**Optional.** Max age for acknowledgements table rows (entry_time). Defaults to 0 (never).
-  commenthistory_age |**Optional.** Max age for commenthistory table rows (entry_time). Defaults to 0 (never).
-  contactnotifications_age |**Optional.** Max age for contactnotifications table rows (start_time). Defaults to 0 (never).
-  contactnotificationmethods_age |**Optional.** Max age for contactnotificationmethods table rows (start_time). Defaults to 0 (never).
-  downtimehistory_age |**Optional.** Max age for downtimehistory table rows (entry_time). Defaults to 0 (never).
-  eventhandlers_age |**Optional.** Max age for eventhandlers table rows (start_time). Defaults to 0 (never).
-  externalcommands_age |**Optional.** Max age for externalcommands table rows (entry_time). Defaults to 0 (never).
-  flappinghistory_age |**Optional.** Max age for flappinghistory table rows (event_time). Defaults to 0 (never).
-  hostchecks_age |**Optional.** Max age for hostalives table rows (start_time). Defaults to 0 (never).
-  logentries_age |**Optional.** Max age for logentries table rows (logentry_time). Defaults to 0 (never).
-  notifications_age |**Optional.** Max age for notifications table rows (start_time). Defaults to 0 (never).
-  processevents_age |**Optional.** Max age for processevents table rows (event_time). Defaults to 0 (never).
-  statehistory_age |**Optional.** Max age for statehistory table rows (state_time). Defaults to 0 (never).
-  servicechecks_age |**Optional.** Max age for servicechecks table rows (start_time). Defaults to 0 (never).
-  systemcommands_age |**Optional.** Max age for systemcommands table rows (start_time). Defaults to 0 (never).
-
-Data Categories:
-
-  Name                 | Description            | Required by
-  ---------------------|------------------------|--------------------
-  DbCatConfig          | Configuration data     | Icinga Web/Reporting
-  DbCatState           | Current state data     | Icinga Web/Reporting
-  DbCatAcknowledgement | Acknowledgements       | Icinga Web/Reporting
-  DbCatComment         | Comments               | Icinga Web/Reporting
-  DbCatDowntime        | Downtimes              | Icinga Web/Reporting
-  DbCatEventHandler    | Event handler data     | Icinga Web/Reporting
-  DbCatExternalCommand | External commands      | Icinga Web/Reporting
-  DbCatFlapping        | Flap detection data    | Icinga Web/Reporting
-  DbCatCheck           | Check results          | --
-  DbCatLog             | Log messages           | Icinga Web/Reporting
-  DbCatNotification    | Notifications          | Icinga Web/Reporting
-  DbCatProgramStatus   | Program status data    | Icinga Web/Reporting
-  DbCatRetention       | Retention data         | Icinga Web/Reporting
-  DbCatStateHistory    | Historical state data  | Icinga Web/Reporting
-
-Multiple categories can be combined using the `|` operator. In addition to
-the category flags listed above the `DbCatEverything` flag may be used as
-a shortcut for listing all flags.
-
-External interfaces like Icinga Web require everything except `DbCatCheck`
-which is the default value if `categories` is not set.
-
-### <a id="objecttype-livestatuslistener"></a> LiveStatusListener
-
-Livestatus API interface available as TCP or UNIX socket. Historical table queries
-require the `CompatLogger` feature enabled pointing to the log files using the
-`compat_log_path` configuration attribute.
-
-Example:
-
-    library "livestatus"
-
-    object LivestatusListener "livestatus-tcp" {
-      socket_type = "tcp"
-      bind_host = "127.0.0.1"
-      bind_port = "6558"
-    }
-
-    object LivestatusListener "livestatus-unix" {
-      socket_type = "unix"
-      socket_path = "/var/run/icinga2/cmd/livestatus"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  socket\_type      |**Optional.** Specifies the socket type. Can be either "tcp" or "unix". Defaults to "unix".
-  bind\_host        |**Optional.** Only valid when socket\_type is "tcp". Host address to listen on for connections. Defaults to "127.0.0.1".
-  bind\_port        |**Optional.** Only valid when `socket_type` is "tcp". Port to listen on for connections. Defaults to 6558.
-  socket\_path      |**Optional.** Only valid when `socket_type` is "unix". Specifies the path to the UNIX socket file. Defaults to RunDir + "/icinga2/cmd/livestatus".
-  compat\_log\_path |**Optional.** Required for historical table queries. Requires `CompatLogger` feature enabled. Defaults to LocalStateDir + "/log/icinga2/compat"
-
-> **Note**
->
-> UNIX sockets are not supported on Windows.
-
-### <a id="objecttype-statusdatawriter"></a> StatusDataWriter
-
-Periodically writes status data files which are used by the Classic UI and other third-party tools.
-
-Example:
-
-    library "compat"
-
-    object StatusDataWriter "status" {
-        status_path = "/var/cache/icinga2/status.dat"
-        objects_path = "/var/cache/icinga2/objects.cache"
-        update_interval = 30s
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  status\_path    |**Optional.** Path to the status.dat file. Defaults to LocalStateDir + "/cache/icinga2/status.dat".
-  objects\_path   |**Optional.** Path to the objects.cache file. Defaults to LocalStateDir + "/cache/icinga2/objects.cache".
-  update\_interval|**Optional.** The interval in which the status files are updated. Defaults to 15 seconds.
-
-
-### <a id="objecttype-externalcommandlistener"></a> ExternalCommandListener
-
-Implements the Icinga 1.x command pipe which can be used to send commands to Icinga.
-
-Example:
-
-    library "compat"
-
-    object ExternalCommandListener "external" {
-        command_path = "/var/run/icinga2/cmd/icinga2.cmd"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  command\_path   |**Optional.** Path to the command pipe. Defaults to RunDir + "/icinga2/cmd/icinga2.cmd".
-
-### <a id="objecttype-compatlogger"></a> CompatLogger
-
-Writes log files in a format that's compatible with Icinga 1.x.
-
-Example:
-
-    library "compat"
-
-    object CompatLogger "my-log" {
-      log_dir = "/var/log/icinga2/compat"
-      rotation_method = "HOURLY"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  log\_dir        |**Optional.** Path to the compat log directory. Defaults to LocalStateDir + "/log/icinga2/compat".
-  rotation\_method|**Optional.** Specifies when to rotate log files. Can be one of "HOURLY", "DAILY", "WEEKLY" or "MONTHLY". Defaults to "HOURLY".
-
-
-### <a id="objecttype-checkresultreader"></a> CheckResultReader
-
-Reads Icinga 1.x check results from a directory. This functionality is provided
-to help existing Icinga 1.x users and might be useful for certain cluster
-scenarios.
-
-Example:
-
-    library "compat"
-
-    object CheckResultReader "reader" {
-      spool_dir = "/data/check-results"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  spool\_dir      |**Optional.** The directory which contains the check result files. Defaults to LocalStateDir + "/lib/icinga2/spool/checkresults/".
-
-
-### <a id="objecttype-checkcomponent"></a> CheckerComponent
-
-The checker component is responsible for scheduling active checks. There are no configurable options.
-
-Example:
-
-    library "checker"
-
-    object CheckerComponent "checker" { }
-
-Can be enabled/disabled using
-
-    # icinga2 feature enable checker
-
-
-### <a id="objecttype-notificationcomponent"></a> NotificationComponent
-
-The notification component is responsible for sending notifications. There are no configurable options.
-
-Example:
-
-    library "notification"
-
-    object NotificationComponent "notification" { }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability). Defaults to "true".
-
-
-Can be enabled/disabled using
-
-    # icinga2 feature enable notification
-
-
-### <a id="objecttype-filelogger"></a> FileLogger
-
-Specifies Icinga 2 logging to a file.
-
-Example:
-
-    object FileLogger "debug-file" {
-      severity = "debug"
-      path = "/var/log/icinga2/debug.log"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  path            |**Required.** The log path.
-  severity        |**Optional.** The minimum severity for this log. Can be "debug", "notice", "information", "warning" or "critical". Defaults to "information".
-
-
-### <a id="objecttype-sysloglogger"></a> SyslogLogger
-
-Specifies Icinga 2 logging to syslog.
-
-Example:
-
-    object SyslogLogger "crit-syslog" {
-      severity = "critical"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  severity        |**Optional.** The minimum severity for this log. Can be "debug", "notice", "information", "notice", "warning" or "critical". Defaults to "warning".
-
-
-
-### <a id="objecttype-icingastatuswriter"></a> IcingaStatusWriter
-
-The IcingaStatusWriter feature periodically dumps the current status
-and performance data from Icinga 2 and all registered features into
-a defined JSON file.
-
-Example:
-
-    object IcingaStatusWriter "status" {
-      status_path = LocalStateDir + "/cache/icinga2/status.json"
-      update_interval = 15s
-    }
-
-Attributes:
-
-  Name                      |Description
-  --------------------------|--------------------------
-  status\_path              |**Optional.** Path to cluster status file. Defaults to LocalStateDir + "/cache/icinga2/status.json"
-  update\_interval          |**Optional.** The interval in which the status files are updated. Defaults to 15 seconds.
-
-
-### <a id="objecttype-apilistener"></a> ApiListener
-
-ApiListener objects are used for distributed monitoring setups
-specifying the certificate files used for ssl authorization.
-
-The `NodeName` constant must be defined in [constants.conf](#constants-conf).
-
-Example:
-
-    object ApiListener "api" {
-      cert_path = SysconfDir + "/icinga2/pki/" + NodeName + ".crt"
-      key_path = SysconfDir + "/icinga2/pki/" + NodeName + ".key"
-      ca_path = SysconfDir + "/icinga2/pki/ca.crt"
-    }
-
-
-Attributes:
-
-  Name                      |Description
-  --------------------------|--------------------------
-  cert\_path                |**Required.** Path to the public key.
-  key\_path                 |**Required.** Path to the private key.
-  ca\_path                  |**Required.** Path to the CA certificate file.
-  crl\_path                 |**Optional.** Path to the CRL file.
-  bind\_host                |**Optional.** The IP address the api listener should be bound to. Defaults to `0.0.0.0`.
-  bind\_port                |**Optional.** The port the api listener should be bound to. Defaults to `5665`.
-  accept\_config            |**Optional.** Accept zone configuration. Defaults to `false`.
-  accept\_commands          |**Optional.** Accept remote commands. Defaults to `false`.
-
-
-### <a id="objecttype-endpoint"></a> Endpoint
-
-Endpoint objects are used to specify connection information for remote
-Icinga 2 instances.
-
-Example:
-
-    object Endpoint "icinga2b" {
-      host = "192.168.5.46"
-      port = 5665
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  host            |**Optional.** The hostname/IP address of the remote Icinga 2 instance.
-  port            |**Optional.** The service name/port of the remote Icinga 2 instance. Defaults to `5665`.
-  log_duration    |**Optional.** Duration for keeping replay logs on connection loss. Defaults to `1d`.
-
-
-### <a id="objecttype-zone"></a> Zone
-
-Zone objects are used to specify which Icinga 2 instances are located in a zone.
-All zone endpoints elect one active master instance among them (required for High-Availability setups).
-
-Example:
-
-    object Zone "config-ha-master" {
-      endpoints = [ "icinga2a", "icinga2b" ]
-
-    }
-
-    object Zone "check-satellite" {
-      endpoints = [ "icinga2c" ]
-      parent = "config-ha-master"
-    }
-
-Attributes:
-
-  Name            |Description
-  ----------------|----------------
-  endpoints       |**Optional.** Dictionary with endpoints located in this zone.
-  parent          |**Optional.** Parent zone.
-
-
-
-## <a id="icinga-template-library"></a> Icinga Template Library
-
-### <a id="itl-overview"></a> Overview
-
-The Icinga Template Library (ITL) implements standard templates and object
-definitions for commonly used services.
-
-You can include the ITL by using the `include` directive in your configuration
-file:
-
-    include <itl>
-
-### <a id="itl-generic-templates"></a> Generic Templates
-
-These templates are imported by the provided example configuration.
-
-#### <a id="itl-plugin-check-command"></a> plugin-check-command
-
-Command template for check plugins executed by Icinga 2.
-
-The `plugin-check-command` command does not support any vars.
-
-#### <a id="itl-plugin-notification-command"></a> plugin-notification-command
-
-Command template for notification scripts executed by Icinga 2.
-
-The `plugin-notification-command` command does not support any vars.
-
-#### <a id="itl-plugin-event-command"></a> plugin-event-command
-
-Command template for event handler scripts executed by Icinga 2.
-
-The `plugin-event-command` command does not support any vars.
-
-### <a id="itl-check-commands"></a> Check Commands
-
-These check commands are embedded into Icinga 2 and do not require any external
-plugin scripts.
-
-#### <a id="itl-icinga"></a> icinga
-
-Check command for the built-in `icinga` check. This check returns performance
-data for the current Icinga instance.
-
-The `icinga` check command does not support any vars.
-
-#### <a id="itl-icinga-cluster"></a> cluster
-
-Check command for the built-in `cluster` check. This check returns performance
-data for the current Icinga instance and connected endpoints.
-
-The `cluster` check command does not support any vars.
-
-#### <a id="itl-icinga-cluster-zone"></a> cluster-zone
-
-Check command for the built-in `cluster-zone` check.
-
-Cluster Attributes:
-
-Name         | Description
--------------|---------------
-cluster_zone | **Optional.** The zone name. Defaults to "$host.name$".
-
-## <a id="plugin-check-commands"></a> Plugin Check Commands
-
-### <a id="plugin-check-command-overview"></a> Overview
-
-The Plugin Check Commands provides example configuration for plugin check commands
-provided by the Monitoring Plugins project.
-
-You can include the plugin check command definitions by using the `include`
-directive in your configuration file:
-
-    include <plugins>
-
-The plugin check commands assume that there's a global constant named `PluginDir`
-which contains the path of the plugins from the Monitoring Plugins project.
-
-
-#### <a id="plugin-check-command-ping4"></a> ping4
-
-Check command object for the `check_ping` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-ping_address    | **Optional.** The host's IPv4 address. Defaults to "$address$".
-ping_wrta       | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
-ping_wpl        | **Optional.** The packet loss warning threshold in %. Defaults to 5.
-ping_crta       | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
-ping_cpl        | **Optional.** The packet loss critical threshold in %. Defaults to 15.
-ping_packets    | **Optional.** The number of packets to send. Defaults to 5.
-ping_timeout    | **Optional.** The plugin timeout in seconds. Defaults to 0 (no timeout).
-
-#### <a id="plugin-check-command-ping6"></a> ping6
-
-Check command object for the `check_ping` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-ping_address    | **Optional.** The host's IPv6 address. Defaults to "$address6$".
-ping_wrta       | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
-ping_wpl        | **Optional.** The packet loss warning threshold in %. Defaults to 5.
-ping_crta       | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
-ping_cpl        | **Optional.** The packet loss critical threshold in %. Defaults to 15.
-ping_packets    | **Optional.** The number of packets to send. Defaults to 5.
-ping_timeout    | **Optional.** The plugin timeout in seconds. Defaults to 0 (no timeout).
-
-#### <a id="plugin-check-command-hostalive"></a> hostalive
-
-Check command object for the `check_ping` plugin with host check default values.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-ping_address    | **Optional.** The host's IPv4 address. Defaults to "$address$".
-ping_wrta       | **Optional.** The RTA warning threshold in milliseconds. Defaults to 3000.
-ping_wpl        | **Optional.** The packet loss warning threshold in %. Defaults to 80.
-ping_crta       | **Optional.** The RTA critical threshold in milliseconds. Defaults to 5000.
-ping_cpl        | **Optional.** The packet loss critical threshold in %. Defaults to 100.
-ping_packets    | **Optional.** The number of packets to send. Defaults to 5.
-ping_timeout    | **Optional.** The plugin timeout in seconds. Defaults to 0 (no timeout).
-
-#### <a id="plugin-check-command-fping4"></a> fping4
-
-Check command object for the `check_fping` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-fping_address   | **Optional.** The host's IPv4 address. Defaults to "$address$".
-fping_wrta      | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
-fping_wpl       | **Optional.** The packet loss warning threshold in %. Defaults to 5.
-fping_crta      | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
-fping_cpl       | **Optional.** The packet loss critical threshold in %. Defaults to 15.
-fping_number    | **Optional.** The number of packets to send. Defaults to 5.
-fping_interval  | **Optional.** The interval between packets in milli-seconds. Defaults to 500.
-fping_bytes    | **Optional.** The size of ICMP packet.
-fping_target_timeout | **Optional.** The target timeout in milli-seconds.
-fping_source_ip | **Optional.** The name or ip address of the source ip.
-fping_source_interface | **Optional.** The source interface name.
-
-#### <a id="plugin-check-command-fping6"></a> fping6
-
-Check command object for the `check_fping` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-fping_address   | **Optional.** The host's IPv6 address. Defaults to "$address6$".
-fping_wrta      | **Optional.** The RTA warning threshold in milliseconds. Defaults to 100.
-fping_wpl       | **Optional.** The packet loss warning threshold in %. Defaults to 5.
-fping_crta      | **Optional.** The RTA critical threshold in milliseconds. Defaults to 200.
-fping_cpl       | **Optional.** The packet loss critical threshold in %. Defaults to 15.
-fping_number    | **Optional.** The number of packets to send. Defaults to 5.
-fping_interval  | **Optional.** The interval between packets in milli-seconds. Defaults to 500.
-fping_bytes    | **Optional.** The size of ICMP packet.
-fping_target_timeout | **Optional.** The target timeout in milli-seconds.
-fping_source_ip | **Optional.** The name or ip address of the source ip.
-fping_source_interface | **Optional.** The source interface name.
-
-
-#### <a id="plugin-check-command-dummy"></a> dummy
-
-Check command object for the `check_dummy` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-dummy_state     | **Optional.** The state. Can be one of 0 (ok), 1 (warning), 2 (critical) and 3 (unknown). Defaults to 0.
-dummy_text      | **Optional.** Plugin output. Defaults to "Check was successful.".
-
-#### <a id="plugin-check-command-passive"></a> passive
-
-Specialised check command object for passive checks executing the `check_dummy` plugin with appropriate default values.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-dummy_state     | **Optional.** The state. Can be one of 0 (ok), 1 (warning), 2 (critical) and 3 (unknown). Defaults to 3.
-dummy_text      | **Optional.** Plugin output. Defaults to "No Passive Check Result Received.".
-
-#### <a id="plugin-check-command-tcp"></a> tcp
-
-Check command object for the `check_tcp` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-tcp_address     | **Optional.** The host's address. Defaults to "$address$".
-tcp_port        | **Required.** The port that should be checked.
-
-#### <a id="plugin-check-command-ssl"></a> ssl
-
-Check command object for the `check_tcp` plugin, using ssl-related options.
-
-Custom Attributes:
-
-Name                          | Description
-------------------------------|--------------
-ssl_address                   | **Optional.** The host's address. Defaults to "$address$".
-ssl_port                      | **Required.** The port that should be checked.
-ssl_timeout                   | **Optional.** Timeout in seconds for the connect and handshake. The plugin default is 10 seconds.
-ssl_cert_valid_days_warn      | **Optional.** Warning threshold for days before the certificate will expire. When used, ssl_cert_valid_days_critical must also be set.
-ssl_cert_valid_days_critical  | **Optional.** Critical threshold for days before the certificate will expire. When used, ssl_cert_valid_days_warn must also be set.
-
-#### <a id="plugin-check-command-udp"></a> udp
-
-Check command object for the `check_udp` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-udp_address     | **Optional.** The host's address. Defaults to "$address$".
-udp_port        | **Required.** The port that should be checked.
-
-#### <a id="plugin-check-command-http"></a> http
-
-Check command object for the `check_http` plugin.
-
-Custom Attributes:
-
-Name                     | Description
--------------------------|--------------
-http_address             | **Optional.** The host's address. Defaults to "$address".
-http_vhost               | **Optional.** The virtual host that should be sent in the "Host" header.
-http_uri                 | **Optional.** The request URI.
-http_port                | **Optional.** The TCP port. Defaults to 80 when not using SSL, 443 otherwise.
-http_ssl                 | **Optional.** Whether to use SSL. Defaults to false.
-http_sni                 | **Optional.** Whether to use SNI. Defaults to false.
-http_auth_pair           | **Optional.** Add 'username:password' authorization pair.
-http_proxy_auth_pair     | **Optional.** Add 'username:password' authorization pair for proxy.
-http_ignore_body         | **Optional.** Don't download the body, just the headers.
-http_linespan            | **Optional.** Allow regex to span newline.
-http_expect_body_regex   | **Optional.** A regular expression which the body must match against. Incompatible with http_ignore_body.
-http_expect_body_eregi   | **Optional.** A case-insensitive expression which the body must match against. Incompatible with http_ignore_body.
-http_invertregex         | **Optional.** Changes behaviour of http_expect_body_regex and http_expect_body_eregi to return CRITICAL if found, OK if not.
-http_warn_time           | **Optional.** The warning threshold.
-http_critical_time       | **Optional.** The critical threshold.
-http_expect              | **Optional.** Comma-delimited list of strings, at least one of them is expected in the first (status) line of the server response. Default: HTTP/1.
-http_certificate         | **Optional.** Minimum number of days a certificate has to be valid. Port defaults to 443.
-http_clientcert          | **Optional.** Name of file contains the client certificate (PEM format).
-http_privatekey          | **Optional.** Name of file contains the private key (PEM format).
-http_headerstring        | **Optional.** String to expect in the response headers.
-http_string              | **Optional.** String to expect in the content.
-http_post                | **Optional.** URL encoded http POST data.
-http_method              | **Optional.** Set http method (for example: HEAD, OPTIONS, TRACE, PUT, DELETE).
-http_maxage              | **Optional.** Warn if document is more than seconds old.
-http_contenttype         | **Optional.** Specify Content-Type header when POSTing.
-http_useragent           | **Optional.** String to be sent in http header as User Agent.
-http_header              | **Optional.** Any other tags to be sent in http header.
-http_extendedperfdata    | **Optional.** Print additional perfdata. Defaults to "false".
-http_onredirect          | **Optional.** How to handle redirect pages. Possible values: "ok" (default), "warning", "critical", "follow", "sticky" (like follow but stick to address), "stickyport" (like sticky but also to port)
-http_pagesize            | **Optional.** Minimum page size required:Maximum page size required.
-http_timeout             | **Optional.** Seconds before connection times out.
-
-
-#### <a id="plugin-check-command-ftp"></a> ftp
-
-Check command object for the `check_ftp` plugin.
-
-Custom Attributes:
-
-Name               | Description
--------------------|--------------
-ftp_address        | **Optional.** The host's address. Defaults to "$address$".
-
-#### <a id="plugin-check-command-smtp"></a> smtp
-
-Check command object for the `check_smtp` plugin.
-
-Custom Attributes:
-
-Name                 | Description
----------------------|--------------
-smtp_address         | **Optional.** The host's address. Defaults to "$address$".
-smtp_port            | **Optional.** The port that should be checked. Defaults to 25.
-smtp_mail_from       | **Optional.** Test a MAIL FROM command with the given email address.
-
-#### <a id="plugin-check-command-ssmtp"></a> ssmtp
-
-Check command object for the `check_ssmtp` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-ssmtp_address   | **Required.** The host's address. Defaults to "$address$".
-ssmtp_port      | **Optional.** The port that should be checked. Defaults to 465.
-ssmtp_mail_from | **Optional.** Test a MAIL FROM command with the given email address.
-
-#### <a id="plugin-check-command-imap"></a> imap
-
-Check command object for the `check_imap` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-imap_address    | **Optional.** The host's address. Defaults to "$address$".
-imap_port       | **Optional.** The port that should be checked. Defaults to 143.
-
-#### <a id="plugin-check-command-simap"></a> simap
-
-Check command object for the `check_simap` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-simap_address   | **Optional.** The host's address. Defaults to "$address$".
-simap_port      | **Optional.** The host's port.
-
-#### <a id="plugin-check-command-pop"></a> pop
-
-Check command object for the `check_pop` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-pop_address     | **Optional.** The host's address. Defaults to "$address$".
-pop_port        | **Optional.** The port that should be checked. Defaults to 110.
-
-#### <a id="plugin-check-command-spop"></a> spop
-
-Check command object for the `check_spop` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-spop_address    | **Optional.** The host's address. Defaults to "$address$".
-spop_port       | **Optional.** The host's port.
-
-#### <a id="plugin-check-command-ntp-time"></a> ntp_time
-
-Check command object for the `check_ntp_time` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-ntp_address     | **Optional.** The host's address. Defaults to "$address$".
-
-#### <a id="plugin-check-command-ssh"></a> ssh
-
-Check command object for the `check_ssh` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-ssh_address     | **Optional.** The host's address. Defaults to "$address$".
-ssh_port        | **Optional.** The port that should be checked. Defaults to 22.
-ssh_timeout     | **Optional.** Seconds before connection times out. Defaults to 10.
-
-#### <a id="plugin-check-command-disk"></a> disk
-
-Check command object for the `check_disk` plugin.
-
-Custom Attributes:
-
-Name                   | Description
-------------------------|------------------------
-disk_wfree             | **Optional.** The free space warning threshold in %. Defaults to 20.
-disk_cfree             | **Optional.** The free space critical threshold in %. Defaults to 10.
-disk_inode_wfree       | **Optional.** The free inode warning threshold.
-disk_inode_cfree       | **Optional.** The free inode critical threshold.
-disk_partition         | **Optional.** The partition. **Deprecated in 2.3.**
-disk_partition_excluded | **Optional.** The excluded partition. **Deprecated in 2.3.**
-disk_partitions                | **Optional.** The partition(s). Multiple partitions must be defined as array.
-disk_partitions_excluded | **Optional.** The excluded partition(s). Multiple partitions must be defined as array.
-
-#### <a id="plugin-check-command-users"></a> users
-
-Check command object for the `check_users` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-users_wgreater  | **Optional.** The user count warning threshold. Defaults to 20.
-users_cgreater  | **Optional.** The user count critical threshold. Defaults to 50.
-
-#### <a id="plugin-check-command-processes"></a> procs
-
-Check command object for the `check_procs` plugin.
-
-Custom Attributes:
-
-Name                 | Description
----------------------|--------------
-procs_warning        | **Optional.** The process count warning threshold. Defaults to 250.
-procs_critical       | **Optional.** The process count critical threshold. Defaults to 400.
-procs_metric         | **Optional.** Check thresholds against metric.
-procs_timeout        | **Optional.** Seconds before plugin times out.
-procs_traditional    | **Optional.** Filter own process the traditional way by PID instead of /proc/pid/exe. Defaults to "false".
-procs_state          | **Optional.** Only scan for processes that have one or more of the status flags you specify.
-procs_ppid           | **Optional.** Only scan for children of the parent process ID indicated.
-procs_vsz            | **Optional.** Only scan for processes with VSZ higher than indicated.
-procs_rss            | **Optional.** Only scan for processes with RSS higher than indicated.
-procs_pcpu           | **Optional.** Only scan for processes with PCPU higher than indicated.
-procs_user           | **Optional.** Only scan for processes with user name or ID indicated.
-procs_argument       | **Optional.** Only scan for processes with args that contain STRING.
-procs_argument_regex | **Optional.** Only scan for processes with args that contain the regex STRING.
-procs_command        | **Optional.** Only scan for exact matches of COMMAND (without path).
-procs_nokthreads     | **Optional.** Only scan for non kernel threads. Defaults to "false".
-
-#### <a id="plugin-check-command-swap"></a> swap
-
-Check command object for the `check_swap` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-swap_wfree      | **Optional.** The free swap space warning threshold in %. Defaults to 50.
-swap_cfree      | **Optional.** The free swap space critical threshold in %. Defaults to 25.
-
-#### <a id="plugin-check-command-load"></a> load
-
-Check command object for the `check_load` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-load_wload1     | **Optional.** The 1-minute warning threshold. Defaults to 5.
-load_wload5     | **Optional.** The 5-minute warning threshold. Defaults to 4.
-load_wload15    | **Optional.** The 15-minute warning threshold. Defaults to 3.
-load_cload1     | **Optional.** The 1-minute critical threshold. Defaults to 10.
-load_cload5     | **Optional.** The 5-minute critical threshold. Defaults to 6.
-load_cload15    | **Optional.** The 15-minute critical threshold. Defaults to 4.
-
-#### <a id="plugin-check-command-snmp"></a> snmp
-
-Check command object for the `check_snmp` plugin.
-
-Custom Attributes:
-
-Name                | Description
---------------------|--------------
-snmp_address        | **Optional.** The host's address. Defaults to "$address$".
-snmp_oid            | **Required.** The SNMP OID.
-snmp_community      | **Optional.** The SNMP community. Defaults to "public".
-snmp_warn           | **Optional.** The warning threshold.
-snmp_crit           | **Optional.** The critical threshold.
-snmp_string         | **Optional.** Return OK state if the string matches exactly with the output value
-snmp_ereg           | **Optional.** Return OK state if extended regular expression REGEX matches with the output value
-snmp_eregi          | **Optional.** Return OK state if case-insensitive extended REGEX matches with the output value
-snmp_label          | **Optional.** Prefix label for output value
-snmp_invert_search  | **Optional.** Invert search result and return CRITICAL state if found
-snmp_units          | **Optional.** Units label(s) for output value (e.g., 'sec.').
-snmp_timeout        | **Optional.** The command timeout in seconds. Defaults to 10 seconds.
-
-#### <a id="plugin-check-command-snmp"></a> snmpv3
-
-Check command object for the `check_snmp` plugin, using SNMPv3 authentication and encryption options.
-
-Custom Attributes:
-
-Name              | Description
-------------------|--------------
-snmpv3_address    | **Optional.** The host's address. Defaults to "$address$".
-snmpv3_user       | **Required.** The username to log in with.
-snmpv3_auth_alg   | **Optional.** The authentication algorithm. Defaults to SHA.
-snmpv3_auth_key   | **Required.** The authentication key.
-snmpv3_priv_alg   | **Optional.** The encryption algorithm. Defaults to AES.
-snmpv3_priv_key   | **Required.** The encryption key.
-snmpv3_oid        | **Required.** The SNMP OID.
-snmpv3_warn       | **Optional.** The warning threshold.
-snmpv3_crit       | **Optional.** The critical threshold.
-snmpv3_label      | **Optional.** Prefix label for output value.
-
-#### <a id="plugin-check-command-snmp-uptime"></a> snmp-uptime
-
-Check command object for the `check_snmp` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-snmp_address    | **Optional.** The host's address. Defaults to "$address$".
-snmp_oid        | **Optional.** The SNMP OID. Defaults to "1.3.6.1.2.1.1.3.0".
-snmp_community  | **Optional.** The SNMP community. Defaults to "public".
-
-#### <a id="plugin-check-command-dns"></a> dns
-
-Check command object for the `check_dns` plugin.
-
-Custom Attributes:
-
-Name                 | Description
----------------------|--------------
-dns_lookup           | **Optional.** The hostname or IP to query the DNS for. Defaults to $host_name$.
-dns_server           | **Optional.** The DNS server to query. Defaults to the server configured in the OS.
-dns_expected_answer  | **Optional.** The answer to look for. A hostname must end with a dot. **Deprecated in 2.3.**
-dns_expected_answers | **Optional.** The answer(s) to look for. A hostname must end with a dot. Multiple answers must be defined as array.
-dns_authoritative    | **Optional.** Expect the server to send an authoritative answer.
-
-#### <a id="plugin-check-command-dig"></a> dig
-
-Check command object for the `check_dig` plugin.
-
-Custom Attributes:
-
-Name                 | Description
----------------------|--------------
-dig_server           | **Optional.** The DNS server to query. Defaults to "127.0.0.1".
-dig_lookup           | **Optional.** The address that should be looked up.
-
-#### <a id="plugin-check-command-dhcp"></a> dhcp
-
-Check command object for the `check_dhcp` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-dhcp_serverip   | **Optional.** The IP address of the DHCP server which we should get a response from.
-dhcp_requestedip| **Optional.** The IP address which we should be offered by a DHCP server.
-dhcp_timeout    | **Optional.** The timeout in seconds.
-dhcp_interface  | **Optional.** The interface to use.
-dhcp_mac        | **Optional.** The MAC address to use in the DHCP request.
-dhcp_unicast    | **Optional.** Whether to use unicast requests. Defaults to false.
-
-#### <a id="plugin-check-command-nscp"></a> nscp
-
-Check command object for the `check_nt` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-nscp_address    | **Optional.** The host's address. Defaults to "$address$".
-nscp_port       | **Optional.** The NSClient++ port. Defaults to 12489.
-nscp_password   | **Optional.** The NSClient++ password.
-nscp_variable   | **Required.** The variable that should be checked.
-nscp_params     | **Optional.** Parameters for the query. Multiple parameters must be defined as array.
-nscp_warn       | **Optional.** The warning threshold.
-nscp_crit       | **Optional.** The critical threshold.
-nscp_timeout    | **Optional.** The query timeout in seconds.
-
-#### <a id="plugin-check-command-by-ssh"></a> by_ssh
-
-Check command object for the `check_by_ssh` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-by_ssh_address  | **Optional.** The host's address. Defaults to "$address$".
-by_ssh_port     | **Optional.** The SSH port. Defaults to 22.
-by_ssh_command  | **Optional.** The command that should be executed.
-by_ssh_logname  | **Optional.** The SSH username.
-by_ssh_identity | **Optional.** The SSH identity.
-by_ssh_quiet    | **Optional.** Whether to suppress SSH warnings. Defaults to false.
-by_ssh_warn     | **Optional.** The warning threshold.
-by_ssh_crit     | **Optional.** The critical threshold.
-by_ssh_timeout  | **Optional.** The timeout in seconds.
-
-#### <a id="plugin-check-command-ups"></a> ups
-
-Check command object for the `check_ups` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-ups_address     | **Optional.** The host's address. Defaults to "$address$".
-ups_name        | **Optional.** The UPS name. Defaults to `ups`.
-
-
-#### <a id="plugin-check-command-nrpe"></a> nrpe
-
-Check command object for the `check_nrpe` plugin.
-
-Custom Attributes:
-
-Name            | Description
-----------------|--------------
-nrpe_address    | **Optional.** The host's address. Defaults to "$address$".
-nrpe_port       | **Optional.** The NRPE port. Defaults to 5668.
-nrpe_command    | **Optional.** The command that should be executed.
-nrpe_no_ssl     | **Optional.** Whether to disable SSL or not. Defaults to `false`.
-nrpe_timeout_unknown | **Optional.** Whether to set timeouts to unknown instead of critical state. Defaults to `false`.
-nrpe_timeout    | **Optional.** The timeout in seconds.
-nrpe_arguments | **Optional.** Arguments that should be passed to the command. Multiple arguments must be defined as array.
-
-#### <a id="plugin-check-command-apt"></a> apt
-
-Check command for the `check_apt` plugin.
-
-The `apt` check command does not support any vars.
-
-
-#### <a id="plugin-check-command-running-kernel"></a> running_kernel
-
-Check command object for the `check_running_kernel` plugin
-provided by the `nagios-plugins-contrib` package on Debian.
-
-The `running_kernel` check command does not support any vars.
-
-
-## <a id="snmp-manubulon-plugin-check-commands"></a> SNMP Manubulon Plugin Check Commands
-
-### <a id="snmp-manubulon-plugin-check-commands-overview"></a> Overview
-
-The `SNMP Manubulon Plugin Check Commands` provide example configuration for plugin check
-commands provided by the [SNMP Manubulon project](http://nagios.manubulon.com/index_snmp.html).
-
-The SNMP manubulon plugin check commands assume that the global constant named `ManubulonPluginDir`
-is set to the path where the Manubublon SNMP plugins are installed.
-
-You can enable these plugin check commands by adding the following the include directive in your
-configuration [icinga2.conf](#icinga2-conf) file:
-
-    include <manubulon>
-
-### Checks by Host Type
-
-**N/A**      : Not available for this type.
-
-**SNMP**     : Available for simple SNMP query.
-
-**??**       : Untested.
-
-**Specific** : Script name for platform specific checks.
-
-
-  Host type               | Interface  | storage  | load/cpu  | mem | process  | env | specific
-  ------------------------|------------|----------|-----------|-----|----------|-----|-------------------------
-  Linux                   |   Yes      |   Yes    |   Yes     | Yes |   Yes    | No  |
-  Windows                 |   Yes      |   Yes    |   Yes     | Yes |   Yes    | No  | check_snmp_win.pl
-  Cisco router/switch     |   Yes      |   N/A    |   Yes     | Yes |   N/A    | Yes |
-  HP router/switch        |   Yes      |   N/A    |   Yes     | Yes |   N/A    | No  |
-  Bluecoat proxy          |   Yes      |   SNMP   |   Yes     | SNMP|   No     | Yes |
-  CheckPoint on SPLAT     |   Yes      |   Yes    |   Yes     | Yes |   Yes    | No  | check_snmp_cpfw.pl
-  CheckPoint on Nokia IP  |   Yes      |   Yes    |   Yes     | No  |   ??     | No  | check_snmp_vrrp.pl
-  Boostedge               |   Yes      |   Yes    |   Yes     | Yes |   ??     | No  | check_snmp_boostedge.pl
-  AS400                   |   Yes      |   Yes    |   Yes     | Yes |   No     | No  |
-  NetsecureOne Netbox     |   Yes      |   Yes    |   Yes     | ??  |   Yes    | No  |
-  Radware Linkproof       |   Yes      |   N/A    |   SNMP    | SNMP|   No     | No  | check_snmp_linkproof_nhr <br> check_snmp_vrrp.pl
-  IronPort                |   Yes      |   SNMP   |   SNMP    | SNMP|   No     | Yes |
-  Cisco CSS               |   Yes      |   ??     |   Yes     | Yes |   No     | ??  | check_snmp_css.pl
-
-
-#### <a id="plugin-check-command-snmp-load"></a> snmp-load
-
-Check command object for the [check_snmp_load.pl](http://nagios.manubulon.com/snmp_load.html) plugin.
-
-Custom Attributes:
-
-
-Name                    | Description
-------------------------|--------------
-snmp_address            | **Optional.** The host's address. Defaults to "$address$".
-snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
-snmp_community          | **Optional.** The SNMP community. Defaults to "public".
-snmp_port               | **Optional.** The SNMP port connection.
-snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
-snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
-snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
-snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
-snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
-snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
-snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default.
-snmp_warn               | **Optional.** The warning threshold. Change the `snmp_load_type` var to "netsl" for using 3 values.
-snmp_crit               | **Optional.** The critical threshold. Change the `snmp_load_type` var to "netsl" for using 3 values.
-snmp_load_type          | **Optional.** Load type. Defaults to "stand". Check all available types in the [snmp load](http://nagios.manubulon.com/snmp_load.html) documentation.
-snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
-snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
-
-#### <a id="plugin-check-command-snmp-memory"></a> snmp-memory
-
-Check command object for the [check_snmp_mem.pl](http://nagios.manubulon.com/snmp_mem.html) plugin.
-
-Custom Attributes:
-
-Name                    | Description
-------------------------|--------------
-snmp_address            | **Optional.** The host's address. Defaults to "$address$".
-snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
-snmp_community          | **Optional.** The SNMP community. Defaults to "public".
-snmp_port               | **Optional.** The SNMP port connection.
-snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
-snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
-snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
-snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
-snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
-snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
-snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default.
-snmp_warn               | **Optional.** The warning threshold.
-snmp_crit               | **Optional.** The critical threshold.
-snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
-snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
-
-#### <a id="plugin-check-command-snmp-storage"></a> snmp-storage
-
-Check command object for the [check_snmp_storage.pl](http://nagios.manubulon.com/snmp_storage.html) plugin.
-
-Custom Attributes:
-
-Name                    | Description
-------------------------|--------------
-snmp_address            | **Optional.** The host's address. Defaults to "$address$".
-snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
-snmp_community          | **Optional.** The SNMP community. Defaults to "public".
-snmp_port               | **Optional.** The SNMP port connection.
-snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
-snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
-snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
-snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
-snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
-snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
-snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default.
-snmp_warn               | **Optional.** The warning threshold.
-snmp_crit               | **Optional.** The critical threshold.
-snmp_storage_name       | **Optional.** Storage name. Default to regex "^/$$". More options available in the [snmp storage](http://nagios.manubulon.com/snmp_storage.html) documentation.
-snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
-snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
-
-#### <a id="plugin-check-command-snmp-interface"></a> snmp-interface
-
-Check command object for the [check_snmp_int.pl](http://nagios.manubulon.com/snmp_int.html) plugin.
-
-Custom Attributes:
-
-Name                        | Description
-----------------------------|--------------
-snmp_address                | **Optional.** The host's address. Defaults to "$address$".
-snmp_nocrypt                | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
-snmp_community              | **Optional.** The SNMP community. Defaults to "public".
-snmp_port                   | **Optional.** The SNMP port connection.
-snmp_v2                     | **Optional.** SNMP version to 2c. Defaults to "false".
-snmp_v3                     | **Optional.** SNMP version to 3. Defaults to "false".
-snmp_login                  | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
-snmp_password               | **Required.** SNMP version 3 password. No value defined as default.
-snmp_v3_use_privpass        | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
-snmp_authprotocol           | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
-snmp_privpass               | **Required.** SNMP version 3 priv password. No value defined as default.
-snmp_warn                   | **Optional.** The warning threshold.
-snmp_crit                   | **Optional.** The critical threshold.
-snmp_interface              | **Optional.** Network interface name. Default to regex "eth0".
-snmp_interface_perf         | **Optional.** Check the input/ouput bandwidth of the interface. Defaults to "true".
-snmp_interface_label        | **Optional.** Add label before speed in output: in=, out=, errors-out=, etc...
-snmp_interface_bits_bytes   | **Optional.** Output performance data in bits/s or Bytes/s. **Depends** on snmp_interface_kbits set to "true". Defaults to "true".
-snmp_interface_percent      | **Optional.** Output performance data in % of max speed. Defaults to "false".
-snmp_interface_kbits        | **Optional.** Make the warning and critical levels in KBits/s. Defaults to "true".
-snmp_interface_megabytes    | **Optional.** Make the warning and critical levels in Mbps or MBps. **Depends** on snmp_interface_kbits set to "true". Defaults to "true".
-snmp_interface_64bit        | **Optional.** Use 64 bits counters instead of the standard counters when checking bandwidth & performance data for interface >= 1Gbps. Defaults to "false".
-snmp_interface_errors       | **Optional.** Add error & discard to Perfparse output. Defaults to "true".
-snmp_interface_noregexp     | **Optional.** Do not use regexp to match interface name in description OID. Defaults to "false".
-snmp_interface_delta        | **Optional.** Delta time of perfcheck. Defaults to "300" (5 min).
-snmp_warncrit_percent       | **Optional.** Make the warning and critical levels in % of reported interface speed. If set **snmp_interface_megabytes** needs to be set to "false". Defaults to "false".
-snmp_perf                   | **Optional.** Enable perfdata values. Defaults to "true".
-snmp_timeout                | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
-
-#### <a id="plugin-check-command-snmp-process"></a> snmp-process
-
-Check command object for the [check_snmp_process.pl](http://nagios.manubulon.com/snmp_process.html) plugin.
-
-Custom Attributes:
-
-Name                    | Description
-------------------------|--------------
-snmp_address            | **Optional.** The host's address. Defaults to "$address$".
-snmp_nocrypt            | **Optional.** Define SNMP encryption. If set **snmp_v3** needs to be set. Defaults to "false".
-snmp_community          | **Optional.** The SNMP community. Defaults to "public".
-snmp_port               | **Optional.** The SNMP port connection.
-snmp_v2                 | **Optional.** SNMP version to 2c. Defaults to "false".
-snmp_v3                 | **Optional.** SNMP version to 3. Defaults to "false".
-snmp_login              | **Optional.** SNMP version 3 username. Defaults to "snmpuser".
-snmp_password           | **Required.** SNMP version 3 password. No value defined as default.
-snmp_v3_use_privpass    | **Optional.** Define to use SNMP version 3 priv password. Defaults to "false".
-snmp_authprotocol       | **Optional.** SNMP version 3 authentication protocol. Defaults to "md5,des".
-snmp_privpass           | **Required.** SNMP version 3 priv password. No value defined as default..
-snmp_warn               | **Optional.** The warning threshold.
-snmp_crit               | **Optional.** The critical threshold.
-snmp_process_name       | **Optional.** Name of the process (regexp). No trailing slash!. Defaults to ".*".
-snmp_perf               | **Optional.** Enable perfdata values. Defaults to "true".
-snmp_timeout            | **Optional.** The command timeout in seconds. Defaults to 5 seconds.
diff --git a/doc/8-language-reference.md b/doc/8-language-reference.md
new file mode 100644 (file)
index 0000000..09a9ea7
--- /dev/null
@@ -0,0 +1,1205 @@
+# <a id="language-reference"></a> Language Reference
+
+## <a id="object-definition"></a> Object Definition
+
+Icinga 2 features an object-based configuration format. You can define new
+objects using the `object` keyword:
+
+    object Host "host1.example.org" {
+      display_name = "host1"
+
+      address = "192.168.0.1"
+      address6 = "::1"
+    }
+
+In general you need to write each statement on a new line. Expressions started
+with `{`, `(` and `[` extend until the matching closing character and can be broken
+up into multiple lines.
+
+Alternatively you can write multiple statements on a single line by separating
+them with a semicolon:
+
+    object Host "host1.example.org" {
+      display_name = "host1"
+
+      address = "192.168.0.1"; address6 = "::1"
+    }
+
+Each object is uniquely identified by its type (`Host`) and name
+(`host1.example.org`). Some types have composite names, e.g. the
+`Service` type which uses the `host_name` attribute and the name
+you specified to generate its object name.
+
+Exclamation marks (!) are not permitted in object names.
+
+Objects can contain a comma-separated list of property
+declarations. Instead of commas semicolons may also be used.
+The following data types are available for property values:
+
+## Expressions
+
+The following expressions can be used on the right-hand side of assignments.
+
+### <a id="numeric-literals"></a> Numeric Literals
+
+A floating-point number.
+
+Example:
+
+    -27.3
+
+### <a id="duration-literals"></a> Duration Literals
+
+Similar to floating-point numbers except for the fact that they support
+suffixes to help with specifying time durations.
+
+Example:
+
+    2.5m
+
+Supported suffixes include ms (milliseconds), s (seconds), m (minutes),
+h (hours) and d (days).
+
+Duration literals are converted to seconds by the config parser and
+are treated like numeric literals.
+
+### <a id="string-literals"></a> String Literals
+
+A string.
+
+Example:
+
+    "Hello World!"
+
+Certain characters need to be escaped. The following escape sequences
+are supported:
+
+Character                 | Escape sequence
+--------------------------|------------------------------------
+"                         | \\"
+\\                        | \\\\
+&lt;TAB&gt;               | \\t
+&lt;CARRIAGE-RETURN&gt;   | \\r
+&lt;LINE-FEED&gt;         | \\n
+&lt;BEL&gt;               | \\b
+&lt;FORM-FEED&gt;         | \\f
+
+In addition to these pre-defined escape sequences you can specify
+arbitrary ASCII characters using the backslash character (\\) followed
+by an ASCII character in octal encoding.
+
+### <a id="multiline-string-literals"></a> Multi-line String Literals
+
+Strings spanning multiple lines can be specified by enclosing them in
+{{{ and }}}.
+
+Example:
+
+    {{{This
+    is
+    a multi-line
+    string.}}}
+
+Unlike in ordinary strings special characters do not have to be escaped
+in multi-line string literals.
+
+### <a id="boolean-literals"></a> Boolean Literals
+
+The keywords `true` and `false` are used to denote truth values.
+
+### <a id="null-value"></a> Null Value
+
+The `null` keyword can be used to specify an empty value.
+
+### <a id="dictionary"></a> Dictionary
+
+An unordered list of key-value pairs. Keys must be unique and are
+compared in a case-sensitive manner.
+
+Individual key-value pairs must either be comma-separated or on separate lines.
+The comma after the last key-value pair is optional.
+
+Example:
+
+    {
+      address = "192.168.0.1"
+      port = 443
+    }
+
+Identifiers may not contain certain characters (e.g. space) or start
+with certain characters (e.g. digits). If you want to use a dictionary
+key that is not a valid identifier you can enclose the key in double
+quotes.
+
+### <a id="array"></a> Array
+
+An ordered list of values.
+
+Individual array elements must be comma-separated.
+The comma after the last element is optional.
+
+Example:
+
+    [ "hello", 42 ]
+
+An array may simultaneously contain values of different types, such as
+strings and numbers.
+
+### <a id="expression-operators"></a> Operators
+
+The following operators are supported in expressions:
+
+Operator | Examples (Result)                             | Description
+---------|-----------------------------------------------|--------------------------------
+!        | !"Hello" (false), !false (true)               | Logical negation of the operand
+~        | ~true (false)                                 | Bitwise negation of the operand
++        | 1 + 3 (4), "hello " + "world" ("hello world") | Adds two numbers; concatenates strings
+-        | 3 - 1 (2)                                     | Subtracts two numbers
+*        | 5m * 10 (3000)                                | Multiplies two numbers
+/        | 5m / 5 (60)                                   | Divides two numbers
+%        | 17 % 12 (5)                                   | Remainder after division
+^        | 17 ^ 12 (29)                                  | Bitwise XOR
+&        | 7 & 3 (3)                                     | Binary AND
+&#124;   | 2 &#124; 3 (3)                                | Binary OR
+&&       | true && false (false)                         | Logical AND
+&#124;&#124; | true &#124;&#124; false (true)            | Logical OR
+<        | 3 < 5 (true)                                  | Less than
+>        | 3 > 5 (false)                                 | Greater than
+<=       | 3 <= 3 (true)                                 | Less than or equal
+>=       | 3 >= 3 (true)                                 | Greater than or equal
+<<       | 4 << 8 (1024)                                 | Left shift
+>>       | 1024 >> 4 (64)                                | Right shift
+==       | "hello" == "hello" (true), 3 == 5 (false)     | Equal to
+!=       | "hello" != "world" (true), 3 != 3 (false)     | Not equal to
+in       | "foo" in [ "foo", "bar" ] (true)              | Element contained in array
+!in      | "foo" !in [ "bar", "baz" ] (true)             | Element not contained in array
+()       | (3 + 3) * 5                                   | Groups sub-expressions
+()       | Math.random()                                 | Calls a function
+
+### <a id="function-calls"></a> Function Calls
+
+Functions can be called using the `()` operator:
+
+    const MyGroups = [ "test1", "test" ]
+
+    {
+      check_interval = len(MyGroups) * 1m
+    }
+
+> **Tip**
+>
+> Use these functions in [apply](#using-apply) rule expressions.
+
+    assign where match("192.168.*", host.address)
+
+A list of available functions is available in the [Built-in functions and methods](#builtin-functions) chapter.
+
+## <a id="dictionary-operators"></a> Assignments
+
+In addition to the `=` operator shown above a number of other operators
+to manipulate attributes are supported. Here's a list of all
+available operators:
+
+### <a id="operator-assignment"></a> Operator =
+
+Sets an attribute to the specified value.
+
+Example:
+
+    {
+      a = 5
+      a = 7
+    }
+
+In this example `a` has the value `7` after both instructions are executed.
+
+### <a id="operator-additive-assignment"></a> Operator +=
+
+The += operator is a shortcut. The following expression:
+
+    {
+      a = [ "hello" ]
+      a += [ "world" ]
+    }
+
+is equivalent to:
+
+    {
+      a = [ "hello" ]
+      a = a + [ "world" ]
+    }
+
+### <a id="operator-substractive-assignment"></a> Operator -=
+
+The -= operator is a shortcut. The following expression:
+
+    {
+      a = 10
+      a -= 5
+    }
+
+is equivalent to:
+
+    {
+      a = 10
+      a = a - 5
+    }
+
+### <a id="operator-multiply-assignment"></a> Operator \*=
+
+The *= operator is a shortcut. The following expression:
+
+    {
+      a = 60
+      a *= 5
+    }
+
+is equivalent to:
+
+    {
+      a = 60
+      a = a * 5
+    }
+
+### <a id="operator-dividing-assignment"></a> Operator /=
+
+The /= operator is a shortcut. The following expression:
+
+    {
+      a = 300
+      a /= 5
+    }
+
+is equivalent to:
+
+    {
+      a = 300
+      a = a / 5
+    }
+
+## <a id="indexer"></a> Indexer
+
+The indexer syntax provides a convenient way to set dictionary elements.
+
+Example:
+
+    {
+      hello.key = "world"
+    }
+
+Example (alternative syntax):
+
+    {
+      hello["key"] = "world"
+    }
+
+This is equivalent to writing:
+
+    {
+      hello += {
+        key = "world"
+      }
+    }
+
+If the `hello` attribute does not already have a value it is automatically initialized to an empty dictionary.
+
+## <a id="template-imports"></a> Template Imports
+
+Objects can import attributes from other objects.
+
+Example:
+
+    template Host "default-host" {
+      vars.colour = "red"
+    }
+
+    template Host "test-host" {
+      import "default-host"
+
+      vars.colour = "blue"
+    }
+
+    object Host "localhost" {
+      import "test-host"
+
+      address = "127.0.0.1"
+      address6 = "::1"
+    }
+
+The `default-host` and `test-host` objects are marked as templates
+using the `template` keyword. Unlike ordinary objects templates are not
+instantiated at run-time. Parent objects do not necessarily have to be
+templates, however in general they are.
+
+The `vars` dictionary for the `localhost` object contains all three
+custom attributes and the custom attribute `colour` has the value `"blue"`.
+
+Parent objects are resolved in the order they're specified using the
+`import` keyword.
+
+## <a id="constants"></a> Constants
+
+Global constants can be set using the `const` keyword:
+
+    const VarName = "some value"
+
+Once defined a constant can be accessed from any file. Constants cannot be changed
+once they are set.
+
+Icinga 2 provides a number of special global constants. Some of them can be overridden using the `--define` command line parameter:
+
+Variable            |Description
+--------------------|-------------------
+PrefixDir           |**Read-only.** Contains the installation prefix that was specified with cmake -DCMAKE_INSTALL_PREFIX. Defaults to "/usr/local".
+SysconfDir          |**Read-only.** Contains the path of the sysconf directory. Defaults to PrefixDir + "/etc".
+ZonesDir            |**Read-only.** Contains the path of the zones.d directory. Defaults to SysconfDir + "/zones.d".
+LocalStateDir       |**Read-only.** Contains the path of the local state directory. Defaults to PrefixDir + "/var".
+RunDir              |**Read-only.** Contains the path of the run directory. Defaults to LocalStateDir + "/run".
+PkgDataDir          |**Read-only.** Contains the path of the package data directory. Defaults to PrefixDir + "/share/icinga2".
+StatePath           |**Read-write.** Contains the path of the Icinga 2 state file. Defaults to LocalStateDir + "/lib/icinga2/icinga2.state".
+ObjectsPath         |**Read-write.** Contains the path of the Icinga 2 objects file. Defaults to LocalStateDir + "/cache/icinga2/icinga2.debug".
+PidPath             |**Read-write.** Contains the path of the Icinga 2 PID file. Defaults to RunDir + "/icinga2/icinga2.pid".
+Vars                |**Read-write.** Contains a dictionary with global custom attributes. Not set by default.
+NodeName            |**Read-write.** Contains the cluster node name. Set to the local hostname by default.
+ApplicationType     |**Read-write.** Contains the name of the Application type. Defaults to "icinga/IcingaApplication".
+EnableNotifications |**Read-write.** Whether notifications are globally enabled. Defaults to true.
+EnableEventHandlers |**Read-write.** Whether event handlers are globally enabled. Defaults to true.
+EnableFlapping      |**Read-write.** Whether flap detection is globally enabled. Defaults to true.
+EnableHostChecks    |**Read-write.** Whether active host checks are globally enabled. Defaults to true.
+EnableServiceChecks |**Read-write.** Whether active service checks are globally enabled. Defaults to true.
+EnablePerfdata      |**Read-write.** Whether performance data processing is globally enabled. Defaults to true.
+UseVfork            |**Read-write.** Whether to use vfork(). Only available on *NIX. Defaults to true.
+RunAsUser              |**Read-write.** Defines the user the Icinga 2 daemon is running as. Used in [init.conf](#init-conf).
+RunAsGroup             |**Read-write.** Defines the group the Icinga 2 daemon is running as. Used in [init.conf](#init-conf).
+
+## <a id="apply"></a> Apply
+
+The `apply` keyword can be used to create new objects which are associated with
+another group of objects.
+
+    apply Service "ping" to Host {
+      import "generic-service"
+
+      check_command = "ping4"
+
+      assign where host.name == "localhost"
+    }
+
+In this example the `assign where` condition is a boolean expression which is
+evaluated for all objects of type `Host` and a new service with name "ping"
+is created for each matching host. [Expression operators](#expression-operators)
+may be used in `assign where` conditions.
+
+The `to` keyword and the target type may be omitted if there is only one target
+type, e.g. for the `Service` type.
+
+Depending on the object type used in the `apply` expression additional local
+variables may be available for use in the `where` condition:
+
+Source Type       | Target Type | Variables
+------------------|-------------|--------------
+Service           | Host        | host
+Dependency        | Host        | host
+Dependency        | Service     | host, service
+Notification      | Host        | host
+Notification      | Service     | host, service
+ScheduledDowntime | Host        | host
+ScheduledDowntime | Service     | host, service
+
+Any valid config attribute can be accessed using the `host` and `service`
+variables. For example, `host.address` would return the value of the host's
+"address" attribute - or null if that attribute isn't set.
+
+## <a id="group-assign"></a> Group Assign
+
+Group objects can be assigned to specific member objects using the `assign where`
+and `ignore where` conditions.
+
+    object HostGroup "linux-servers" {
+      display_name = "Linux Servers"
+
+      assign where host.vars.os == "Linux"
+    }
+
+In this example the `assign where` condition is a boolean expression which is evaluated
+for all objects of the type `Host`. Each matching host is added as member to the host group
+with the name "linux-servers". Membership exclusion can be controlled using the `ignore where`
+condition. [Expression operators](#expression-operators) may be used in `assign where` and
+`ignore where` conditions.
+
+Source Type       | Variables
+------------------|--------------
+HostGroup         | host
+ServiceGroup      | host, service
+UserGroup         | user
+
+
+## <a id="boolean-values"></a> Boolean Values
+
+The `assign where` and `ignore where` statements, the `!`, `&&` and `||`
+operators as well as the `bool()` function convert their arguments to a
+boolean value based on the following rules:
+
+Description          | Example Value     | Boolean Value
+---------------------|-------------------|--------------
+Empty value          | null              | false
+Zero                 | 0                 | false
+Non-zero integer     | -23945            | true
+Empty string         | ""                | false
+Non-empty string     | "Hello"           | true
+Empty array          | []                | false
+Non-empty array      | [ "Hello" ]       | true
+Empty dictionary     | {}                | false
+Non-empty dictionary | { key = "value" } | true
+
+For a list of supported expression operators for `assign where` and `ignore where`
+statements, see [expression operators](#expression-operators).
+
+## <a id="comments"></a> Comments
+
+The Icinga 2 configuration format supports C/C++-style and shell-style comments.
+
+Example:
+
+    /*
+     This is a comment.
+     */
+    object Host "localhost" {
+      check_interval = 30 // this is also a comment.
+      retry_interval = 15 # yet another comment
+    }
+
+## <a id="includes"></a> Includes
+
+Other configuration files can be included using the `include` directive.
+Paths must be relative to the configuration file that contains the
+`include` directive.
+
+Example:
+
+    include "some/other/file.conf"
+    include "conf.d/*.conf"
+
+Wildcard includes are not recursive.
+
+Icinga also supports include search paths similar to how they work in a
+C/C++ compiler:
+
+    include <itl>
+
+Note the use of angle brackets instead of double quotes. This causes the
+config compiler to search the include search paths for the specified
+file. By default $PREFIX/share/icinga2/include is included in the list of search
+paths. Additional include search paths can be added using
+[command-line options](#cmdline).
+
+Wildcards are not permitted when using angle brackets.
+
+## <a id="recursive-includes"></a> Recursive Includes
+
+The `include_recursive` directive can be used to recursively include all
+files in a directory which match a certain pattern.
+
+Example:
+
+    include_recursive "conf.d", "*.conf"
+    include_recursive "templates"
+
+The first parameter specifies the directory from which files should be
+recursively included.
+
+The file names need to match the pattern given in the second parameter.
+When no pattern is specified the default pattern "*.conf" is used.
+
+## <a id="library"></a> Library directive
+
+The `library` directive can be used to manually load additional
+libraries. Libraries can be used to provide additional object types and
+functions.
+
+Example:
+
+    library "snmphelper"
+
+## <a id="functions"></a> Functions
+
+Functions can be defined using the `function` keyword.
+
+Example:
+
+    function multiply(a, b) {
+         return a * b
+       }
+
+When encountering the `return` keyword further execution of the function is terminated and
+the specified value is supplied to the caller of the function:
+
+    log(multiply(3, 5))
+
+In this example the `multiply` function we declared earlier is invoked with two arguments (3 and 5).
+The function computes the product of those arguments and makes the result available to the
+function's caller.
+
+When no value is supplied for the `return` statement the function returns `null`.
+
+Functions which do not have a `return` statement have their return value set to the value of the
+last expression which was performed by the function. For example, we could have also written our
+`multiply` function like this:
+
+    function multiply(a, b) {
+         a * b
+       }
+
+Anonymous functions can be created by omitting the name in the function definition. The
+resulting function object can be used like any other value:
+
+    var fn = function() { 3 }
+       
+       fn() /* Returns 3 */
+
+## <a id="lambdas"></a> Lambda Expressions
+
+Functions can also be declared using the alternative lambda syntax.
+
+Example:
+
+    f = (x) => x * x
+
+Multiple statements can be used by putting the function body into braces:
+
+    f = (x) => {
+         log("Lambda called")
+         x * x
+    }
+
+Just like with ordinary functions the return value is the value of the last statement.
+
+For lambdas which take exactly one argument the braces around the arguments can be omitted:
+
+    f = x => x * x
+
+## <a id="variable-scopes"></a> Variable Scopes
+
+When setting a variable Icinga checks the following scopes in this order whether the variable
+already exists there:
+
+* Local Scope
+* `this` Scope
+* Global Scope
+
+The local scope contains variables which only exist during the invocation of the current function,
+object or apply statement. Local variables can be declared using the `var` keyword:
+
+    function multiply(a, b) {
+         var temp = a * b
+         return temp
+       }
+
+Each time the `multiply` function is invoked a new `temp` variable is used which is in no way
+related to previous invocations of the function.
+
+When setting a variable which has not previously been declared as local using the `var` keyword
+the `this` scope is used.
+
+The `this` scope refers to the current object which the function or object/apply statement
+operates on.
+
+    object Host "localhost" {
+         check_interval = 5m
+    }
+
+In this example the `this` scope refers to the "localhost" object. The `check_interval` attribute
+is set for this particular host.
+
+You can explicitly access the `this` scope using the `this` keyword:
+
+    object Host "localhost" {
+         var check_interval = 5m
+  
+      /* This explicitly specifies that the attribute should be set
+       * for the host, if we had omitted `this.` the (poorly named)
+       * local variable `check_interval` would have been modified instead.
+       */
+      this.check_interval = 1m 
+  }
+
+Similarly the keywords `locals` and `globals` are available to access the local and global scope.
+
+Functions also have a `this` scope. However unlike for object/apply statements the `this` scope for
+a function is set to whichever object was used to invoke the function. Here's an example:
+
+     hm = {
+          h_word = null
+                
+          function init(word) {
+            h_word = word
+          }
+        }
+        
+        /* Let's invoke the init() function */
+        hm.init("hello")
+
+We're using `hm.init` to invoke the function which causes the value of `hm` to become the `this`
+scope for this function call.
+
+## <a id="conditional-statements"></a> Conditional Statements
+
+Sometimes it can be desirable to only evaluate statements when certain conditions are met. The if/else
+construct can be used to accomplish this.
+
+Example:
+
+    a = 3
+
+       if (a < 5) {
+      a *= 7
+       } else {
+         a *= 2
+       }
+
+An if/else construct can also be used in place of any other value. The value of an if/else statement
+is the value of the last statement which was evaluated for the branch which was taken:
+
+    a = if (true) {
+         log("Taking the 'true' branch")
+         7 * 3
+       } else {
+         log("Taking the 'false' branch")
+         9
+       }
+
+This example prints the log message "Taking the 'true' branch" and the `a` variable is set to 21 (7 * 3).
+
+The value of an if/else construct is null if the condition evaluates to false and no else branch is given.
+
+## <a id="for-loops"></a> For Loops
+
+The `for` statement can be used to iterate over arrays and dictionaries.
+
+Example:
+
+    var list = [ "a", "b", "c" ]
+       
+       for (item in list) {
+         log("Item: " + item)
+       }
+
+The loop body is evaluated once for each item in the array. The variable `item` is declared as a local
+variable just as if the `var` keyword had been used.
+
+Iterating over dictionaries can be accomplished in a similar manner:
+
+    var dict = { a = 3, b = 7 }
+       
+       for (key => value in dict) {
+         log("Key: " + key + ", Value: " + value)
+    }
+
+## <a id="types"></a> Types
+
+All values have a static type. The `typeof` function can be used to determine the type of a value:
+
+    typeof(3) /* Returns an object which represents the type for numbers */
+
+The following built-in types are available:
+
+Type       | Examples          | Description
+-----------|-------------------|------------------------
+Number     | 3.7               | A numerical value.
+Boolean    | true, false       | A boolean value.
+String     | "hello"           | A string.
+Array      | [ "a", "b" ]      | An array.
+Dictionary | { a = 3 }         | A dictionary.
+
+Depending on which libraries are loaded additional types may become available. The `icinga`
+library implements a whole bunch of other types, e.g. Host, Service, CheckCommand, etc.
+
+Each type has an associated type object which describes the type's semantics. These
+type objects are made available using global variables which match the type's name:
+
+    /* This logs 'true' */
+    log(typeof(3) == Number)
+
+The type object's `prototype` property can be used to find out which methods a certain type
+supports:
+
+       /* This returns: ["find","len","lower","replace","split","substr","to_string","upper"] */
+    keys(String.prototype)
+
+## <a id="reserved-keywords"></a> Reserved Keywords
+
+These keywords are reserved and must not be used as constants or custom attributes.
+
+    object
+    template
+    include
+    include_recursive
+    library
+    null
+    true
+    false
+    const
+    var
+    this
+    use
+    apply
+    to
+    where
+    import
+    assign
+    ignore
+    function
+    return
+    for
+    if
+    else
+    in
+
+You can escape reserved keywords using the `@` character. The following example
+tries to set `vars.include` which references a reserved keyword and generates
+an error:
+
+    [2014-09-15 17:24:00 +0200] critical/config: Location:
+    /etc/icinga2/conf.d/hosts/localhost.conf(13):   vars.sla = "24x7"
+    /etc/icinga2/conf.d/hosts/localhost.conf(14):
+    /etc/icinga2/conf.d/hosts/localhost.conf(15):   vars.include = "some cmdb export field"
+                                                         ^^^^^^^
+    /etc/icinga2/conf.d/hosts/localhost.conf(16): }
+    /etc/icinga2/conf.d/hosts/localhost.conf(17):
+
+    Config error: in /etc/icinga2/conf.d/hosts/localhost.conf: 15:8-15:14: syntax error, unexpected include (T_INCLUDE), expecting T_IDENTIFIER
+    [2014-09-15 17:24:00 +0200] critical/config: 1 errors, 0 warnings.
+
+You can escape the `include` keyword by prefixing it with an additional `@` character:
+
+    object Host "localhost" {
+      import "generic-host"
+
+      address = "127.0.0.1"
+      address6 = "::1"
+
+      vars.os = "Linux"
+      vars.sla = "24x7"
+
+      vars.@include = "some cmdb export field"
+    }
+
+## <a id="builtin-functions"></a> Built-in functions and methods
+
+### <a id="global-functions"></a> Global functions
+
+Function                        | Description
+--------------------------------|-----------------------
+regex(pattern, text)            | Returns true if the regex pattern matches the text, false otherwise.
+match(pattern, text)            | Returns true if the wildcard pattern matches the text, false otherwise.
+len(value)                      | Returns the length of the value, i.e. the number of elements for an array or dictionary, or the length of the string in bytes.
+union(array, array, ...)        | Returns an array containing all unique elements from the specified arrays.
+intersection(array, array, ...) | Returns an array containing all unique elements which are common to all specified arrays.
+keys(dict)                      | Returns an array containing the dictionary's keys.
+string(value)                   | Converts the value to a string.
+number(value)                   | Converts the value to a number.
+bool(value)                     | Converts the value to a bool.
+random()                        | Returns a random value between 0 and RAND_MAX (as defined in stdlib.h).
+log(value)                      | Writes a message to the log. Non-string values are converted to a JSON string.
+log(severity, facility, value)  | Writes a message to the log. `severity` can be one of `LogDebug`, `LogNotice`, `LogInformation`, `LogWarning`, and `LogCritical`. Non-string values are converted to a JSON string.
+exit(integer)                   | Terminates the application.
+
+### <a id="math-object"></a> Math object
+
+The global `Math` object can be used to access a number of mathematical constants
+and functions.
+
+#### <a id="math-e"></a> Math.E
+
+Euler's constant.
+
+#### <a id="math-ln2"></a> Math.LN2
+
+Natural logarithm of 2.
+
+#### <a id="math-ln10"></a> Math.LN10
+
+Natural logarithm of 10.
+
+#### <a id="math-log2e"></a> Math.LOG2E
+
+Base 2 logarithm of E.
+
+#### <a id="math-pi"></a> Math.PI
+
+The mathematical constant Pi.
+
+#### <a id="math-sqrt1_2"></a> Math.SQRT1_2
+
+Square root of 1/2.
+
+#### <a id="math-sqrt2"></a> Math.SQRT2
+
+Square root of 2.
+
+#### <a id="math-abs"></a> Math.abs
+
+Signature:
+
+    function abs(x);
+
+Returns the absolute value of `x`.
+
+#### <a id="math-acos"></a> Math.acos
+
+Signature:
+
+    function acos(x);
+
+Returns the arccosine of `x`.
+
+#### <a id="math-asin"></a> Math.asin
+
+Signature:
+
+    function asin(x);
+
+Returns the arcsine of `x`.
+
+#### <a id="math-atan"></a> Math.atan
+
+Signature:
+
+    function atan(x);
+
+Returns the arctangent of `x`.
+
+#### <a id="math-atan2"></a> Math.atan2
+
+Signature:
+
+    function atan2(y, x);
+
+Returns the arctangent of the quotient of `y` and `x`.
+
+#### <a id="math-ceil"></a> Math.ceil
+
+Signature:
+
+    function ceil(x);
+
+Returns the smallest integer value not less than `x`.
+
+#### <a id="math-cos"></a> Math.cos
+
+Signature:
+
+    function cos(x);
+
+Returns the cosine of `x`.
+
+#### <a id="math-exp"></a> Math.exp
+
+Signature:
+
+    function exp(x);
+
+Returns E raised to the `x`th power.
+
+#### <a id="math-floor"></a> Math.floor
+
+Signature:
+
+    function floor(x);
+
+Returns the largest integer value not greater than `x`.
+
+#### <a id="math-isinf"></a> Math.isinf
+
+Signature:
+
+    function isinf(x);
+
+Returns whether `x` is infinite.
+
+#### <a id="math-isnan"></a> Math.isnan
+
+Signature:
+
+    function isnan(x);
+
+Returns whether `x` is NaN (not-a-number).
+
+#### <a id="math-log"></a> Math.log
+
+Signature:
+
+    function log(x);
+
+Returns the natural logarithm of `x`.
+
+#### <a id="math-max"></a> Math.max
+
+Signature:
+
+    function max(...);
+
+Returns the largest argument. A variable number of arguments can be specified.
+If no arguments are given -Infinity is returned.
+
+#### <a id="math-min"></a> Math.min
+
+Signature:
+
+    function min(...);
+
+Returns the smallest argument. A variable number of arguments can be specified.
+If no arguments are given +Infinity is returned.
+
+#### <a id="math-pow"></a> Math.pow
+
+Signature:
+
+    function pow(x, y);
+
+Returns `x` raised to the `y`th power.
+
+#### <a id="math-random"></a> Math.random
+
+Signature:
+
+    function random();
+
+Returns a pseudo-random number between 0 and 1.
+
+#### <a id="math-round"></a> Math.round
+
+Signature:
+
+    function round(x);
+
+Returns `x` rounded to the nearest integer value.
+
+#### <a id="math-sign"></a> Math.sign
+
+Signature:
+
+    function sign(x);
+
+Returns -1 if `x` is negative, 1 if `x` is positive
+and 0 if `x` is 0.
+
+#### <a id="math-sin"></a> Math.sin
+
+Signature:
+
+    function sin(x);
+
+Returns the sine of `x`.
+
+#### <a id="math-sqrt"></a> Math.sqrt
+
+Signature:
+
+    function sqrt(x);
+
+Returns the square root of `x`.
+
+#### <a id="math-tan"></a> Math.tan
+
+Signature:
+
+    function tan(x);
+
+Returns the tangent of `x`.
+
+### <a id="number-type"></a> Number type
+
+#### <a id="number-to_string"></a> Number#to_string
+
+Signature:
+
+    function to_string();
+
+The `to_string` method returns a string representation of the number.
+
+Example:
+
+    var example = 7
+       example.to_string() /* Returns "7" */
+
+### <a id="boolean-type"></a> Boolean type
+
+#### <a id="boolean-to_string"></a> Boolean#to_string
+
+Signature:
+
+    function to_string();
+
+The `to_string` method returns a string representation of the boolean value.
+
+Example:
+
+    var example = true
+       example.to_string() /* Returns "true" */
+
+### <a id="string-type"></a> String type
+
+#### <a id="string-find"></a> String#find
+
+Signature:
+
+    function find(str, start);
+
+Returns the zero-based index at which the string `str` was found in the string. If the string
+was not found -1 is returned. `start` specifies the zero-based index at which `find` should
+start looking for the string (defaults to 0 when not specified).
+
+Example:
+
+    "Hello World".find("World") /* Returns 6 */
+
+#### <a id="string-len"></a> String#len
+
+Signature
+
+    function len();
+
+Returns the length of the string in bytes. Note that depending on the encoding type of the string
+this is not necessarily the number of characters.
+
+Example:
+
+    "Hello World".len() /* Returns 11 */
+
+#### <a id="string-lower"></a> String#lower
+
+Signature:
+
+    function lower();
+
+Returns a copy of the string with all of its characters converted to lower-case.
+
+Example:
+
+    "Hello World".lower() /* Returns "hello world" */
+
+#### <a id="string-upper"></a> String#upper
+
+Signature:
+
+    function upper();
+
+Returns a copy of the string with all of its characters converted to upper-case.
+
+Example:
+
+    "Hello World".upper() /* Returns "HELLO WORLD" */
+
+#### <a id="string-replace"></a> String#replace
+
+Signature:
+
+    function replace(search, replacement);
+
+Returns a copy of the string with all occurences of the string specified in `search` replaced
+with the string specified in `replacement`.
+
+#### <a id="string-split"></a> String#split
+
+Signature:
+
+    function split(delimiters);
+
+Splits a string into individual parts and returns them as an array. The `delimiters` argument
+specifies the characters which should be used as delimiters between parts.
+
+Example:
+
+    "x-7,y".split("-,") /* Returns [ "x", "7", "y" ] */
+
+#### <a id="string-substr"></a> String#substr
+
+Signature:
+
+    function substr(start, len);
+
+Returns a part of a string. The `start` argument specifies the zero-based index at which the part begins.
+The optional `len` argument specifies the length of the part ("until the end of the string" if omitted).
+
+Example:
+
+    "Hello World".substr(6) /* Returns "World" */
+
+#### <a id="string-to_string"></a> String#to_string
+
+Signature:
+
+    function to_string();
+
+Returns a copy of the string.
+
+### <a id="array-type"> Array type
+
+#### <a id="array-add"> Array#add
+#### <a id="array-clear"> Array#clear
+#### <a id="array-clone"> Array#clone
+#### <a id="array-contains"> Array#contains
+#### <a id="array-len"> Array#len
+#### <a id="array-remove"> Array#remove
+#### <a id="array-set"> Array#set
+#### <a id="array-sort"> Array#sort
+
+Signature:
+
+    function sort(less_cmp);
+
+Returns a copy of the array where all items are sorted. The items are
+compared using the `<` (less-than) operator. A custom comparator function
+can be specified with the `less_cmp` argument.
+
+### <a id="dictionary-type"> Dictionary type
+
+#### <a id="dictionary-clone"> Dictionary#clone
+#### <a id="dictionary-contains"> Dictionary#contains
+#### <a id="dictionary-len"> Dictionary#len
+#### <a id="dictionary-remove"> Dictionary#remove
+#### <a id="dictionary-set"> Dictionary#set
+
+### <a id="scriptfunction-type"> Function type
+
+#### <a id="scriptfunction-call"> Function#call
+
+Signature:
+
+    function call(thisArg, ...);
+
+Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
+scope for the function. All other arguments are passed directly to the function.
+
+Example:
+
+    function set_x(val) {
+         this.x = val
+       }
+       
+       dict = {}
+       
+       set_x.call(dict, 7) /* Invokes set_x using `dict` as `this` */
+
+#### <a id="scriptfunction-callv"> Function#callv
+
+Signature:
+
+    function call(thisArg, args);
+
+Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
+scope for the function. The items in the `args` array are passed to the function as individual arguments.
+
+Example:
+
+    function set_x(val) {
+         this.x = val
+       }
+       
+       var dict = {}
+       
+       var args = [ 7 ]
+       
+       set_x.callv(dict, args) /* Invokes set_x using `dict` as `this` */
+
diff --git a/doc/9-library-reference.md b/doc/9-library-reference.md
new file mode 100644 (file)
index 0000000..7f57485
--- /dev/null
@@ -0,0 +1,500 @@
+# <a id="library-reference"></a> Library Reference
+
+## <a id="global-functions"></a> Global functions
+
+Function                        | Description
+--------------------------------|-----------------------
+regex(pattern, text)            | Returns true if the regex pattern matches the text, false otherwise.
+match(pattern, text)            | Returns true if the wildcard pattern matches the text, false otherwise.
+len(value)                      | Returns the length of the value, i.e. the number of elements for an array or dictionary, or the length of the string in bytes.
+union(array, array, ...)        | Returns an array containing all unique elements from the specified arrays.
+intersection(array, array, ...) | Returns an array containing all unique elements which are common to all specified arrays.
+keys(dict)                      | Returns an array containing the dictionary's keys.
+string(value)                   | Converts the value to a string.
+number(value)                   | Converts the value to a number.
+bool(value)                     | Converts the value to a bool.
+random()                        | Returns a random value between 0 and RAND_MAX (as defined in stdlib.h).
+log(value)                      | Writes a message to the log. Non-string values are converted to a JSON string.
+log(severity, facility, value)  | Writes a message to the log. `severity` can be one of `LogDebug`, `LogNotice`, `LogInformation`, `LogWarning`, and `LogCritical`. Non-string values are converted to a JSON string.
+exit(integer)                   | Terminates the application.
+
+## <a id="math-object"></a> Math object
+
+The global `Math` object can be used to access a number of mathematical constants
+and functions.
+
+### <a id="math-e"></a> Math.E
+
+Euler's constant.
+
+### <a id="math-ln2"></a> Math.LN2
+
+Natural logarithm of 2.
+
+### <a id="math-ln10"></a> Math.LN10
+
+Natural logarithm of 10.
+
+### <a id="math-log2e"></a> Math.LOG2E
+
+Base 2 logarithm of E.
+
+### <a id="math-pi"></a> Math.PI
+
+The mathematical constant Pi.
+
+### <a id="math-sqrt1_2"></a> Math.SQRT1_2
+
+Square root of 1/2.
+
+### <a id="math-sqrt2"></a> Math.SQRT2
+
+Square root of 2.
+
+### <a id="math-abs"></a> Math.abs
+
+Signature:
+
+    function abs(x);
+
+Returns the absolute value of `x`.
+
+### <a id="math-acos"></a> Math.acos
+
+Signature:
+
+    function acos(x);
+
+Returns the arccosine of `x`.
+
+### <a id="math-asin"></a> Math.asin
+
+Signature:
+
+    function asin(x);
+
+Returns the arcsine of `x`.
+
+### <a id="math-atan"></a> Math.atan
+
+Signature:
+
+    function atan(x);
+
+Returns the arctangent of `x`.
+
+### <a id="math-atan2"></a> Math.atan2
+
+Signature:
+
+    function atan2(y, x);
+
+Returns the arctangent of the quotient of `y` and `x`.
+
+### <a id="math-ceil"></a> Math.ceil
+
+Signature:
+
+    function ceil(x);
+
+Returns the smallest integer value not less than `x`.
+
+### <a id="math-cos"></a> Math.cos
+
+Signature:
+
+    function cos(x);
+
+Returns the cosine of `x`.
+
+### <a id="math-exp"></a> Math.exp
+
+Signature:
+
+    function exp(x);
+
+Returns E raised to the `x`th power.
+
+### <a id="math-floor"></a> Math.floor
+
+Signature:
+
+    function floor(x);
+
+Returns the largest integer value not greater than `x`.
+
+### <a id="math-isinf"></a> Math.isinf
+
+Signature:
+
+    function isinf(x);
+
+Returns whether `x` is infinite.
+
+### <a id="math-isnan"></a> Math.isnan
+
+Signature:
+
+    function isnan(x);
+
+Returns whether `x` is NaN (not-a-number).
+
+### <a id="math-log"></a> Math.log
+
+Signature:
+
+    function log(x);
+
+Returns the natural logarithm of `x`.
+
+### <a id="math-max"></a> Math.max
+
+Signature:
+
+    function max(...);
+
+Returns the largest argument. A variable number of arguments can be specified.
+If no arguments are given -Infinity is returned.
+
+### <a id="math-min"></a> Math.min
+
+Signature:
+
+    function min(...);
+
+Returns the smallest argument. A variable number of arguments can be specified.
+If no arguments are given +Infinity is returned.
+
+### <a id="math-pow"></a> Math.pow
+
+Signature:
+
+    function pow(x, y);
+
+Returns `x` raised to the `y`th power.
+
+### <a id="math-random"></a> Math.random
+
+Signature:
+
+    function random();
+
+Returns a pseudo-random number between 0 and 1.
+
+### <a id="math-round"></a> Math.round
+
+Signature:
+
+    function round(x);
+
+Returns `x` rounded to the nearest integer value.
+
+### <a id="math-sign"></a> Math.sign
+
+Signature:
+
+    function sign(x);
+
+Returns -1 if `x` is negative, 1 if `x` is positive
+and 0 if `x` is 0.
+
+### <a id="math-sin"></a> Math.sin
+
+Signature:
+
+    function sin(x);
+
+Returns the sine of `x`.
+
+### <a id="math-sqrt"></a> Math.sqrt
+
+Signature:
+
+    function sqrt(x);
+
+Returns the square root of `x`.
+
+### <a id="math-tan"></a> Math.tan
+
+Signature:
+
+    function tan(x);
+
+Returns the tangent of `x`.
+
+## <a id="number-type"></a> Number type
+
+### <a id="number-to_string"></a> Number#to_string
+
+Signature:
+
+    function to_string();
+
+The `to_string` method returns a string representation of the number.
+
+Example:
+
+    var example = 7
+       example.to_string() /* Returns "7" */
+
+## <a id="boolean-type"></a> Boolean type
+
+### <a id="boolean-to_string"></a> Boolean#to_string
+
+Signature:
+
+    function to_string();
+
+The `to_string` method returns a string representation of the boolean value.
+
+Example:
+
+    var example = true
+       example.to_string() /* Returns "true" */
+
+## <a id="string-type"></a> String type
+
+### <a id="string-find"></a> String#find
+
+Signature:
+
+    function find(str, start);
+
+Returns the zero-based index at which the string `str` was found in the string. If the string
+was not found -1 is returned. `start` specifies the zero-based index at which `find` should
+start looking for the string (defaults to 0 when not specified).
+
+Example:
+
+    "Hello World".find("World") /* Returns 6 */
+
+### <a id="string-len"></a> String#len
+
+Signature
+
+    function len();
+
+Returns the length of the string in bytes. Note that depending on the encoding type of the string
+this is not necessarily the number of characters.
+
+Example:
+
+    "Hello World".len() /* Returns 11 */
+
+### <a id="string-lower"></a> String#lower
+
+Signature:
+
+    function lower();
+
+Returns a copy of the string with all of its characters converted to lower-case.
+
+Example:
+
+    "Hello World".lower() /* Returns "hello world" */
+
+### <a id="string-upper"></a> String#upper
+
+Signature:
+
+    function upper();
+
+Returns a copy of the string with all of its characters converted to upper-case.
+
+Example:
+
+    "Hello World".upper() /* Returns "HELLO WORLD" */
+
+### <a id="string-replace"></a> String#replace
+
+Signature:
+
+    function replace(search, replacement);
+
+Returns a copy of the string with all occurences of the string specified in `search` replaced
+with the string specified in `replacement`.
+
+### <a id="string-split"></a> String#split
+
+Signature:
+
+    function split(delimiters);
+
+Splits a string into individual parts and returns them as an array. The `delimiters` argument
+specifies the characters which should be used as delimiters between parts.
+
+Example:
+
+    "x-7,y".split("-,") /* Returns [ "x", "7", "y" ] */
+
+### <a id="string-substr"></a> String#substr
+
+Signature:
+
+    function substr(start, len);
+
+Returns a part of a string. The `start` argument specifies the zero-based index at which the part begins.
+The optional `len` argument specifies the length of the part ("until the end of the string" if omitted).
+
+Example:
+
+    "Hello World".substr(6) /* Returns "World" */
+
+### <a id="string-to_string"></a> String#to_string
+
+Signature:
+
+    function to_string();
+
+Returns a copy of the string.
+
+## <a id="array-type"></a> Array type
+
+### <a id="array-add"></a> Array#add
+
+Signature:
+
+    function add(value);
+
+TODO
+
+### <a id="array-clear"></a> Array#clear
+
+Signature:
+
+    function clear();
+
+TODO
+
+### <a id="array-clone"></a> Array#clone
+
+    function clone();
+
+TODO
+
+### <a id="array-contains"></a> Array#contains
+
+Signature:
+
+    function contains(value);
+
+TODO
+
+### <a id="array-len"></a> Array#len
+
+Signature:
+
+    function len();
+
+TODO
+
+### <a id="array-remove"></a> Array#remove
+
+Signature:
+
+    function remove(index);
+
+TODO
+
+### <a id="array-set"></a> Array#set
+
+Signature:
+
+    function set(index, value);
+
+TODO
+
+### <a id="array-sort"></a> Array#sort
+
+Signature:
+
+    function sort(less_cmp);
+
+Returns a copy of the array where all items are sorted. The items are
+compared using the `<` (less-than) operator. A custom comparator function
+can be specified with the `less_cmp` argument.
+
+## <a id="dictionary-type"></a> Dictionary type
+
+### <a id="dictionary-clone"></a> Dictionary#clone
+
+Signature:
+
+    function clone();
+
+TODO
+
+### <a id="dictionary-contains"></a> Dictionary#contains
+
+Signature:
+
+    function contains(key);
+
+TODO
+
+### <a id="dictionary-len"></a> Dictionary#len
+
+Signature:
+
+    function len();
+
+TODO
+
+### <a id="dictionary-remove"></a> Dictionary#remove
+
+Signature:
+
+    function remove(key);
+
+TODO
+
+### <a id="dictionary-set"></a> Dictionary#set
+
+Signature:
+
+    function set(key, value);
+
+TODO
+
+## <a id="scriptfunction-type"></a> ScriptFunction type
+
+### <a id="scriptfunction-call"></a> ScriptFunction#call
+
+Signature:
+
+    function call(thisArg, ...);
+
+Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
+scope for the function. All other arguments are passed directly to the function.
+
+Example:
+
+    function set_x(val) {
+         this.x = val
+       }
+       
+       dict = {}
+       
+       set_x.call(dict, 7) /* Invokes set_x using `dict` as `this` */
+
+### <a id="scriptfunction-callv"></a> ScriptFunction#callv
+
+Signature:
+
+    function call(thisArg, args);
+
+Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
+scope for the function. The items in the `args` array are passed to the function as individual arguments.
+
+Example:
+
+    function set_x(val) {
+         this.x = val
+       }
+       
+       var dict = {}
+
+       var args = [ 7 ]
+
+       set_x.callv(dict, args) /* Invokes set_x using `dict` as `this` */
+
index 7e7a0badaa687f36b6f19ec9969f14ce9d79a637..b6d6371b11500dfdce0baa41a070e6e5babfa3b9 100644 (file)
@@ -49,9 +49,9 @@ static double MathAtan(double x)
        return std::atan(x);
 }
 
-static double MathAtan2(double x, double y)
+static double MathAtan2(double y, double x)
 {
-       return std::atan2(x, y);
+       return std::atan2(y, x);
 }
 
 static double MathCeil(double x)