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 }