package resa.evaluation.scheduler; import backtype.storm.Config; import backtype.storm.generated.StormTopology; import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; import resa.optimize.AllocResult; import resa.drs.DecisionMaker; import resa.util.ConfigUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * Created by ding on 14-6-26. */ public class TracedDecisionMaker implements DecisionMaker { private static final Logger LOG = LoggerFactory.getLogger(TracedDecisionMaker.class); private Jedis jedis; private String queueName; private ObjectMapper objMapper = new ObjectMapper(); @Override public void init(Map<String, Object> conf, StormTopology rawTopology) { jedis = new Jedis((String) conf.get("redis.host"), ConfigUtil.getInt(conf, "redis.port", 6379)); queueName = conf.getOrDefault(Config.STORM_ID, "") + "-decision-data"; LOG.info("dump to queue " + queueName); } @Override public Map<String, Integer> make(AllocResult newAllocResult, Map<String, Integer> currAlloc) { Map<String, Object> data = new HashMap<>(); data.put("status", newAllocResult.status.name()); if (newAllocResult.minReqOptAllocation != null) { data.put("minReq", newAllocResult.minReqOptAllocation); } if (newAllocResult.currOptAllocation != null) { data.put("optAlloc", newAllocResult.currOptAllocation); } try { jedis.rpush(queueName, objMapper.writeValueAsString(data)); } catch (IOException e) { throw new RuntimeException(e); } return currAlloc; } }