@@ -24,15 +24,15 @@ func init() {
2424 ServerStartTime : time .Now (),
2525 TotalRequestCount : 0 ,
2626 TotalErrorCount : 0 ,
27+ CurrentRequestCount : 0 ,
2728 IntervalRequestData : NewItemMap (),
2829 DetailRequestURLData : NewItemMap (),
2930 IntervalErrorData : NewItemMap (),
3031 DetailErrorPageData : NewItemMap (),
3132 DetailErrorData : NewItemMap (),
3233 DetailHTTPCodeData : NewItemMap (),
33- dataChan_Request : make (chan * RequestInfo , 1000 ),
34+ dataChan_Request : make (chan * RequestInfo , 2000 ),
3435 dataChan_Error : make (chan * ErrorInfo , 1000 ),
35- dataChan_HttpCode : make (chan * HttpCodeInfo , 1000 ),
3636 infoPool : & pool {
3737 requestInfo : sync.Pool {
3838 New : func () interface {} {
@@ -44,11 +44,6 @@ func init() {
4444 return & ErrorInfo {}
4545 },
4646 },
47- httpCodeInfo : sync.Pool {
48- New : func () interface {} {
49- return & HttpCodeInfo {}
50- },
51- },
5247 },
5348 }
5449 go GlobalState .handleInfo ()
@@ -76,12 +71,6 @@ type ErrorInfo struct {
7671 Num uint64
7772}
7873
79- //httpcode count info
80- type HttpCodeInfo struct {
81- URL string
82- Code int
83- Num uint64
84- }
8574
8675//服务器状态信息
8776type ServerStateInfo struct {
@@ -91,6 +80,8 @@ type ServerStateInfo struct {
9180 EnabledDetailRequestData bool
9281 //该运行期间总访问次数
9382 TotalRequestCount uint64
83+ //当前活跃的请求数
84+ CurrentRequestCount uint64
9485 //单位时间内请求数据 - 按分钟为单位
9586 IntervalRequestData * ItemMap
9687 //明细请求页面数据 - 以不带参数的访问url为key
@@ -108,7 +99,6 @@ type ServerStateInfo struct {
10899
109100 dataChan_Request chan * RequestInfo
110101 dataChan_Error chan * ErrorInfo
111- dataChan_HttpCode chan * HttpCodeInfo
112102 //对象池
113103 infoPool * pool
114104}
@@ -124,6 +114,8 @@ func (state *ServerStateInfo) ShowHtmlData(version string) string {
124114 data += "<br>"
125115 data += "TotalRequestCount : " + strconv .FormatUint (state .TotalRequestCount , 10 )
126116 data += "<br>"
117+ data += "CurrentRequestCount : " + strconv .FormatUint (state .CurrentRequestCount , 10 )
118+ data += "<br>"
127119 data += "TotalErrorCount : " + strconv .FormatUint (state .TotalErrorCount , 10 )
128120 data += "<br>"
129121 state .IntervalRequestData .RLock ()
@@ -164,13 +156,20 @@ func (state *ServerStateInfo) QueryIntervalErrorData(queryKey string) uint64 {
164156}
165157
166158//AddRequestCount 增加请求数
167- func (state * ServerStateInfo ) AddRequestCount (page string , code int , num uint64 ) uint64 {
168- if strings .Index (page , "/dotweb/" ) != 0 {
169- atomic .AddUint64 (& state .TotalRequestCount , num )
170- state .addRequestData (page , code , num )
171- state .addHTTPCodeData (page , code , num )
172- }
173- return state .TotalRequestCount
159+ func (state * ServerStateInfo ) AddRequestCount (page string , code int , num uint64 ) {
160+ state .addRequestData (page , code , num )
161+ }
162+
163+ //AddCurrentRequest 增加请求数
164+ func (state * ServerStateInfo ) AddCurrentRequest (num uint64 ) uint64 {
165+ atomic .AddUint64 (& state .CurrentRequestCount , num )
166+ return state .CurrentRequestCount
167+ }
168+
169+ //SubCurrentRequest 消除请求数
170+ func (state * ServerStateInfo ) SubCurrentRequest (num uint64 ) uint64 {
171+ atomic .AddUint64 (& state .CurrentRequestCount , ^ uint64 (num - 1 ))
172+ return state .CurrentRequestCount
174173}
175174
176175//AddErrorCount 增加错误数
@@ -198,21 +197,16 @@ func (state *ServerStateInfo) addErrorData(page string, err error, num uint64) {
198197 state .dataChan_Error <- info
199198}
200199
201- func (state * ServerStateInfo ) addHTTPCodeData (page string , code int , num uint64 ) {
202- //get from pool
203- info := state .infoPool .httpCodeInfo .Get ().(* HttpCodeInfo )
204- info .URL = page
205- info .Code = code
206- info .Num = num
207- state .dataChan_HttpCode <- info
208- }
209200
210201//处理日志内部函数
211202func (state * ServerStateInfo ) handleInfo () {
212203 for {
213204 select {
214205 case info := <- state .dataChan_Request :
215206 {
207+ if strings .Index (info .URL , "/dotweb/" ) != 0 {
208+ atomic .AddUint64 (& state .TotalRequestCount , info .Num )
209+ }
216210 //fixed #63 状态数据,当url较多时,导致内存占用过大
217211 if state .EnabledDetailRequestData {
218212 //ignore 404 request
@@ -228,6 +222,11 @@ func (state *ServerStateInfo) handleInfo() {
228222 val := state .IntervalRequestData .GetUInt64 (key )
229223 state .IntervalRequestData .Set (key , val + info .Num )
230224
225+ //set code data
226+ key = strconv .Itoa (info .Code )
227+ val = state .DetailHTTPCodeData .GetUInt64 (key )
228+ state .DetailHTTPCodeData .Set (key , val + info .Num )
229+
231230 //put info obj
232231 state .infoPool .requestInfo .Put (info )
233232 }
@@ -251,16 +250,6 @@ func (state *ServerStateInfo) handleInfo() {
251250 //put info obj
252251 state .infoPool .errorInfo .Put (info )
253252 }
254- case info := <- state .dataChan_HttpCode :
255- {
256- //set detail error page data
257- key := strconv .Itoa (info .Code )
258- val := state .DetailHTTPCodeData .GetUInt64 (key )
259- state .DetailHTTPCodeData .Set (key , val + info .Num )
260-
261- //put info obj
262- state .infoPool .httpCodeInfo .Put (info )
263- }
264253 }
265254 }
266255}
0 commit comments