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 }