Application\Hook: move existing ones, keep compat

This commit is contained in:
Thomas Gelf 2015-11-12 17:56:32 +01:00
parent 576747f792
commit d903f850da
6 changed files with 258 additions and 218 deletions

View File

@ -0,0 +1,111 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Application\Hook;
use Icinga\Exception\ProgrammingError;
use Icinga\Module\Monitoring\Object\MonitoredObject;
/**
* Icinga Web Grapher Hook base class
*
* Extend this class if you want to integrate your graphing solution nicely into
* Icinga Web.
*/
abstract class GrapherHook extends WebBaseHook
{
/**
* Whether this grapher provides previews
*
* @var bool
*/
protected $hasPreviews = false;
/**
* Whether this grapher provides tiny previews
*
* @var bool
*/
protected $hasTinyPreviews = false;
/**
* Constructor must live without arguments right now
*
* Therefore the constructor is final, we might change our opinion about
* this one far day
*/
final public function __construct()
{
$this->init();
}
/**
* Overwrite this function if you want to do some initialization stuff
*
* @return void
*/
protected function init()
{
}
/**
* Whether this grapher provides previews
*
* @return bool
*/
public function hasPreviews()
{
return $this->hasPreviews;
}
/**
* Whether this grapher provides tiny previews
*
* @return bool
*/
public function hasTinyPreviews()
{
return $this->hasTinyPreviews;
}
/**
* Whether a graph for the monitoring object exist
*
* @param MonitoredObject $object
*
* @return bool
*/
abstract public function has(MonitoredObject $object);
/**
* Get a preview for the given object
*
* This function must return an empty string if no graph exists.
*
* @param MonitoredObject $object
*
* @return string
* @throws ProgrammingError
*
*/
public function getPreviewHtml(MonitoredObject $object)
{
throw new ProgrammingError('This hook provide previews but it is not implemented');
}
/**
* Get a tiny preview for the given object
*
* This function must return an empty string if no graph exists.
*
* @param MonitoredObject $object
*
* @return string
* @throws ProgrammingError
*/
public function getTinyPreviewHtml(MonitoredObject $object)
{
throw new ProgrammingError('This hook provide tiny previews but it is not implemented');
}
}

View File

@ -0,0 +1,124 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Application\Hook;
use ErrorException;
use Exception;
use Icinga\Application\Logger;
use Icinga\Exception\IcingaException;
/**
* Base class for ticket hooks
*
* Extend this class if you want to integrate your ticketing solution Icinga Web 2
*/
abstract class TicketHook
{
/**
* Last error, if any
*
* @var string|null
*/
protected $lastError;
/**
* Create a new ticket hook
*
* @see init() For hook initialization.
*/
final public function __construct()
{
$this->init();
}
/**
* Overwrite this function for hook initialization, e.g. loading the hook's config
*/
protected function init()
{
}
/**
* Set the hook as failed w/ the given message
*
* @param string $message Error message or error format string
* @param mixed ...$arg Format string argument
*/
private function fail($message)
{
$args = array_slice(func_get_args(), 1);
$lastError = vsprintf($message, $args);
Logger::debug($lastError);
$this->lastError = $lastError;
}
/**
* Get the last error, if any
*
* @return string|null
*/
public function getLastError()
{
return $this->lastError;
}
/**
* Get the pattern
*
* @return string
*/
abstract public function getPattern();
/**
* Create a link for each matched element in the subject text
*
* @param array $match Array of matched elements according to {@link getPattern()}
*
* @return string Replacement string
*/
abstract public function createLink($match);
/**
* Create links w/ {@link createLink()} in the given text that matches to the subject from {@link getPattern()}
*
* In case of errors a debug message is recorded to the log and any subsequent call to {@link createLinks()} will
* be a no-op.
*
* @param string $text
*
* @return string
*/
final public function createLinks($text)
{
if ($this->lastError !== null) {
return $text;
}
try {
$pattern = $this->getPattern();
} catch (Exception $e) {
$this->fail('Can\'t create ticket links: Retrieving the pattern failed: %s', IcingaException::describe($e));
return $text;
}
if (empty($pattern)) {
$this->fail('Can\'t create ticket links: Pattern is empty');
return $text;
}
try {
$text = preg_replace_callback(
$pattern,
array($this, 'createLink'),
$text
);
} catch (ErrorException $e) {
$this->fail('Can\'t create ticket links: Pattern is invalid: %s', IcingaException::describe($e));
return $text;
} catch (Exception $e) {
$this->fail('Can\'t create ticket links: %s', IcingaException::describe($e));
return $text;
}
return $text;
}
}

View File

@ -1,7 +1,7 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Web\Hook;
namespace Icinga\Application\Hook;
use Zend_Controller_Action_HelperBroker;
use Zend_View;

View File

@ -0,0 +1,14 @@
<?php
namespace Icinga\Web;
use Icinga\Application\Hook as NewHookImplementation;
/**
* Icinga Web Hook registry
*
* Deprecated, please use Icinga\Application\Hook instead
*/
class Hook extends NewHookImplementation
{
}

