whatap 0.4.79 → 0.4.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/keep-context.json +3 -3
- package/README.md +51 -51
- package/bindings/darwin/x64/whatap.node +0 -0
- package/bindings/linux/ia32/whatap.node +0 -0
- package/bindings/linux/x64/whatap.node +0 -0
- package/help.txt +10 -10
- package/index.js +8 -8
- package/lib/conf/conf-sys-mon.js +100 -100
- package/lib/conf/config-default.js +238 -238
- package/lib/conf/configure.js +423 -423
- package/lib/conf/license.js +41 -41
- package/lib/control/cmd-config.js +23 -23
- package/lib/control/control-handler.js +344 -344
- package/lib/control/packagectr-helper.js +149 -149
- package/lib/core/agent.js +329 -328
- package/lib/core/interceptor.js +142 -142
- package/lib/core/request-agent.js +26 -26
- package/lib/counter/counter-manager.js +127 -127
- package/lib/counter/meter/meter-activex.js +66 -66
- package/lib/counter/meter/meter-httpc.js +57 -57
- package/lib/counter/meter/meter-resource.js +9 -9
- package/lib/counter/meter/meter-service.js +167 -167
- package/lib/counter/meter/meter-socket.io.js +50 -50
- package/lib/counter/meter/meter-sql.js +70 -70
- package/lib/counter/meter/meter-users.js +57 -57
- package/lib/counter/meter.js +183 -183
- package/lib/counter/task/activetransaction.js +93 -93
- package/lib/counter/task/agentinfo.js +105 -105
- package/lib/counter/task/counter-task.js +9 -9
- package/lib/counter/task/gcstat.js +34 -34
- package/lib/counter/task/heapmem.js +24 -24
- package/lib/counter/task/httpc.js +75 -75
- package/lib/counter/task/proc-cpu.js +28 -28
- package/lib/counter/task/realtimeuser.js +30 -30
- package/lib/counter/task/res/systemECSTask.js +54 -54
- package/lib/counter/task/res/systemKubeTask.js +52 -52
- package/lib/counter/task/res/util/awsEcsClientThread.js +166 -166
- package/lib/counter/task/res/util/linuxProcStatUtil.js +13 -13
- package/lib/counter/task/res-sys-cpu.js +61 -61
- package/lib/counter/task/service.js +201 -201
- package/lib/counter/task/socketio.js +29 -29
- package/lib/counter/task/sql.js +104 -104
- package/lib/counter/task/systemperf.js +42 -42
- package/lib/data/datapack-sender.js +256 -256
- package/lib/data/dataprofile-agent.js +136 -136
- package/lib/data/datatext-agent.js +135 -135
- package/lib/data/event-level.js +15 -15
- package/lib/data/test.js +48 -48
- package/lib/env/constants.js +20 -20
- package/lib/kube/kube-client.js +143 -143
- package/lib/lang/text-types.js +58 -58
- package/lib/logger.js +319 -319
- package/lib/net/netflag.js +54 -54
- package/lib/net/paramdef.js +40 -40
- package/lib/net/receiver.js +65 -65
- package/lib/net/security-master.js +182 -173
- package/lib/net/sender.js +140 -140
- package/lib/net/tcp-return.js +17 -17
- package/lib/net/tcp-session.js +285 -285
- package/lib/net/tcpreq-client-proxy.js +69 -69
- package/lib/net/tcprequest-mgr.js +57 -57
- package/lib/observers/cluster-observer.js +21 -21
- package/lib/observers/express-observer.js +214 -214
- package/lib/observers/file-observer.js +184 -184
- package/lib/observers/global-observer.js +30 -30
- package/lib/observers/http-observer.js +714 -704
- package/lib/observers/maria-observer.js +382 -382
- package/lib/observers/memcached-observer.js +55 -55
- package/lib/observers/mongo-observer.js +262 -265
- package/lib/observers/mongodb-observer.js +197 -197
- package/lib/observers/mongoose-observer.js +83 -83
- package/lib/observers/mssql-observer.js +205 -205
- package/lib/observers/mysql-observer.js +436 -394
- package/lib/observers/net-observer.js +72 -72
- package/lib/observers/pgsql-observer.js +295 -295
- package/lib/observers/process-observer.js +25 -25
- package/lib/observers/promise-observer.js +31 -31
- package/lib/observers/redis-observer.js +156 -109
- package/lib/observers/schedule-observer.js +66 -66
- package/lib/observers/socket.io-observer.js +54 -54
- package/lib/observers/stream-observer.js +19 -19
- package/lib/observers/thrift-observer.js +196 -196
- package/lib/pack/activestack-pack.js +54 -54
- package/lib/pack/counter-pack.js +649 -649
- package/lib/pack/errorsnap-pack.js +68 -68
- package/lib/pack/event-pack.js +53 -53
- package/lib/pack/hitmap-pack.js +62 -62
- package/lib/pack/hitmap-pack1.js +146 -146
- package/lib/pack/netstat.js +14 -14
- package/lib/pack/pack.js +49 -49
- package/lib/pack/packenum.js +60 -60
- package/lib/pack/param-pack.js +213 -213
- package/lib/pack/profile-pack.js +48 -48
- package/lib/pack/realtimeuser-pack.js +40 -40
- package/lib/pack/stat-general-pack.js +95 -95
- package/lib/pack/staterror-pack.js +119 -119
- package/lib/pack/stathttpc-pack.js +66 -66
- package/lib/pack/stathttpc-rec.js +78 -78
- package/lib/pack/statremote-pack.js +45 -45
- package/lib/pack/statservice-pack.js +62 -62
- package/lib/pack/statservice-pack1.js +87 -87
- package/lib/pack/statservice-rec.js +292 -292
- package/lib/pack/statservice-rec_dep.js +151 -151
- package/lib/pack/statsql-pack.js +69 -69
- package/lib/pack/statsql-rec.js +100 -100
- package/lib/pack/statuseragent-pack.js +43 -43
- package/lib/pack/tagcount-pack.js +398 -398
- package/lib/pack/tagctr.js +14 -14
- package/lib/pack/text-pack.js +49 -49
- package/lib/pack/time-count.js +25 -25
- package/lib/pack/websocket.js +14 -14
- package/lib/plugin/plugin-loadermanager.js +56 -56
- package/lib/plugin/plugin.js +75 -75
- package/lib/requestlog.js +326 -326
- package/lib/service/tx-record.js +293 -288
- package/lib/stat/stat-error.js +116 -116
- package/lib/stat/stat-httpc.js +97 -97
- package/lib/stat/stat-remoteip.js +46 -46
- package/lib/stat/stat-sql.js +112 -112
- package/lib/stat/stat-tranx.js +57 -57
- package/lib/stat/stat-tx-caller.js +159 -159
- package/lib/stat/stat-tx-domain.js +110 -110
- package/lib/stat/stat-tx-referer.js +111 -111
- package/lib/stat/stat-useragent.js +48 -48
- package/lib/stat/timingsender.js +72 -72
- package/lib/step/activestack-step.js +37 -37
- package/lib/step/dbc-step.js +35 -35
- package/lib/step/http-stepx.js +66 -66
- package/lib/step/message-step.js +39 -39
- package/lib/step/method-stepx.js +46 -46
- package/lib/step/resultset-step.js +39 -39
- package/lib/step/securemsg-step.js +43 -43
- package/lib/step/socket-step.js +46 -46
- package/lib/step/sql-stepx.js +67 -67
- package/lib/step/sqlxtype.js +15 -15
- package/lib/step/step.js +65 -65
- package/lib/step/stepenum.js +53 -53
- package/lib/trace/local-context.js +13 -13
- package/lib/trace/parsed-sql.js +13 -13
- package/lib/trace/profile-collector.js +70 -70
- package/lib/trace/serviceurl-pattern-detector.js +117 -117
- package/lib/trace/trace-context-manager.js +195 -195
- package/lib/trace/trace-context.js +136 -134
- package/lib/util/anylist.js +102 -102
- package/lib/util/array-util.js +100 -100
- package/lib/util/bitutil.js +27 -27
- package/lib/util/cardinality/hyperloglog.js +105 -105
- package/lib/util/cardinality/murmurhash.js +31 -31
- package/lib/util/cardinality/registerset.js +74 -74
- package/lib/util/config-util.js +17 -17
- package/lib/util/cypher.js +89 -89
- package/lib/util/datetimehelper.js +237 -229
- package/lib/util/dateutil.js +110 -106
- package/lib/util/errordata.js +20 -20
- package/lib/util/escape-literal-sql.js +342 -342
- package/lib/util/hashutil2.js +126 -126
- package/lib/util/hexa32.js +57 -57
- package/lib/util/index.js +78 -78
- package/lib/util/intint-map.js +47 -47
- package/lib/util/intkey-linkedmap.js +26 -26
- package/lib/util/intkey-map.js +25 -25
- package/lib/util/intset.js +82 -82
- package/lib/util/iputil.js +119 -119
- package/lib/util/iputil_x.js +526 -526
- package/lib/util/keygen.js +17 -17
- package/lib/util/kube-util.js +72 -72
- package/lib/util/longint-linkedmap.js +35 -35
- package/lib/util/longkey-linkedmap.js +25 -25
- package/lib/util/longlong-linkedmap.js +37 -37
- package/lib/util/nodeutil.js +67 -67
- package/lib/util/oidutil.js +96 -93
- package/lib/util/paramsecurity.js +78 -78
- package/lib/util/pathtree.js +172 -172
- package/lib/util/pre-process.js +13 -13
- package/lib/util/process-seq.js +165 -165
- package/lib/util/property-util.js +35 -35
- package/lib/util/request-queue.js +42 -42
- package/lib/util/requestdouble-queue.js +72 -72
- package/lib/util/resourceprofile.js +156 -156
- package/lib/util/seedrandom.js +242 -242
- package/lib/util/stop-watch.js +29 -29
- package/lib/util/string-util.js +9 -9
- package/lib/util/stringkey-linkedmap.js +28 -28
- package/lib/util/stringnum-linkedmap.js +31 -31
- package/lib/util/stringset.js +65 -65
- package/lib/util/system-util.js +9 -9
- package/lib/util/userid-util.js +57 -57
- package/lib/util/utils.js +67 -67
- package/lib/value/blob-value.js +61 -61
- package/lib/value/boolean-value.js +51 -51
- package/lib/value/decimal-value.js +71 -71
- package/lib/value/double-summary.js +105 -105
- package/lib/value/double-value.js +50 -50
- package/lib/value/float-array.js +59 -59
- package/lib/value/float-value.js +64 -64
- package/lib/value/int-array.js +59 -59
- package/lib/value/int-map-value.js +151 -151
- package/lib/value/int-value.js +64 -64
- package/lib/value/ip4-value.js +83 -83
- package/lib/value/list-value.js +136 -136
- package/lib/value/long-array.js +59 -59
- package/lib/value/long-summary.js +105 -105
- package/lib/value/map-value.js +175 -175
- package/lib/value/metric-value.js +157 -157
- package/lib/value/null-value.js +42 -42
- package/lib/value/number-value.js +34 -34
- package/lib/value/summary-value.js +29 -29
- package/lib/value/text-array.js +117 -117
- package/lib/value/text-value.js +59 -59
- package/lib/value/texthash-value.js +49 -49
- package/lib/value/value.js +14 -14
- package/lib/value/valueenum.js +99 -99
- package/logs/whatap-20230906.log +54 -0
- package/logs/whatap-20231101.log +293 -0
- package/package.json +28 -28
- package/whatap.conf +1 -1
- package/logs/whatap-20230616.log +0 -13
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2016 the WHATAP project authors. All rights reserved.
|
|
3
|
-
* Use of this source code is governed by a license that
|
|
4
|
-
* can be found in the LICENSE file.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
var Long = require('long');
|
|
8
|
-
|
|
9
|
-
function MeterSocketio() {
|
|
10
|
-
|
|
11
|
-
if(typeof MeterSocketio.instance === 'object') {
|
|
12
|
-
return MeterSocketio.instance;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
this.total_connected = 0;
|
|
16
|
-
this.connected_count = 0;
|
|
17
|
-
this.received_count =0;
|
|
18
|
-
this.received_data =0;
|
|
19
|
-
this.sent_count =0;
|
|
20
|
-
this.sent_data =0;
|
|
21
|
-
|
|
22
|
-
MeterSocketio.instance = this;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
MeterSocketio.prototype.connected = function (count) {
|
|
26
|
-
this.total_connected += count;
|
|
27
|
-
this.connected_count += count;
|
|
28
|
-
};
|
|
29
|
-
MeterSocketio.prototype.disconnected = function () {
|
|
30
|
-
this.connected_count--;
|
|
31
|
-
};
|
|
32
|
-
MeterSocketio.prototype.receive = function (connectid, data) {
|
|
33
|
-
if(typeof data === 'string') {
|
|
34
|
-
this.received_data += data.length;
|
|
35
|
-
this.received_count ++;
|
|
36
|
-
} else if(typeof data === 'object') {
|
|
37
|
-
this.received_data += JSON.stringify(data).length;
|
|
38
|
-
this.received_count ++;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
MeterSocketio.prototype.send = function (connectid, data) {
|
|
42
|
-
if(typeof data === 'string') {
|
|
43
|
-
this.sent_data += data.length;
|
|
44
|
-
this.sent_count ++;
|
|
45
|
-
} else if(typeof data === 'object') {
|
|
46
|
-
this.sent_data += JSON.stringify(data).length;
|
|
47
|
-
this.sent_count ++;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2016 the WHATAP project authors. All rights reserved.
|
|
3
|
+
* Use of this source code is governed by a license that
|
|
4
|
+
* can be found in the LICENSE file.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var Long = require('long');
|
|
8
|
+
|
|
9
|
+
function MeterSocketio() {
|
|
10
|
+
|
|
11
|
+
if(typeof MeterSocketio.instance === 'object') {
|
|
12
|
+
return MeterSocketio.instance;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
this.total_connected = 0;
|
|
16
|
+
this.connected_count = 0;
|
|
17
|
+
this.received_count =0;
|
|
18
|
+
this.received_data =0;
|
|
19
|
+
this.sent_count =0;
|
|
20
|
+
this.sent_data =0;
|
|
21
|
+
|
|
22
|
+
MeterSocketio.instance = this;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
MeterSocketio.prototype.connected = function (count) {
|
|
26
|
+
this.total_connected += count;
|
|
27
|
+
this.connected_count += count;
|
|
28
|
+
};
|
|
29
|
+
MeterSocketio.prototype.disconnected = function () {
|
|
30
|
+
this.connected_count--;
|
|
31
|
+
};
|
|
32
|
+
MeterSocketio.prototype.receive = function (connectid, data) {
|
|
33
|
+
if(typeof data === 'string') {
|
|
34
|
+
this.received_data += data.length;
|
|
35
|
+
this.received_count ++;
|
|
36
|
+
} else if(typeof data === 'object') {
|
|
37
|
+
this.received_data += JSON.stringify(data).length;
|
|
38
|
+
this.received_count ++;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
MeterSocketio.prototype.send = function (connectid, data) {
|
|
42
|
+
if(typeof data === 'string') {
|
|
43
|
+
this.sent_data += data.length;
|
|
44
|
+
this.sent_count ++;
|
|
45
|
+
} else if(typeof data === 'object') {
|
|
46
|
+
this.sent_data += JSON.stringify(data).length;
|
|
47
|
+
this.sent_count ++;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
51
|
module.exports = new MeterSocketio();
|
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2016 the WHATAP project authors. All rights reserved.
|
|
3
|
-
* Use of this source code is governed by a license that
|
|
4
|
-
* can be found in the LICENSE file.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
var conf = require('../../conf/configure'),
|
|
8
|
-
IntIntMap = require('../../util/intint-map'),
|
|
9
|
-
Long = require('long');
|
|
10
|
-
var IntKeyLinkedMap = require('../../util/intkey-linkedmap');
|
|
11
|
-
|
|
12
|
-
function Bucket() {
|
|
13
|
-
this.count = 0;
|
|
14
|
-
this.time = 0;
|
|
15
|
-
this.error = 0;
|
|
16
|
-
|
|
17
|
-
this.fetch_count = 0;
|
|
18
|
-
this.fetch_time = 0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this.db_conn_active = new IntIntMap(7, 1);
|
|
22
|
-
this.db_conn_idle = new IntIntMap(7, 1);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function MeterSql() {
|
|
26
|
-
this.bucket = new Bucket();
|
|
27
|
-
this.stat = new IntKeyLinkedMap(500, 1).setMax(500);
|
|
28
|
-
this.stat.create = function (key) {
|
|
29
|
-
return new Bucket();
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
MeterSql.prototype.add = function (dbc, elapsed, err) {
|
|
34
|
-
|
|
35
|
-
var b = this.bucket;
|
|
36
|
-
b.count++;
|
|
37
|
-
b.time +=elapsed;
|
|
38
|
-
if(err) {
|
|
39
|
-
b.error++;
|
|
40
|
-
}
|
|
41
|
-
if(conf.sql_dbc_meter_enabled && dbc!=0) {
|
|
42
|
-
b = this.stat.intern(dbc);
|
|
43
|
-
b.count++;
|
|
44
|
-
|
|
45
|
-
b.time += elapsed;
|
|
46
|
-
if (err) {
|
|
47
|
-
b.error++;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
MeterSql.prototype.getBucketReset = function () {
|
|
52
|
-
var b = this.bucket;
|
|
53
|
-
this.bucket = new Bucket();
|
|
54
|
-
return b;
|
|
55
|
-
};
|
|
56
|
-
MeterSql.prototype.resetStat = function () {
|
|
57
|
-
if(this.stat.size() > 0){
|
|
58
|
-
this.stat.clear();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
MeterSql.prototype.addFetch = function (dbc, count, time) {
|
|
62
|
-
this.bucket.fetch_count += count;
|
|
63
|
-
this.bucket.fetch_time += time;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
MeterSql.prototype.setConnection = function (active, idle, hash) {
|
|
67
|
-
this.bucket.db_conn_active.put(hash, active);
|
|
68
|
-
this.bucket.db_conn_idle.put(hash, idle);
|
|
69
|
-
};
|
|
70
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2016 the WHATAP project authors. All rights reserved.
|
|
3
|
+
* Use of this source code is governed by a license that
|
|
4
|
+
* can be found in the LICENSE file.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var conf = require('../../conf/configure'),
|
|
8
|
+
IntIntMap = require('../../util/intint-map'),
|
|
9
|
+
Long = require('long');
|
|
10
|
+
var IntKeyLinkedMap = require('../../util/intkey-linkedmap');
|
|
11
|
+
|
|
12
|
+
function Bucket() {
|
|
13
|
+
this.count = 0;
|
|
14
|
+
this.time = 0;
|
|
15
|
+
this.error = 0;
|
|
16
|
+
|
|
17
|
+
this.fetch_count = 0;
|
|
18
|
+
this.fetch_time = 0;
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
this.db_conn_active = new IntIntMap(7, 1);
|
|
22
|
+
this.db_conn_idle = new IntIntMap(7, 1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function MeterSql() {
|
|
26
|
+
this.bucket = new Bucket();
|
|
27
|
+
this.stat = new IntKeyLinkedMap(500, 1).setMax(500);
|
|
28
|
+
this.stat.create = function (key) {
|
|
29
|
+
return new Bucket();
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
MeterSql.prototype.add = function (dbc, elapsed, err) {
|
|
34
|
+
|
|
35
|
+
var b = this.bucket;
|
|
36
|
+
b.count++;
|
|
37
|
+
b.time +=elapsed;
|
|
38
|
+
if(err) {
|
|
39
|
+
b.error++;
|
|
40
|
+
}
|
|
41
|
+
if(conf.sql_dbc_meter_enabled && dbc!=0) {
|
|
42
|
+
b = this.stat.intern(dbc);
|
|
43
|
+
b.count++;
|
|
44
|
+
|
|
45
|
+
b.time += elapsed;
|
|
46
|
+
if (err) {
|
|
47
|
+
b.error++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
MeterSql.prototype.getBucketReset = function () {
|
|
52
|
+
var b = this.bucket;
|
|
53
|
+
this.bucket = new Bucket();
|
|
54
|
+
return b;
|
|
55
|
+
};
|
|
56
|
+
MeterSql.prototype.resetStat = function () {
|
|
57
|
+
if(this.stat.size() > 0){
|
|
58
|
+
this.stat.clear();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
MeterSql.prototype.addFetch = function (dbc, count, time) {
|
|
62
|
+
this.bucket.fetch_count += count;
|
|
63
|
+
this.bucket.fetch_time += time;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
MeterSql.prototype.setConnection = function (active, idle, hash) {
|
|
67
|
+
this.bucket.db_conn_active.put(hash, active);
|
|
68
|
+
this.bucket.db_conn_idle.put(hash, idle);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
71
|
module.exports = new MeterSql();
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2016 the WHATAP project authors. All rights reserved.
|
|
3
|
-
* Use of this source code is governed by a license that
|
|
4
|
-
* can be found in the LICENSE file.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
var conf = require('../../conf/configure'),
|
|
8
|
-
LongKeyLinkedMap = require('../../util/longkey-linkedmap'),
|
|
9
|
-
HyperLogLog = require('../../util/cardinality/hyperloglog'),
|
|
10
|
-
Long = require('long');
|
|
11
|
-
|
|
12
|
-
var add = function (userid) {
|
|
13
|
-
if(conf.trace_user_enabled == false) { return; }
|
|
14
|
-
|
|
15
|
-
if(userid instanceof Long && userid.isZero() == false) {
|
|
16
|
-
meterUser.users.putLast(userid, Date.now());
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
var addActive = function (userid) {
|
|
21
|
-
if(conf.trace_user_enabled == false) { return; }
|
|
22
|
-
|
|
23
|
-
if(userid instanceof Long && userid.isZero() == false) {
|
|
24
|
-
meterUser.users.put(userid, Date.now());
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
var getRealtimeUsers = function () {
|
|
29
|
-
var max_think_time = conf.realtime_user_thinktime_max;
|
|
30
|
-
var now = Date.now();
|
|
31
|
-
|
|
32
|
-
var loglog = new HyperLogLog();
|
|
33
|
-
if(meterUser.users.size() == 0) {
|
|
34
|
-
return loglog;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
var en = meterUser.users.entries();
|
|
38
|
-
while(en.hasMoreElements()) {
|
|
39
|
-
var e = en.nextElement();
|
|
40
|
-
if(now - e.getValue() > max_think_time) {
|
|
41
|
-
meterUser.users.remove(e.getKey());
|
|
42
|
-
} else {
|
|
43
|
-
loglog.offer(e.getKey());
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return loglog;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
var meterUser = {
|
|
51
|
-
MAX_USERS : 70000,
|
|
52
|
-
users : new LongKeyLinkedMap().setMax(70000),
|
|
53
|
-
add : add,
|
|
54
|
-
addActive : addActive,
|
|
55
|
-
getRealtimeUsers : getRealtimeUsers
|
|
56
|
-
};
|
|
57
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2016 the WHATAP project authors. All rights reserved.
|
|
3
|
+
* Use of this source code is governed by a license that
|
|
4
|
+
* can be found in the LICENSE file.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var conf = require('../../conf/configure'),
|
|
8
|
+
LongKeyLinkedMap = require('../../util/longkey-linkedmap'),
|
|
9
|
+
HyperLogLog = require('../../util/cardinality/hyperloglog'),
|
|
10
|
+
Long = require('long');
|
|
11
|
+
|
|
12
|
+
var add = function (userid) {
|
|
13
|
+
if(conf.trace_user_enabled == false) { return; }
|
|
14
|
+
|
|
15
|
+
if(userid instanceof Long && userid.isZero() == false) {
|
|
16
|
+
meterUser.users.putLast(userid, Date.now());
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
var addActive = function (userid) {
|
|
21
|
+
if(conf.trace_user_enabled == false) { return; }
|
|
22
|
+
|
|
23
|
+
if(userid instanceof Long && userid.isZero() == false) {
|
|
24
|
+
meterUser.users.put(userid, Date.now());
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
var getRealtimeUsers = function () {
|
|
29
|
+
var max_think_time = conf.realtime_user_thinktime_max;
|
|
30
|
+
var now = Date.now();
|
|
31
|
+
|
|
32
|
+
var loglog = new HyperLogLog();
|
|
33
|
+
if(meterUser.users.size() == 0) {
|
|
34
|
+
return loglog;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var en = meterUser.users.entries();
|
|
38
|
+
while(en.hasMoreElements()) {
|
|
39
|
+
var e = en.nextElement();
|
|
40
|
+
if(now - e.getValue() > max_think_time) {
|
|
41
|
+
meterUser.users.remove(e.getKey());
|
|
42
|
+
} else {
|
|
43
|
+
loglog.offer(e.getKey());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return loglog;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
var meterUser = {
|
|
51
|
+
MAX_USERS : 70000,
|
|
52
|
+
users : new LongKeyLinkedMap().setMax(70000),
|
|
53
|
+
add : add,
|
|
54
|
+
addActive : addActive,
|
|
55
|
+
getRealtimeUsers : getRealtimeUsers
|
|
56
|
+
};
|
|
57
|
+
|
|
58
58
|
module.exports = meterUser;
|