We use cookies to ensure that we give you the best experience on our website.  Visit our Privacy Policy to learn more. If you continue to use this site, we will assume that you are okay with it.

Your choices regarding cookies on this site.
Your preferences have been updated.
In order for the changes to take effect completely please clear your browser cookies and cache. Then reload the page.

Werk #6240: WATO Web-API: Implemented SLA API interface

ComponentWATO
TitleWATO Web-API: Implemented SLA API interface
Date2018-06-29 13:33:34
Checkmk EditionCheckmk Enterprise Edition (CEE)
Checkmk Version1.6.0b1,1.5.0b8
LevelTrivial Change
ClassNew Feature
CompatibilityCompatible - no manual interaction needed

SLA data for services can now be fetched via the Web API. The new action is named get_sla.

The request object is structured like this:

{
"query": [ [[{sla_configuration}], [{timerange_spec_1}], [{host/service pair}]] ]
}

A query entry always consists of 3 fields.

  • The list of sla_definitions
  • The list of timerange specificiations
  • The list of host/service pairs

The sla_definition is simply the id of the configured SLA definition.

The timerange specification has some special syntax Some examples:

#                                 # Field to send in query
#            "Today"              # "d0"
#            "Yesterday"          # "d1"
#
#            "This week"          # "w0"
#            "Last week"          # "w1"
#
#            "This month"         # "m0"
#            "Last month"         # "m1"
#
#            "This year"          # "y0"
#            "Last year"          # "y1"
#
#            "The last..."        # "last:86400"
#            "Time range"         # "range:1530271236:1530281236"
#
# SLA configurations have no distinct timestamp. The timestamp depends on the SLA period
# The following example says
# - Start at the penultimate sla period (Note: 0 is current period)
# - Look back additional 4 sla periods
# There will be 5 period results
#            "Sla period range"   # "sla:2:4"

The of host/service pairs identifies the required services.

A valid request may look like

{
"query": [ [["sla_configuration_1"], ["w1"], [["HostA", "ServiceB"]]] ]
}

This queries the sla_configuration_1 with the timerange "Last week" for the service HostA/ServiceB. This returns 1 result.

As you might have noticed, each field in the query is enclosed by a list. That's because each query entry may have multiple values specified.

{
"query": [ [["sla_configuration_1", "sla_configuration_2"], ["w1"], [["HostA", "ServiceB"]]] ]
}

This queries the sla_configuration_1 and sla_configuration_2 with the timerange "Last week" for the service HostA/ServiceB. This returns 2 results.

Now add an additional timerange specification

{
"query": [ [["sla_configuration_1", "sla_configuration_2"], ["w1", "w0"], [["HostA", "ServiceB"]]] ]
}

This queries the sla_configuration_1 and sla_configuration_2 with the timerange "Last week" and "This week" for the service HostA/ServiceB. This returns 4 results.

Finally, you can also add additional triples to the query.

{
"query": [ [["sla_configuration_1"], ["w1"], [["HostA", "ServiceB"]]],
[["sla_configuration_2"], ["w0"], [["HostX", "ServiceY"]]] ]
}

This queries sla_configuration_1 with the timerange "Last week" for HostA/ServiceB and sla_configuration_2 with the timerange "This week" for HostX/ServiceY.

The returned result for these queries is a python dictionary with lots of infos

{'mysite': {'myhost': {'CPU load':
{(('myhost', 'CPU load'), 'sla_configuration_1', ('sla_period_range', (0, 1)), 'weekly'):
{'plugin_results': [{'period_results': [{'duration': 604800.0,
'sla_broken': False,
'statistics': {'duration': {-1: 604800.0},
'percentage': {-1: 100.0}},
'subresults': [{'deviation_info': {'deviation': 0.0,
'deviation_state': 2,
'levels': (0,
0),
'limit': 0.0},
'error_instances': [],
'requirement': (0,
'min',
0.0),
'sla_broken': False}],
'timerange': (1529272800.0,
1529877600.0)},
{'duration': 396134.0,
'sla_broken': False,
'statistics': {'duration': {-1: 385358.0,
0: 10776},
'percentage': {-1: 97.27970838150726,
0: 2.7202916184927326}},
'subresults': [{'deviation_info': {'deviation': 2.7202916184927326,
'deviation_state': 0,
'levels': (0,
0),
'limit': 0.0},
'error_instances': [],
'requirement': (0,
'min',
0.0),
'sla_broken': False}],
'timerange': (1529877600.0,
1530273734)}],
'plugin_id': 'service_state_percentage',
'timerange_sla_duration': 1000934.0}],
'sla_id': 'sla_configuration_1',
'sla_period': 'weekly'}}}}}

Keep in mind that this API implementation is an initial version, so there might be interface changes within the next months.