mirror of https://github.com/Icinga/icinga2.git
Implement get_services(host {name,object}) and add host object support for get_service()
This includes some debug console examples too which involve advanced map() and filter examples for better readability. refs #4912
This commit is contained in:
parent
e8f24a9dff
commit
261bd93c0b
|
@ -547,9 +547,57 @@ Returns the Host object with the specified name, or `null` if no such Host objec
|
||||||
Signature:
|
Signature:
|
||||||
|
|
||||||
function get_service(host_name, service_name);
|
function get_service(host_name, service_name);
|
||||||
|
function get_service(host, service_name);
|
||||||
|
|
||||||
Returns the Service object with the specified name, or `null` if no such Service object exists.
|
Returns the Service object with the specified host name or object and service name pair,
|
||||||
|
or `null` if no such Service object exists.
|
||||||
|
|
||||||
|
Example in the [debug console](11-cli-commands.md#cli-command-console)
|
||||||
|
which fetches the `disk` service object from the current Icinga 2 node:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/'
|
||||||
|
Icinga 2 (version: v2.7.0)
|
||||||
|
|
||||||
|
<1> => get_service(NodeName, "disk")
|
||||||
|
<2> => get_service(NodeName, "disk").__name
|
||||||
|
"icinga2-master1.localdomain!disk"
|
||||||
|
|
||||||
|
<3> => get_service(get_host(NodeName), "disk").__name
|
||||||
|
"icinga2-master1.localdomain!disk"
|
||||||
|
```
|
||||||
|
|
||||||
|
### get_services <a id="objref-get_services"></a>
|
||||||
|
|
||||||
|
Signature:
|
||||||
|
|
||||||
|
function get_services(host_name);
|
||||||
|
function get_services(host);
|
||||||
|
|
||||||
|
Returns an [array](17-language-reference.md#array) of service objects for the specified host name or object,
|
||||||
|
or `null` if no such host object exists.
|
||||||
|
|
||||||
|
Example in the [debug console](11-cli-commands.md#cli-command-console)
|
||||||
|
which fetches all service objects from the current Icinga 2 node:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/'
|
||||||
|
Icinga 2 (version: v2.7.0)
|
||||||
|
|
||||||
|
<1> => get_services(NodeName).map(s => s.name)
|
||||||
|
[ "disk", "disk /", "http", "icinga", "load", "ping4", "ping6", "procs", "ssh", "users" ]
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: [map](18-library-reference.md#array-map) takes a [lambda function](17-language-reference.md#lambdas) as argument. In this example
|
||||||
|
we only want to collect and print the `name` attribute with `s => s.name`.
|
||||||
|
|
||||||
|
This works in a similar fashion for a host object where you can extract all service states
|
||||||
|
in using the [map](18-library-reference.md#array-map) functionality:
|
||||||
|
|
||||||
|
```
|
||||||
|
<2> => get_services(get_host(NodeName)).map(s => s.state)
|
||||||
|
[ 2.000000, 2.000000, 2.000000, 0.000000, 0.000000, 0.000000, 2.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000 ]
|
||||||
|
```
|
||||||
|
|
||||||
### get_user <a id="objref-get_user"></a>
|
### get_user <a id="objref-get_user"></a>
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ using namespace icinga;
|
||||||
|
|
||||||
REGISTER_SCRIPTFUNCTION_NS(System, get_host, &Host::GetByName, "name");
|
REGISTER_SCRIPTFUNCTION_NS(System, get_host, &Host::GetByName, "name");
|
||||||
REGISTER_SCRIPTFUNCTION_NS(System, get_service, &ObjectUtils::GetService, "host:name");
|
REGISTER_SCRIPTFUNCTION_NS(System, get_service, &ObjectUtils::GetService, "host:name");
|
||||||
|
REGISTER_SCRIPTFUNCTION_NS(System, get_services, &ObjectUtils::GetServices, "host");
|
||||||
REGISTER_SCRIPTFUNCTION_NS(System, get_user, &User::GetByName, "name");
|
REGISTER_SCRIPTFUNCTION_NS(System, get_user, &User::GetByName, "name");
|
||||||
REGISTER_SCRIPTFUNCTION_NS(System, get_check_command, &CheckCommand::GetByName, "name");
|
REGISTER_SCRIPTFUNCTION_NS(System, get_check_command, &CheckCommand::GetByName, "name");
|
||||||
REGISTER_SCRIPTFUNCTION_NS(System, get_event_command, &EventCommand::GetByName, "name");
|
REGISTER_SCRIPTFUNCTION_NS(System, get_event_command, &EventCommand::GetByName, "name");
|
||||||
|
@ -40,13 +41,32 @@ REGISTER_SCRIPTFUNCTION_NS(System, get_service_group, &ServiceGroup::GetByName,
|
||||||
REGISTER_SCRIPTFUNCTION_NS(System, get_user_group, &UserGroup::GetByName, "name");
|
REGISTER_SCRIPTFUNCTION_NS(System, get_user_group, &UserGroup::GetByName, "name");
|
||||||
REGISTER_SCRIPTFUNCTION_NS(System, get_time_period, &TimePeriod::GetByName, "name");
|
REGISTER_SCRIPTFUNCTION_NS(System, get_time_period, &TimePeriod::GetByName, "name");
|
||||||
|
|
||||||
Service::Ptr ObjectUtils::GetService(const String& host, const String& name)
|
Service::Ptr ObjectUtils::GetService(const Value& host, const String& name)
|
||||||
{
|
{
|
||||||
Host::Ptr host_obj = Host::GetByName(host);
|
Host::Ptr hostObj;
|
||||||
|
|
||||||
if (!host_obj)
|
if (host.IsObjectType<Host>())
|
||||||
|
hostObj = host;
|
||||||
|
else
|
||||||
|
hostObj = Host::GetByName(host);
|
||||||
|
|
||||||
|
if (!hostObj)
|
||||||
return Service::Ptr();
|
return Service::Ptr();
|
||||||
|
|
||||||
return host_obj->GetServiceByShortName(name);
|
return hostObj->GetServiceByShortName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array::Ptr ObjectUtils::GetServices(const Value& host)
|
||||||
|
{
|
||||||
|
Host::Ptr hostObj;
|
||||||
|
|
||||||
|
if (host.IsObjectType<Host>())
|
||||||
|
hostObj = host;
|
||||||
|
else
|
||||||
|
hostObj = Host::GetByName(host);
|
||||||
|
|
||||||
|
if (!hostObj)
|
||||||
|
return Array::Ptr();
|
||||||
|
|
||||||
|
return Array::FromVector(hostObj->GetServices());
|
||||||
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include "base/i2-base.hpp"
|
#include "base/i2-base.hpp"
|
||||||
#include "base/string.hpp"
|
#include "base/string.hpp"
|
||||||
|
#include "base/array.hpp"
|
||||||
#include "icinga/service.hpp"
|
#include "icinga/service.hpp"
|
||||||
|
|
||||||
namespace icinga
|
namespace icinga
|
||||||
|
@ -33,7 +34,8 @@ namespace icinga
|
||||||
class I2_ICINGA_API ObjectUtils
|
class I2_ICINGA_API ObjectUtils
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static Service::Ptr GetService(const String& host, const String& name);
|
static Service::Ptr GetService(const Value& host, const String& name);
|
||||||
|
static Array::Ptr GetServices(const Value& host);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ObjectUtils(void);
|
ObjectUtils(void);
|
||||||
|
|
Loading…
Reference in New Issue