1 package org.wikimedia.search.extra.latency; 2 3 import java.io.IOException; 4 import java.util.List; 5 import java.util.Set; 6 7 import org.elasticsearch.common.io.stream.StreamInput; 8 import org.elasticsearch.common.io.stream.StreamOutput; 9 import org.elasticsearch.common.io.stream.Writeable; 10 import org.elasticsearch.common.unit.TimeValue; 11 12 import lombok.Getter; 13 14 public interface SearchLatencyProbe { 15 16 @Getter 17 class LatencyStat implements Writeable { 18 private final String bucket; 19 private final double percentile; 20 private final TimeValue latency; 21 22 LatencyStat(String bucket, double percentile, TimeValue latency) { 23 this.bucket = bucket; 24 this.percentile = percentile; 25 this.latency = latency; 26 } 27 28 LatencyStat(StreamInput in) throws IOException { 29 this.bucket = in.readString(); 30 this.percentile = in.readDouble(); 31 this.latency = in.readTimeValue(); 32 } 33 34 public void writeTo(StreamOutput out) throws IOException { 35 out.writeString(bucket); 36 out.writeDouble(this.percentile); 37 out.writeTimeValue(latency); 38 } 39 } 40 41 long getMillisAtPercentile(String bucket, double percentile); 42 List<LatencyStat> getLatencyStats(Set<Double> latencies); 43 } 44