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

Component Setup
Title WATO Web-API: Implemented SLA API interface
Date Jun 29, 2018
Level Trivial Change
Class New Feature
Compatibility Compatible - no manual interaction needed
Checkmk versions & editions
1.6.0b1
Not yet released
Checkmk Enterprise (CEE), Checkmk MSP (CME)
1.6.0b1
Not yet released
Checkmk Enterprise (CEE), Checkmk MSP (CME)
1.6.0b1
Not yet released
Checkmk Enterprise (CEE), Checkmk MSP (CME)
1.6.0b1
Not yet released
Checkmk Enterprise (CEE), Checkmk MSP (CME)
1.6.0b1
Not yet released
Checkmk Enterprise (CEE), Checkmk MSP (CME)
1.6.0b1 Checkmk Enterprise (CEE), Checkmk MSP (CME)
1.5.0b8 Checkmk Enterprise (CEE), Checkmk MSP (CME)

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.

To the list of all Werks