package com.loadimpact.resource.testresult;
import com.loadimpact.resource.HttpMethods;
import javax.json.JsonObject;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;
/**
* URL metric results.
*
* @author jens
*/
public class UrlMetricResult extends AggregatedNumericResult {
public static final String METRIC_ID_PREFIX = "__li_url_";
public final URL url;
public final HttpMethods method;
public final int status_code;
public final int average_content_length;
public final int compressed_responses_count;
public final int compressed_responses_average_content_length;
public final Map<String, Integer> types;
public UrlMetricResult(JsonObject json) {
super(json);
url = getUrl(json, "url");
method = HttpMethods.valueOf(json.getString("method", "GET").toUpperCase());
status_code = json.getInt("status_code", 200);
average_content_length = json.getInt("avg_cntlen", 0);
compressed_responses_count = json.getInt("comp_count", 0);
compressed_responses_average_content_length = json.getInt("avg_comp_cntlen", 0);
Map<String, Integer> map = new TreeMap<String, Integer>();
JsonObject contentTypesJson = json.getJsonObject("content_types");
if (contentTypesJson != null) {
for (String type : contentTypesJson.keySet()) {
map.put(type, contentTypesJson.getInt(type, 0));
}
}
types = Collections.unmodifiableMap(map);
}
protected StringBuilder toString(StringBuilder buf) {
return super.toString(buf).append(", ")
.append("url=").append(url).append(", ")
.append("method=").append(method).append(", ")
.append("status_code=").append(status_code).append(", ")
.append("average_content_length=").append(average_content_length).append(", ")
.append("compressed_responses_count=").append(compressed_responses_count).append(", ")
.append("compressed_responses_average_content_length=").append(compressed_responses_average_content_length).append(", ")
.append("types=").append(types)
;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof UrlMetricResult)) return false;
if (!super.equals(o)) return false;
UrlMetricResult that = (UrlMetricResult) o;
if (average_content_length != that.average_content_length) return false;
if (compressed_responses_average_content_length != that.compressed_responses_average_content_length)
return false;
if (compressed_responses_count != that.compressed_responses_count) return false;
if (status_code != that.status_code) return false;
if (types != null ? !types.equals(that.types) : that.types != null)
return false;
if (method != that.method) return false;
if (url != null ? !url.equals(that.url) : that.url != null) return false;
return true;
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (url != null ? url.hashCode() : 0);
result = 31 * result + (method != null ? method.hashCode() : 0);
result = 31 * result + status_code;
result = 31 * result + average_content_length;
result = 31 * result + compressed_responses_count;
result = 31 * result + compressed_responses_average_content_length;
result = 31 * result + (types != null ? types.hashCode() : 0);
return result;
}
}