001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.hayabusa.resource; 017 018 import org.opengion.fukurou.util.StringUtil; 019 import java.io.UnsupportedEncodingException; 020 021 /** 022 * 画面へのアクセス状況???を管?るクラスです? 023 * ?そのも?は、UserInfo により??タベ?ス(GE15)に書き込まれます? 024 * シス?リソースのUSE_ACCESS_TOKEI_TABLE=true の場合?み、DBに書き込まれますが? 025 * ??タ?そのも?は、常に行って?す? 026 * こ?オブジェクト?、GUIInfo から、??委譲されて使用されます? 027 * 028 * ・accessCount こ?画面へのアクセス数 029 * ・errorCount こ?画面でのエラー数 030 * ・readCount こ?画面で検索した件数 031 * ・writeCount こ?画面で登録した件数 032 * ・dbTime こ?画面にかかった累計D?処??ms) 033 * ・maxDbTime こ?画面にかかった最大??処??ms) 034 * ・maxQuery ???処?間を記録したとき?SQL? 035 * 036 * @og.rev 4.0.0.0 (2004/12/31) 新規作? 037 * @og.group リソース管? 038 * 039 * @version 4.0 040 * @author Kazuhiko Hasegawa 041 * @since JDK5.0, 042 */ 043 final class GUIAccessCount { 044 private final String guiKey ; 045 046 private int accessCount = 0; // こ?画面へのアクセス数 047 private int errorCount = 0; // こ?画面でのエラー数 048 private long readCount = 0; // こ?画面で検索した件数 049 private long writeCount = 0; // こ?画面で登録した件数 050 private long dbTime = 0; // こ?画面にかかった累計D?処??ms) 051 private long maxDbTime = 0; // こ?画面にかかった最大??処??ms) 052 private String maxQuery = null; // ???処?間を記録したとき?SQL? 053 054 /** 055 * コンストラクター 056 * 057 * @param guiKey 画面キー 058 */ 059 public GUIAccessCount( final String guiKey ) { 060 this.guiKey = guiKey; 061 } 062 063 /** 064 * 画面?? 画面ID を取得します? 065 * 066 * @return key 画面ID 067 */ 068 public String getKey() { 069 return guiKey; 070 } 071 072 /** 073 * ??タベ?ス検索した数と、掛かった時?ms)を?セ?します? 074 * これは、セキュリ?上?監視フラグで、不?に、大量? 075 * ??タが検索された?合や、不正な??タアクセスがあるかど?? 076 * 監視するため?統計情報を取得します? 077 * 画面オブジェクト?、各ユーザー毎に作?されて?ため、??? 078 * ユーザー?画面毎?アクセス状況を見ることが可能になります? 079 * 080 * @param cnt ??タベ?ス検索した数 081 * @param time ??処??ms) 082 * @param query そ?とき?SQL? 083 */ 084 public void addReadCount( final int cnt,final long time,final String query ) { 085 readCount += cnt ; 086 dbTime += time ; 087 if( maxDbTime < time ) { 088 maxDbTime = time; 089 maxQuery = query; 090 } 091 } 092 093 /** 094 * ??タベ?ス検索した数と、掛かった時?ms)を?取得します? 095 * これは、セキュリ?上?監視フラグで、不?に、大量? 096 * ??タが検索された?合や、不正な??タアクセスがあるかど?? 097 * 監視するため?統計情報を取得します? 098 * 画面オブジェクト?、各ユーザー毎に作?されて?ため、??? 099 * ユーザー?画面毎?アクセス状況を見ることが可能になります? 100 * 101 * @return cnt ??タベ?ス検索した数 102 */ 103 public long getReadCount() { 104 return readCount ; 105 } 106 107 /** 108 * ??タベ?ス登録した数を?セ?します? 109 * これは、セキュリ?上?監視フラグで、不?に、大量? 110 * ??タが登録された?合や、不正な??タアクセスがあるかど?? 111 * 監視するため?統計情報を取得します? 112 * 画面オブジェクト?、各ユーザー毎に作?されて?ため、??? 113 * ユーザー?画面毎?アクセス状況を見ることが可能になります? 114 * 115 * @param cnt ??タベ?ス登録した数 116 * @param time ??処??ms) 117 * @param query そ?とき?SQL? 118 */ 119 public void addWriteCount( final int cnt,final long time,final String query ) { 120 writeCount += cnt ; 121 dbTime += time ; 122 if( maxDbTime < time ) { 123 maxDbTime = time; 124 maxQuery = query; 125 } 126 } 127 128 /** 129 * ??タベ?ス登録した数を?取得します? 130 * これは、セキュリ?上?監視フラグで、不?に、大量? 131 * ??タが登録された?合や、不正な??タアクセスがあるかど?? 132 * 監視するため?統計情報を取得します? 133 * 画面オブジェクト?、各ユーザー毎に作?されて?ため、??? 134 * ユーザー?画面毎?アクセス状況を見ることが可能になります? 135 * 136 * @return cnt ??タベ?ス登録した数 137 */ 138 public long getWriteCount() { 139 return writeCount ; 140 } 141 142 /** 143 * こ?画面へのアクセス回数を??1します? 144 * アクセス回数は、このメソ?の呼び出し回数のことです? 145 * 現状では、result.jsp 画面でセ?することで、アクセス数? 146 * 数えることにします? 147 * 148 */ 149 public void addAccessCount() { 150 accessCount++ ; 151 } 152 153 /** 154 * こ?画面へのアクセス回数を?取得します? 155 * アクセス回数は、isWrite() メソ?の呼び出し回数のことです? 156 * こ?メソ?は、画面アクセス時に、チェ?するた?に呼ばれます? 157 * 回数は、各JSP画面にこ?チェ?が?る?ずなので、基本? 158 * 画面の数(画面IDではなく?JSPファイル数)になります? 159 * ただし?forward ?? index では、このチェ?は、行って?せんので 160 * カウントされません? 161 * 162 * @return cnt 画面へのアクセス回数 163 */ 164 public int getAccessCount() { 165 return accessCount ; 166 } 167 168 /** 169 * エラー発生時の件数を+1します? 170 * これは、エラー発生時に呼び出すことで、エラー件数をチェ?すること? 171 * 可能になります? 172 * ?にエラーには、予期するエラー(??入力登録漏れ?と、予期しな?ラー 173 * がありますが、ここでは、Java の Exceptionが発生する予期しな?ラーの 174 * 件数をカウントします? 175 * 176 */ 177 public void addErrorCount() { 178 errorCount++ ; 179 } 180 181 /** 182 * エラー発生時の件数を取得します? 183 * これは、エラー発生時に呼び出すことで、エラー件数をチェ?すること? 184 * 可能になります? 185 * ?にエラーには、予期するエラー(??入力登録漏れ?と、予期しな?ラー 186 * がありますが、ここでは、Java の Exceptionが発生する予期しな?ラーの 187 * 件数をカウントします? 188 * 189 * @return エラー発生件数 190 */ 191 public int getErrorCount() { 192 return errorCount ; 193 } 194 195 /** 196 * こ?画面にかかった累計D?処??ms)を返します? 197 * 198 * @return dbTime こ?画面にかかったD?処??ms) 199 */ 200 public long getQueryTime() { 201 return dbTime ; 202 } 203 204 /** 205 * こ?画面にかかった最大??処??ms)を返します? 206 * 207 * @return maxDbTime ???処??ms) 208 */ 209 public long getMaxQueryTime() { 210 return maxDbTime ; 211 } 212 213 /** 214 * ???処?間を記録したとき?SQL?返します? 215 * 216 * @return maxQuery ???処?間を記録したとき?SQL? 217 * 218 * @og.rev 4.0.0.0 (2007/10/05) SQLServer 互換性の為?000 Byte 以?整形します? 219 * @og.rev 4.1.0.1 (2008/01/29) 戻り??000 Byte 以?します? 220 */ 221 public String getMaxQuery() { 222 // return ( maxQuery != null ) ? maxQuery : "" ; 223 224 final String rtn ; 225 if( maxQuery == null ) { rtn = ""; } 226 else if( maxQuery.length() < 1300 ) { rtn = maxQuery; } 227 else { 228 String tmp ; 229 try { 230 byte[] byteValue = StringUtil.makeByte( maxQuery,"UTF-8" ); 231 tmp = new String( byteValue,"UTF-8" ); 232 if( tmp.length() > 1300 ) { 233 tmp = tmp.substring( 0,1300 ); 234 } 235 } 236 catch( UnsupportedEncodingException ex ) { // サポ?ト??のは? 237 tmp = maxQuery.substring( 0,1300 ); 238 } 239 rtn = tmp; 240 } 241 242 return rtn ; 243 } 244 }