@SuppressWarnings("unchecked") public List<T> allocateWeighted(T value, Granularity gran) { if (value.isEmpty()) { return Collections.emptyList(); } List<MutableMetricValue> targets = createEmptyArray(value.getRange(), gran); value.allocateWeighted(targets); List<T> res = new ArrayList<T>(targets.size()); for (MutableMetricValue v : targets) { res.add((T)v.getMetricValue()); } return res; } }
Map<Integer, Collection<T>> segmentIdMap = new HashMap<Integer, Collection<T>> (); for (T value : values) { Time start = value.getTimeStamp(); Integer segmentIdx = Integer.valueOf(range.getSegmentIndex(start, numSlices)); Collection<T> valuesForTime = segmentIdMap.get(segmentIdx);
public void allocate() { for (Map.Entry<MetricValue, List<MutableMetricValue>> ent : valAllocations.entrySet()) { ent.getKey().allocateWeighted(ent.getValue()); } }
private void createMapping(Collection<MetricValue> values, Granularity gran) { for (MetricValue v : values) { TimeRange alignedRange = v.getRange().augmentToAlignOn(gran); List<MutableMetricValue> valList = new ArrayList<MutableMetricValue>(); valAllocations.put(v, valList); for (TimeRange segment: alignedRange.getSegments(gran)) { MutableMetricValue target = getOrCreateForRange(segment); valList.add(target); } } }
vals = reducer.reduceValues(addr.getMetric(), finestGran, vals); for (MetricValue val : vals) { if (val.getTimeStamp().alignsOnGranularity(finestGran) == false) { throw new IllegalArgumentException("Value [" + val + "] at time=" + val.getTimeStamp() + " does not align on granularity=" + finestGran); TimeMember time = timeDim.getMemberForInsertion(val.getTimeStamp()); if (time == null) { if (loggingEnabled) { log.warn("Dropping metric data at timestamp=" + val.getTimeStamp().asDate() + " which is out" + "of storage bounds. All systems pushing data to Insight should use NTP or another service to keep clocks " + "synchronized. Current time = " + timeSvc.nowNanoTime().asDate());
private void createMapping(Collection<MetricValue> values, TimeRange totalRange, int numSegments) { for (TimeRange range: totalRange.getSegments(numSegments)) { for (MetricValue v : values) { if (v.getRange().overlaps(range)) { List<MutableMetricValue> valList = valAllocations.get(v); if (valList == null) { valList = new ArrayList<MutableMetricValue>(); valAllocations.put(v, valList); } MutableMetricValue target = getOrCreateForRange(range); valList.add(target); } } } }
/** * Returns a time range which encompasses all ranges of all values. */ public static <T extends MetricValue> TimeRange getEncompassingRange(Collection<T> vals) { if (vals.isEmpty()) { throw new IllegalArgumentException("Must pass vals to find encompassing range"); } long start = -1; long end = -1; for (MetricValue<?> val : vals) { TimeRange valRange = val.getRange(); long valStart = valRange.getStart(); long valEnd = valRange.getEnd(); if (start == -1 || valStart < start) { start = valStart; } if (end == -1 || valEnd > end) { end = valEnd; } } return TimeRange.nanoTimeRange(start, end); } }
public void setValue(T val) { Time valStart = val.getRange().getStartTime(); assertTimeIsAligned(valStart); int slot = getSlotAtTime(valStart); if (slot < 0 || slot >= size()) { throw new ArrayIndexOutOfBoundsException(slot); } setValueForSlot(slot, val); }