mirror of https://github.com/Icinga/icinga2.git
Fix attributes names for joins; update documentation
refs #10551 fixes #10576
This commit is contained in:
parent
0285bcefb5
commit
284a10150b
|
@ -307,7 +307,9 @@ is the lower-case version of the object's type name.
|
||||||
|
|
||||||
For example when querying objects of type `Host` the variable in the filter expression is named
|
For example when querying objects of type `Host` the variable in the filter expression is named
|
||||||
`host`. Additionally related objects such as the host's check command are also made available
|
`host`. Additionally related objects such as the host's check command are also made available
|
||||||
(e.g., via the `check_command` variable).
|
(e.g., via the `check_command` variable). The variable names are the exact same as for the `joins`
|
||||||
|
query parameter; see [object query joins](9-icinga2-api.md#icinga2-api-config-objects-query-joins)
|
||||||
|
for details.
|
||||||
|
|
||||||
The object is also made available via the `obj` variable. This makes it easier to build
|
The object is also made available via the `obj` variable. This makes it easier to build
|
||||||
filters which can be used for more than one object type (e.g., for permissions).
|
filters which can be used for more than one object type (e.g., for permissions).
|
||||||
|
@ -424,43 +426,45 @@ Each response entry in the results array contains the following attributes:
|
||||||
joins | dictionary | [Joined object types](9-icinga2-api.md#icinga2-api-config-objects-query-joins) as key, attributes as nested dictionary. Disabled by default.
|
joins | dictionary | [Joined object types](9-icinga2-api.md#icinga2-api-config-objects-query-joins) as key, attributes as nested dictionary. Disabled by default.
|
||||||
meta | dictionary | Contains `used_by` object references. Disabled by default, enable it using `?meta=used_by` as URL parameter.
|
meta | dictionary | Contains `used_by` object references. Disabled by default, enable it using `?meta=used_by` as URL parameter.
|
||||||
|
|
||||||
#### <a id="icinga2-api-config-objects-query-joins"></a> Object Queries and Joins
|
#### <a id="icinga2-api-config-objects-query-joins"></a> Object Query Joins
|
||||||
|
|
||||||
Icinga 2 knows about object relations, i.e. when querying service objects
|
Icinga 2 knows about object relations. For example it can optionally return
|
||||||
the query handler will allow you to add the referenced host object and its
|
information about the host when querying service objects.
|
||||||
attributes to the result set inside the `joins` result attribute.
|
|
||||||
|
|
||||||
Add the following URL parameter to join all host attributes:
|
The following query retrieves all host attributes:
|
||||||
|
|
||||||
?joins=host
|
https://localhost:5665/v1/objects/services?joins=host
|
||||||
|
|
||||||
If you just want to join specific object attributes, selectively add them
|
Instead of requesting all host attributes you can also limit the output to specific
|
||||||
as URL parameters:
|
attributes:
|
||||||
|
|
||||||
?joins=host.name&joins=host.address
|
https://localhost:5665/v1/objects/services?joins=host.name&joins=host.address
|
||||||
|
|
||||||
You can enable all default joins using
|
You can request that all available joins are returned in the result set by using
|
||||||
|
the `all_joins` query parameter.
|
||||||
|
|
||||||
?all_joins=1
|
https://localhost:5665/v1/objects/services?all_joins=1
|
||||||
|
|
||||||
**Note**: Select your required attributes beforehand by passing them to your
|
> **Note**
|
||||||
request. The default result set might get huge.
|
>
|
||||||
|
> For performance reasons you should only request attributes which your application
|
||||||
|
> requires.
|
||||||
|
|
||||||
Each joined object will use its own attribute name inside the `joins` response
|
The following joins are available:
|
||||||
attribute. There is an exception for multiple objects used in dependencies and zones.
|
|
||||||
|
|
||||||
Object Type | Object Relations (prefix name)
|
Object Type | Object Relations (`joins` prefix name)
|
||||||
-------------|---------------------------------
|
-------------|------------------------------------------
|
||||||
Service | host, notification, check\_command, event\_command, command\_endpoint
|
Service | host, check\_command, check\_period, event\_command, command\_endpoint
|
||||||
Host | notification, check\_command, event\_command, command\_endpoint
|
Host | check\_command, check\_period, event\_command, command\_endpoint
|
||||||
Notification | host, service, command, period
|
Notification | host, service, command, period
|
||||||
Dependency | child\_host, child\_service, parent\_host, parent\_service, period
|
Dependency | child\_host, child\_service, parent\_host, parent\_service, period
|
||||||
User | period
|
User | period
|
||||||
Zones | parent
|
Zones | parent
|
||||||
|
|
||||||
In addition to these parameters a [filter](9-icinga2-api.md#icinga2-api-filters) may be provided.
|
Here's an example that retrieves all service objects for hosts which have had their `os`
|
||||||
|
custom attribute set to `Linux`. The result set contains the `display_name` and `check_command`
|
||||||
Here's an example that retrieves all service objects for hosts which have had their `os` custom attribute set to `Linux`. The result set contains the `display_name` and `check_command` attributes for the service. The query also returns the host's `name` and `address` attribute via a join:
|
attributes for the service. The query also returns the host's `name` and `address` attribute
|
||||||
|
via a join:
|
||||||
|
|
||||||
$ curl -k -s -u root:icinga 'https://localhost:5665/v1/objects/services?attrs=display_name&attrs=check_command&joins=host.name&joins=host.address&filter=host.vars.os==%22Linux%22' | python -m json.tool
|
$ curl -k -s -u root:icinga 'https://localhost:5665/v1/objects/services?attrs=display_name&attrs=check_command&joins=host.name&joins=host.address&filter=host.vars.os==%22Linux%22' | python -m json.tool
|
||||||
|
|
||||||
|
|
|
@ -148,20 +148,27 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
|
||||||
results->Reserve(objs.size());
|
results->Reserve(objs.size());
|
||||||
|
|
||||||
std::set<String> joinAttrs;
|
std::set<String> joinAttrs;
|
||||||
|
std::set<String> userJoinAttrs;
|
||||||
|
|
||||||
if (allJoins) {
|
if (ujoins) {
|
||||||
for (int fid = 0; fid < type->GetFieldCount(); fid++) {
|
|
||||||
Field field = type->GetFieldInfo(fid);
|
|
||||||
if (field.Attributes & FANavigation)
|
|
||||||
joinAttrs.insert(field.Name);
|
|
||||||
}
|
|
||||||
} else if (ujoins) {
|
|
||||||
ObjectLock olock(ujoins);
|
ObjectLock olock(ujoins);
|
||||||
BOOST_FOREACH(const String& ujoin, ujoins) {
|
BOOST_FOREACH(const String& ujoin, ujoins) {
|
||||||
joinAttrs.insert(ujoin.SubStr(0, ujoin.FindFirstOf(".")));
|
userJoinAttrs.insert(ujoin.SubStr(0, ujoin.FindFirstOf(".")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int fid = 0; fid < type->GetFieldCount(); fid++) {
|
||||||
|
Field field = type->GetFieldInfo(fid);
|
||||||
|
|
||||||
|
if (!(field.Attributes & FANavigation))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!allJoins && userJoinAttrs.find(field.NavigationName) == userJoinAttrs.end())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
joinAttrs.insert(field.Name);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_FOREACH(const ConfigObject::Ptr& obj, objs) {
|
BOOST_FOREACH(const ConfigObject::Ptr& obj, objs) {
|
||||||
Dictionary::Ptr result1 = new Dictionary();
|
Dictionary::Ptr result1 = new Dictionary();
|
||||||
results->Add(result1);
|
results->Add(result1);
|
||||||
|
@ -210,8 +217,6 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
|
||||||
|
|
||||||
BOOST_FOREACH(const String& joinAttr, joinAttrs) {
|
BOOST_FOREACH(const String& joinAttr, joinAttrs) {
|
||||||
Object::Ptr joinedObj;
|
Object::Ptr joinedObj;
|
||||||
String prefix;
|
|
||||||
|
|
||||||
int fid = type->GetFieldId(joinAttr);
|
int fid = type->GetFieldId(joinAttr);
|
||||||
|
|
||||||
if (fid < 0) {
|
if (fid < 0) {
|
||||||
|
@ -231,8 +236,7 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
|
||||||
if (!joinedObj)
|
if (!joinedObj)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
prefix = field.NavigationName;
|
String prefix = field.NavigationName;
|
||||||
boost::algorithm::to_lower(prefix);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
joins->Set(prefix, SerializeObjectAttrs(joinedObj, prefix, ujoins, true, allJoins));
|
joins->Set(prefix, SerializeObjectAttrs(joinedObj, prefix, ujoins, true, allJoins));
|
||||||
|
|
Loading…
Reference in New Issue