String action_url = host->GetActionUrl();
String icon_image = host->GetIconImage();
String icon_image_alt = host->GetIconImageAlt();
- String statusmap_image = host->GetStatusmapImage();
+ String statusmap_image = CompatUtility::GetCustomAttributeConfig(host, "statusmap_image");
String display_name = host->GetDisplayName();
String address = host->GetAddress();
String address6 = host->GetAddress6();
- double x_2d, y_2d;
- CompatUtility::GetHost2dCoordX(host, &x_2d);
- CompatUtility::GetHost2dCoordY(host, &y_2d);
-
- String coords = Convert::ToString(x_2d) + "," + Convert::ToString(y_2d);
-
fp << "define host {" "\n"
"\t" "host_name" "\t" << host->GetName() << "\n";
if (!display_name.IsEmpty()) {
fp << "\t" "icon_image_alt" "\t" << icon_image_alt << "\n";
if (!statusmap_image.IsEmpty())
fp << "\t" "statusmap_image" "\t" << statusmap_image << "\n";
- if (!coords.IsEmpty())
- fp << "\t" "2d_coords" "\t" << coords << "\n";
std::set<Checkable::Ptr> parents = host->GetParents();
if (!host)
return Empty;
- double coord;
- if (!CompatUtility::GetHost2dCoordX(host, &coord))
- return Empty;
-
- return coord;
+ return CompatUtility::GetHost2dCoordX(host);
}
Value HostsTable::Y2dAccessor(const Value& row)
if (!host)
return Empty;
- double coord;
- if (!CompatUtility::GetHost2dCoordY(host, &coord))
- return Empty;
-
- return coord;
+ return CompatUtility::GetHost2dCoordY(host);
}
Value HostsTable::LatencyAccessor(const Value& row)
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. Required for external interfaces only.
- icon_image_alt |**Optional.** Icon image description for the host. Required for external interfaces only.
- statusmap_image |**Optional.** Statusmap image for the host. Required for external interfaces only.
- coords |**Optional.** A dictionary containing the keys `x_2d` and `y_2d` as floating point values. Required for external interfaces and status maps.
+ icon_image_alt |**Optional.** Icon image description for the host. Required for external interface only.
> **Best Practice**
>
> The `address` and `address6` attributes are required for running commands using
> the `$address$` and `$address6` runtime macros.
+Unlike Icinga 1.x the `statusmap_image` and `2d_coords` attributes are
+custom attributes only in Icinga 2.
+
+
### <a id="objecttype-hostgroup"></a> HostGroup
A group of hosts.
The `notes`, `notes_url`, `action_url`, `icon_image`, `icon_image_alt`
attributes for host and service objects are still available in Icinga 2.
+### <a id="differences-1x-2-action-url-notes-url-notes"></a> Statusmap Image, 2D Coords
+
+These attributes can be set using the `vars` dictionary in Icinga 2 `Host`
+or `Service` objects:
+
+ vars = {
+ "2d_coords" = "1,2"
+ statusmap_image = "../../images/logos/icinga.gif"
+ }
+
+External interfaces will recognize and display these attributes accordingly.
+
### <a id="differences-1x-2-custom-variables"></a> Custom Variables
Icinga 1.x custom variable attributes must be prefixed using an underscore (`_`).
CV = "my custom cmdb description"
}
+TODO
+
## <a id="differences-1x-2-host-service-relation"></a> Host Service Relation
In Icinga 1.x a service object is associated with a host by defining the
### <a id="differences-1x-2-notification-options"></a> Notification Options
+TODO
+
Unlike Icinga 1.x with the 'notification_options' attribute with comma-separated
state and type filters, Icinga 2 uses two configuration attributes for that.
All state and type filter use long names or'd with a pipe together
fields->Set("action_url", host->GetActionUrl());
fields->Set("icon_image", host->GetIconImage());
fields->Set("icon_image_alt", host->GetIconImageAlt());
- fields->Set("statusmap_image", host->GetStatusmapImage());
-
- double x_2d, y_2d;
- if (CompatUtility::GetHost2dCoordX(host, &x_2d) && CompatUtility::GetHost2dCoordY(host, &y_2d)) {
- fields->Set("have_2d_coords", 1);
- fields->Set("x_2d", x_2d);
- fields->Set("y_2d", y_2d);
- } else
- fields->Set("have_2d_coords", 0);
+ fields->Set("statusmap_image", CompatUtility::GetCustomAttributeConfig(host, "statusmap_image"));
+
+ Host2dCoords coords = CompatUtility::GetHost2dCoords(host);
+
+ fields->Set("have_2d_coords", coords.have_2d_coords);
+
+ if (coords.have_2d_coords) {
+ fields->Set("x_2d", coords.x_2d);
+ fields->Set("y_2d", coords.y_2d);
+ }
/* deprecated in 1.x */
fields->Set("have_3d_coords", 0);
return host->GetDisplayName();
}
-bool CompatUtility::GetHost2dCoordX(const Host::Ptr& host, double *coord)
+Host2dCoords CompatUtility::GetHost2dCoords(const Host::Ptr& host)
{
- Dictionary::Ptr coords = host->GetCoords();
+ ASSERT(host->OwnsLock());
+
+ Dictionary::Ptr vars = host->GetVars();
+ Host2dCoords bag;
+
+ if (vars) {
+ String coords = vars->Get("2d_coords");
+ bag.have_2d_coords = (!coords.IsEmpty() ? 1 : 0);
+
+ std::vector<String> tokens;
+ boost::algorithm::split(tokens, coords, boost::is_any_of(","));
- if (!coords)
- return false;
+ if (tokens.size() != 2)
+ bag.have_2d_coords = 0;
- *coord = coords->Get("x_2d");
+ if (bag.have_2d_coords == 1) {
+ bag.x_2d = tokens[0];
+ bag.y_2d = tokens[1];
+ }
+ } else {
+ bag.have_2d_coords = 0;
+ }
- return true;
+ return bag;
}
-bool CompatUtility::GetHost2dCoordY(const Host::Ptr& host, double *coord)
+String CompatUtility::GetHost2dCoordX(const Host::Ptr& host)
{
- Dictionary::Ptr coords = host->GetCoords();
+ Host2dCoords bag = GetHost2dCoords(host);
- if (!coords)
- return false;
+ if (bag.have_2d_coords == 0)
+ return Empty;
+
+ return bag.x_2d;
+}
- *coord = coords->Get("y_2d");
+String CompatUtility::GetHost2dCoordY(const Host::Ptr& host)
+{
+ Host2dCoords bag = GetHost2dCoords(host);
+
+ if (bag.have_2d_coords == 0)
+ return Empty;
- return true;
+ return bag.y_2d;
}
int CompatUtility::GetHostNotifyOnDown(const Host::Ptr& host)
namespace icinga
{
+/**
+ * @ingroup icinga
+ */
+struct Host2dCoords {
+ int have_2d_coords;
+ String x_2d;
+ String y_2d;
+};
+
/**
* Compatibility utility functions.
*
/* host */
static String GetHostAlias(const Host::Ptr& host);
- static bool GetHost2dCoordX(const Host::Ptr& host, double *coord);
- static bool GetHost2dCoordY(const Host::Ptr& host, double *coord);
+ static Host2dCoords GetHost2dCoords(const Host::Ptr& host);
+ static String GetHost2dCoordX(const Host::Ptr& host);
+ static String GetHost2dCoordY(const Host::Ptr& host);
static int GetHostNotifyOnDown(const Host::Ptr& host);
static int GetHostNotifyOnUnreachable(const Host::Ptr& host);
[config] String address;
[config] String address6;
- [config] String statusmap_image;
- [config] Dictionary::Ptr coords;
};
}
%attribute %string "address",
%attribute %string "address6",
- %attribute %string "statusmap_image",
- %attribute %dictionary "coords" {
- %attribute %number "x_2d",
- %attribute %number "y_2d"
- }
}
%type HostGroup {
GET hosts
-Columns: name notes notes_url action_url icon_image icon_image_alt statusmap_image x_2d y_2d
+Columns: name notes notes_url action_url icon_image icon_image_alt
ResponseHeader: fixed16