/usr/share/icingaweb2/modules/monitoring/library/Monitoring/Command/Transport/LocalCommandFile.php is in icingaweb2-module-monitoring 2.1.0-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | <?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Module\Monitoring\Command\Transport;
use Exception;
use RuntimeException;
use Icinga\Application\Logger;
use Icinga\Exception\ConfigurationError;
use Icinga\Module\Monitoring\Command\IcingaCommand;
use Icinga\Module\Monitoring\Command\Renderer\IcingaCommandFileCommandRenderer;
use Icinga\Module\Monitoring\Exception\CommandTransportException;
use Icinga\Util\File;
/**
* A local Icinga command file
*/
class LocalCommandFile implements CommandTransportInterface
{
/**
* Transport identifier
*/
const TRANSPORT = 'local';
/**
* The name of the Icinga instance this transport will transfer commands to
*
* @var string
*/
protected $instanceName;
/**
* Path to the icinga command file
*
* @var String
*/
protected $path;
/**
* Mode used to open the icinga command file
*
* @var string
*/
protected $openMode = 'wn';
/**
* Command renderer
*
* @var IcingaCommandFileCommandRenderer
*/
protected $renderer;
/**
* Create a new local command file command transport
*/
public function __construct()
{
$this->renderer = new IcingaCommandFileCommandRenderer();
}
/**
* Set the name of the Icinga instance this transport will transfer commands to
*
* @param string $name
*
* @return $this
*/
public function setInstance($name)
{
$this->instanceName = $name;
return $this;
}
/**
* Return the name of the Icinga instance this transport will transfer commands to
*
* @return string
*/
public function getInstance()
{
return $this->instanceName;
}
/**
* Set the path to the local Icinga command file
*
* @param string $path
*
* @return $this
*/
public function setPath($path)
{
$this->path = (string) $path;
return $this;
}
/**
* Get the path to the local Icinga command file
*
* @return string
*/
public function getPath()
{
return $this->path;
}
/**
* Set the mode used to open the icinga command file
*
* @param string $openMode
*
* @return $this
*/
public function setOpenMode($openMode)
{
$this->openMode = (string) $openMode;
return $this;
}
/**
* Get the mode used to open the icinga command file
*
* @return string
*/
public function getOpenMode()
{
return $this->openMode;
}
/**
* Write the command to the local Icinga command file
*
* @param IcingaCommand $command
* @param int|null $now
*
* @throws ConfigurationError
* @throws CommandTransportException
*/
public function send(IcingaCommand $command, $now = null)
{
if (! isset($this->path)) {
throw new ConfigurationError(
'Can\'t send external Icinga Command. Path to the local command file is missing'
);
}
$commandString = $this->renderer->render($command, $now);
Logger::debug(
'Sending external Icinga command "%s" to the local command file "%s"',
$commandString,
$this->path
);
try {
$file = new File($this->path, $this->openMode);
$file->fwrite($commandString . "\n");
} catch (Exception $e) {
$message = $e->getMessage();
if ($e instanceof RuntimeException && ($pos = strrpos($message, ':')) !== false) {
// Assume RuntimeException thrown by SplFileObject in the format: __METHOD__ . "({$filename}): Message"
$message = substr($message, $pos + 1);
}
throw new CommandTransportException(
'Can\'t send external Icinga command to the local command file "%s": %s',
$this->path,
$message
);
}
}
}
|