Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.76 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.concurrent.TimeUnit;
  6. import java.util.function.LongToIntFunction;
  7. import java.util.function.LongUnaryOperator;
  8.  
  9. public class Aggregation {
  10. private static final String CASSANDRA_SUMMARY = "summary";
  11. private static final String CASSANDRA_SUMMARY_1H = "summary_1h";
  12. private static final String CASSANDRA_SUMMARY_1D = "summary_1d";
  13. private static final String CASSANDRA_SUMMARY_1W = "summary_1w";
  14.  
  15. private static final String CASSANDRA_TIME = "time";
  16. private static final String CASSANDRA_TIME_1H = "time_1h";
  17. private static final String CASSANDRA_TIME_1D = "time_1d";
  18. private static final String CASSANDRA_TIME_1W = "time_1w";
  19.  
  20. private static final String CASSANDRA_HISTORY = "history";
  21.  
  22. private static final String CASSANDRA_KEY = "key";
  23.  
  24. private static final Map<String, String> CASSANDRA_SUMMARIES = new HashMap<>() {{
  25. put("1h", CASSANDRA_SUMMARY_1H);
  26. put("1d", CASSANDRA_SUMMARY_1D);
  27. put("1w", CASSANDRA_SUMMARY_1W);
  28. }};
  29.  
  30. private static final Map<String, String> CASSANDRA_TIMES = new HashMap<>() {{
  31. put("1h", CASSANDRA_TIME_1H);
  32. put("1d", CASSANDRA_TIME_1D);
  33. put("1w", CASSANDRA_TIME_1W);
  34. }};
  35.  
  36. //replacement of time1h, time1d, time1w
  37. private final Map<String, Long> TIME1 = new HashMap<String, Long>() {{
  38. put("1h", 0L);
  39. put("1d", 0L);
  40. put("1w", 0L); }};
  41.  
  42. private final Map<String, Int2ObjectOpenHashMap<SummaryBase>> summary1Map = new HashMap<>() {{
  43. put("1h", new Int2ObjectHashMap<>());
  44. put("1d", new Int2ObjectHashMap<>());
  45. put("1w", new Int2ObjectHashMap<>());
  46. }};
  47.  
  48. private final Map<String, HistoryBase> history1 = new HashMap<>();
  49.  
  50. private static final Map<String, LongToIntFunction> TIMES = new HashMap<>();
  51.  
  52. static {
  53. TIMES.put("summary", SummaryBase::getKey15min);
  54. TIMES.put("1h", SummaryBase::getKey1h);
  55. TIMES.put("1d", SummaryBase::getKey1d);
  56. TIMES.put("1w", SummaryBase::getKey1w);
  57. }
  58.  
  59. private static final Map<String, String> TABS = new HashMap<>();
  60.  
  61. static {
  62. TABS.put("summary", "time");
  63. TABS.put("summary_1h", "time_1h");
  64. TABS.put("summary_1d", "time_1d");
  65. TABS.put("summary_1w", "time_1w");
  66. }
  67.  
  68. private static final Map<String, Integer> INTERVALS = new HashMap<>();
  69.  
  70. static {
  71. //INTERVALS.put("summary", (int) TimeUnit.MINUTES.toMillis(15));
  72. INTERVALS.put("1h", (int) TimeUnit.HOURS.toMillis(1));
  73. INTERVALS.put("1d", (int) TimeUnit.DAYS.toMillis(1));
  74. INTERVALS.put("1w", (int) TimeUnit.DAYS.toMillis(7));
  75. }
  76.  
  77.  
  78. public static final Map<String, LongUnaryOperator> TIME1X = new HashMap<>();
  79.  
  80. static {
  81. TIME1X.put("summary", (value) -> (value + TimeUnit.SECONDS.toMillis(449)) / TimeUnit.MINUTES.toMillis(15) * TimeUnit.MINUTES.toMillis(15));
  82. TIME1X.put("summary_1h", (value) -> (value + TimeUnit.HOURS.toMillis(1) - 1) / TimeUnit.HOURS.toMillis(1) * TimeUnit.HOURS.toMillis(1));
  83. TIME1X.put("summary_1d", (value) -> ((value + TimeUnit.HOURS.toMillis(3) + TimeUnit.DAYS.toMillis(1) - 1) / TimeUnit.DAYS.toMillis(1) * TimeUnit.DAYS.toMillis(1)) - TimeUnit.HOURS.toMillis(3));
  84. TIME1X.put("summary_1w", (value) -> ((value + TimeUnit.HOURS.toMillis(3) + TimeUnit.DAYS.toMillis(3) - 1) / TimeUnit.DAYS.toMillis(7) * TimeUnit.DAYS.toMillis(7)) + TimeUnit.DAYS.toMillis(4) - TimeUnit.HOURS.toMillis(3));
  85. }
  86.  
  87. private void cassandraInsert(String aggr, long time, Int2ObjectMap<SummaryBase> summaryMap, HistoryBase history) {
  88. final long time15min = (time + TimeUnit.SECONDS.toMillis(449)) / TimeUnit.MINUTES.toMillis(15) * TimeUnit.MINUTES.toMillis(15);
  89. if (this.TIME1.get(aggr) == 0) {
  90. long _time1 = TIME1X.get(aggr).applyAsLong(time15min);
  91. summary1Map.get(aggr).clear();
  92. history1.put(aggr, cassandraHistoryModeller.newInstance());
  93. history1.get(aggr).setTable(Utils.stringToBytesASCII(CASSANDRA_SUMMARIES.get(aggr)));
  94. history1.get(aggr).setStart(_time1 - INTERVALS.get(aggr));
  95. history1.get(aggr).setStop(_time1);
  96. cassandraSelect(time15min, _time1, this.summary1Map, this.history1);
  97. this.TIME1.put(aggr, TIME1.get(aggr));
  98. }
  99.  
  100. if (time15min < TIME1.get(aggr)) {
  101. LOG.info("Aggregation time = {} ==> hour = {}", ToStringHelper.millsToString(time), ToStringHelper.millsToString(time1h));
  102. doAppend(summaryMap, time15min, history, time1h - TimeUnit.HOURS.toMillis(1), TIME1.get(aggr), summary1Map.get(aggr), SummaryBase.getKey1h(time1h), history1h);
  103. }
  104. else if (time15min == time1h) {
  105. LOG.info("Aggregation time = {} ==> hour = {}", ToStringHelper.millsToString(time), ToStringHelper.millsToString(time1h));
  106. doAppend(summaryMap, time15min, history, time1h - TimeUnit.HOURS.toMillis(1), time1h, summary1hMap, SummaryBase.getKey1h(time1h), history1h);
  107. LOG.info("Aggregation insert {} rows for hour = {}", summary1hMap.size(), ToStringHelper.millsToString(time1h));
  108. if (_1h)
  109. doInsert(CASSANDRA_SUMMARY_1H, summary1hMap/*, CASSANDRA_TIME_1H, SummaryBase.getKey1h(time1h), time1h - TimeUnit.HOURS.toMillis(1)*/, time1h, history1h);
  110. time1h += TimeUnit.HOURS.toMillis(1);
  111. summary1hMap.clear();
  112. history1h = cassandraHistoryModeller.newInstance();
  113. history1h.setTable(Utils.stringToBytesASCII(CASSANDRA_SUMMARY_1H));
  114. history1h.setStart(time1h - TimeUnit.HOURS.toMillis(1));
  115. history1h.setStop(time1h);
  116. }
  117. else {
  118. LOG.info("MISSED aggregation time = {} >=< hour = {}", ToStringHelper.millsToString(time), ToStringHelper.millsToString(time1h));
  119. LOG.info("Aggregation insert {} rows for hour = {}", summary1hMap.size(), ToStringHelper.millsToString(time1h));
  120. if (_1h)
  121. doInsert(CASSANDRA_SUMMARY_1H, summary1hMap/*, CASSANDRA_TIME_1H, SummaryBase.getKey1h(time1h), time1h - TimeUnit.HOURS.toMillis(1)*/, time1h, history1h);
  122. time1h = (time15min + TimeUnit.HOURS.toMillis(1) - 1) / TimeUnit.HOURS.toMillis(1) * TimeUnit.HOURS.toMillis(1);
  123. summary1hMap.clear();
  124. history1h = cassandraHistoryModeller.newInstance();
  125. history1h.setTable(Utils.stringToBytesASCII(CASSANDRA_SUMMARY_1H));
  126. history1h.setStart(time1h - TimeUnit.HOURS.toMillis(1));
  127. history1h.setStop(time1h);
  128.  
  129. doAppend(summaryMap, time15min, history, time1h - TimeUnit.HOURS.toMillis(1), time1h, summary1hMap, SummaryBase.getKey1h(time1h), history1h);
  130. }
  131. }
  132.  
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement