/*****************************************************************************
*
* Copyright (C) Zenoss, Inc. 2013, all rights reserved.
*
* This content is made available according to terms specified in
* License.zenoss under the directory where your Zenoss product is installed.
*
****************************************************************************/
package org.zenoss.zep.dao.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.RedisConnectionFailureException;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.zenoss.zep.ZepException;
import org.zenoss.zep.dao.FlapTrackerDao;
import org.zenoss.zep.impl.FlapTracker;
import java.util.concurrent.TimeUnit;
public class FlapTrackerDaoImpl implements FlapTrackerDao{
private static final Logger logger = LoggerFactory.getLogger(FlapTrackerDaoImpl.class);
private final String REDIS_FLAP_KEY = "zenoss_event_flapping";
@Autowired
private StringRedisTemplate template = null;
private String createKey(String clearFingerPrintHash) {
return REDIS_FLAP_KEY + clearFingerPrintHash;
}
@Override
public FlapTracker getFlapTrackerByClearFingerprintHash(String clearFingerPrintHash) throws ZepException {
String result;
try {
result = template.opsForValue().get(createKey(clearFingerPrintHash));
} catch (RedisConnectionFailureException e) {
throw new ZepException(e);
}
if (result != null) {
// return existing flap tracker
logger.debug("String gotten back from redis " + result);
return FlapTracker.buildFromString(result);
}
// there is no tracker for this guy yet
return new FlapTracker();
}
@Override
public void persistTracker(String clearFingerprintHash, FlapTracker tracker, long timeToKeep) throws ZepException {
logger.debug("Setting string key {} value {}", createKey(clearFingerprintHash), tracker.convertToString());
try {
template.opsForValue().set(createKey(clearFingerprintHash), tracker.convertToString(), timeToKeep, TimeUnit.SECONDS);
}catch (RedisConnectionFailureException e) {
throw new ZepException(e);
}
}
}