View File

@ -3,109 +3,11 @@
namespace Icinga\Web\Hook;
use Icinga\Exception\ProgrammingError;
use Icinga\Module\Monitoring\Object\MonitoredObject;
use Icinga\Application\Hook\GrapherHook as BaseHook;
/**
* Icinga Web Grapher Hook base class
* Deprecated, compat only.
*
* Extend this class if you want to integrate your graphing solution nicely into
* Icinga Web.
* Please implement hooks in Icinga\Application\Hook
*/
abstract class GrapherHook extends WebBaseHook
{
/**
* Whether this grapher provides previews
*
* @var bool
*/
protected $hasPreviews = false;
/**
* Whether this grapher provides tiny previews
*
* @var bool
*/
protected $hasTinyPreviews = false;
/**
* Constructor must live without arguments right now
*
* Therefore the constructor is final, we might change our opinion about
* this one far day
*/
final public function __construct()
{
$this->init();
}
/**
* Overwrite this function if you want to do some initialization stuff
*
* @return void
*/
protected function init()
{
}
/**
* Whether this grapher provides previews
*
* @return bool
*/
public function hasPreviews()
{
return $this->hasPreviews;
}
/**
* Whether this grapher provides tiny previews
*
* @return bool
*/
public function hasTinyPreviews()
{
return $this->hasTinyPreviews;
}
/**
* Whether a graph for the monitoring object exist
*
* @param MonitoredObject $object
*
* @return bool
*/
abstract public function has(MonitoredObject $object);
/**
* Get a preview for the given object
*
* This function must return an empty string if no graph exists.
*
* @param MonitoredObject $object
*
* @return string
* @throws ProgrammingError
*
*/
public function getPreviewHtml(MonitoredObject $object)
{
throw new ProgrammingError('This hook provide previews but it is not implemented');
}
/**
* Get a tiny preview for the given object
*
* This function must return an empty string if no graph exists.
*
* @param MonitoredObject $object
*
* @return string
* @throws ProgrammingError
*/
public function getTinyPreviewHtml(MonitoredObject $object)
{
throw new ProgrammingError('This hook provide tiny previews but it is not implemented');
}
}
abstract class GrapherHook extends BaseHook {}

View File

@ -3,122 +3,11 @@
namespace Icinga\Web\Hook;
use ErrorException;
use Exception;
use Icinga\Application\Logger;
use Icinga\Exception\IcingaException;
use Icinga\Application\Hook\TicketHook as BaseHook;
/**
* Base class for ticket hooks
* Deprecated, compat only.
*
* Extend this class if you want to integrate your ticketing solution Icinga Web 2
* Please implement hooks in Icinga\Application\Hook
*/
abstract class TicketHook
{
/**
* Last error, if any
*
* @var string|null
*/
protected $lastError;
/**
* Create a new ticket hook
*
* @see init() For hook initialization.
*/
final public function __construct()
{
$this->init();
}
/**
* Overwrite this function for hook initialization, e.g. loading the hook's config
*/
protected function init()
{
}
/**
* Set the hook as failed w/ the given message
*
* @param string $message Error message or error format string
* @param mixed ...$arg Format string argument
*/
private function fail($message)
{
$args = array_slice(func_get_args(), 1);
$lastError = vsprintf($message, $args);
Logger::debug($lastError);
$this->lastError = $lastError;
}
/**
* Get the last error, if any
*
* @return string|null
*/
public function getLastError()
{
return $this->lastError;
}
/**
* Get the pattern
*
* @return string
*/
abstract public function getPattern();
/**
* Create a link for each matched element in the subject text
*
* @param array $match Array of matched elements according to {@link getPattern()}
*
* @return string Replacement string
*/
abstract public function createLink($match);
/**
* Create links w/ {@link createLink()} in the given text that matches to the subject from {@link getPattern()}
*
* In case of errors a debug message is recorded to the log and any subsequent call to {@link createLinks()} will
* be a no-op.
*
* @param string $text
*
* @return string
*/
final public function createLinks($text)
{
if ($this->lastError !== null) {
return $text;
}
try {
$pattern = $this->getPattern();
} catch (Exception $e) {
$this->fail('Can\'t create ticket links: Retrieving the pattern failed: %s', IcingaException::describe($e));
return $text;
}
if (empty($pattern)) {
$this->fail('Can\'t create ticket links: Pattern is empty');
return $text;
}
try {
$text = preg_replace_callback(
$pattern,
array($this, 'createLink'),
$text
);
} catch (ErrorException $e) {
$this->fail('Can\'t create ticket links: Pattern is invalid: %s', IcingaException::describe($e));
return $text;
} catch (Exception $e) {
$this->fail('Can\'t create ticket links: %s', IcingaException::describe($e));
return $text;
}
return $text;
}
}
abstract class TicketHook extends BaseHook {}