findOneByInstAddrVal($inst_addr->getValue()); if ($amo == NULL) { $amo = new AlarmingManagedObject(); $amo->setName($inst_addr); $amo->setInstAddr($inst_addr); $amo->setAmhId($amh_id); $amo->save(); } $cac_lst = CurrentAlarmConditionQuery::create()->findByAmoId($amo->getId()); /* threshold alarm pre-processing: initialize additive variables */ $thr_alm_clr = false; if ($thr_alm_ip = ($serv_infl->getValue() == ServInfl::SI_THRAFF)) { $alm_stat_v = $alm_stat->getValue(); $max_cur_alm_stat_v = AlarmStatus::AS_CLEAR; } foreach ($cac_lst as $cac) { if ($cac->getAedId() != $aed_id) { continue; } $thr_cac = ($cac->getServInfl()->getValue() == ServInfl::SI_THRAFF); if ($thr_alm_ip && $thr_cac) { /* threshold alarm processing: delete cacs with alarm severity > reported one */ $cur_alm_stat_v = $cac->getAlmStat()->getValue(); if ($alm_stat_v < $cur_alm_stat_v) { $cac->delete(); $thr_alm_clr = true; } elseif ($max_cur_alm_stat_v < $cur_alm_stat_v) { $max_cur_alm_stat_v = $cur_alm_stat_v; } } elseif (!$thr_alm_ip && !$thr_cac && $cac->getAlmStat() == $alm_stat) { return GenericAdmin::EC_DUPL_INST; } } /* threshold alarm post-processing: only new cac if reported alarm severity > max current ones */ if ($thr_alm_ip && $alm_stat_v <= $max_cur_alm_stat_v) { // if no threshold alarm clearance was done, eveything is none. // No further alarm processing necessary if (!$thr_alm_clr) return GenericAdmin::EC_DUPL_INST; else return GenericAdmin::EC_OK; } $cac = new CurrentAlarmCondition(); $cac->setAmoId($amo->getId()); $cac->setAedId($aed_id); $cac->setEvtTime($evt_time); $cac->setRecDate(date('Y-m-d H:i:s')); $cac->setAlmStat($alm_stat); $cac->setServInfl($serv_infl); $cac->save(); return GenericAdmin::EC_OK; } function cancelAlarm( InstAddr $inst_addr, $amh_id, $aed_id) { $amo = AlarmingManagedObjectQuery::create()->findOneByInstAddrVal($inst_addr->getValue()); if ($amo == NULL) { $amo = new AlarmingManagedObject(); $amo->setName($inst_addr); $amo->setInstAddr($inst_addr); $amo->setAmhId($amh_id); $amo->save(); } else { $cac_lst = CurrentAlarmConditionQuery::create()->findByAmoId($amo->getId()); $anything_deleted = false; foreach ($cac_lst as $cac) { if ($aed_id == $cac->getAedId()) { $cac->delete(); $anything_deleted = true; } } if ($anything_deleted) return GenericAdmin::EC_OK; } return GenericAdmin::EC_NOSU_INST; } } ?>