mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-31 11:24:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			488 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			488 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Icinga\Module\Monitoring\Command\Renderer;
 | |
| 
 | |
| use Icinga\Module\Monitoring\Command\Instance\DisableNotificationsExpireCommand;
 | |
| use Icinga\Module\Monitoring\Command\Instance\ToggleInstanceFeatureCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\AcknowledgeProblemCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\AddCommentCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\DeleteCommentCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\DeleteDowntimeCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\ProcessCheckResultCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\PropagateHostDowntimeCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\RemoveAcknowledgementCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\ScheduleServiceCheckCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\ScheduleServiceDowntimeCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\SendCustomNotificationCommand;
 | |
| use Icinga\Module\Monitoring\Command\Object\ToggleObjectFeatureCommand;
 | |
| use Icinga\Module\Monitoring\Command\IcingaCommand;
 | |
| use InvalidArgumentException;
 | |
| 
 | |
| /**
 | |
|  * Icinga command renderer for the Icinga command file
 | |
|  */
 | |
| class IcingaCommandFileCommandRenderer implements IcingaCommandRendererInterface
 | |
| {
 | |
|     /**
 | |
|      * Escape a command string
 | |
|      *
 | |
|      * @param   string $commandString
 | |
|      *
 | |
|      * @return  string
 | |
|      */
 | |
|     public function escape($commandString)
 | |
|     {
 | |
|         return str_replace(array("\r", "\n"), array('\r', '\n'), $commandString);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Render a command
 | |
|      *
 | |
|      * @param   IcingaCommand   $command
 | |
|      * @param   int|null        $now
 | |
|      *
 | |
|      * @return  string
 | |
|      */
 | |
|     public function render(IcingaCommand $command, $now = null)
 | |
|     {
 | |
|         $renderMethod = 'render' . $command->getName();
 | |
|         if (! method_exists($this, $renderMethod)) {
 | |
|             die($renderMethod);
 | |
|         }
 | |
|         if ($now === null) {
 | |
|             $now = time();
 | |
|         }
 | |
|         return sprintf('[%u] %s', $now, $this->$renderMethod($command));
 | |
|     }
 | |
| 
 | |
|     public function renderAddComment(AddCommentCommand $command)
 | |
|     {
 | |
|         $object = $command->getObject();
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             $commandString = sprintf(
 | |
|                 'ADD_HOST_COMMENT;%s',
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 'ADD_SVC_COMMENT;%s;%s',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%u;%s;%s',
 | |
|             $commandString,
 | |
|             $command->getPersistent(),
 | |
|             $command->getAuthor(),
 | |
|             $command->getComment()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderSendCustomNotification(SendCustomNotificationCommand $command)
 | |
|     {
 | |
|         $object = $command->getObject();
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             $commandString = sprintf(
 | |
|                 'SEND_CUSTOM_HOST_NOTIFICATION;%s',
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 'SEND_CUSTOM_SVC_NOTIFICATION;%s;%s',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         $options = 0; // 0 for no options
 | |
|         if ($command->getBroadcast() === true) {
 | |
|             $options |= 1;
 | |
|         }
 | |
|         if ($command->getForced() === true) {
 | |
|             $options |= 2;
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%u;%s;%s',
 | |
|             $commandString,
 | |
|             $options,
 | |
|             $command->getAuthor(),
 | |
|             $command->getComment()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderProcessCheckResult(ProcessCheckResultCommand $command)
 | |
|     {
 | |
|         $object = $command->getObject();
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             $commandString = sprintf(
 | |
|                 'PROCESS_HOST_CHECK_RESULT;%s',
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 'PROCESS_SERVICE_CHECK_RESULT;%s;%s',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         $output = $command->getOutput();
 | |
|         if ($command->getPerformanceData() !== null) {
 | |
|             $output .= '|' . $command->getPerformanceData();
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%u;%s',
 | |
|             $commandString,
 | |
|             $command->getStatus(),
 | |
|             $output
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderScheduleCheck(ScheduleServiceCheckCommand $command)
 | |
|     {
 | |
|         $object = $command->getObject();
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             /** @var \Icinga\Module\Monitoring\Command\Object\ScheduleHostCheckCommand $command */
 | |
|             if ($command->getOfAllServices() === true) {
 | |
|                 if ($command->getForced() === true) {
 | |
|                     $commandName = 'SCHEDULE_FORCED_HOST_SVC_CHECKS';
 | |
|                 } else {
 | |
|                     $commandName = 'SCHEDULE_HOST_SVC_CHECKS';
 | |
|                 }
 | |
|             } else {
 | |
|                 if ($command->getForced() === true) {
 | |
|                     $commandName = 'SCHEDULE_FORCED_HOST_CHECK';
 | |
|                 } else {
 | |
|                     $commandName = 'SCHEDULE_HOST_CHECK';
 | |
|                 }
 | |
|             }
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s',
 | |
|                 $commandName,
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s;%s',
 | |
|                 $command->getForced() === true ? 'SCHEDULE_FORCED_SVC_CHECK' : 'SCHEDULE_SVC_CHECK',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%u',
 | |
|             $commandString,
 | |
|             $command->getCheckTime()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderScheduleDowntime(ScheduleServiceDowntimeCommand $command)
 | |
|     {
 | |
|         $object = $command->getObject();
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             /** @var \Icinga\Module\Monitoring\Command\Object\ScheduleHostDowntimeCommand $command */
 | |
|             if ($command instanceof PropagateHostDowntimeCommand) {
 | |
|                 /** @var \Icinga\Module\Monitoring\Command\Object\PropagateHostDowntimeCommand $command */
 | |
|                 $commandName = $command->getTriggered() === true ? 'SCHEDULE_AND_PROPAGATE_TRIGGERED_HOST_DOWNTIME'
 | |
|                     : 'SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME';
 | |
|             } elseif ($command->getForAllServices() === true) {
 | |
|                 $commandName = 'SCHEDULE_HOST_SVC_DOWNTIME';
 | |
|             } else {
 | |
|                 $commandName = 'SCHEDULE_HOST_DOWNTIME';
 | |
|             }
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s',
 | |
|                 $commandName,
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s;%s',
 | |
|                 'SCHEDULE_SVC_DOWNTIME',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%u;%u;%u;%u;%u;%s;%s',
 | |
|             $commandString,
 | |
|             $command->getStart(),
 | |
|             $command->getEnd(),
 | |
|             $command->getFixed(),
 | |
|             $command->getTriggerId(),
 | |
|             $command->getDuration(),
 | |
|             $command->getAuthor(),
 | |
|             $command->getComment()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderAcknowledgeProblem(AcknowledgeProblemCommand $command)
 | |
|     {
 | |
|         $object = $command->getObject();
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s',
 | |
|                 $command->getExpireTime() !== null ? 'ACKNOWLEDGE_HOST_PROBLEM_EXPIRE' : 'ACKNOWLEDGE_HOST_PROBLEM',
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s;%s',
 | |
|                 $command->getExpireTime() !== null ? 'ACKNOWLEDGE_SVC_PROBLEM_EXPIRE' : 'ACKNOWLEDGE_SVC_PROBLEM',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         $commandString = sprintf(
 | |
|             '%s;%u;%u;%u',
 | |
|             $commandString,
 | |
|             $command->getSticky() ? 2 : 0,
 | |
|             $command->getNotify(),
 | |
|             $command->getPersistent()
 | |
|         );
 | |
|         if ($command->getExpireTime() !== null) {
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%u',
 | |
|                 $commandString,
 | |
|                 $command->getExpireTime()
 | |
|             );
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%s;%s',
 | |
|             $commandString,
 | |
|             $command->getAuthor(),
 | |
|             $command->getComment()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderToggleObjectFeature(ToggleObjectFeatureCommand $command)
 | |
|     {
 | |
|         if ($command->getEnabled() === true) {
 | |
|             $commandPrefix = 'ENABLE';
 | |
|         } else {
 | |
|             $commandPrefix = 'DISABLE';
 | |
|         }
 | |
|         switch ($command->getFeature()) {
 | |
|             case ToggleObjectFeatureCommand::FEATURE_ACTIVE_CHECKS:
 | |
|                 $commandFormat = sprintf('%s_%%s_CHECK', $commandPrefix);
 | |
|                 break;
 | |
|             case ToggleObjectFeatureCommand::FEATURE_PASSIVE_CHECKS:
 | |
|                 $commandFormat = sprintf('%s_PASSIVE_%%s_CHECKS', $commandPrefix);
 | |
|                 break;
 | |
|             case ToggleObjectFeatureCommand::FEATURE_OBSESSING:
 | |
|                 if ($command->getEnabled() === true) {
 | |
|                     $commandPrefix = 'START';
 | |
|                 } else {
 | |
|                     $commandPrefix = 'STOP';
 | |
|                 }
 | |
|                 $commandFormat = sprintf('%s_OBSESSING_OVER_%%s', $commandPrefix);
 | |
|                 break;
 | |
|             case ToggleObjectFeatureCommand::FEATURE_NOTIFICATIONS:
 | |
|                 $commandFormat = sprintf('%s_%%s_NOTIFICATIONS', $commandPrefix);
 | |
|                 break;
 | |
|             case ToggleObjectFeatureCommand::FEATURE_EVENT_HANDLER:
 | |
|                 $commandFormat = sprintf('%s_%%s_EVENT_HANDLER', $commandPrefix);
 | |
|                 break;
 | |
|             case ToggleObjectFeatureCommand::FEATURE_FLAP_DETECTION:
 | |
|                 $commandFormat = sprintf('%s_%%s_FLAP_DETECTION', $commandPrefix);
 | |
|                 break;
 | |
|             default:
 | |
|                 throw new InvalidArgumentException($command->getFeature());
 | |
|         }
 | |
|         $object = $command->getObject();
 | |
|         if ($object->getType() === ToggleObjectFeatureCommand::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             $commandString = sprintf(
 | |
|                 $commandFormat . ';%s',
 | |
|                 'HOST',
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 $commandFormat . ';%s;%s',
 | |
|                 'SVC',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         return $commandString;
 | |
|     }
 | |
| 
 | |
|     public function renderDeleteComment(DeleteCommentCommand $command)
 | |
|     {
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             $commandString = 'DEL_HOST_COMMENT';
 | |
|         } else {
 | |
|             $commandString = 'DEL_SVC_COMMENT';
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%u',
 | |
|             $commandString,
 | |
|             $command->getCommentId()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderDeleteDowntime(DeleteDowntimeCommand $command)
 | |
|     {
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             $commandString = 'DEL_HOST_DOWNTIME';
 | |
|         } else {
 | |
|             $commandString = 'DEL_SVC_DOWNTIME';
 | |
|         }
 | |
|         return sprintf(
 | |
|             '%s;%u',
 | |
|             $commandString,
 | |
|             $command->getDowntimeId()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderRemoveAcknowledgement(RemoveAcknowledgementCommand $command)
 | |
|     {
 | |
|         $object = $command->getObject();
 | |
|         if ($command->getObject()->getType() === $command::TYPE_HOST) {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Host $object */
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s',
 | |
|                 'REMOVE_HOST_ACKNOWLEDGEMENT',
 | |
|                 $object->getName()
 | |
|             );
 | |
|         } else {
 | |
|             /** @var \Icinga\Module\Monitoring\Object\Service $object */
 | |
|             $commandString = sprintf(
 | |
|                 '%s;%s;%s',
 | |
|                 'REMOVE_SVC_ACKNOWLEDGEMENT',
 | |
|                 $object->getHost()->getName(),
 | |
|                 $object->getName()
 | |
|             );
 | |
|         }
 | |
|         return $commandString;
 | |
|     }
 | |
| 
 | |
|     public function renderDisableNotificationsExpire(DisableNotificationsExpireCommand $command)
 | |
|     {
 | |
|         return sprintf(
 | |
|             '%s;%u;%u',
 | |
|             'DISABLE_NOTIFICATIONS_EXPIRE_TIME',
 | |
|             time(),
 | |
|             $command->getExpireTime()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function renderToggleInstanceFeature(ToggleInstanceFeatureCommand $command)
 | |
|     {
 | |
|         switch ($command->getFeature()) {
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_HOST_CHECKS:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_SERVICE_CHECKS:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_HOST_OBSESSING:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_SERVICE_OBSESSING:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_PASSIVE_HOST_CHECKS:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_PASSIVE_SERVICE_CHECKS:
 | |
|                 if ($command->getEnabled() === true) {
 | |
|                     $commandPrefix = 'START';
 | |
|                 } else {
 | |
|                     $commandPrefix = 'STOP';
 | |
|                 }
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_EVENT_HANDLERS:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_FLAP_DETECTION:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_NOTIFICATIONS:
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_PERFORMANCE_DATA:
 | |
|                 if ($command->getEnabled() === true) {
 | |
|                     $commandPrefix = 'ENABLE';
 | |
|                 } else {
 | |
|                     $commandPrefix = 'DISABLE';
 | |
|                 }
 | |
|                 break;
 | |
|             default:
 | |
|                 throw new InvalidArgumentException($command->getFeature());
 | |
|         }
 | |
|         switch ($command->getFeature()) {
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_HOST_CHECKS:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'EXECUTING_HOST_CHECKS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_SERVICE_CHECKS:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'EXECUTING_SVC_CHECKS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_EVENT_HANDLERS:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'EVENT_HANDLERS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_FLAP_DETECTION:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'FLAP_DETECTION'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_NOTIFICATIONS:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'NOTIFICATIONS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_HOST_OBSESSING:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'OBSESSING_OVER_HOST_CHECKS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_SERVICE_OBSESSING:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'OBSESSING_OVER_SVC_CHECKS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_PASSIVE_HOST_CHECKS:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'ACCEPTING_PASSIVE_HOST_CHECKS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_PASSIVE_SERVICE_CHECKS:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'ACCEPTING_PASSIVE_SVC_CHECKS'
 | |
|                 );
 | |
|                 break;
 | |
|             case ToggleInstanceFeatureCommand::FEATURE_PERFORMANCE_DATA:
 | |
|                 $commandString = sprintf(
 | |
|                     '%s_%s',
 | |
|                     $commandPrefix,
 | |
|                     'PERFORMANCE_DATA'
 | |
|                 );
 | |
|                 break;
 | |
|             default:
 | |
|                 throw new InvalidArgumentException($command->getFeature());
 | |
|         }
 | |
|         return $commandString;
 | |
|     }
 | |
| }
 |