package com.alipay.bluewhale.core.stats.RollingWindow; import java.util.HashMap; import com.alipay.bluewhale.core.callback.RunnableCallback; import com.alipay.bluewhale.core.utils.TimeUtils; public class RollingWindowSetStat { public static RollingWindowSet rolling_window_set(RunnableCallback updater, RunnableCallback merger, RunnableCallback extractor, Integer num_buckets, Integer[] bucket_size) { RollingWindowSet rtn = new RollingWindowSet(); rtn.updater = updater; rtn.extractor = extractor; rtn.windows = new RollingWindow[bucket_size.length]; for (int i = 0; i < bucket_size.length; i++) { rtn.windows[i] = RollingWindowStat.rolling_window(updater, merger, extractor, bucket_size[i], num_buckets); } rtn.all_time = null; return rtn; } public static void update_rolling_window_set(RollingWindowSet rws, Object[] args) { synchronized (rws) { int now = TimeUtils.current_time_secs(); for (int i = 0; i < rws.windows.length; i++) { rws.windows[i] = RollingWindowStat.update_rolling_window( rws.windows[i], now, args); } UpdateParams p = new UpdateParams(); p.args = args; p.curr = rws.all_time; rws.all_time = rws.updater.execute(p); } } public static RollingWindowSet cleanup_rolling_window_set( RollingWindowSet rws) { synchronized (rws) { for (int i = 0; i < rws.windows.length; i++) { rws.windows[i] = RollingWindowStat .cleanup_rolling_window(rws.windows[i]); } return rws; } } public static HashMap<Integer, Object> value_rolling_window_set( RollingWindowSet rws) { HashMap<Integer, Object> rtn = new HashMap<Integer, Object>(); synchronized (rws) { for (int i = 0; i < rws.windows.length; i++) { int size = RollingWindowStat .rolling_window_size(rws.windows[i]); Object obj = RollingWindowStat .value_rolling_window(rws.windows[i]); rtn.put(size, obj); } Object result = rws.extractor.execute(rws.all_time); rtn.put(0, result); return rtn; } } }