Skip to content

Commit

Permalink
Fix: (reported by Stéphane Loeuillet) host check_period was mandatory…
Browse files Browse the repository at this point in the history
… for some configuraton. Now if missing always enabled. Fix #1568
  • Loading branch information
naparuba committed Apr 22, 2015
1 parent 2188c0d commit 29bc8b6
Show file tree
Hide file tree
Showing 5 changed files with 230 additions and 8 deletions.
10 changes: 2 additions & 8 deletions shinken/objects/host.py
Expand Up @@ -662,7 +662,7 @@ def is_correct(self):

source = getattr(self, 'imported_from', 'unknown')

special_properties = ['check_period', 'notification_interval', 'check_period',
special_properties = ['check_period', 'notification_interval',
'notification_period']
for prop, entry in cls.properties.items():
if prop not in special_properties:
Expand Down Expand Up @@ -716,13 +716,7 @@ def is_correct(self):
"I've got notifications enabled", self.get_name())
state = False

# If active check is enabled with a check_interval!=0, we must have a check_period
if ((getattr(self, 'active_checks_enabled', False)
and getattr(self, 'check_period', None) is None
and getattr(self, 'check_interval', 1) != 0)):
logger.error("%s: check_period is not correct", self.get_name())
state = False

# if no check_period, means 24x7, like for services
if not hasattr(self, 'check_period'):
self.check_period = None

Expand Down
30 changes: 30 additions & 0 deletions test/etc/no_check_period/commands.cfg
@@ -0,0 +1,30 @@
define command{
command_name check-host-alive
command_line $USER1$/test_hostcheck.pl --type=$ARG1$ --failchance=2% --previous-state=$HOSTSTATE$ --state-duration=$HOSTDURATIONSEC$ --hostname $HOSTNAME$
}
define command{
command_name check-host-alive-parent
command_line $USER1$/test_hostcheck.pl --type=$ARG1$ --failchance=2% --previous-state=$HOSTSTATE$ --state-duration=$HOSTDURATIONSEC$ --parent-state=$ARG2$ --hostname $HOSTNAME$
}
define command{
command_name notify-host
#command_line sleep 1 && /bin/true
command_line $USER1$/notifier.pl --hostname $HOSTNAME$ --notificationtype $NOTIFICATIONTYPE$ --hoststate $HOSTSTATE$ --hostoutput $HOSTOUTPUT$ --longdatetime $LONGDATETIME$ --hostattempt $HOSTATTEMPT$ --hoststatetype $HOSTSTATETYPE$
}
define command{
command_name notify-service
command_line $USER1$/notifier.pl --hostname $HOSTNAME$ --servicedesc $SERVICEDESC$ --notificationtype $NOTIFICATIONTYPE$ --servicestate $SERVICESTATE$ --serviceoutput $SERVICEOUTPUT$ --longdatetime $LONGDATETIME$ --serviceattempt $SERVICEATTEMPT$ --servicestatetype $SERVICESTATETYPE$
#command_line sleep 1 && /bin/true
}
define command{
command_name check_service
command_line $USER1$/test_servicecheck.pl --type=$ARG1$ --failchance=5% --previous-state=$SERVICESTATE$ --state-duration=$SERVICEDURATIONSEC$ --total-critical-on-host=$TOTALHOSTSERVICESCRITICAL$ --total-warning-on-host=$TOTALHOSTSERVICESWARNING$ --hostname $HOSTNAME$ --servicedesc $SERVICEDESC$ --custom $_SERVICECUSTNAME$
}
define command{
command_name eventhandler
command_line $USER1$/test_eventhandler.pl $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
}
define command{
command_name special_macro
command_line $USER1$/nothing $ARG1$
}
39 changes: 39 additions & 0 deletions test/etc/no_check_period/test_specific.cfg
@@ -0,0 +1,39 @@

define command{
command_name Status@Nrpe
command_line /bin/true
}

define host{
name TemplateHost@SFR
notifications_enabled 0 ; Notifie pas ms on garde la dependance host-service. On considere que la sup systeme remontera le PING KO
event_handler_enabled 0 ; Host event handler is enabled
flap_detection_enabled 0 ; Flap detection is enabled
process_perf_data 0 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
passive_checks_enabled 0
obsess_over_host 0
active_checks_enabled 1
# check_period 24x7
check_command Status@Nrpe
check_interval 1440

# notification_interval 0
max_check_attempts 2
# notification_period 24x7
# notification_options d,u,r,f,s
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
# contacts admin
}

define host{
name NrpeHost@SFR
use TemplateHost@SFR
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}

