private void pushAlertBoltSpec(StreamPartition sp, AlertBolt bolt) {
Map<String, StreamDefinition> sds = new HashMap<>();
sds.put("correlatedStream", createCorrelateStream("correlatedStream"));
sds.put("symptomaticAlertOutputStream", createCorrelateStream("symptomaticAlertOutputStream"));
sds.put("deviceDownAlertStream", createCorrelateStream("deviceDownAlertStream"));
PolicyDefinition pd = new PolicyDefinition();
pd.setName("network_symptomatic");
pd.setInputStreams(Arrays.asList("correlatedStream"));
pd.setOutputStreams(Arrays.asList("deviceDownAlertStream", "symptomaticAlertOutputStream"));
pd.setPartitionSpec(Arrays.asList(sp));
PolicyDefinition.Definition def = new PolicyDefinition.Definition();
def.setType(PolicyStreamHandlers.SIDDHI_ENGINE);
def.setValue("from correlatedStream#window.externalTime(timestamp, 3 min) select UUID() as docId, linkedSwitch, '' as parentKey, timestamp group by linkedSwitch having count() > 0 insert into deviceDownAlertStream; " +
" from correlatedStream#window.externalTime(timestamp, 3 min) as left join deviceDownAlertStream#window.time(3 min) as right on left.linkedSwitch == right.linkedSwitch" +
" select left.docId, left.timestamp, left.linkedSwitch, right.docId as parentKey insert into symptomaticAlertOutputStream;");
pd.setDefinition(def);
AlertBoltSpec spec = new AlertBoltSpec();
spec.setVersion("version1");
spec.setTopologyName("testTopology");
spec.addBoltPolicy("alertBolt1", pd.getName());
spec.getBoltPoliciesMap().put("alertBolt1", new ArrayList<>(Arrays.asList(pd)));
bolt.onAlertBoltSpecChange(spec, sds);
}