use of cern.laser.business.data.Alarm in project ACS by ACS-Community.
the class AlarmDefinitionServiceImpl method setMultiplicityThresholdEJB.
private void setMultiplicityThresholdEJB(String userId, MultiplicityThreshold threshold) throws LaserDefinitionException {
if ((threshold == null) || (threshold.getParent() == null) || (threshold.getThreshold() == null) || (threshold.getThreshold().intValue() <= 0))
throw new LaserDefinitionNotValidException("null parameter or negative threshold");
AdminUser admin_user = adminUserDAO.findAdminUser(userId);
LOGGER.info("user " + admin_user.getName() + " setting multiplicity threshold : " + threshold);
Alarm parent = alarmDAO.findAlarm(threshold.getParent().getAlarmId());
parent.setMultiplicityThreshold(threshold.getThreshold());
alarmDAO.updateAlarm(parent);
LOGGER.info("multiplicity threshold set");
}
use of cern.laser.business.data.Alarm in project ACS by ACS-Community.
the class AlarmDefinitionServiceImpl method createAlarm.
public void createAlarm(String userId, AlarmDefinition alarmDefinition) throws LaserDefinitionException {
Alarm alarm = createAlarmInternal(userId, alarmDefinition);
alarmDAO.saveAlarm(alarm);
String category_path = SOURCE_CATEGORY_PATH_PREFIX + alarm.getSource().getName();
Category category = categoryDAO.findCategoryByPath(category_path);
category.addAlarm(alarm);
categoryDAO.updateCategory(category);
if (LOGGER.isDebugEnabled())
LOGGER.debug("alarm added to default category " + category_path);
LOGGER.info("alarm created");
}
use of cern.laser.business.data.Alarm in project ACS by ACS-Community.
the class ACSCategoryDAOImpl method linkWithAlarms.
public void linkWithAlarms() {
if (conf == null)
throw new IllegalStateException("null configuration accessor");
if (alarmDao == null)
throw new IllegalStateException("missing alarm DAO");
String path = ALARM_CATEGORY_DEFINITION_PATH;
String xml;
try {
xml = conf.getConfiguration(path);
} catch (Exception e) {
throw new RuntimeException("Failed to read " + path);
}
AlarmCategoryDefinitions acds;
try {
acds = (AlarmCategoryDefinitions) AlarmCategoryDefinitions.unmarshalAlarmCategoryDefinitions(new StringReader(xml));
} catch (Exception e) {
throw new RuntimeException("Failed to parse " + path);
}
AlarmCategoryLinkDefinitionListType cltc = acds.getCategoryLinksToCreate();
if (cltc == null)
throw new RuntimeException("Missing category-links-to-create in " + path);
AlarmCategoryLinkType[] links = cltc.getAlarmCategoryLink();
for (int a = 0; a < links.length; a++) {
AlarmCategoryLinkType l = links[a];
alma.alarmsystem.alarmmessage.generated.Alarm linkAlarm = l.getAlarm();
alma.alarmsystem.alarmmessage.generated.Category linkCat = l.getCategory();
if (linkAlarm == null || linkCat == null)
throw new RuntimeException("Missing alarm or category in a link in " + path);
AlarmDefinition ad = linkAlarm.getAlarmDefinition();
CategoryDefinition cd = linkCat.getCategoryDefinition();
if (ad == null || cd == null)
throw new RuntimeException("Missing alarm-definition or category-definition in " + path);
String lff = ad.getFaultFamily();
String lfm = ad.getFaultMember();
if (lff == null || lfm == null)
throw new RuntimeException("Missing fault-family or fault-member in " + path);
String alarmId = Triplet.toIdentifier(lff, lfm, new Integer(ad.getFaultCode()));
String catPath = cd.getPath();
if (catPath == null)
throw new RuntimeException("Missing category path in " + path);
Alarm alarm = alarmDao.getAlarm(alarmId);
Category cat = getCategoryByPath(catPath);
if (alarm == null)
throw new RuntimeException("Missing alarm with ID " + alarmId);
if (cat == null)
throw new RuntimeException("Missing category with path " + catPath);
cat.addAlarm(alarm);
}
Iterator i = catPathToCategory.values().iterator();
while (i.hasNext()) {
CategoryImpl ci = (CategoryImpl) i.next();
String cPath = ci.getPath();
int lastcolon = cPath.lastIndexOf(':');
if (lastcolon >= 0) {
String parentCPath = cPath.substring(0, lastcolon);
CategoryImpl cp = (CategoryImpl) catPathToCategory.get(parentCPath);
if (cp != null) {
cp.addChildCategory(ci);
}
}
}
}
use of cern.laser.business.data.Alarm in project ACS by ACS-Community.
the class ReductionManager method saveToCDB.
public void saveToCDB() {
Set<String> keyset = _objState.keySet();
String[] objs = new String[keyset.size()];
keyset.toArray(objs);
ReductionDefinitions rds = ((ACSAlarmDAOImpl) _alarmDAO).getReductionRules();
boolean flush = false;
try {
for (int i = 0; i < objs.length; i++) {
ObjectState os = _objState.get(objs[i]);
String[] spl = objs[i].split(",");
String[] p = spl[0].split(":");
String[] c = spl[1].split(":");
ReductionLinkType rl = new ReductionLinkType();
AlarmDefinition ad;
Parent gp = new Parent();
ad = new AlarmDefinition();
ad.setFaultFamily(p[0]);
ad.setFaultMember(p[1]);
ad.setFaultCode(Integer.parseInt(p[2]));
gp.setAlarmDefinition(ad);
Child gc = new Child();
ad = new AlarmDefinition();
ad.setFaultFamily(c[0]);
ad.setFaultMember(c[1]);
ad.setFaultCode(Integer.parseInt(c[2]));
gc.setAlarmDefinition(ad);
rl.setParent(gp);
rl.setChild(gc);
if (spl[2].compareTo("n") == 0)
rl.setType(ReductionLinkTypeTypeType.NODE);
else
rl.setType(ReductionLinkTypeTypeType.MULTIPLICITY);
rl.validate();
switch(os.getAction()) {
case //Error, no state assigned.
-1:
break;
case 0:
break;
case 1:
((ACSAlarmDAOImpl) _alarmDAO).addReductionRule(rds, rl);
flush = true;
break;
case 2:
((ACSAlarmDAOImpl) _alarmDAO).updateReductionRule(rds, rl);
flush = true;
break;
case 3:
((ACSAlarmDAOImpl) _alarmDAO).deleteReductionRule(rds, rl);
flush = true;
break;
default:
//Shouldn't happen.
break;
}
}
keyset = _thrState.keySet();
objs = new String[keyset.size()];
keyset.toArray(objs);
for (int i = 0; i < objs.length; i++) {
AlarmDefinition al;
String[] p = objs[i].split(":");
al = new AlarmDefinition();
al.setFaultFamily(p[0]);
al.setFaultMember(p[1]);
al.setFaultCode(Integer.parseInt(p[2]));
ReductionRule rr = getMRParentByTriplet(p[0], p[1], Integer.parseInt(p[2]));
Threshold th = new Threshold();
th.setAlarmDefinition(al);
if (rr == null)
th.setValue(0);
else
th.setValue(rr.getThreshold());
ObjectState ts = _thrState.get(objs[i]);
th.validate();
switch(ts.getAction()) {
case //Error, no state assigned.
-1:
break;
case 0:
break;
case 1:
((ACSAlarmDAOImpl) _alarmDAO).addThreshold(rds, th);
flush = true;
break;
case 2:
((ACSAlarmDAOImpl) _alarmDAO).updateThreshold(rds, th);
flush = true;
break;
case 3:
((ACSAlarmDAOImpl) _alarmDAO).deleteThreshold(rds, th);
flush = true;
break;
default:
//Shouldn't happen.
break;
}
}
_objState.clear();
_thrState.clear();
if (flush)
((ACSAlarmDAOImpl) _alarmDAO).flushReductionRules(rds);
for (ReductionRule rr : _nodeReductionRules) for (Alarm al : rr.getChildren()) if (rr.getIsNodeReduction())
_objState.put(new String(rr.getParent().getAlarmId() + "," + al.getAlarmId() + ",n"), new ObjectState(false));
for (ReductionRule rr : _multiReductionRules) {
for (Alarm al : rr.getChildren()) if (!rr.getIsNodeReduction())
_objState.put(new String(rr.getParent().getAlarmId() + "," + al.getAlarmId() + ",m"), new ObjectState(false));
_thrState.put(rr.getParent().getAlarmId(), new ObjectState(false));
}
} catch (ValidationException e) {
e.printStackTrace();
}
}
use of cern.laser.business.data.Alarm in project ACS by ACS-Community.
the class ReductionManager method checkCDB.
public String checkCDB() {
String error = "";
List<ReductionRule> nrrs = _nodeReductionRules;
List<ReductionRule> mrrs = _multiReductionRules;
for (ReductionRule rr : nrrs) {
Alarm p = rr.getParent();
List<Alarm> chs = rr.getChildren();
if (_alarmDAO.getAlarm(p.getAlarmId()) == null)
error += "Node Reduction Rule Parent Alarm " + p.getAlarmId() + " doesn't exist.\n";
for (Alarm ch : chs) if (_alarmDAO.getAlarm(ch.getAlarmId()) == null)
error += "Node Reduction Rule Chid Alarm " + ch.getAlarmId() + " with Parent " + p.getAlarmId() + " doesn't exist.\n";
}
for (ReductionRule rr : mrrs) {
Alarm p = rr.getParent();
List<Alarm> chs = rr.getChildren();
if (_alarmDAO.getAlarm(p.getAlarmId()) == null)
error += "Multi Reduction Rule Parent Alarm " + p.getAlarmId() + " doesn't exist.\n";
for (Alarm ch : chs) if (_alarmDAO.getAlarm(ch.getAlarmId()) == null)
error += "Multi Reduction Rule Chid Alarm " + ch.getAlarmId() + " with Parent " + p.getAlarmId() + " doesn't exist.\n";
if (rr.getThreshold() <= 0)
error += "Multi Reduction Rule Threshold for Parent " + p.getAlarmId() + " is invalid (Must be > 0).\n";
}
return error;
}
Aggregations