package act.metric;
/*-
* #%L
* ACT Framework
* %%
* Copyright (C) 2014 - 2017 ActFramework
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import org.osgl.$;
public class MetricInfo {
public static final String HTTP_HANDLER = "act:http";
public static final String CLASS_LOADING = "act:classload";
public static final String JOB_HANDLER = "act:job";
public static final String CLI_HANDLER = "act:cli";
public static final String MAILER = "act:mail";
public static final String EVENT_HANDLER = "act:event";
public static final String ROUTING = "act:routing";
public static final String PATH_SEPARATOR = Metric.PATH_SEPARATOR;
private String name;
private long count;
private Long ns;
MetricInfo(String name, long count) {
this.name = name;
this.count = count;
}
MetricInfo(String name, long ns, long count) {
this.name = name;
this.ns = ns;
this.count = count;
}
public String getName() {
return name;
}
public long getNs() {
return ns;
}
public long getMs() {
return ns / 1000L / 1000L;
}
public long getSeconds() {
return ns / 1000L / 1000L / 1000L;
}
public long getCount() {
return count;
}
public String getCountAsStr() {
return CountScale.format(count);
}
public long getMsAvg() {
return getMs() / count;
}
public String getAccumulated() {
return DurationScale.format(ns);
}
public String getAvg() {
return DurationScale.format(ns / count);
}
@Override
public int hashCode() {
return $.hc(name);
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof MetricInfo) {
MetricInfo that = (MetricInfo) obj;
return $.eq(name, that.name);
}
return false;
}
public enum Comparator {
;
public static $.Comparator<MetricInfo> COUNTER = new $.Comparator<MetricInfo>() {
@Override
public int compare(MetricInfo m1, MetricInfo m2) {
long l = m2.count - m1.count;
if (l < 0) {
return -1;
} else if (l == 0) {
return m2.name.compareTo(m1.name);
}
return 1;
}
};
public static $.Comparator<MetricInfo> TIMER = new $.Comparator<MetricInfo>() {
@Override
public int compare(MetricInfo m1, MetricInfo m2) {
long l;
if (null == m1.ns) {
l = m2.count - m1.count;
} else {
l = m2.getMsAvg() - m1.getMsAvg();
}
if (l < 0) {
return -1;
} else if (l == 0) {
return m2.name.compareTo(m1.name);
} else {
return 1;
}
}
};
}
}