Legacy Target/CI Code
<?php
/**
* Function eventHasAValidCi
*
* @param array $event Event to check for a valid CI.
*
* @return bool|null
*/
private function _eventHasAValidCi($event)
{
$target = $this->_targetModel->getTarget($event['targetId']);
if ($target === false) {
$this->_log->error(__METHOD__ . ' there was NO target in EMS.');
return false;
}
$sql = 'SELECT name FROM monitors WHERE monitor_id=' . $event['monitorId'];
$this->_log->info(__METHOD__ . ' ' . $sql);
$monitor = $this->_db->fetchOne($sql);
/** @var mixed $CI */
$CI = false;
/** @var string $targetUsed */
$targetUsed = '';
try {
if (!empty($event['targetCi'])) {
$CI = $this->_servicenow->getCiFromTarget($event['targetCi']);
$targetUsed = $event['targetCi'];
}
if ($CI === false && !empty($event['targetName'])) {
$CI = $this->_servicenow->getCiFromMonitorName($event['targetName']);
$targetUsed = $event['targetName'];
}
if ($CI === false && !empty($event['targetName'])) {
$CI = $this->_servicenow->getCiFromTarget($event['targetName']);
$targetUsed = $event['targetName'];
}
if ($CI === false && !empty($event['targetHost'])) {
$CI = $this->_servicenow->getCiFromTarget($event['targetHost']);
$targetUsed = $event['targetHost'];
}
if ($CI === false && !empty($event['targetHint'])) {
$CI = $this->_servicenow->getCiFromTarget($event['targetHint']);
$targetUsed = $event['targetHint'];
}
if ($CI === false && !empty($monitor['name'])) {
$CI = $this->_servicenow->getCiFromMonitorName($monitor['name']);
$targetUsed = $monitor['name'];
}
} catch(\Exception $e) {
$this->_log->error($e->getCode().':'.$e->getMessage());
}
if (empty($CI)) {
$this->_log->error(__METHOD__ . ' there was NO CI found in ServiceNow.');
return false;
}
if (count($CI->result) === 0) {
$this->_log->error(__METHOD__ . ' there was NO CI found in ServiceNow.');
return false;
}
$this->_processConfigurationItems(
$CI->result,
$targetUsed,
$target
);
return $target;
}
/**
* Function processConfigurationItems
*
* @param array $ciList
* @param string $targetUsed
* @param \objects\targets\Target $target
* @return bool
*
* @access private
*/
private function _processConfigurationItems($ciList, $targetUsed, $target)
{
$numInCiList = count($ciList);
$ciHit = [];
$ciTwoPartials = false;
$ciPartialMatch = false;
$ciExactMatch = false;
for ($i = 0; $i < $numInCiList; $i++) {
if ($ciList[$i]->u_phase === 'Commissioned') {
if (strcasecmp($targetUsed, $ciList[$i]->name) === 0) {
if ($ciExactMatch === true) {
$this->_log->error(
__METHOD__ . ' two exact CI matches found.'
);
return false; // Two exact matches, bad news
}
$ciHit = $ciList[$i];
$ciExactMatch = true;
$this->_log->info(__METHOD__ . ' an exact CI match found.');
} elseif (stripos($ciList[$i]->name, $targetUsed) === 0
&& $ciExactMatch === false
) {
if ($ciPartialMatch === true) {
// Two partial prefix matches, bad news
$this->_log->error(
__METHOD__ .
' two partial prefix CI matches found, continuing'
);
$ciTwoPartials = true;
continue;
}
$ciHit = $ciList[$i];
$ciPartialMatch = true;
$this->_log->info(__METHOD__ . ' a partial prefix CI match found.');
}
}
}
if ($ciTwoPartials === true && $ciExactMatch !== true) {
$this->_log->error(
__METHOD__ . ' two partial prefix CI matches found, returning false'
);
return false;
}
if (isset($event['targetName'])) {
$target->lookupName = $event['targetName'];
}
if (isset($event['targetHost'])) {
$target->lookupHost = $event['targetHost'];
}
if (isset($event['targetHint'])) {
$target->lookupHint = $event['targetHint'];
}
if (isset($ciHit->{'support_group.name'})) {
$target->ownerQueue = $ciHit->{'support_group.name'};
}
if (isset($ciHit->name)) {
$target->ciName = $ciHit->name;
$target->ciLogicalName = $ciHit->{'sys_id'};
}
if (isset($ciHit->u_monitoring_notification_mode)) {
$target->notifyModel = $ciHit->u_monitoring_notification_mode;
}
if (isset($ciHit->used_for)) {
$target->environment = $ciHit->used_for;
}
$target->kb = '';
$this->_targetModel->updateTarget($target);
}