package org.act.tstream.stats.rolling;
import java.util.HashMap;
import org.act.tstream.callback.RunnableCallback;
import org.act.tstream.utils.TimeUtils;
public class RollingWindowSet {
private RunnableCallback updater;
private RunnableCallback extractor;
private RollingWindow[] windows;
// all_time store the all_time result
private Object all_time;
public RunnableCallback getUpdater() {
return updater;
}
public void setUpdater(RunnableCallback updater) {
this.updater = updater;
}
public RunnableCallback getExtractor() {
return extractor;
}
public void setExtractor(RunnableCallback extractor) {
this.extractor = extractor;
}
public RollingWindow[] getWindows() {
return windows;
}
public void setWindows(RollingWindow[] windows) {
this.windows = windows;
}
public Object getAll_time() {
return all_time;
}
public void setAll_time(Object all_time) {
this.all_time = all_time;
}
public static RollingWindowSet rolling_window_set(RunnableCallback updater,
RunnableCallback merger, RunnableCallback extractor,
Integer num_buckets, Integer[] bucket_size) {
RollingWindowSet rtn = new RollingWindowSet();
rtn.setUpdater(updater);
rtn.setExtractor(extractor);
rtn.setWindows(new RollingWindow[bucket_size.length]);
int bSize = bucket_size.length;
for (int i = 0; i < bSize; i++) {
rtn.getWindows()[i] = RollingWindow.rolling_window(updater, merger,
extractor, bucket_size[i], num_buckets);
}
rtn.setAll_time(null);
return rtn;
}
/**
*
* @param args
* Object[0] -- key, Object[1] -- value
*/
public void update_rolling_window_set(Object[] args) {
synchronized (this) {
int now = TimeUtils.current_time_secs();
int winSize = windows.length;
for (int i = 0; i < winSize; i++) {
windows[i] = windows[i].update_rolling_window(now, args);
}
UpdateParams p = new UpdateParams();
p.setArgs(args);
p.setCurr(getAll_time());
setAll_time(updater.execute(p));
}
}
public RollingWindowSet cleanup_rolling_window_set() {
synchronized (this) {
for (int i = 0; i < windows.length; i++) {
windows[i] = windows[i].cleanup_rolling_window();
}
return this;
}
}
// Key -- 0 -- all time
/**
* Keys: 0 -- all time summary { 30 * 20, 540 * 20, 4320 * 20 } seconds
* summary
*
* @return
*/
public HashMap<Integer, Object> value_rolling_window_set() {
HashMap<Integer, Object> rtn = new HashMap<Integer, Object>();
synchronized (this) {
int wSize = windows.length;
for (int i = 0; i < wSize; i++) {
int size = windows[i].rolling_window_size();
// <streamId, counter/statics> -- obj
Object obj = windows[i].value_rolling_window();
rtn.put(size, obj);
}
Object result = extractor.execute(all_time);
rtn.put(0, result);
return rtn;
}
}
}