private int encodedSize() { return FIXED_SIZE + centroidCount() * PER_CENTROID_SIZE; }
private int encodedSize() { return FIXED_SIZE + centroidCount() * PER_CENTROID_SIZE; }
/** * Not clear to me that this is a good idea, maybe just add the temp points and existing centroids rather then merging * first? */ @Override public Collection<Centroid> centroids() { // we don't actually keep centroid structures around so we have to fake it List<Centroid> r = new ArrayList<>(); int count = centroidCount(); for (int i = 0; i < count; i++) { r.add(new Centroid(mean[i], (int) weight[i], data != null ? data.get(i) : null)); } return r; }
/** * Not clear to me that this is a good idea, maybe just add the temp points and existing centroids rather then merging * first? */ @Override public Collection<Centroid> centroids() { // we don't actually keep centroid structures around so we have to fake it List<Centroid> r = new ArrayList<>(); int count = centroidCount(); for (int i = 0; i < count; i++) { r.add(new Centroid(mean[i], (int) weight[i], data != null ? data.get(i) : null)); } return r; }
/** * Creates a reporting Histogram from this AgentDigest (marked with the supplied duration). */ public Histogram toHistogram(int duration) { int numCentroids = centroidCount(); // NOTE: now merged as a side-effect List<Double> means = new ArrayList<>(centroidCount()); List<Integer> count = new ArrayList<>(centroidCount()); for (int i = 0; i < numCentroids; ++i) { means.add(mean[i]); count.add((int) Math.round(weight[i])); } return Histogram.newBuilder() .setDuration(duration) .setBins(means) .setCounts(count) .setType(HistogramType.TDIGEST) .build(); }
/** * Creates a reporting Histogram from this AgentDigest (marked with the supplied duration). */ public Histogram toHistogram(int duration) { int numCentroids = centroidCount(); // NOTE: now merged as a side-effect List<Double> means = new ArrayList<>(centroidCount()); List<Integer> count = new ArrayList<>(centroidCount()); for (int i = 0; i < numCentroids; ++i) { means.add(mean[i]); count.add((int) Math.round(weight[i])); } return Histogram.newBuilder() .setDuration(duration) .setBins(means) .setCounts(count) .setType(HistogramType.TDIGEST) .build(); }
if (digestA != null && digestB != null) { if (digestA.centroidCount() >= digestB.centroidCount()) { digestA.add(digestB); return digestA;
if (digestA != null && digestB != null) { if (digestA.centroidCount() >= digestB.centroidCount()) { digestA.add(digestB); return digestA;
@Override public void write(Bytes out, long size, @NotNull AgentDigest toWrite) { // Merge in all buffered values int numCentroids = toWrite.centroidCount(); // Just for sanity, comment out for production use Preconditions.checkArgument(size == toWrite.encodedSize()); // Write compression out.writeShort(toWrite.compression); // Time out.writeLong(toWrite.dispatchTimeMillis); // Centroids for (int i = 0; i < numCentroids; ++i) { out.writeFloat((float) toWrite.weight[i]); out.writeFloat((float) toWrite.mean[i]); } }
@Override public void write(Bytes out, long size, @NotNull AgentDigest toWrite) { // Merge in all buffered values int numCentroids = toWrite.centroidCount(); // Just for sanity, comment out for production use Preconditions.checkArgument(size == toWrite.encodedSize()); // Write compression out.writeShort(toWrite.compression); // Time out.writeLong(toWrite.dispatchTimeMillis); // Centroids for (int i = 0; i < numCentroids; ++i) { out.writeFloat((float) toWrite.weight[i]); out.writeFloat((float) toWrite.mean[i]); } }