define host{
use NrpeHost@SFR
host_name BLABLA
}
121 changes: 121 additions & 0 deletions test/etc/shinken_no_check_period.cfg
@@ -0,0 +1,121 @@
accept_passive_host_checks=1
accept_passive_service_checks=1
additional_freshness_latency=15
admin_email=shinken@localhost
admin_pager=shinken@localhost
auto_reschedule_checks=0
auto_rescheduling_interval=30
auto_rescheduling_window=180
cached_host_check_horizon=15
cached_service_check_horizon=15
cfg_file=standard/hosts.cfg
cfg_file=standard/services.cfg
cfg_file=standard/contacts.cfg
cfg_file=no_check_period/commands.cfg
cfg_file=no_check_period/test_specific.cfg
cfg_file=standard/timeperiods.cfg
cfg_file=standard/hostgroups.cfg
cfg_file=standard/servicegroups.cfg
cfg_file=standard/shinken-specific.cfg
check_external_commands=1
check_for_orphaned_hosts=1
check_for_orphaned_services=1
check_host_freshness=0
check_result_path=var/spool/checkresults
check_result_reaper_frequency=10
check_service_freshness=1
command_check_interval=-1
command_file=var/shinken.cmd
daemon_dumps_core=0
date_format=iso8601
debug_file=var/shinken.debug
debug_level=112
debug_verbosity=1
enable_embedded_perl=0
enable_environment_macros=1
enable_event_handlers=1
enable_flap_detection=0
enable_notifications=1
enable_predictive_host_dependency_checks=1
enable_predictive_service_dependency_checks=1
event_broker_options=-1
event_handler_timeout=30
execute_host_checks=1
execute_service_checks=1
external_command_buffer_slots=4096
high_host_flap_threshold=20
high_service_flap_threshold=20
host_check_timeout=30
host_freshness_check_interval=60
host_inter_check_delay_method=s
illegal_macro_output_chars=`~\$&|'"<>
illegal_object_name_chars=`~!\$%^&*|'"<>?,()=
interval_length=60
lock_file=var/shinken.pid
log_archive_path=var/archives
log_event_handlers=1
log_external_commands=1
log_file=var/shinken.log
log_host_retries=1
log_initial_states=0
log_notifications=1
log_passive_checks=1
log_rotation_method=d
log_service_retries=1
low_host_flap_threshold=5
low_service_flap_threshold=5
max_check_result_file_age=3600
max_check_result_reaper_time=30
max_concurrent_checks=0
max_debug_file_size=1000000
max_host_check_spread=30
max_service_check_spread=30
shinken_group=shinken
shinken_user=shinken
notification_timeout=30
object_cache_file=var/objects.cache
obsess_over_hosts=0
obsess_over_services=0
ocsp_timeout=5
#p1_file=/tmp/test_shinken/plugins/p1.pl
p1_file=/usr/local/shinken/bin/p1.pl
passive_host_checks_are_soft=0
perfdata_timeout=5
precached_object_file=var/objects.precache
process_performance_data=1
resource_file=resource.cfg
retain_state_information=1
retained_contact_host_attribute_mask=0
retained_contact_service_attribute_mask=0
retained_host_attribute_mask=0
retained_process_host_attribute_mask=0
retained_process_service_attribute_mask=0
retained_service_attribute_mask=0
retention_update_interval=60
service_check_timeout=60
service_freshness_check_interval=60
service_inter_check_delay_method=s
service_interleave_factor=s
##shinken_group=shinken
##shinken_user=shinken
#shinken_group=shinken
#shinken_user=shinken
sleep_time=0.25
soft_state_dependencies=0
state_retention_file=var/retention.dat
status_file=var/status.dat
status_update_interval=5
temp_file=tmp/shinken.tmp
temp_path=var/tmp
translate_passive_host_checks=0
use_aggressive_host_checking=0
use_embedded_perl_implicitly=0
use_large_installation_tweaks=0
use_regexp_matching=0
use_retained_program_state=1
use_retained_scheduling_info=1
use_syslog=0
use_true_regexp_matching=0
enable_problem_impacts_states_change=1
no_event_handlers_during_downtimes=0
modules_dir=../var/lib/shinken/modules
38 changes: 38 additions & 0 deletions test/test_no_check_period.py
@@ -0,0 +1,38 @@
#!/usr/bin/env python
# Copyright (C) 2009-2014:
# Gabes Jean, naparuba@gmail.com
# Gerhard Lausser, Gerhard.Lausser@consol.de
#
# This file is part of Shinken.
#
# Shinken is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Shinken is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with Shinken. If not, see <http://www.gnu.org/licenses/>.

#
# This file is used to test reading and processing of config files
#

from shinken_test import *


class TestNoCheckPeriod(ShinkenTest):

def setUp(self):
self.setup_with_file('etc/shinken_no_check_period.cfg')

def test_no_check_period(self):
self.assertTrue(self.conf.conf_is_correct)


if __name__ == '__main__':
unittest.main()

0 comments on commit 29bc8b6

Please sign in to comment.