
org.elasticsearch.common.FieldMemoryStats Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch - Open Source, Distributed, RESTful Search Engine
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.common;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.io.stream.Writeable;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
/**
* A reusable class to encode {@code field -> memory size} mappings
*/
public final class FieldMemoryStats implements Writeable, Iterable> {
private final Map stats;
/**
* Creates a new FieldMemoryStats instance
*/
public FieldMemoryStats(Map stats) {
this.stats = Objects.requireNonNull(stats, "status must be non-null");
assert stats.containsKey(null) == false;
}
/**
* Creates a new FieldMemoryStats instance from a stream
*/
public FieldMemoryStats(StreamInput input) throws IOException {
stats = input.readMap(StreamInput::readString, StreamInput::readVLong);
}
/**
* Adds / merges the given field memory stats into this stats instance
*/
public void add(FieldMemoryStats fieldMemoryStats) {
for (var entry : fieldMemoryStats.stats.entrySet()) {
stats.merge(entry.getKey(), entry.getValue(), Long::sum);
}
}
@Override
public void writeTo(StreamOutput out) throws IOException {
out.writeMap(stats, StreamOutput::writeString, StreamOutput::writeVLong);
}
/**
* Generates x-content into the given builder for each of the fields in this stats instance
* @param builder the builder to generated on
* @param key the top level key for this stats object
* @param rawKey the raw byte key for each of the fields byte sizes
* @param readableKey the readable key for each of the fields byte sizes
*/
public void toXContent(XContentBuilder builder, String key, String rawKey, String readableKey) throws IOException {
builder.startObject(key);
for (var entry : stats.entrySet()) {
builder.startObject(entry.getKey());
builder.humanReadableField(rawKey, readableKey, ByteSizeValue.ofBytes(entry.getValue()));
builder.endObject();
}
builder.endObject();
}
/**
* Creates a deep copy of this stats instance
*/
public FieldMemoryStats copy() {
// String keys and boxed Longs are both immutable, so only the map needs to be recreated in order to clone
return new FieldMemoryStats(new HashMap<>(stats));
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FieldMemoryStats that = (FieldMemoryStats) o;
return Objects.equals(stats, that.stats);
}
@Override
public int hashCode() {
return Objects.hash(stats);
}
@Override
public Iterator> iterator() {
return stats.entrySet().iterator();
}
/**
* Returns the fields value in bytes or 0
if it's not present in the stats
*/
public long get(String field) {
return stats.getOrDefault(field, 0L);
}
/**
* Returns true
iff the given field is in the stats
*/
public boolean containsField(String field) {
return stats.containsKey(field);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy