def test_servicegroup_service_downtime(mock_livestatus, register_builtin_html, dates): start_time, end_time = dates with mock_livestatus(expect_status_query=True) as live: live.expect_query([ "GET servicegroups", "Columns: members", "Filter: name = example", ]) live.expect_query( 'COMMAND [...] SCHEDULE_SVC_DOWNTIME;example.com;Memory;0;86400;17;0;120;;Boom', match_type='ellipsis', ) live.expect_query( 'COMMAND [...] SCHEDULE_SVC_DOWNTIME;example.com;CPU load;0;86400;17;0;120;;Boom', match_type='ellipsis', ) live.expect_query( 'COMMAND [...] SCHEDULE_SVC_DOWNTIME;heute;CPU load;0;86400;17;0;120;;Boom', match_type='ellipsis', ) downtimes.schedule_servicegroup_service_downtime( sites.live(), 'example', start_time, end_time, recur="day_of_month", duration=120, comment="Boom", )
def create_service_related_downtime(params): """Create a service related scheduled downtime""" body = params['body'] live = sites.live() downtime_type: DowntimeType = body['downtime_type'] if downtime_type == 'service': downtime_commands.schedule_service_downtime( live, host_name=body['host_name'], service_description=body['service_descriptions'], start_time=body['start_time'], end_time=body['end_time'], recur=body['recur'], duration=body['duration'], user_id=config.user.ident, comment=body.get( 'comment', f"Downtime for services {', '.join(body['service_descriptions'])!r}@{body['host_name']!r}" ), ) elif downtime_type == 'servicegroup': downtime_commands.schedule_servicegroup_service_downtime( live, servicegroup_name=body['servicegroup_name'], start_time=body['start_time'], end_time=body['end_time'], recur=body['recur'], duration=body['duration'], user_id=config.user.ident, comment=body.get( 'comment', f"Downtime for servicegroup {body['servicegroup_name']!r}"), ) elif downtime_type == 'service_by_query': downtime_commands.schedule_services_downtimes_with_query( live, query=body['query'], start_time=body['start_time'], end_time=body['end_time'], recur=body['recur'], duration=body['duration'], user_id=config.user.ident, comment=body.get('comment', ''), ) else: return problem( status=400, title="Unhandled downtime-type.", detail=f"The downtime-type {downtime_type!r} is not supported.") return Response(status=204)
def create_downtime(params): """Create downtime""" body = params['body'] downtime_type: DowntimeType = body['downtime_type'] if downtime_type == 'host': downtime_commands.schedule_host_downtime( sites.live(), host_name=body['host_name'], include_all_services=body['include_all_services'], start_time=body['start_time'], end_time=body['end_time'], recur=body['recur'], duration=body['duration'], user_id=config.user.ident, comment=body.get('comment', f"Downtime for host {body['host_name']!r}"), ) elif downtime_type == 'hostgroup': downtime_commands.schedule_hostgroup_host_downtime( sites.live(), hostgroup_name=body['hostgroup_name'], include_all_services=body['include_all_services'], start_time=body['start_time'], end_time=body['end_time'], recur=body['recur'], duration=body['duration'], user_id=config.user.ident, comment=body.get('comment', f"Downtime for hostgroup {body['hostgroup_name']!r}"), ) elif downtime_type == 'service': downtime_commands.schedule_service_downtime( sites.live(), host_name=body['host_name'], service_description=body['service_descriptions'], start_time=body['start_time'], end_time=body['end_time'], recur=body['recur'], duration=body['duration'], user_id=config.user.ident, comment=body.get( 'comment', f"Downtime for services {', '.join(body['service_descriptions'])!r}@{body['host_name']!r}" ), ) elif downtime_type == 'servicegroup': downtime_commands.schedule_servicegroup_service_downtime( sites.live(), servicegroup_name=body['servicegroup_name'], include_hosts=body['include_hosts'], start_time=body['start_time'], end_time=body['end_time'], recur=body['recur'], duration=body['duration'], user_id=config.user.ident, comment=body.get('comment', f"Downtime for servicegroup {body['servicegroup_name']!r}"), ) else: return problem(status=400, title="Unhandled downtime-type.", detail=f"The downtime-type {downtime_type!r} is not supported.") return Response(status=204)