com.alibaba.druid.support.http.AbstractWebStatImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of druid Show documentation
Show all versions of druid Show documentation
An JDBC datasource implementation.
/*
* Copyright 1999-2011 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;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.alibaba.druid.filter.stat.StatFilterContextListenerAdapter;
import com.alibaba.druid.support.http.stat.WebAppStat;
import com.alibaba.druid.support.http.stat.WebRequestStat;
import com.alibaba.druid.support.http.stat.WebSessionStat;
import com.alibaba.druid.util.DruidWebUtils;
public class AbstractWebStatImpl {
public final static int DEFAULT_MAX_STAT_SESSION_COUNT = 1000 * 1;
protected WebAppStat webAppStat = null;
protected boolean sessionStatEnable = true;
protected int sessionStatMaxCount = DEFAULT_MAX_STAT_SESSION_COUNT;
protected boolean createSession = false;
protected boolean profileEnable = false;
protected String contextPath;
protected String principalSessionName;
protected String principalCookieName;
protected String realIpHeader;
protected WebStatFilterContextListener statFilterContextListener = new WebStatFilterContextListener();
public boolean isSessionStatEnable() {
return sessionStatEnable;
}
public void setSessionStatEnable(boolean sessionStatEnable) {
this.sessionStatEnable = sessionStatEnable;
}
public boolean isProfileEnable() {
return profileEnable;
}
public void setProfileEnable(boolean profileEnable) {
this.profileEnable = profileEnable;
}
public String getContextPath() {
return contextPath;
}
public int getSessionStatMaxCount() {
return sessionStatMaxCount;
}
public String getRequestURI(HttpServletRequest request) {
return request.getRequestURI();
}
public String getPrincipalSessionName() {
return principalSessionName;
}
public String getPrincipalCookieName() {
return principalCookieName;
}
public WebSessionStat getSessionStat(HttpServletRequest request) {
if (!isSessionStatEnable()) {
return null;
}
WebSessionStat sessionStat = null;
String sessionId = getSessionId(request);
if (sessionId != null) {
sessionStat = webAppStat.getSessionStat(sessionId, true);
}
if (sessionStat != null) {
long currentMillis = System.currentTimeMillis();
String userAgent = request.getHeader("user-agent");
if (sessionStat.getCreateTimeMillis() == -1L) {
HttpSession session = request.getSession(false);
if (session != null) {
sessionStat.setCreateTimeMillis(session.getCreationTime());
} else {
sessionStat.setCreateTimeMillis(currentMillis);
}
webAppStat.computeUserAgent(userAgent);
webAppStat.incrementSessionCount();
}
sessionStat.setUserAgent(userAgent);
String ip = getRemoteAddress(request);
sessionStat.addRemoteAddress(ip);
}
return sessionStat;
}
protected String getRemoteAddress(HttpServletRequest request) {
String ip = null;
if (this.realIpHeader != null && this.realIpHeader.length() != 0) {
ip = request.getHeader(realIpHeader);
}
if (ip == null || ip.length() == 0) {
ip = DruidWebUtils.getRemoteAddr(request);
}
return ip;
}
public String getSessionId(HttpServletRequest httpRequest) {
String sessionId = null;
HttpSession session = httpRequest.getSession(createSession);
if (session != null) {
sessionId = session.getId();
}
return sessionId;
}
public String getPrincipal(HttpServletRequest httpRequest) {
if (principalSessionName != null) {
HttpSession session = httpRequest.getSession(createSession);
if (session == null) {
return null;
}
Object sessionValue = session.getAttribute(principalSessionName);
if (sessionValue == null) {
return null;
}
return sessionValue.toString();
}
if (principalCookieName != null && httpRequest.getCookies() != null) {
for (Cookie cookie : httpRequest.getCookies()) {
if (principalCookieName.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
public class WebStatFilterContextListener extends StatFilterContextListenerAdapter {
@Override
public void addUpdateCount(int updateCount) {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.addJdbcUpdateCount(updateCount);
}
}
@Override
public void addFetchRowCount(int fetchRowCount) {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.addJdbcFetchRowCount(fetchRowCount);
}
}
@Override
public void executeBefore(String sql, boolean inTransaction) {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.incrementJdbcExecuteCount();
}
}
@Override
public void executeAfter(String sql, long nanos, Throwable error) {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.addJdbcExecuteTimeNano(nanos);
if (error != null) {
reqStat.incrementJdbcExecuteErrorCount();
}
}
}
@Override
public void commit() {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.incrementJdbcCommitCount();
}
}
@Override
public void rollback() {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.incrementJdbcRollbackCount();
}
}
@Override
public void pool_connect() {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.incrementJdbcPoolConnectCount();
}
}
@Override
public void pool_close(long nanos) {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.incrementJdbcPoolCloseCount();
}
}
@Override
public void resultSet_open() {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.incrementJdbcResultSetOpenCount();
}
}
@Override
public void resultSet_close(long nanos) {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.incrementJdbcResultSetCloseCount();
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy