Commit dd1fa216 authored by Markus Frosch's avatar Markus Frosch
Browse files

Merge branch 'mergeable' of git.netways.org:netways-cs/icinga-sla-availability

Conflicts:
	COPYING
	LICENSE

Refs #4874
parents 87c94b1a c9c5b314
This diff is collapsed.
SLA Availability Reporting
==========================
Icinga's SLA reporting consists of the following components:
* SQL schema extension
- cache tables
- procedures to update caches
- function to query SLA values
* Jasper example reports
Requirements
------------
What is required to run the SLA reporting?
* Icinga 1 or 2
* with enabled IDO export
* and especially "state history" enabled (which is default)
* laying in a MySQL database
While Icinga supports other databases, the SLA analysis has only been written
for MySQL.
Installation
------------
### Extend the IDO
The schema extension will add some tables, procedures and functions.
See [details](#SQL schema components) below for more information.
```
cat sql/mysql/*.sql | mysql icinga
```
This also works for updating and will replace the existing elements.
### Cleanup old SLA stuff
If you tried one of the older versions of this SLA reporting the schema names
were different.
To clean this up you can use a SQL script to remove those tables and functions.
Normally these tables only provide cache, so there is no sensible data.
```
mysql icinga < sql/mysql/tools/remove_old_sla_schema.sql
```
### Jasper Server
An example report with SLA data is included in the JasperReports examples set.
SQL schema components
---------------------
The following schema components belong to this SQL reporting:
| name | type | purpose |
| ----------------------------- | --------- | --------------------------------------------------------------- |
| icinga_sla_eventcache | table | Cache table for calculated events |
| icinga_sla_periods_outofsla | table | Cache of periods that count as out-of-SLA |
| icinga_sla_cache_events | procedure | Calculate (SLA relevant) events in the requested period |
| icinga_sla_refresh_periods | procedure | Fill the periods cache with data based on Icinga's time periods |
| icinga_sla_set_holiday | procedure | Set a single day to be a holiday - as out-of-SLA |
| icinga_sla_state_availability | function | Get the SLA values while using a cache |
The directly used component is usually *icinga_sla_state_availability*.
How to query
------------
You can query the SLA values in a SQL join context, meaning you can query the
values within any SELECT.
Here is an example:
``` sql
SELECT
name1,
icinga_sla_state_availability(
object_id,
0,
'2014-10-01',
'2014-11-01',
NULL
) * 100 AS state_ok
FROM icinga_objects
WHERE
is_active = 1
AND objecttype_id = 1;
```
The function itself has the following arguments:
| # | parameter | type | description |
| - | ----------- | --------------- | -------------------------------------------------------------|
| 1 | object_id | BIGINT UNSIGNED | object id of the host or service |
| 2 | state | SMALLINT | state id which you want to retrieve percentage for |
| 3 | start_time | DATETIME | start of time frame |
| 4 | end_time | DATETIME | end of time frame |
| 5 | timeperiod | BIGINT UNSIGNED | time period object id to limit on a SLA period (can be NULL) |
The returned value is a float between 0 and 1, 0.85 meaning 85% of that state
in the time period.
State IDs are as follows:
| # | service | host |
| - | -------- | ----------- |
| 0 | OK | UP |
| 1 | WARNING | DOWN |
| 2 | CRITICAL | UNREACHABLE |
| 3 | UNKNOWN | -- |
Whats neat about our cached implementation here is that you can use the query
function multiple times, while it is generated cached event once per object_id.
Maintain SLA periods
--------------------
The so called out-of-SLA periods can be calculated based on the time periods
Icinga knows.
There is a procedure refreshing that data for the current year until 4 years
into the future.
``` sql
CALL icinga_sla_refresh_periods();
```
Check the table *icinga_sla_periods_outofsla* for generated data.
The utility function *icinga_sla_set_holiday* can be used to declare a certain
day as an holiday, setting it out-of-SLA.
``` sql
CALL icinga_sla_set_holiday(1234, '2014-12-25');
```
You can lookup time periods in the object table:
``` sql
SELECT object_id, name1 FROM icinga_objects WHERE objecttype_id = 9;
```
**Note:** You always need to re-apply your manual holidays or any other
modifications after running *icinga_sla_refresh_periods*!
## Limitations
TODO
How it works
------------
This chapter tries to describe how the SLA calculation works.
TODO
Manually use the cached data
----------------------------
TODO
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="SLA Host availability sub report in given time" language="groovy" pageWidth="555" pageHeight="842" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="61c81355-fdc2-4af3-adbd-b7f866d73c81">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="142"/>
<property name="ireport.jasperserver.url" value="http://s999vsimr00/jasperserver/services/repository"/>
<subDataset name="graph_availability" uuid="84a78aa4-d361-4f5a-9dea-cb02d4d0c35b">
<parameter name="p_host_object_id" class="java.lang.Integer">
<defaultValueExpression><![CDATA[$P{p_host_object_id}]]></defaultValueExpression>
</parameter>
<parameter name="p_date_start" class="java.sql.Timestamp">
<defaultValueExpression><![CDATA[$P{p_date_start}]]></defaultValueExpression>
</parameter>
<parameter name="p_date_end" class="java.sql.Timestamp">
<defaultValueExpression><![CDATA[$P{p_date_end}]]></defaultValueExpression>
</parameter>
<parameter name="p_period" class="java.math.BigDecimal"/>
<parameter name="p_timeperiod_id" class="java.lang.Integer">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[CALL icinga_get_sladetail(
$P{p_host_object_id},
$P{p_date_start},
$P{p_date_end},
$P{p_timeperiod_id}
)]]>
</queryString>
<field name="sla_state0" class="java.lang.Double"/>
<field name="sla_state1" class="java.lang.Double"/>
<field name="sla_state2" class="java.lang.Double"/>
<field name="sla_state3" class="java.lang.Double"/>
<field name="state0" class="java.lang.Double"/>
<field name="state1" class="java.lang.Double"/>
<field name="state2" class="java.lang.Double"/>
<field name="state3" class="java.lang.Double"/>
</subDataset>
<parameter name="p_host_object_id" class="java.lang.Integer"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA[""]]></defaultValueExpression>
</parameter>
<parameter name="p_date_start" class="java.sql.Timestamp">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="p_date_end" class="java.sql.Timestamp">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="p_host_name" class="java.lang.String">
<defaultValueExpression><![CDATA[$P{p_host_name}]]></defaultValueExpression>
</parameter>
<parameter name="p_timeperiod_id" class="java.lang.Integer"/>
<parameter name="p_display_host_avail" class="java.lang.Boolean">
<defaultValueExpression><![CDATA[true]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[select name1,
address,
service_object_id,
timestampdiff(second, $P{p_date_start}, $P{p_date_end}) as period
from icinga_objects,
icinga_hosts,
icinga_services
where icinga_objects.object_id = icinga_hosts.host_object_id
and icinga_hosts.host_object_id = icinga_services.host_object_id
and object_id = $P{p_host_object_id}]]>
</queryString>
<field name="name1" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="address" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="service_object_id" class="java.lang.Integer">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="period" class="java.lang.Long">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="600">
<printWhenExpression><![CDATA[$P{p_display_host_avail}]]></printWhenExpression>
<rectangle radius="0">
<reportElement x="5" y="75" width="185" height="275" backcolor="#F5F5F5" uuid="310adb8b-617f-4396-9697-a9f081eb128e"/>
<graphicElement>
<pen lineStyle="Solid" lineColor="#CCCCCC"/>
</graphicElement>
</rectangle>
<staticText>
<reportElement x="10" y="80" width="150" height="40" uuid="23fe246c-5f6a-40b8-ad54-35c3e0f8f93c"/>
<textElement markup="none">
<font isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[This graph displays the availability for given host]]></text>
</staticText>
<rectangle radius="0">
<reportElement x="5" y="25" width="300" height="20" backcolor="#F5F5F5" uuid="ccb801cc-cce0-4093-90b3-d39a6eef9a9e"/>
<graphicElement>
<pen lineStyle="Solid" lineColor="#CCCCCC"/>
</graphicElement>
</rectangle>
<rectangle radius="0">
<reportElement x="191" y="75" width="364" height="275" backcolor="#F5F5F5" uuid="128c6128-9a57-4e6b-b4ca-dcee885e43e2"/>
<graphicElement>
<pen lineStyle="Solid" lineColor="#CCCCCC"/>
</graphicElement>
</rectangle>
<pieChart>
<chart theme="aegean">
<reportElement mode="Transparent" x="192" y="76" width="362" height="273" forecolor="#000000" backcolor="#FFFFFF" uuid="c24682a0-aea3-4099-9fea-86e92e5094d6"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend position="Bottom"/>
</chart>
<pieDataset>
<dataset>
<datasetRun subDataset="graph_availability" uuid="b7798fc3-270a-419c-94dd-58904cf3c398">
<datasetParameter name="p_host_object_id">
<datasetParameterExpression><![CDATA[$P{p_host_object_id}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="p_date_start">
<datasetParameterExpression><![CDATA[$P{p_date_start}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="p_date_end">
<datasetParameterExpression><![CDATA[$P{p_date_end}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="p_period">
<datasetParameterExpression><![CDATA[$F{period}]]></datasetParameterExpression>
</datasetParameter>
<datasetParameter name="p_timeperiod_id">
<datasetParameterExpression><![CDATA[$P{p_timeperiod_id}]]></datasetParameterExpression>
</datasetParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
</dataset>
<pieSeries>
<keyExpression><![CDATA["OK"]]></keyExpression>
<valueExpression><![CDATA[new java.math.BigDecimal($F{sla_state0}).setScale(5,BigDecimal.ROUND_HALF_UP).multiply(100)]]></valueExpression>
<labelExpression><![CDATA[new java.math.BigDecimal($F{sla_state0}).setScale(5,BigDecimal.ROUND_HALF_UP).multiply(100).toString() + "%"]]></labelExpression>
</pieSeries>
<pieSeries>
<keyExpression><![CDATA["Down"]]></keyExpression>
<valueExpression><![CDATA[new java.math.BigDecimal($F{sla_state1}).setScale(5,BigDecimal.ROUND_HALF_UP).multiply(100)]]></valueExpression>
<labelExpression><![CDATA[new java.math.BigDecimal($F{sla_state1}).setScale(5,BigDecimal.ROUND_HALF_UP).multiply(100).toString() + "%"]]></labelExpression>
</pieSeries>
<pieSeries>
<keyExpression><![CDATA["Unreachable"]]></keyExpression>
<valueExpression><![CDATA[new java.math.BigDecimal($F{sla_state2}).setScale(5,BigDecimal.ROUND_HALF_UP).multiply(100)]]></valueExpression>
<labelExpression><![CDATA[new java.math.BigDecimal($F{sla_state2}).setScale(5,BigDecimal.ROUND_HALF_UP).multiply(100).toString() + "%"]]></labelExpression>
</pieSeries>
</pieDataset>
<piePlot isShowLabels="false" isCircular="true" legendLabelFormat="{0} ({1} %)">
<plot backgroundAlpha="0.0" foregroundAlpha="0.5">
<seriesColor seriesOrder="0" color="#00CC00"/>
<seriesColor seriesOrder="1" color="#CC0000"/>
<seriesColor seriesOrder="2" color="#FF8000"/>
</plot>
<itemLabel>
<font size="8"/>
</itemLabel>
</piePlot>
</pieChart>
<textField>
<reportElement x="40" y="120" width="120" height="20" uuid="a8fbdb81-6529-45f3-b202-70980a4d0fbe"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$P{p_date_start}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="10" y="180" width="100" height="20" uuid="bdea3e4b-4712-4eba-8f50-8bf6f5aeb7f0"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Period in minutes:]]></text>
</staticText>
<staticText>
<reportElement x="10" y="120" width="30" height="20" uuid="c42d7f98-afff-48a0-9773-4b5fe4262f0e"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Start:]]></text>
</staticText>
<staticText>
<reportElement x="10" y="140" width="30" height="20" uuid="a117bc5b-4370-40fd-9da9-a1302155c8ed"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[End:]]></text>
</staticText>
<textField>
<reportElement x="40" y="140" width="120" height="20" uuid="17d94421-f420-452a-8323-0929e8951c48"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$P{p_date_end}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="110" y="180" width="80" height="20" uuid="994ebae8-b9c0-4837-b345-649283df9c61"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[($F{period} / 60).setScale(2,BigDecimal.ROUND_HALF_UP)]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="10" y="25" width="65" height="20" uuid="2bd79819-e05a-4311-9920-a7cdf3cfcf06"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Hostname:]]></text>
</staticText>
<textField>
<reportElement x="75" y="25" width="230" height="20" uuid="7f763137-c5ae-4668-b25a-80aa0c954660"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{name1}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="10" y="200" width="100" height="20" uuid="45c8c3f7-ba2e-47fd-8a27-26004582dab7"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Period in hours:]]></text>
</staticText>
<textField isBlankWhenNull="true">
<reportElement x="110" y="200" width="80" height="20" uuid="c5704109-132f-474a-9af1-fdff0040674a"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[($F{period} / 60 / 60).setScale(2,BigDecimal.ROUND_HALF_UP)]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="110" y="220" width="80" height="20" uuid="7dd7b90c-4ff5-4436-8e01-588c7873c909"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[($F{period} / 60 / 60 / 24).setScale(2,BigDecimal.ROUND_HALF_UP)]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="10" y="220" width="100" height="20" uuid="d52a0f00-efd2-46a1-b64a-5cc60fcfb0eb"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Period in days:]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band splitType="Stretch"/>
</columnHeader>
<detail>
<band height="50">
<subreport>
<reportElement x="0" y="0" width="555" height="50" uuid="2cdc7d71-391d-454f-b6d6-061b64e064c2"/>
<subreportParameter name="p_timeperiod_id">
<subreportParameterExpression><![CDATA[$P{p_timeperiod_id}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="p_date_end">
<subreportParameterExpression><![CDATA[$P{p_date_end}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="p_date_start">
<subreportParameterExpression><![CDATA[$P{p_date_start}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="p_service_object_id">
<subreportParameterExpression><![CDATA[$F{service_object_id}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="p_host_name">
<subreportParameterExpression><![CDATA[$F{name1}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "service/slaavailabilityInGivenTime"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band splitType="Stretch"/>
</pageFooter>
<summary>
<band splitType="Stretch"/>
</summary>
</jasperReport>
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="SLA Availability report about a selected host in given time" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isTitleNewPage="true" uuid="5bfd5658-7b04-49f6-9902-1381c92c854f">
<property name="ireport.zoom" value="0.8467108950806659"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<import value="org.icinga.reporting.DateHelper"/>
<template><![CDATA["repo:/icinga/styles/IcingaStyleBase.jrtx"]]></template>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["repo:/icinga/templates/sub/"]]></defaultValueExpression>
</parameter>
<parameter name="p_host_object_id" class="java.lang.Integer">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="p_date_start" class="java.sql.Timestamp">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="p_date_end" class="java.sql.Timestamp">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="p_timeperiod" class="java.lang.String">
<defaultValueExpression><![CDATA["last_month"]]></defaultValueExpression>
</parameter>
<parameter name="p_final_date_start" class="java.sql.Timestamp" isForPrompting="false">
<defaultValueExpression><![CDATA[$P{p_timeperiod} == "last_week" ? DateHelper.getLastWeekStart() : $P{p_timeperiod} == "last_month" ? DateHelper.getLastMonthStart() : $P{p_timeperiod} == "last_year" ? DateHelper.getLastYearStart() : $P{p_date_start}]]></defaultValueExpression>
</parameter>
<parameter name="p_final_date_end" class="java.sql.Timestamp" isForPrompting="false">
<defaultValueExpression><![CDATA[$P{p_timeperiod} == "last_week" ? DateHelper.getLastWeekEnd() : $P{p_timeperiod} == "last_month" ? DateHelper.getLastMonthEnd() : $P{p_timeperiod} == "last_year" ? DateHelper.getLastYearEnd() : $P{p_date_end}]]></defaultValueExpression>
</parameter>
<parameter name="p_timeperiod_id" class="java.lang.Integer">
<defaultValueExpression><![CDATA[363]]></defaultValueExpression>
</parameter>
<parameter name="p_display_host_avail" class="java.lang.Boolean">
<defaultValueExpression><![CDATA[true]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[select ho.name1 AS name1,
h.address AS address,
tpo.name1 AS timeperiod_name
from icinga_objects ho, icinga_hosts h
left join icinga_objects tpo ON tpo.objecttype_id = 9 AND tpo.object_id = $P{p_timeperiod_id}
where ho.object_id = h.host_object_id
and h.config_type = 1
and ho.object_id = $P{p_host_object_id}]]>
</queryString>
<field name="name1" class="java.lang.String"/>
<field name="address" class="java.lang.String"/>
<field name="timeperiod_name" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="800">
<rectangle>
<reportElement x="0" y="0" width="555" height="800" uuid="4313839c-0990-49b8-a1f6-6638e15b7ddd"/>
<graphicElement>
<pen lineColor="#999999"/>
</graphicElement>
</rectangle>
<image scaleImage="FillFrame">
<reportElement x="33" y="200" width="521" height="599" uuid="6ee1f824-8f40-44a1-ad73-e3a861caf6db"/>
<graphicElement>
<pen lineWidth="0.0" lineColor="#999999"/>
</graphicElement>
<imageExpression><![CDATA["repo:/icinga/images/icinga_background.jpg"]]></imageExpression>
</image>
<rectangle radius="0">
<reportElement x="33" y="175" width="490" height="25" forecolor="#F5F5F5" backcolor="#F5F5F5" uuid="265c4658-2243-48a3-8828-f90ef1c26939"/>
<graphicElement>
<pen lineWidth="1.0" lineColor="#999999"/>
</graphicElement>
</rectangle>
<rectangle radius="0">
<reportElement x="70" y="400" width="400" height="80" forecolor="#F5F5F5" backcolor="#F5F5F5" uuid="604ce29f-51a8-4d46-aeff-4ca034e219aa"/>
<graphicElement>
<pen lineWidth="1.0" lineColor="#999999"/>
</graphicElement>
</rectangle>
<rectangle radius="0">
<reportElement x="70" y="300" width="400" height="40" forecolor="#F5F5F5" backcolor="#F5F5F5" uuid="38b45323-3895-42d9-8eb8-2e248890921f"/>
<graphicElement>
<pen lineWidth="1.0" lineColor="#999999"/>
</graphicElement>
</rectangle>
<image>
<reportElement x="2" y="1" width="555" height="64" uuid="0ceccf4b-3d6b-41ff-8395-cf1898140cb8"/>
<graphicElement>
<pen lineWidth="0.0"/>
</graphicElement>
<imageExpression><![CDATA["repo:/icinga/images/icinga_banner.jpg"]]></imageExpression>
</image>
<staticText>
<reportElement x="1" y="175" width="554" height="25" forecolor="#000000" backcolor="#DCDCDC" uuid="3fcbecea-ae09-4307-a806-65074debb7a3"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="14" isBold="true" isItalic="false"/>
</textElement>
<text><![CDATA[SLA Host Availability Report]]></text>
</staticText>
<staticText>
<reportElement x="80" y="300" width="80" height="20" forecolor="#000000" backcolor="#FFFFFF" uuid="e6bedf63-d3bb-4a6d-a961-47cfa42f1434"/>
<textElement verticalAlignment="Middle">
<font size="10" isBold="true"/>
</textElement>
<text><![CDATA[Description:]]></text>
</staticText>
<staticText>
<reportElement x="160" y="300" width="310" height="20" uuid="07daaf4e-42f4-4ef1-b01c-3f8d8a623df8"/>
<textElement verticalAlignment="Middle">
<font size="10"/>
</textElement>
<text><![CDATA[SLA Availability Report for host in given time]]></text>
</staticText>
<staticText>
<reportElement x="80" y="400" width="80" height="20" forecolor="#000000" uuid="47d5f1a9-bd4d-49c7-b89e-94296a8248c6"/>
<textElement verticalAlignment="Middle">
<font size="10" isBold="true"/>
</textElement>
<text><![CDATA[Hostname:]]></text>
</staticText>
<textField>
<reportElement style="Cover" x="160" y="400" width="310" height="20" uuid="f4432f38-27e0-4adf-aa0e-64f821bde410"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{name1}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="80" y="320" width="80" height="20" forecolor="#000000" uuid="d568ad93-2a96-401c-89f3-ca4098057d49"/>
<textElement verticalAlignment="Middle">
<font size="10" isBold="true"/>
</textElement>
<text><![CDATA[Creation:]]></text>
</staticText>
<textField pattern="EEE, d MMM yyyy HH:mm:ss">
<reportElement style="Cover" x="160" y="320" width="310" height="20" uuid="9721650b-c62e-40d3-8037-88b9d99b81bd"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
</textField>
<rectangle radius="0">
<reportElement x="33" y="175" width="5" height="25" backcolor="#81AAB8" uuid="bcf0febd-2a5a-4565-95de-36be1ac079a4"/>
<graphicElement>
<pen lineWidth="0.0" lineColor="#666666"/>
</graphicElement>
</rectangle>
<rectangle radius="0">
<reportElement x="518" y="175" width="5" height="25" backcolor="#81AAB8" uuid="c32bfe7b-089d-41a7-ada7-de0f8a278838"/>
<graphicElement>
<pen lineWidth="0.0" lineColor="#666666"/>
</graphicElement>
</rectangle>
<rectangle radius="0">
<reportElement x="70" y="300" width="5" height="40" backcolor="#81AAB8" uuid="88e8bb32-a614-455b-8f7a-13e5f22a1c4c"/>
<graphicElement>
<pen lineWidth="0.0" lineColor="#666666"/>
</graphicElement>
</rectangle>
<rectangle radius="0">
<reportElement x="70" y="400" width="5" height="80" backcolor="#81AAB8" uuid="b361823f-1d1e-4bf7-a7ea-a55dd9769bcb"/>
<graphicElement>
<pen lineWidth="0.0" lineColor="#666666"/>
</graphicElement>
</rectangle>
<rectangle radius="0">
<reportElement x="0" y="64" width="555" height="15" forecolor="#2C2B2C" backcolor="#2C2B2C" uuid="b718469b-c4db-4979-8613-a0f02b10c460"/>
<graphicElement>
<pen lineWidth="1.0" lineColor="#999999"/>
</graphicElement>
</rectangle>
<image>
<reportElement x="497" y="177" width="21" height="21" uuid="cea074b4-b23a-4dae-8bf2-d5df8ba641a2"/>
<imageExpression><![CDATA["repo:/icinga/images/icinga_logo_header.png"]]></imageExpression>
</image>
<staticText>