1 # Library Reference <a id="library-reference"></a>
3 ## Global functions <a id="global-functions"></a>
5 These functions are globally available in [assign/ignore where expressions](03-monitoring-basics.md#using-apply-expressions),
6 [functions](17-language-reference.md#functions), [API filters](12-icinga2-api.md#icinga2-api-filters)
7 and the [Icinga 2 debug console](11-cli-commands.md#cli-command-console).
9 You can use the [Icinga 2 debug console](11-cli-commands.md#cli-command-console)
10 as a sandbox to test these functions before implementing
11 them in your scenarios.
13 ### regex <a id="global-functions-regex"></a>
17 function regex(pattern, value, mode)
19 Returns true if the regular expression `pattern` matches the `value`, false otherwise.
20 The `value` can be of the type [String](18-library-reference.md#string-type) or [Array](18-library-reference.md#array-type) (which
21 contains string elements).
23 The `mode` argument is optional and can be either `MatchAll` (in which case all elements
24 for an array have to match) or `MatchAny` (in which case at least one element has to match).
25 The default mode is `MatchAll`.
27 **Tip**: In case you are looking for regular expression tests try [regex101](https://regex101.com).
29 Example for string values:
32 Icinga 2 (version: v2.7.0)
33 <1> => host.vars.os_type = "Linux/Unix"
35 <2> => regex("^Linux", host.vars.os_type)
37 <3> => regex("^Linux$", host.vars.os_type)
40 Example for an array of string values:
43 Icinga 2 (version: v2.7.0)
44 <1> => host.vars.databases = [ "db-prod1", "db-prod2", "db-dev" ]
46 <2> => regex("^db-prod\\d+", host.vars.databases, MatchAny)
48 <3> => regex("^db-prod\\d+", host.vars.databases, MatchAll)
52 ### match <a id="global-functions-match"></a>
56 function match(pattern, text, mode)
58 Returns true if the wildcard (`?*`) `pattern` matches the `value`, false otherwise.
59 The `value` can be of the type [String](18-library-reference.md#string-type) or [Array](18-library-reference.md#array-type) (which
60 contains string elements).
62 The `mode` argument is optional and can be either `MatchAll` (in which case all elements
63 for an array have to match) or `MatchAny` (in which case at least one element has to match).
64 The default mode is `MatchAll`.
66 Example for string values:
69 Icinga 2 (version: v2.7.0)
70 <1> => var name = "db-prod-sfo-657"
72 <2> => match("*prod-sfo*", name)
74 <3> => match("*-dev-*", name)
77 Example for an array of string values:
80 Icinga 2 (version: v2.7.0-28)
81 <1> => host.vars.application_types = [ "web-wp", "web-rt", "db-local" ]
83 <2> => match("web-*", host.vars.application_types, MatchAll)
85 <3> => match("web-*", host.vars.application_types, MatchAny)
89 ### cidr_match <a id="global-functions-cidr_match"></a>
93 function cidr_match(pattern, ip, mode)
95 Returns true if the CIDR pattern matches the IP address, false otherwise.
97 IPv4 addresses are converted to IPv4-mapped IPv6 addresses before being
98 matched against the pattern. The `mode` argument is optional and can be
99 either `MatchAll` (in which case all elements for an array have to match) or `MatchAny`
100 (in which case at least one element has to match). The default mode is `MatchAll`.
103 Example for a single IP address:
106 Icinga 2 (version: v2.7.0)
107 <1> => host.address = "192.168.56.101"
109 <2> => cidr_match("192.168.56.0/24", host.address)
111 <3> => cidr_match("192.168.56.0/26", host.address)
114 Example for an array of IP addresses:
117 Icinga 2 (version: v2.7.0)
118 <1> => host.vars.vhost_ips = [ "192.168.56.101", "192.168.56.102", "10.0.10.99" ]
120 <2> => cidr_match("192.168.56.0/24", host.vars.vhost_ips, MatchAll)
122 <3> => cidr_match("192.168.56.0/24", host.vars.vhost_ips, MatchAny)
125 ### range <a id="global-functions-range"></a>
130 function range(start, end)
131 function range(start, end, increment)
133 Returns an array of numbers in the specified range.
134 If you specify one parameter, the first element starts at `0`.
135 The following array numbers are incremented by `1` and stop before
137 If you specify the start and end numbers, the returned array
138 number are incremented by `1`. They start at the specified start
139 number and stop before the end number.
140 Optionally you can specify the incremented step between numbers
146 Icinga 2 (version: v2.7.0)
148 [ 0.000000, 1.000000, 2.000000, 3.000000, 4.000000 ]
150 [ 2.000000, 3.000000 ]
152 [ 2.000000, 4.000000, 6.000000, 8.000000 ]
154 ### len <a id="global-functions-len"></a>
160 Returns the length of the value, i.e. the number of elements for an array
161 or dictionary, or the length of the string in bytes.
163 **Note**: Instead of using this global function you are advised to use the type's
164 prototype method: [Array#len](18-library-reference.md#array-len), [Dictionary#len](18-library-reference.md#dictionary-len) and
165 [String#len](18-library-reference.md#string-len).
170 Icinga 2 (version: v2.7.0)
171 <1> => host.groups = [ "linux-servers", "db-servers" ]
173 <2> => host.groups.len()
175 <3> => host.vars.disks["/"] = {}
177 <4> => host.vars.disks["/var"] = {}
179 <5> => host.vars.disks.len()
181 <6> => host.vars.os_type = "Linux/Unix"
183 <7> => host.vars.os_type.len()
187 ### union <a id="global-functions-union"></a>
191 function union(array, array, ...)
193 Returns an array containing all unique elements from the specified arrays.
198 Icinga 2 (version: v2.7.0)
199 <1> => var dev_notification_groups = [ "devs", "slack" ]
201 <2> => var host_notification_groups = [ "slack", "noc" ]
203 <3> => union(dev_notification_groups, host_notification_groups)
204 [ "devs", "noc", "slack" ]
206 ### intersection <a id="global-functions-intersection"></a>
210 function intersection(array, array, ...)
212 Returns an array containing all unique elements which are common to all
218 Icinga 2 (version: v2.7.0)
219 <1> => var dev_notification_groups = [ "devs", "slack" ]
221 <2> => var host_notification_groups = [ "slack", "noc" ]
223 <3> => intersection(dev_notification_groups, host_notification_groups)
226 ### keys <a id="global-functions-keys"></a>
232 Returns an array containing the dictionary's keys.
234 **Note**: Instead of using this global function you are advised to use the type's
235 prototype method: [Dictionary#keys](18-library-reference.md#dictionary-keys).
240 Icinga 2 (version: v2.7.0)
241 <1> => host.vars.disks["/"] = {}
243 <2> => host.vars.disks["/var"] = {}
245 <3> => host.vars.disks.keys()
248 ### string <a id="global-functions-string"></a>
252 function string(value)
254 Converts the value to a string.
256 **Note**: Instead of using this global function you are advised to use the type's
259 * [Number#to_string](18-library-reference.md#number-to_string)
260 * [Boolean#to_string](18-library-reference.md#boolean-to_string)
261 * [String#to_string](18-library-reference.md#string-to_string)
262 * [Object#to_string](18-library-reference.md#object-to-string) for Array and Dictionary types
263 * [DateTime#to_string](18-library-reference.md#datetime-tostring)
268 Icinga 2 (version: v2.7.0)
271 <2> => false.to_string()
273 <3> => "abc".to_string()
275 <4> => [ "dev", "slack" ].to_string()
276 "[ \"dev\", \"slack\" ]"
277 <5> => { "/" = {}, "/var" = {} }.to_string()
278 "{\n\t\"/\" = {\n\t}\n\t\"/var\" = {\n\t}\n}"
279 <6> => DateTime(2016, 11, 25).to_string()
280 "2016-11-25 00:00:00 +0100"
282 ### number <a id="global-functions-number"></a>
286 function number(value)
288 Converts the value to a number.
293 Icinga 2 (version: v2.7.0)
299 ### bool <a id="global-functions-bool"></a>
305 Converts the value to a bool.
310 Icinga 2 (version: v2.7.0)
316 ### random <a id="global-functions-random"></a>
322 Returns a random value between 0 and RAND\_MAX (as defined in stdlib.h).
325 Icinga 2 (version: v2.7.0)
331 ### log <a id="global-functions-log"></a>
337 Writes a message to the log. Non-string values are converted to a JSON string.
341 function log(severity, facility, value)
343 Writes a message to the log. `severity` can be one of `LogDebug`, `LogNotice`,
344 `LogInformation`, `LogWarning`, and `LogCritical`.
346 Non-string values are converted to a JSON string.
351 Icinga 2 (version: v2.7.0)
352 <1> => log(LogCritical, "Console", "First line")
353 critical/Console: First line
355 <2> => var groups = [ "devs", "slack" ]
357 <3> => log(LogCritical, "Console", groups)
358 critical/Console: ["devs","slack"]
361 ### typeof <a id="global-functions-typeof"></a>
365 function typeof(value)
367 Returns the [Type](18-library-reference.md#type-type) object for a value.
372 Icinga 2 (version: v2.7.0)
373 <1> => typeof(3) == Number
375 <2> => typeof("str") == String
377 <3> => typeof(true) == Boolean
379 <4> => typeof([ 1, 2, 3]) == Array
381 <5> => typeof({ a = 2, b = 3 }) == Dictionary
384 ### get_time <a id="global-functions-get_time"></a>
390 Returns the current UNIX timestamp as floating point number.
395 Icinga 2 (version: v2.7.0)
401 ### parse_performance_data <a id="global-functions-parse_performance_data"></a>
405 function parse_performance_data(pd)
407 Parses a performance data string and returns an array describing the values.
412 Icinga 2 (version: v2.7.0)
413 <1> => var pd = "'time'=1480074205.197363;;;"
415 <2> => parse_performance_data(pd)
422 type = "PerfdataValue"
424 value = 1480074205.197363
428 ### dirname <a id="global-functions-dirname"></a>
432 function dirname(path)
434 Returns the directory portion of the specified path.
439 Icinga 2 (version: v2.7.0)
440 <1> => var path = "/etc/icinga2/scripts/xmpp-notification.pl"
443 "/etc/icinga2/scripts"
445 ### basename <a id="global-functions-basename"></a>
449 function basename(path)
451 Returns the filename portion of the specified path.
456 Icinga 2 (version: v2.7.0)
457 <1> => var path = "/etc/icinga2/scripts/xmpp-notification.pl"
459 <2> => basename(path)
460 "xmpp-notification.pl"
462 ### escape_shell_arg <a id="global-functions-escape_shell_arg"></a>
466 function escape_shell_arg(text)
468 Escapes a string for use as a single shell argument.
473 Icinga 2 (version: v2.7.0)
474 <1> => escape_shell_arg("'$host.name$' '$service.name$'")
475 "''\\''$host.name$'\\'' '\\''$service.name$'\\'''"
477 ### escape_shell_cmd <a id="global-functions-escape_shell_cmd"></a>
481 function escape_shell_cmd(text)
483 Escapes shell meta characters in a string.
488 Icinga 2 (version: v2.7.0)
489 <1> => escape_shell_cmd("/bin/echo 'shell test' $ENV")
490 "/bin/echo 'shell test' \\$ENV"
492 ### escape_create_process_arg <a id="global-functions-escape_create_process_arg"></a>
496 function escape_create_process_arg(text)
498 Escapes a string for use as an argument for CreateProcess(). Windows only.
500 ### sleep <a id="global-functions-sleep"></a>
504 function sleep(interval)
506 Sleeps for the specified amount of time (in seconds).
508 ## Object Accessor Functions <a id="object-accessor-functions"></a>
510 These functions can be used to retrieve a reference to another object by name.
512 ### get_check_command <a id="objref-get_check_command"></a>
516 function get_check_command(name);
518 Returns the CheckCommand object with the specified name, or `null` if no such CheckCommand object exists.
520 ### get_event_command <a id="objref-get_event_command"></a>
524 function get_event_command(name);
526 Returns the EventCommand object with the specified name, or `null` if no such EventCommand object exists.
528 ### get_notification_command <a id="objref-get_notification_command"></a>
532 function get_notification_command(name);
534 Returns the NotificationCommand object with the specified name, or `null` if no such NotificationCommand object exists.
536 ### get_host <a id="objref-get_host"></a>
540 function get_host(host_name);
542 Returns the Host object with the specified name, or `null` if no such Host object exists.
545 ### get_service <a id="objref-get_service"></a>
549 function get_service(host_name, service_name);
550 function get_service(host, service_name);
552 Returns the Service object with the specified host name or object and service name pair,
553 or `null` if no such Service object exists.
555 Example in the [debug console](11-cli-commands.md#cli-command-console)
556 which fetches the `disk` service object from the current Icinga 2 node:
559 $ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/'
560 Icinga 2 (version: v2.7.0)
562 <1> => get_service(NodeName, "disk")
563 <2> => get_service(NodeName, "disk").__name
564 "icinga2-master1.localdomain!disk"
566 <3> => get_service(get_host(NodeName), "disk").__name
567 "icinga2-master1.localdomain!disk"
570 ### get_services <a id="objref-get_services"></a>
574 function get_services(host_name);
575 function get_services(host);
577 Returns an [array](17-language-reference.md#array) of service objects for the specified host name or object,
578 or `null` if no such host object exists.
580 Example in the [debug console](11-cli-commands.md#cli-command-console)
581 which fetches all service objects from the current Icinga 2 node:
584 $ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/'
585 Icinga 2 (version: v2.7.0)
587 <1> => get_services(NodeName).map(s => s.name)
588 [ "disk", "disk /", "http", "icinga", "load", "ping4", "ping6", "procs", "ssh", "users" ]
591 Note: [map](18-library-reference.md#array-map) takes a [lambda function](17-language-reference.md#lambdas) as argument. In this example
592 we only want to collect and print the `name` attribute with `s => s.name`.
594 This works in a similar fashion for a host object where you can extract all service states
595 in using the [map](18-library-reference.md#array-map) functionality:
598 <2> => get_services(get_host(NodeName)).map(s => s.state)
599 [ 2.000000, 2.000000, 2.000000, 0.000000, 0.000000, 0.000000, 2.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000 ]
602 ### get_user <a id="objref-get_user"></a>
606 function get_user(name);
608 Returns the User object with the specified name, or `null` if no such User object exists.
610 ### get_host_group <a id="objref-get_host_group"></a>
614 function get_host_group(name);
616 Returns the HostGroup object with the specified name, or `null` if no such HostGroup object exists.
619 ### get_service_group <a id="objref-get_service_group"></a>
623 function get_service_group(name);
625 Returns the ServiceGroup object with the specified name, or `null` if no such ServiceGroup object exists.
627 ### get_user_group <a id="objref-get_user_group"></a>
631 function get_user_group(name);
633 Returns the UserGroup object with the specified name, or `null` if no such UserGroup object exists.
636 ### get_time_period <a id="objref-get_time_period"></a>
640 function get_time_period(name);
642 Returns the TimePeriod object with the specified name, or `null` if no such TimePeriod object exists.
645 ### get_object <a id="objref-get_object"></a>
649 function get_object(type, name);
651 Returns the object with the specified type and name, or `null` if no such object exists. `type` must refer
655 ### get_objects <a id="objref-get_objects"></a>
659 function get_objects(type);
661 Returns an array of objects whose type matches the specified type. `type` must refer
665 ## Math object <a id="math-object"></a>
667 The global `Math` object can be used to access a number of mathematical constants
670 ### Math.E <a id="math-e"></a>
674 ### Math.LN2 <a id="math-ln2"></a>
676 Natural logarithm of 2.
678 ### Math.LN10 <a id="math-ln10"></a>
680 Natural logarithm of 10.
682 ### Math.LOG2E <a id="math-log2e"></a>
684 Base 2 logarithm of E.
686 ### Math.PI <a id="math-pi"></a>
688 The mathematical constant Pi.
690 ### Math.SQRT1_2 <a id="math-sqrt1_2"></a>
694 ### Math.SQRT2 <a id="math-sqrt2"></a>
698 ### Math.abs <a id="math-abs"></a>
704 Returns the absolute value of `x`.
706 ### Math.acos <a id="math-acos"></a>
712 Returns the arccosine of `x`.
714 ### Math.asin <a id="math-asin"></a>
720 Returns the arcsine of `x`.
722 ### Math.atan <a id="math-atan"></a>
728 Returns the arctangent of `x`.
730 ### Math.atan2 <a id="math-atan2"></a>
734 function atan2(y, x);
736 Returns the arctangent of the quotient of `y` and `x`.
738 ### Math.ceil <a id="math-ceil"></a>
744 Returns the smallest integer value not less than `x`.
746 ### Math.cos <a id="math-cos"></a>
752 Returns the cosine of `x`.
754 ### Math.exp <a id="math-exp"></a>
760 Returns E raised to the `x`th power.
762 ### Math.floor <a id="math-floor"></a>
768 Returns the largest integer value not greater than `x`.
770 ### Math.isinf <a id="math-isinf"></a>
776 Returns whether `x` is infinite.
778 ### Math.isnan <a id="math-isnan"></a>
784 Returns whether `x` is NaN (not-a-number).
786 ### Math.log <a id="math-log"></a>
792 Returns the natural logarithm of `x`.
794 ### Math.max <a id="math-max"></a>
800 Returns the largest argument. A variable number of arguments can be specified.
801 If no arguments are given, -Infinity is returned.
803 ### Math.min <a id="math-min"></a>
809 Returns the smallest argument. A variable number of arguments can be specified.
810 If no arguments are given, +Infinity is returned.
812 ### Math.pow <a id="math-pow"></a>
818 Returns `x` raised to the `y`th power.
820 ### Math.random <a id="math-random"></a>
826 Returns a pseudo-random number between 0 and 1.
828 ### Math.round <a id="math-round"></a>
834 Returns `x` rounded to the nearest integer value.
836 ### Math.sign <a id="math-sign"></a>
842 Returns -1 if `x` is negative, 1 if `x` is positive
845 ### Math.sin <a id="math-sin"></a>
851 Returns the sine of `x`.
853 ### Math.sqrt <a id="math-sqrt"></a>
859 Returns the square root of `x`.
861 ### Math.tan <a id="math-tan"></a>
867 Returns the tangent of `x`.
869 ## Json object <a id="json-object"></a>
871 The global `Json` object can be used to encode and decode JSON.
873 ### Json.encode <a id="json-encode"></a>
879 Encodes an arbitrary value into JSON.
881 ### Json.decode <a id="json-decode"></a>
887 Decodes a JSON string.
889 ## Number type <a id="number-type"></a>
891 ### Number#to_string <a id="number-to_string"></a>
895 function to_string();
897 The `to_string` method returns a string representation of the number.
902 example.to_string() /* Returns "7" */
904 ## Boolean type <a id="boolean-type"></a>
906 ### Boolean#to_string <a id="boolean-to_string"></a>
910 function to_string();
912 The `to_string` method returns a string representation of the boolean value.
917 example.to_string() /* Returns "true" */
919 ## String type <a id="string-type"></a>
921 ### String#find <a id="string-find"></a>
925 function find(str, start);
927 Returns the zero-based index at which the string `str` was found in the string. If the string
928 was not found, -1 is returned. `start` specifies the zero-based index at which `find` should
929 start looking for the string (defaults to 0 when not specified).
933 "Hello World".find("World") /* Returns 6 */
935 ### String#contains <a id="string-contains"></a>
939 function contains(str);
941 Returns `true` if the string `str` was found in the string. If the string
942 was not found, `false` is returned. Use [find](18-library-reference.md#string-find)
943 for getting the index instead.
947 "Hello World".contains("World") /* Returns true */
949 ### String#len <a id="string-len"></a>
955 Returns the length of the string in bytes. Note that depending on the encoding type of the string
956 this is not necessarily the number of characters.
960 "Hello World".len() /* Returns 11 */
962 ### String#lower <a id="string-lower"></a>
968 Returns a copy of the string with all of its characters converted to lower-case.
972 "Hello World".lower() /* Returns "hello world" */
974 ### String#upper <a id="string-upper"></a>
980 Returns a copy of the string with all of its characters converted to upper-case.
984 "Hello World".upper() /* Returns "HELLO WORLD" */
986 ### String#replace <a id="string-replace"></a>
990 function replace(search, replacement);
992 Returns a copy of the string with all occurences of the string specified in `search` replaced
993 with the string specified in `replacement`.
995 ### String#split <a id="string-split"></a>
999 function split(delimiters);
1001 Splits a string into individual parts and returns them as an array. The `delimiters` argument
1002 specifies the characters which should be used as delimiters between parts.
1006 "x-7,y".split("-,") /* Returns [ "x", "7", "y" ] */
1008 ### String#substr <a id="string-substr"></a>
1012 function substr(start, len);
1014 Returns a part of a string. The `start` argument specifies the zero-based index at which the part begins.
1015 The optional `len` argument specifies the length of the part ("until the end of the string" if omitted).
1019 "Hello World".substr(6) /* Returns "World" */
1021 ### String#to_string <a id="string-to_string"></a>
1025 function to_string();
1027 Returns a copy of the string.
1029 ### String#reverse <a id="string-reverse"></a>
1035 Returns a copy of the string in reverse order.
1037 ### String#trim <a id="string-trim"></a>
1043 Removes trailing whitespaces and returns the string.
1045 ## Object type <a id="object-type"></a>
1047 This is the base type for all types in the Icinga application.
1049 ### Object#clone <a id="object-clone"></a>
1055 Returns a copy of the object. Note that for object elements which are
1056 reference values (e.g. objects such as arrays or dictionaries) the entire
1057 object is recursively copied.
1059 ### Object#to_string <a id="object-to-string"></a>
1063 function to_string();
1065 Returns a string representation for the object. Unless overridden this returns a string
1066 of the format "Object of type '<typename>'" where <typename> is the name of the
1071 [ 3, true ].to_string() /* Returns "[ 3.000000, true ]" */
1073 ### Object#type <a id="object-type-field"></a>
1079 Returns the object's type name. This attribute is read-only.
1083 get_host("localhost").type /* Returns "Host" */
1085 ## Type type <a id="type-type"></a>
1087 Inherits methods from the [Object type](18-library-reference.md#object-type).
1089 The `Type` type provides information about the underlying type of an object or scalar value.
1091 All types are registered as global variables. For example, in order to obtain a reference to the `String` type the global variable `String` can be used.
1093 ### Type#base <a id="type-base"></a>
1099 Returns a reference to the type's base type. This attribute is read-only.
1103 Dictionary.base == Object /* Returns true, because the Dictionary type inherits directly from the Object type. */
1105 ### Type#name <a id="type-name"></a>
1111 Returns the name of the type.
1113 ### Type#prototype <a id="type-prototype"></a>
1119 Returns the prototype object for the type. When an attribute is accessed on an object that doesn't exist the prototype object is checked to see if an attribute with the requested name exists. If it does, the attribute's value is returned.
1121 The prototype functionality is used to implement methods.
1125 3.to_string() /* Even though '3' does not have a to_string property the Number type's prototype object does. */
1127 ## Array type <a id="array-type"></a>
1129 Inherits methods from the [Object type](18-library-reference.md#object-type).
1131 ### Array#add <a id="array-add"></a>
1135 function add(value);
1137 Adds a new value after the last element in the array.
1139 ### Array#clear <a id="array-clear"></a>
1145 Removes all elements from the array.
1147 ### Array#shallow_clone <a id="array-shallow-clone"></a>
1149 function shallow_clone();
1151 Returns a copy of the array. Note that for elements which are reference values (e.g. objects such
1152 as arrays and dictionaries) only the references are copied.
1154 ### Array#contains <a id="array-contains"></a>
1158 function contains(value);
1160 Returns true if the array contains the specified value, false otherwise.
1162 ### Array#len <a id="array-len"></a>
1168 Returns the number of elements contained in the array.
1170 ### Array#remove <a id="array-remove"></a>
1174 function remove(index);
1176 Removes the element at the specified zero-based index.
1178 ### Array#set <a id="array-set"></a>
1182 function set(index, value);
1184 Sets the element at the zero-based index to the specified value. The `index` must refer to an element
1185 which already exists in the array.
1187 ### Array#get <a id="array-get"></a>
1191 function get(index);
1193 Retrieves the element at the specified zero-based index.
1195 ### Array#sort <a id="array-sort"></a>
1199 function sort(less_cmp);
1201 Returns a copy of the array where all items are sorted. The items are
1202 compared using the `<` (less-than) operator. A custom comparator function
1203 can be specified with the `less_cmp` argument.
1205 ### Array#join <a id="array-join"></a>
1209 function join(separator);
1211 Joins all elements of the array using the specified separator.
1213 ### Array#reverse <a id="array-reverse"></a>
1219 Returns a new array with all elements of the current array in reverse order.
1221 ### Array#map <a id="array-map"></a>
1227 Calls `func(element)` for each of the elements in the array and returns
1228 a new array containing the return values of these function calls.
1230 ### Array#reduce <a id="array-reduce"></a>
1234 function reduce(func);
1236 Reduces the elements of the array into a single value by calling the provided
1237 function `func` as `func(a, b)` repeatedly where `a` and `b` are elements of the array
1238 or results from previous function calls.
1240 ### Array#filter <a id="array-filter"></a>
1244 function filter(func);
1246 Returns a copy of the array containing only the elements for which `func(element)`
1249 ### Array#any <a id="array-any"></a>
1255 Returns true if the array contains at least one element for which `func(element)`
1256 is true, false otherwise.
1258 ### Array#all <a id="array-all"></a>
1264 Returns true if the array contains only elements for which `func(element)`
1265 is true, false otherwise.
1267 ### Array#unique <a id="array-unique"></a>
1273 Returns a copy of the array with all duplicate elements removed. The original order
1274 of the array is not preserved.
1276 ## Dictionary type <a id="dictionary-type"></a>
1278 Inherits methods from the [Object type](18-library-reference.md#object-type).
1280 ### Dictionary#shallow_clone <a id="dictionary-shallow-clone"></a>
1284 function shallow_clone();
1286 Returns a copy of the dictionary. Note that for elements which are reference values (e.g. objects such
1287 as arrays and dictionaries) only the references are copied.
1289 ### Dictionary#contains <a id="dictionary-contains"></a>
1293 function contains(key);
1295 Returns true if a dictionary item with the specified `key` exists, false otherwise.
1297 ### Dictionary#len <a id="dictionary-len"></a>
1303 Returns the number of items contained in the dictionary.
1305 ### Dictionary#remove <a id="dictionary-remove"></a>
1309 function remove(key);
1311 Removes the item with the specified `key`. Trying to remove an item which does not exist
1314 ### Dictionary#set <a id="dictionary-set"></a>
1318 function set(key, value);
1320 Creates or updates an item with the specified `key` and `value`.
1322 ### Dictionary#get <a id="dictionary-get"></a>
1328 Retrieves the value for the specified `key`. Returns `null` if they `key` does not exist
1331 ### Dictionary#keys <a id="dictionary-keys"></a>
1337 Returns a list of keys for all items that are currently in the dictionary.
1339 ### Dictionary#values <a id="dictionary-values"></a>
1345 Returns a list of values for all items that are currently in the dictionary.
1347 ## Function type <a id="scriptfunction-type"></a>
1349 Inherits methods from the [Object type](18-library-reference.md#object-type).
1351 ### Function#call <a id="scriptfunction-call"></a>
1355 function call(thisArg, ...);
1357 Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
1358 scope for the function. All other arguments are passed directly to the function.
1362 function set_x(val) {
1368 set_x.call(dict, 7) /* Invokes set_x using `dict` as `this` */
1370 ### Function#callv <a id="scriptfunction-callv"></a>
1374 function callv(thisArg, args);
1376 Invokes the function using an alternative `this` scope. The `thisArg` argument specifies the `this`
1377 scope for the function. The items in the `args` array are passed to the function as individual arguments.
1381 function set_x(val) {
1389 set_x.callv(dict, args) /* Invokes set_x using `dict` as `this` */
1391 ## DateTime type <a id="datetime-type"></a>
1393 Inherits methods from the [Object type](18-library-reference.md#object-type).
1395 ### DateTime constructor <a id="datetime-ctor"></a>
1400 function DateTime(unixTimestamp)
1401 function DateTime(year, month, day)
1402 function DateTime(year, month, day, hours, minutes, seconds)
1404 Constructs a new DateTime object. When no arguments are specified for the constructor a new
1405 DateTime object representing the current time is created.
1409 var d1 = DateTime() /* current time */
1410 var d2 = DateTime(2016, 5, 21) /* midnight April 21st, 2016 (local time) */
1412 ### DateTime arithmetic <a id="datetime-arithmetic"></a>
1414 Subtracting two DateTime objects yields the interval between them, in seconds.
1418 var delta = DateTime() - DateTime(2016, 5, 21) /* seconds since midnight April 21st, 2016 */
1420 Subtracting a number from a DateTime object yields a new DateTime object that is further in the past:
1424 var dt = DateTime() - 2 * 60 * 60 /* Current time minus 2 hours */
1426 Adding a number to a DateTime object yields a new DateTime object that is in the future:
1430 var dt = DateTime() + 24 * 60 60 /* Current time plus 24 hours */
1432 ### DateTime#format <a id="datetime-format"></a>
1436 function format(fmt)
1438 Returns a string representation for the DateTime object using the specified format string.
1439 The format string may contain format conversion placeholders as specified in strftime(3).
1443 var s = DateTime(2016, 4, 21).format("%A") /* Sets s to "Thursday". */
1445 ### DateTime#to_string <a id="datetime-tostring"></a>
1449 function to_string()
1451 Returns a string representation for the DateTime object. Uses a suitable default format.
1455 var s = DateTime(2016, 4, 21).to_string() /* Sets s to "2016-04-21 00:00:00 +0200". */