Sync: Tell the user which object caused an Exception

This commit is contained in:
Markus Frosch 2016-10-27 15:43:26 +02:00
parent f9f61be7aa
commit 5199dc7826
1 changed files with 23 additions and 2 deletions

View File

@ -4,7 +4,7 @@ namespace Icinga\Module\Director\Import;
use Exception; use Exception;
use Icinga\Data\Filter\Filter; use Icinga\Data\Filter\Filter;
use Icinga\Module\Director\Import\SyncUtils; use Icinga\Module\Director\Db;
use Icinga\Module\Director\Objects\IcingaObject; use Icinga\Module\Director\Objects\IcingaObject;
use Icinga\Module\Director\Objects\ImportSource; use Icinga\Module\Director\Objects\ImportSource;
use Icinga\Module\Director\Objects\IcingaService; use Icinga\Module\Director\Objects\IcingaService;
@ -20,6 +20,11 @@ class Sync
*/ */
protected $rule; protected $rule;
/**
* @var Db
*/
protected $db;
/** /**
* Related ImportSource objects * Related ImportSource objects
* *
@ -63,6 +68,9 @@ class Sync
protected $syncProperties; protected $syncProperties;
/**
* @var SyncRun
*/
protected $run; protected $run;
protected $runStartTime; protected $runStartTime;
@ -72,6 +80,8 @@ class Sync
/** /**
* Constructor. No direct initialization allowed right now. Please use one * Constructor. No direct initialization allowed right now. Please use one
* of the available static factory methods * of the available static factory methods
*
* @param SyncRule $rule
*/ */
public function __construct(SyncRule $rule) public function __construct(SyncRule $rule)
{ {
@ -240,6 +250,7 @@ class Sync
$combinedKey = $this->rule->hasCombinedKey(); $combinedKey = $this->rule->hasCombinedKey();
foreach ($this->sources as $source) { foreach ($this->sources as $source) {
/** @var ImportSource $source */
$sourceId = $source->id; $sourceId = $source->id;
// Provide an alias column for our key. TODO: double-check this! // Provide an alias column for our key. TODO: double-check this!
@ -544,6 +555,8 @@ class Sync
$dba = $db->getDbAdapter(); $dba = $db->getDbAdapter();
$dba->beginTransaction(); $dba->beginTransaction();
$object = null;
try { try {
$formerActivityChecksum = Util::hex2binary( $formerActivityChecksum = Util::hex2binary(
$db->getLastActivityChecksum() $db->getLastActivityChecksum()
@ -604,7 +617,15 @@ class Sync
} catch (Exception $e) { } catch (Exception $e) {
$dba->rollBack(); $dba->rollBack();
throw $e; if ($object !== null && $object instanceof IcingaObject) {
throw new IcingaException(
'Exception while syncing %s %s: %s',
get_class($object), $object->get('object_name'), $e->getMessage(), $e
);
}
else {
throw $e;
}
} }
return $this->run->id; return $this->run->id;