1+ const os = require ( 'os' )
2+ const pusage = require ( 'pidusage' )
13const got = require ( 'got' )
24
35class Cube {
46 constructor ( key , options ) {
5- this . _started = false
67 this . url = 'https://api.labstack.com/cube'
78 this . key = key
8- options = { } || options
9+ options = options || { }
10+ this . node = options . node || os . hostname ( )
911 this . batchSize = options . batchSize || 60
1012 this . dispatchInterval = options . dispatchInterval || 60
13+ this . tags = options . tags
1114 this . activeRequests = 0
1215 this . requests = [ ]
16+
17+ // Dispatch daemon
18+ setInterval ( ( ) => {
19+ this . _dispatch ( )
20+ } , this . dispatchInterval * 1000 )
21+
22+ // System daemon
23+ setInterval ( ( ) => {
24+ pusage . stat ( process . pid , ( err , stat ) => {
25+ this . uptime = Math . floor ( process . uptime ( ) )
26+ this . cpu = stat . cpu
27+ this . memory = stat . memory
28+ } )
29+ } , 1000 )
1330 }
1431
1532 _requestID ( request , response ) {
33+ console . log ( request . headers , response )
1634 return request . headers [ 'x-request-id' ] ||
17- response . _headers [ 'x-request-id' ]
35+ response . headers [ 'x-request-id' ]
1836 }
1937
2038 _realIP ( request ) {
21- let ip = request . headers [ 'x-forwarded-for' ] ||
22- request . headers [ 'x-real-ip' ] ||
23- request . connection . remoteAddress
24- if ( Array . isArray ( ip ) ) {
25- return ip . split ( ', ' ) [ 0 ]
26- } else {
27- return ip
28- }
39+ // let ip = request.headers['x-forwarded-for'] ||
40+ // request.headers['x-real-ip'] ||
41+ // request.connection.remoteAddress
42+ // if (Array.isArray(ip)) {
43+ // return ip.split(', ')[0]
44+ // } else {
45+ // return ip
46+ // }
2947 }
3048
3149 _resetRequests ( ) {
@@ -37,6 +55,8 @@ class Cube {
3755 return
3856 }
3957
58+ console . log ( this . requests )
59+
4060 // TODO: handler error
4161 got . post ( this . url , {
4262 headers : {
@@ -58,40 +78,25 @@ class Cube {
5878 // Reset requests
5979 this . requests . length = 0
6080 }
61-
62- start ( request , response ) {
81+
82+ start ( request ) {
6383 this . activeRequests ++
6484
65- // Daemon
66- if ( ! this . started ) {
67- setInterval ( ( ) => {
68- this . _dispatch ( )
69- } , this . dispatchInterval * 1000 ) ;
70- this . started = true
71- }
85+ request . time = Date . now ( )
86+ request . active = this . activeRequests
87+ request . node = this . node
88+ request . uptime = this . uptime
89+ request . cpu = this . cpu
90+ request . memory = this . memory
91+ this . requests . push ( request )
7292
73- const req = { }
74- req . id = this . _requestID ( request , response )
75- req . time = Date . now ( )
76- req . host = request . headers . host
77- req . path = request . url
78- req . method = request . method
79- req . bytes_in = parseInt ( request . headers [ 'content-length' ] )
80- if ( ! req . bytes_in ) {
81- req . bytes_in = 0
82- }
83- req . remote_ip = this . _realIP ( request )
84- req . client_id = req . remote_ip
85- req . user_agent = request . headers [ 'user-agent' ]
86- this . requests . push ( req )
87- return req
93+ return request
8894 }
8995
90- stop ( request , response ) {
96+ stop ( request ) {
9197 this . activeRequests --
92-
93- request . status = response . statusCode
94- request . bytes_out = response . _headers [ 'content-length' ]
98+
99+ // r.id = this._realIP(response)
95100 request . latency = Date . now ( ) - request . time
96101
97102 // Dispatch batch
@@ -113,4 +118,3 @@ class Cube {
113118module . exports = {
114119 Cube
115120}
116-
0 commit comments