/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* 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.
*/
package com.alibaba.druid.support.spring.stat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import com.alibaba.druid.support.monitor.annotation.AggregateType;
import com.alibaba.druid.support.monitor.annotation.MField;
import com.alibaba.druid.support.monitor.annotation.MTable;
import com.alibaba.druid.util.Utils;
@MTable(name = "druid_springmethod")
public class SpringMethodStatValue {
@MField(groupBy = true, aggregate=AggregateType.None)
private String className;
@MField(groupBy = true, aggregate=AggregateType.None)
private String signature;
@MField(aggregate = AggregateType.Last)
private int runningCount;
@MField(aggregate = AggregateType.Max)
private int concurrentMax;
@MField(aggregate = AggregateType.Sum)
private long executeCount;
@MField(aggregate = AggregateType.Sum)
private long executeErrorCount;
@MField(aggregate = AggregateType.Sum)
private long executeTimeNano;
@MField(aggregate = AggregateType.Sum)
private long jdbcFetchRowCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcUpdateCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcExecuteCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcExecuteErrorCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcExecuteTimeNano;
@MField(aggregate = AggregateType.Sum)
private long jdbcCommitCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcRollbackCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcPoolConnectionOpenCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcPoolConnectionCloseCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcResultSetOpenCount;
@MField(aggregate = AggregateType.Sum)
private long jdbcResultSetCloseCount;
@MField(aggregate = AggregateType.Last)
private String lastErrorClass;
@MField(aggregate = AggregateType.Last)
private String lastErrorMessage;
@MField(aggregate = AggregateType.Last)
private String lastErrorStackTrace;
@MField(aggregate = AggregateType.Last)
private long lastErrorTimeMillis;
@MField(name = "h1", aggregate=AggregateType.Sum)
long histogram_0_1;
@MField(name = "h10", aggregate=AggregateType.Sum)
long histogram_1_10;
@MField(name = "h100", aggregate=AggregateType.Sum)
long histogram_10_100;
@MField(name = "h1000", aggregate=AggregateType.Sum)
long histogram_100_1000;
@MField(name = "h10000", aggregate=AggregateType.Sum)
int histogram_1000_10000;
@MField(name = "h100000", aggregate=AggregateType.Sum)
int histogram_10000_100000;
@MField(name = "h1000000", aggregate=AggregateType.Sum)
int histogram_100000_1000000;
@MField(name = "hmore", aggregate=AggregateType.Sum)
int histogram_1000000_more;
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public int getRunningCount() {
return runningCount;
}
public void setRunningCount(int runningCount) {
this.runningCount = runningCount;
}
public int getConcurrentMax() {
return concurrentMax;
}
public void setConcurrentMax(int concurrentMax) {
this.concurrentMax = concurrentMax;
}
public long getExecuteCount() {
return executeCount;
}
public void setExecuteCount(long executeCount) {
this.executeCount = executeCount;
}
public long getExecuteErrorCount() {
return executeErrorCount;
}
public void setExecuteErrorCount(long executeErrorCount) {
this.executeErrorCount = executeErrorCount;
}
public long getExecuteTimeNano() {
return executeTimeNano;
}
public void setExecuteTimeNano(long executeTimeNano) {
this.executeTimeNano = executeTimeNano;
}
public long getJdbcFetchRowCount() {
return jdbcFetchRowCount;
}
public void setJdbcFetchRowCount(long jdbcFetchRowCount) {
this.jdbcFetchRowCount = jdbcFetchRowCount;
}
public long getJdbcUpdateCount() {
return jdbcUpdateCount;
}
public void setJdbcUpdateCount(long jdbcUpdateCount) {
this.jdbcUpdateCount = jdbcUpdateCount;
}
public long getJdbcExecuteCount() {
return jdbcExecuteCount;
}
public void setJdbcExecuteCount(long jdbcExecuteCount) {
this.jdbcExecuteCount = jdbcExecuteCount;
}
public long getJdbcExecuteErrorCount() {
return jdbcExecuteErrorCount;
}
public void setJdbcExecuteErrorCount(long jdbcExecuteErrorCount) {
this.jdbcExecuteErrorCount = jdbcExecuteErrorCount;
}
public long getJdbcExecuteTimeNano() {
return jdbcExecuteTimeNano;
}
public void setJdbcExecuteTimeNano(long jdbcExecuteTimeNano) {
this.jdbcExecuteTimeNano = jdbcExecuteTimeNano;
}
public long getJdbcCommitCount() {
return jdbcCommitCount;
}
public void setJdbcCommitCount(long jdbcCommitCount) {
this.jdbcCommitCount = jdbcCommitCount;
}
public long getJdbcRollbackCount() {
return jdbcRollbackCount;
}
public void setJdbcRollbackCount(long jdbcRollbackCount) {
this.jdbcRollbackCount = jdbcRollbackCount;
}
public long getJdbcPoolConnectionOpenCount() {
return jdbcPoolConnectionOpenCount;
}
public void setJdbcPoolConnectionOpenCount(long jdbcPoolConnectionOpenCount) {
this.jdbcPoolConnectionOpenCount = jdbcPoolConnectionOpenCount;
}
public long getJdbcPoolConnectionCloseCount() {
return jdbcPoolConnectionCloseCount;
}
public void setJdbcPoolConnectionCloseCount(long jdbcPoolConnectionCloseCount) {
this.jdbcPoolConnectionCloseCount = jdbcPoolConnectionCloseCount;
}
public long getJdbcResultSetOpenCount() {
return jdbcResultSetOpenCount;
}
public void setJdbcResultSetOpenCount(long jdbcResultSetOpenCount) {
this.jdbcResultSetOpenCount = jdbcResultSetOpenCount;
}
public long getJdbcResultSetCloseCount() {
return jdbcResultSetCloseCount;
}
public void setJdbcResultSetCloseCount(long jdbcResultSetCloseCount) {
this.jdbcResultSetCloseCount = jdbcResultSetCloseCount;
}
public void setLastError(Throwable lastError) {
if (lastError != null) {
lastErrorClass = lastError.getClass().getName();
lastErrorMessage = lastError.getMessage();
lastErrorStackTrace = Utils.toString(lastError.getStackTrace());
}
}
public long getLastErrorTimeMillis() {
return lastErrorTimeMillis;
}
public void setLastErrorTimeMillis(long lastErrorTimeMillis) {
this.lastErrorTimeMillis = lastErrorTimeMillis;
}
public long getExecuteTimeMillis() {
return getExecuteTimeNano() / (1000 * 1000);
}
public long getJdbcExecuteTimeMillis() {
return getJdbcExecuteTimeNano() / (1000 * 1000);
}
public Date getLastErrorTime() {
if (lastErrorTimeMillis <= 0) {
return null;
}
return new Date(lastErrorTimeMillis);
}
public long[] getHistogram() {
return new long[] {
//
histogram_0_1, //
histogram_1_10, //
histogram_10_100, //
histogram_100_1000, //
histogram_1000_10000, //
histogram_10000_100000, //
histogram_100000_1000000, //
histogram_1000000_more //
};
}
public Map<String, Object> getData() {
Map<String, Object> data = new LinkedHashMap<String, Object>();
data.put("Class", this.getClassName());
data.put("Method", this.getSignature());
data.put("RunningCount", this.getRunningCount());
data.put("ConcurrentMax", this.getConcurrentMax());
data.put("ExecuteCount", this.getExecuteCount());
data.put("ExecuteErrorCount", this.getExecuteErrorCount());
data.put("ExecuteTimeMillis", this.getExecuteTimeMillis());
data.put("JdbcCommitCount", this.getJdbcCommitCount());
data.put("JdbcRollbackCount", this.getJdbcRollbackCount());
data.put("JdbcPoolConnectionOpenCount", this.getJdbcPoolConnectionOpenCount());
data.put("JdbcPoolConnectionCloseCount", this.getJdbcPoolConnectionCloseCount());
data.put("JdbcResultSetOpenCount", this.getJdbcResultSetOpenCount());
data.put("JdbcResultSetCloseCount", this.getJdbcResultSetCloseCount());
data.put("JdbcExecuteCount", this.getJdbcExecuteCount());
data.put("JdbcExecuteErrorCount", this.getJdbcExecuteErrorCount());
data.put("JdbcExecuteTimeMillis", this.getJdbcExecuteTimeMillis());
data.put("JdbcFetchRowCount", this.getJdbcFetchRowCount());
data.put("JdbcUpdateCount", this.getJdbcUpdateCount());
if (this.lastErrorClass == null) {
data.put("LastError", null);
} else {
Map<String, Object> map = new LinkedHashMap<String, Object>(3);
map.put("Class", lastErrorClass);
map.put("Message", lastErrorMessage);
map.put("StackTrace", lastErrorStackTrace);
data.put("LastError", map);
}
data.put("LastErrorTime", this.getLastErrorTime());
data.put("Histogram", this.getHistogram());
return data;
}
}