/* * 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.http.stat; 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.support.profile.ProfileEntryStatValue; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @MTable(name = "druid_weburi") public class WebURIStatValue { @MField(groupBy = true, aggregate = AggregateType.None) protected String uri; @MField(aggregate = AggregateType.Last) protected int runningCount; @MField(aggregate = AggregateType.Max) protected int concurrentMax; @MField(aggregate = AggregateType.Sum) protected long requestCount; @MField(aggregate = AggregateType.Sum) protected long requestTimeNano; @MField(aggregate = AggregateType.Sum) protected long jdbcFetchRowCount; @MField(aggregate = AggregateType.Max) protected long jdbcFetchRowPeak; @MField(aggregate = AggregateType.Sum) protected long jdbcUpdateCount; @MField(aggregate = AggregateType.Max) protected long jdbcUpdatePeak; @MField(aggregate = AggregateType.Sum) protected long jdbcExecuteCount; @MField(aggregate = AggregateType.Sum) protected long jdbcExecuteErrorCount; @MField(aggregate = AggregateType.Max) protected long jdbcExecutePeak; // 单次请求执行SQL次数的峰值 @MField(aggregate = AggregateType.Sum) protected long jdbcExecuteTimeNano; @MField(aggregate = AggregateType.Sum) protected long jdbcCommitCount; @MField(aggregate = AggregateType.Sum) protected long jdbcRollbackCount; @MField(aggregate = AggregateType.Sum) protected long jdbcPoolConnectionOpenCount; @MField(aggregate = AggregateType.Sum) protected long jdbcPoolConnectionCloseCount; @MField(aggregate = AggregateType.Sum) protected long jdbcResultSetOpenCount; @MField(aggregate = AggregateType.Sum) protected long jdbcResultSetCloseCount; @MField(aggregate = AggregateType.Sum) protected long errorCount; @MField(aggregate = AggregateType.Last) protected Date lastAccessTime = null; private List<ProfileEntryStatValue> profileEntryStatValueList; @MField(name = "h1", aggregate = AggregateType.Sum) protected long histogram_0_1; @MField(name = "h10", aggregate = AggregateType.Sum) protected long histogram_1_10; @MField(name = "h100", aggregate = AggregateType.Sum) protected long histogram_10_100; @MField(name = "h1000", aggregate = AggregateType.Sum) protected long histogram_100_1000; @MField(name = "h10000", aggregate = AggregateType.Sum) protected int histogram_1000_10000; @MField(name = "h100000", aggregate = AggregateType.Sum) protected int histogram_10000_100000; @MField(name = "h1000000", aggregate = AggregateType.Sum) protected int histogram_100000_1000000; @MField(name = "hmore", aggregate = AggregateType.Sum) protected int histogram_1000000_more; 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 List<ProfileEntryStatValue> getProfileEntryStatValueList() { return profileEntryStatValueList; } public void setProfileEntryStatValueList(List<ProfileEntryStatValue> profileEntryStatValueList) { this.profileEntryStatValueList = profileEntryStatValueList; } public String getUri() { return uri; } public void setUri(String uri) { this.uri = uri; } 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 getRequestCount() { return requestCount; } public void setRequestCount(long requestCount) { this.requestCount = requestCount; } public long getRequestTimeNano() { return requestTimeNano; } public void setRequestTimeNano(long requestTimeNano) { this.requestTimeNano = requestTimeNano; } public long getJdbcFetchRowCount() { return jdbcFetchRowCount; } public void setJdbcFetchRowCount(long jdbcFetchRowCount) { this.jdbcFetchRowCount = jdbcFetchRowCount; } public long getJdbcFetchRowPeak() { return jdbcFetchRowPeak; } public void setJdbcFetchRowPeak(long jdbcFetchRowPeak) { this.jdbcFetchRowPeak = jdbcFetchRowPeak; } public long getJdbcUpdateCount() { return jdbcUpdateCount; } public void setJdbcUpdateCount(long jdbcUpdateCount) { this.jdbcUpdateCount = jdbcUpdateCount; } public long getJdbcUpdatePeak() { return jdbcUpdatePeak; } public void setJdbcUpdatePeak(long jdbcUpdatePeak) { this.jdbcUpdatePeak = jdbcUpdatePeak; } 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 getJdbcExecutePeak() { return jdbcExecutePeak; } public void setJdbcExecutePeak(long jdbcExecutePeak) { this.jdbcExecutePeak = jdbcExecutePeak; } 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 long getErrorCount() { return errorCount; } public void setErrorCount(long errorCount) { this.errorCount = errorCount; } public void setLastAccessTimeMillis(long lastAccessTimeMillis) { if (lastAccessTimeMillis > 0) { this.lastAccessTime = new Date(lastAccessTimeMillis); } else { this.lastAccessTime = null; } } public long getRequestTimeMillis() { return getRequestTimeNano() / (1000 * 1000); } public Date getLastAccessTime() { return lastAccessTime; } public long getJdbcExecuteTimeMillis() { return getJdbcExecuteTimeNano() / (1000 * 1000); } public Map<String, Object> getStatData() { Map<String, Object> data = new LinkedHashMap<String, Object>(); data.put("URI", this.getUri()); data.put("RunningCount", this.getRunningCount()); data.put("ConcurrentMax", this.getConcurrentMax()); data.put("RequestCount", this.getRequestCount()); data.put("RequestTimeMillis", this.getRequestTimeMillis()); data.put("ErrorCount", this.getErrorCount()); data.put("LastAccessTime", this.getLastAccessTime()); data.put("JdbcCommitCount", this.getJdbcCommitCount()); data.put("JdbcRollbackCount", this.getJdbcRollbackCount()); data.put("JdbcExecuteCount", this.getJdbcExecuteCount()); data.put("JdbcExecuteErrorCount", this.getJdbcExecuteErrorCount()); data.put("JdbcExecutePeak", this.getJdbcExecutePeak()); data.put("JdbcExecuteTimeMillis", this.getJdbcExecuteTimeMillis()); data.put("JdbcFetchRowCount", this.getJdbcFetchRowCount()); data.put("JdbcFetchRowPeak", this.getJdbcFetchRowPeak()); data.put("JdbcUpdateCount", this.getJdbcUpdateCount()); data.put("JdbcUpdatePeak", this.getJdbcUpdatePeak()); data.put("JdbcPoolConnectionOpenCount", this.getJdbcPoolConnectionOpenCount()); data.put("JdbcPoolConnectionCloseCount", this.getJdbcPoolConnectionCloseCount()); data.put("JdbcResultSetOpenCount", this.getJdbcResultSetOpenCount()); data.put("JdbcResultSetCloseCount", this.getJdbcResultSetCloseCount()); data.put("Histogram", this.getHistogram()); if (this.profileEntryStatValueList != null) { int size = profileEntryStatValueList.size(); List<Map<String, Object>> profileDataList = new ArrayList<Map<String, Object>>(size); for (ProfileEntryStatValue profileEntryStatValue : profileEntryStatValueList) { profileDataList.add(profileEntryStatValue.getData()); } data.put("Profiles", profileDataList); } return data; } }