whatap 0.4.78 → 0.4.80
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 +704 -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 +288 -284
- 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 +134 -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/package.json +28 -28
- package/whatap.conf +1 -1
- package/logs/whatap-20230616.log +0 -13
package/lib/util/anylist.js
CHANGED
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
var INT = 1;
|
|
2
|
-
var LONG = 2;
|
|
3
|
-
var FLOAT = 3;
|
|
4
|
-
var DOUBLE = 4;
|
|
5
|
-
var STRING = 5;
|
|
6
|
-
|
|
7
|
-
AnyList.INT = 1;
|
|
8
|
-
AnyList.LONG = 2;
|
|
9
|
-
AnyList.FLOAT = 3;
|
|
10
|
-
AnyList.DOUBLE = 4;
|
|
11
|
-
AnyList.STRING = 5;
|
|
12
|
-
|
|
13
|
-
function AnyList(type, len){
|
|
14
|
-
this.type=type;
|
|
15
|
-
this.data = new Array(len);
|
|
16
|
-
}
|
|
17
|
-
AnyList.prototype.getType=function(){
|
|
18
|
-
return this.type;
|
|
19
|
-
};
|
|
20
|
-
AnyList.prototype.put=function(idx, d){
|
|
21
|
-
this.data[idx]=d;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
AnyList.prototype.get=function(idx){
|
|
25
|
-
return this.data[idx];
|
|
26
|
-
};
|
|
27
|
-
AnyList.prototype.size = function () {
|
|
28
|
-
return this.data ? this.data.length : 0;
|
|
29
|
-
};
|
|
30
|
-
AnyList.prototype.write=function(o){
|
|
31
|
-
switch(this.type){
|
|
32
|
-
case INT: this.writeDecimal(o); return this;
|
|
33
|
-
case LONG: this.writeDecimal(o); return this;
|
|
34
|
-
case FLOAT: this.writeFloat(o); return this;
|
|
35
|
-
case DOUBLE: this.writeDouble(o); return this;
|
|
36
|
-
case STRING: this.writeString(o); return this;
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
AnyList.prototype.read=function(i){
|
|
40
|
-
switch(this.type){
|
|
41
|
-
case INT: this.readDecimal(i); return this;
|
|
42
|
-
case LONG: this.readDecimal(i); return this;
|
|
43
|
-
case FLOAT: this.readFloat(i); return this;
|
|
44
|
-
case DOUBLE: this.readDouble(i); return this;
|
|
45
|
-
case STRING: this.readString(i); return this;
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
AnyList.prototype.writeDouble = function (dout) {
|
|
50
|
-
var len =this.size();
|
|
51
|
-
dout.writeInt24BE(len);
|
|
52
|
-
for (var i = 0; i < len; i++) {
|
|
53
|
-
dout.writeDouble(this.get(i));
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
AnyList.prototype.readDouble=function(din) {
|
|
57
|
-
var count = din.readInt24BE();
|
|
58
|
-
for (var i = 0; i < count; i++) {
|
|
59
|
-
this.add(din.readDouble());
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
AnyList.prototype.writeFloat = function (dout) {
|
|
63
|
-
var len =this.size();
|
|
64
|
-
dout.writeInt24BE(len);
|
|
65
|
-
for (var i = 0; i < len; i++) {
|
|
66
|
-
dout.writeFloat(this.get(i));
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
AnyList.prototype.readFloat=function(din) {
|
|
70
|
-
var count = din.readInt24BE();
|
|
71
|
-
for (var i = 0; i < count; i++) {
|
|
72
|
-
this.add(din.readFloat());
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
AnyList.prototype.writeDecimal = function (dout) {
|
|
77
|
-
var len =this.size();
|
|
78
|
-
dout.writeInt24BE(len);
|
|
79
|
-
for (var i = 0; i < len; i++) {
|
|
80
|
-
dout.writeDecimal(this.get(i));
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
AnyList.prototype.readDecimal=function(din) {
|
|
84
|
-
var count = din.readInt24BE();
|
|
85
|
-
for (var i = 0; i < count; i++) {
|
|
86
|
-
this.add(din.readDecNumber());
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
AnyList.prototype.writeString = function (dout) {
|
|
90
|
-
var len =this.size();
|
|
91
|
-
dout.writeInt24BE(len);
|
|
92
|
-
for (var i = 0; i < len; i++) {
|
|
93
|
-
dout.writeText(this.get(i));
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
AnyList.prototype.readString=function(din) {
|
|
97
|
-
var count = din.readInt24BE();
|
|
98
|
-
for (var i = 0; i < count; i++) {
|
|
99
|
-
this.add(din.readText());
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
|
|
1
|
+
var INT = 1;
|
|
2
|
+
var LONG = 2;
|
|
3
|
+
var FLOAT = 3;
|
|
4
|
+
var DOUBLE = 4;
|
|
5
|
+
var STRING = 5;
|
|
6
|
+
|
|
7
|
+
AnyList.INT = 1;
|
|
8
|
+
AnyList.LONG = 2;
|
|
9
|
+
AnyList.FLOAT = 3;
|
|
10
|
+
AnyList.DOUBLE = 4;
|
|
11
|
+
AnyList.STRING = 5;
|
|
12
|
+
|
|
13
|
+
function AnyList(type, len){
|
|
14
|
+
this.type=type;
|
|
15
|
+
this.data = new Array(len);
|
|
16
|
+
}
|
|
17
|
+
AnyList.prototype.getType=function(){
|
|
18
|
+
return this.type;
|
|
19
|
+
};
|
|
20
|
+
AnyList.prototype.put=function(idx, d){
|
|
21
|
+
this.data[idx]=d;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
AnyList.prototype.get=function(idx){
|
|
25
|
+
return this.data[idx];
|
|
26
|
+
};
|
|
27
|
+
AnyList.prototype.size = function () {
|
|
28
|
+
return this.data ? this.data.length : 0;
|
|
29
|
+
};
|
|
30
|
+
AnyList.prototype.write=function(o){
|
|
31
|
+
switch(this.type){
|
|
32
|
+
case INT: this.writeDecimal(o); return this;
|
|
33
|
+
case LONG: this.writeDecimal(o); return this;
|
|
34
|
+
case FLOAT: this.writeFloat(o); return this;
|
|
35
|
+
case DOUBLE: this.writeDouble(o); return this;
|
|
36
|
+
case STRING: this.writeString(o); return this;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
AnyList.prototype.read=function(i){
|
|
40
|
+
switch(this.type){
|
|
41
|
+
case INT: this.readDecimal(i); return this;
|
|
42
|
+
case LONG: this.readDecimal(i); return this;
|
|
43
|
+
case FLOAT: this.readFloat(i); return this;
|
|
44
|
+
case DOUBLE: this.readDouble(i); return this;
|
|
45
|
+
case STRING: this.readString(i); return this;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
AnyList.prototype.writeDouble = function (dout) {
|
|
50
|
+
var len =this.size();
|
|
51
|
+
dout.writeInt24BE(len);
|
|
52
|
+
for (var i = 0; i < len; i++) {
|
|
53
|
+
dout.writeDouble(this.get(i));
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
AnyList.prototype.readDouble=function(din) {
|
|
57
|
+
var count = din.readInt24BE();
|
|
58
|
+
for (var i = 0; i < count; i++) {
|
|
59
|
+
this.add(din.readDouble());
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
AnyList.prototype.writeFloat = function (dout) {
|
|
63
|
+
var len =this.size();
|
|
64
|
+
dout.writeInt24BE(len);
|
|
65
|
+
for (var i = 0; i < len; i++) {
|
|
66
|
+
dout.writeFloat(this.get(i));
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
AnyList.prototype.readFloat=function(din) {
|
|
70
|
+
var count = din.readInt24BE();
|
|
71
|
+
for (var i = 0; i < count; i++) {
|
|
72
|
+
this.add(din.readFloat());
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
AnyList.prototype.writeDecimal = function (dout) {
|
|
77
|
+
var len =this.size();
|
|
78
|
+
dout.writeInt24BE(len);
|
|
79
|
+
for (var i = 0; i < len; i++) {
|
|
80
|
+
dout.writeDecimal(this.get(i));
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
AnyList.prototype.readDecimal=function(din) {
|
|
84
|
+
var count = din.readInt24BE();
|
|
85
|
+
for (var i = 0; i < count; i++) {
|
|
86
|
+
this.add(din.readDecNumber());
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
AnyList.prototype.writeString = function (dout) {
|
|
90
|
+
var len =this.size();
|
|
91
|
+
dout.writeInt24BE(len);
|
|
92
|
+
for (var i = 0; i < len; i++) {
|
|
93
|
+
dout.writeText(this.get(i));
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
AnyList.prototype.readString=function(din) {
|
|
97
|
+
var count = din.readInt24BE();
|
|
98
|
+
for (var i = 0; i < count; i++) {
|
|
99
|
+
this.add(din.readText());
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
103
|
module.exports = AnyList;
|
package/lib/util/array-util.js
CHANGED
|
@@ -1,101 +1,101 @@
|
|
|
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 HashUtil = require('../util/hashutil');
|
|
8
|
-
|
|
9
|
-
function ArrayUtil(){
|
|
10
|
-
}
|
|
11
|
-
function _hash(str) {
|
|
12
|
-
var h = 0, i, chr, len;
|
|
13
|
-
if (str.length === 0) return h;
|
|
14
|
-
for (i = 0, len = str.length; i < len; i++) {
|
|
15
|
-
chr = str.charCodeAt(i);
|
|
16
|
-
h = ((h << 5) - h) + chr;
|
|
17
|
-
h |= 0; // Convert to 32bit integer
|
|
18
|
-
}
|
|
19
|
-
return h;
|
|
20
|
-
}
|
|
21
|
-
function _hashFloat(v) {
|
|
22
|
-
var b = Buffer.alloc(64);
|
|
23
|
-
b.writeFloatBE(v);
|
|
24
|
-
return b.readInt32BE();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
ArrayUtil.isExist = function(arr, key){
|
|
28
|
-
if(arr===null || arr === undefined) return false;
|
|
29
|
-
|
|
30
|
-
for(var i = 0 ; i < arr.length; i++){
|
|
31
|
-
if(arr[i] === key) return true;
|
|
32
|
-
}
|
|
33
|
-
return false;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
ArrayUtil.isA = function(arr){
|
|
37
|
-
if(arr===null || arr === undefined) return false;
|
|
38
|
-
return Array.isArray(arr);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
ArrayUtil.compare = function(v1, v2){
|
|
42
|
-
if(Array.isArray(v1)===false){
|
|
43
|
-
return -1;
|
|
44
|
-
}
|
|
45
|
-
if(Array.isArray(v2)===false){
|
|
46
|
-
return 1;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
var l_len = v1.length,
|
|
50
|
-
r_len = v2.length;
|
|
51
|
-
for(var i=0; i<l_len && i < r_len; i++) {
|
|
52
|
-
if(v1[i] > v2[i]) {
|
|
53
|
-
return 1;
|
|
54
|
-
}
|
|
55
|
-
if(v1[i] < v2[i]) {
|
|
56
|
-
return -1;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return l_len - r_len;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
ArrayUtil.intHash = function(v1){
|
|
63
|
-
if(Array.isArray(v1)===false){
|
|
64
|
-
return 0;
|
|
65
|
-
}
|
|
66
|
-
var h=0;
|
|
67
|
-
for(var i=0, len = v1.length; i<len; i++) {
|
|
68
|
-
h = h ^ v1[i];
|
|
69
|
-
}
|
|
70
|
-
return h;
|
|
71
|
-
}
|
|
72
|
-
ArrayUtil.floatHash = function(v1){
|
|
73
|
-
if(Array.isArray(v1)===false){
|
|
74
|
-
return 0;
|
|
75
|
-
}
|
|
76
|
-
var h=0;
|
|
77
|
-
for(var i=0, len = v1.length; i<len; i++) {
|
|
78
|
-
h = h ^ _hashFloat(v1[i]);
|
|
79
|
-
}
|
|
80
|
-
return h;
|
|
81
|
-
}
|
|
82
|
-
ArrayUtil.strHash = function(v1){
|
|
83
|
-
if(Array.isArray(v1)===false){
|
|
84
|
-
return 0;
|
|
85
|
-
}
|
|
86
|
-
var h=0;
|
|
87
|
-
for(var i=0, len = v1.length; i<len; i++) {
|
|
88
|
-
h = h ^ _hash(v1[i]);
|
|
89
|
-
}
|
|
90
|
-
return h;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
ArrayUtil.equals = function(v1, v2){
|
|
94
|
-
if(v1===v2){
|
|
95
|
-
return true;
|
|
96
|
-
}else{
|
|
97
|
-
return this.compare(v1,v2)===0;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
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 HashUtil = require('../util/hashutil');
|
|
8
|
+
|
|
9
|
+
function ArrayUtil(){
|
|
10
|
+
}
|
|
11
|
+
function _hash(str) {
|
|
12
|
+
var h = 0, i, chr, len;
|
|
13
|
+
if (str.length === 0) return h;
|
|
14
|
+
for (i = 0, len = str.length; i < len; i++) {
|
|
15
|
+
chr = str.charCodeAt(i);
|
|
16
|
+
h = ((h << 5) - h) + chr;
|
|
17
|
+
h |= 0; // Convert to 32bit integer
|
|
18
|
+
}
|
|
19
|
+
return h;
|
|
20
|
+
}
|
|
21
|
+
function _hashFloat(v) {
|
|
22
|
+
var b = Buffer.alloc(64);
|
|
23
|
+
b.writeFloatBE(v);
|
|
24
|
+
return b.readInt32BE();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
ArrayUtil.isExist = function(arr, key){
|
|
28
|
+
if(arr===null || arr === undefined) return false;
|
|
29
|
+
|
|
30
|
+
for(var i = 0 ; i < arr.length; i++){
|
|
31
|
+
if(arr[i] === key) return true;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
ArrayUtil.isA = function(arr){
|
|
37
|
+
if(arr===null || arr === undefined) return false;
|
|
38
|
+
return Array.isArray(arr);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
ArrayUtil.compare = function(v1, v2){
|
|
42
|
+
if(Array.isArray(v1)===false){
|
|
43
|
+
return -1;
|
|
44
|
+
}
|
|
45
|
+
if(Array.isArray(v2)===false){
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var l_len = v1.length,
|
|
50
|
+
r_len = v2.length;
|
|
51
|
+
for(var i=0; i<l_len && i < r_len; i++) {
|
|
52
|
+
if(v1[i] > v2[i]) {
|
|
53
|
+
return 1;
|
|
54
|
+
}
|
|
55
|
+
if(v1[i] < v2[i]) {
|
|
56
|
+
return -1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return l_len - r_len;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
ArrayUtil.intHash = function(v1){
|
|
63
|
+
if(Array.isArray(v1)===false){
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
var h=0;
|
|
67
|
+
for(var i=0, len = v1.length; i<len; i++) {
|
|
68
|
+
h = h ^ v1[i];
|
|
69
|
+
}
|
|
70
|
+
return h;
|
|
71
|
+
}
|
|
72
|
+
ArrayUtil.floatHash = function(v1){
|
|
73
|
+
if(Array.isArray(v1)===false){
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
var h=0;
|
|
77
|
+
for(var i=0, len = v1.length; i<len; i++) {
|
|
78
|
+
h = h ^ _hashFloat(v1[i]);
|
|
79
|
+
}
|
|
80
|
+
return h;
|
|
81
|
+
}
|
|
82
|
+
ArrayUtil.strHash = function(v1){
|
|
83
|
+
if(Array.isArray(v1)===false){
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
var h=0;
|
|
87
|
+
for(var i=0, len = v1.length; i<len; i++) {
|
|
88
|
+
h = h ^ _hash(v1[i]);
|
|
89
|
+
}
|
|
90
|
+
return h;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
ArrayUtil.equals = function(v1, v2){
|
|
94
|
+
if(v1===v2){
|
|
95
|
+
return true;
|
|
96
|
+
}else{
|
|
97
|
+
return this.compare(v1,v2)===0;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
101
|
module.exports = ArrayUtil;
|
package/lib/util/bitutil.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
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 BitUtil() {}
|
|
10
|
-
|
|
11
|
-
BitUtil.composite = function (hkey, wkey) {
|
|
12
|
-
return Long.fromBits(wkey, hkey);
|
|
13
|
-
};
|
|
14
|
-
BitUtil.getHigh = function (key) {
|
|
15
|
-
|
|
16
|
-
if(typeof key === 'number') {
|
|
17
|
-
return key & 0xffffffff;
|
|
18
|
-
}
|
|
19
|
-
return key.getHighBits() & 0xffffffff;
|
|
20
|
-
};
|
|
21
|
-
BitUtil.getLow = function (key) {
|
|
22
|
-
if(typeof key === 'number') {
|
|
23
|
-
return key & 0xffffffff;
|
|
24
|
-
}
|
|
25
|
-
return key.getLowBits() & 0xffffffff;
|
|
26
|
-
};
|
|
27
|
-
|
|
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 BitUtil() {}
|
|
10
|
+
|
|
11
|
+
BitUtil.composite = function (hkey, wkey) {
|
|
12
|
+
return Long.fromBits(wkey, hkey);
|
|
13
|
+
};
|
|
14
|
+
BitUtil.getHigh = function (key) {
|
|
15
|
+
|
|
16
|
+
if(typeof key === 'number') {
|
|
17
|
+
return key & 0xffffffff;
|
|
18
|
+
}
|
|
19
|
+
return key.getHighBits() & 0xffffffff;
|
|
20
|
+
};
|
|
21
|
+
BitUtil.getLow = function (key) {
|
|
22
|
+
if(typeof key === 'number') {
|
|
23
|
+
return key & 0xffffffff;
|
|
24
|
+
}
|
|
25
|
+
return key.getLowBits() & 0xffffffff;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
28
|
module.exports = BitUtil;
|
|
@@ -1,106 +1,106 @@
|
|
|
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 RegisterSet = require('./registerset'),
|
|
8
|
-
MurmurHash = require('./murmurhash'),
|
|
9
|
-
DataOutpuxX = require('../../io/data-outputx'),
|
|
10
|
-
Long = require('long');
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
function HyperLogLog() {
|
|
14
|
-
this.log2m = 10;
|
|
15
|
-
this.registerSet = new RegisterSet(1 << this.log2m);
|
|
16
|
-
var m = 1 << this.log2m;
|
|
17
|
-
this.alphaMM = getAlphaMM(this.log2m, m);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
HyperLogLog.prototype.offerHashed = function (hashedValue) {
|
|
21
|
-
var j = hashedValue >>> (32 - this.log2m);
|
|
22
|
-
var r = numberOfLeadingZeros((hashedValue << this.log2m) | (1 << (this.log2m - 1)) + 1) + 1;
|
|
23
|
-
return this.registerSet.updateIfGreater(j, r);
|
|
24
|
-
};
|
|
25
|
-
HyperLogLog.prototype.offer = function (o) {
|
|
26
|
-
var val;
|
|
27
|
-
if(o instanceof Long) {
|
|
28
|
-
val = o;
|
|
29
|
-
} else if(typeof o === 'string') {
|
|
30
|
-
val = Long.fromString(o);
|
|
31
|
-
} else if(typeof o === 'number') {
|
|
32
|
-
val = Long.fromNumber(o);
|
|
33
|
-
}
|
|
34
|
-
var x = MurmurHash.hashLong(val);
|
|
35
|
-
return this.offerHashed(x);
|
|
36
|
-
};
|
|
37
|
-
HyperLogLog.prototype.cardinality = function () {
|
|
38
|
-
var registerSum = 0;
|
|
39
|
-
var count = this.registerSet.count;
|
|
40
|
-
var zeros = 0.0;
|
|
41
|
-
for(var j=0; j<this.registerSet.count; j++) {
|
|
42
|
-
var val = this.registerSet.get(j);
|
|
43
|
-
registerSum += 1.0 / (1 << val);
|
|
44
|
-
if(parseFloat(val) === 0.0) {
|
|
45
|
-
zeros++;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
var estimate = this.alphaMM * (1 / registerSum);
|
|
49
|
-
if(estimate <= (5.0 / 2.0) * count) {
|
|
50
|
-
return Math.round(linearCounting(count, zeros));
|
|
51
|
-
} else {
|
|
52
|
-
return Math.round(estimate);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
HyperLogLog.prototype.getBytes = function () {
|
|
56
|
-
var dout = new DataOutpuxX();
|
|
57
|
-
dout.writeInt(this.log2m);
|
|
58
|
-
dout.writeInt(this.registerSet.size);
|
|
59
|
-
var M = this.registerSet.readOnlyBits();
|
|
60
|
-
for(var i=0; i<M.length; i++) {
|
|
61
|
-
dout.writeInt(M[i]);
|
|
62
|
-
}
|
|
63
|
-
return dout.toByteArray();
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
var getAlphaMM = function (p, m) {
|
|
67
|
-
switch (p) {
|
|
68
|
-
case 4:
|
|
69
|
-
return 0.673 * m * m;
|
|
70
|
-
case 5:
|
|
71
|
-
return 0.697 * m * m;
|
|
72
|
-
case 6:
|
|
73
|
-
return 0.709 * m * m;
|
|
74
|
-
default:
|
|
75
|
-
return (0.7213 / (1 + 1.079 / m)) * m * m;
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
var linearCounting = function (m, V) {
|
|
79
|
-
return m * Math.log(m / V);
|
|
80
|
-
};
|
|
81
|
-
var numberOfLeadingZeros = function (i) {
|
|
82
|
-
if (i === 0)
|
|
83
|
-
return 32;
|
|
84
|
-
var n = 1;
|
|
85
|
-
|
|
86
|
-
if (i >>> 16 === 0) {
|
|
87
|
-
n += 16;
|
|
88
|
-
i <<= 16;
|
|
89
|
-
}
|
|
90
|
-
if (i >>> 24 === 0) {
|
|
91
|
-
n += 8;
|
|
92
|
-
i <<= 8;
|
|
93
|
-
}
|
|
94
|
-
if (i >>> 28 === 0) {
|
|
95
|
-
n += 4;
|
|
96
|
-
i <<= 4;
|
|
97
|
-
}
|
|
98
|
-
if (i >>> 30 === 0) {
|
|
99
|
-
n += 2;
|
|
100
|
-
i <<= 2;
|
|
101
|
-
}
|
|
102
|
-
n -= i >>> 31;
|
|
103
|
-
return n;
|
|
104
|
-
}
|
|
105
|
-
|
|
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 RegisterSet = require('./registerset'),
|
|
8
|
+
MurmurHash = require('./murmurhash'),
|
|
9
|
+
DataOutpuxX = require('../../io/data-outputx'),
|
|
10
|
+
Long = require('long');
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
function HyperLogLog() {
|
|
14
|
+
this.log2m = 10;
|
|
15
|
+
this.registerSet = new RegisterSet(1 << this.log2m);
|
|
16
|
+
var m = 1 << this.log2m;
|
|
17
|
+
this.alphaMM = getAlphaMM(this.log2m, m);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
HyperLogLog.prototype.offerHashed = function (hashedValue) {
|
|
21
|
+
var j = hashedValue >>> (32 - this.log2m);
|
|
22
|
+
var r = numberOfLeadingZeros((hashedValue << this.log2m) | (1 << (this.log2m - 1)) + 1) + 1;
|
|
23
|
+
return this.registerSet.updateIfGreater(j, r);
|
|
24
|
+
};
|
|
25
|
+
HyperLogLog.prototype.offer = function (o) {
|
|
26
|
+
var val;
|
|
27
|
+
if(o instanceof Long) {
|
|
28
|
+
val = o;
|
|
29
|
+
} else if(typeof o === 'string') {
|
|
30
|
+
val = Long.fromString(o);
|
|
31
|
+
} else if(typeof o === 'number') {
|
|
32
|
+
val = Long.fromNumber(o);
|
|
33
|
+
}
|
|
34
|
+
var x = MurmurHash.hashLong(val);
|
|
35
|
+
return this.offerHashed(x);
|
|
36
|
+
};
|
|
37
|
+
HyperLogLog.prototype.cardinality = function () {
|
|
38
|
+
var registerSum = 0;
|
|
39
|
+
var count = this.registerSet.count;
|
|
40
|
+
var zeros = 0.0;
|
|
41
|
+
for(var j=0; j<this.registerSet.count; j++) {
|
|
42
|
+
var val = this.registerSet.get(j);
|
|
43
|
+
registerSum += 1.0 / (1 << val);
|
|
44
|
+
if(parseFloat(val) === 0.0) {
|
|
45
|
+
zeros++;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
var estimate = this.alphaMM * (1 / registerSum);
|
|
49
|
+
if(estimate <= (5.0 / 2.0) * count) {
|
|
50
|
+
return Math.round(linearCounting(count, zeros));
|
|
51
|
+
} else {
|
|
52
|
+
return Math.round(estimate);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
HyperLogLog.prototype.getBytes = function () {
|
|
56
|
+
var dout = new DataOutpuxX();
|
|
57
|
+
dout.writeInt(this.log2m);
|
|
58
|
+
dout.writeInt(this.registerSet.size);
|
|
59
|
+
var M = this.registerSet.readOnlyBits();
|
|
60
|
+
for(var i=0; i<M.length; i++) {
|
|
61
|
+
dout.writeInt(M[i]);
|
|
62
|
+
}
|
|
63
|
+
return dout.toByteArray();
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
var getAlphaMM = function (p, m) {
|
|
67
|
+
switch (p) {
|
|
68
|
+
case 4:
|
|
69
|
+
return 0.673 * m * m;
|
|
70
|
+
case 5:
|
|
71
|
+
return 0.697 * m * m;
|
|
72
|
+
case 6:
|
|
73
|
+
return 0.709 * m * m;
|
|
74
|
+
default:
|
|
75
|
+
return (0.7213 / (1 + 1.079 / m)) * m * m;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var linearCounting = function (m, V) {
|
|
79
|
+
return m * Math.log(m / V);
|
|
80
|
+
};
|
|
81
|
+
var numberOfLeadingZeros = function (i) {
|
|
82
|
+
if (i === 0)
|
|
83
|
+
return 32;
|
|
84
|
+
var n = 1;
|
|
85
|
+
|
|
86
|
+
if (i >>> 16 === 0) {
|
|
87
|
+
n += 16;
|
|
88
|
+
i <<= 16;
|
|
89
|
+
}
|
|
90
|
+
if (i >>> 24 === 0) {
|
|
91
|
+
n += 8;
|
|
92
|
+
i <<= 8;
|
|
93
|
+
}
|
|
94
|
+
if (i >>> 28 === 0) {
|
|
95
|
+
n += 4;
|
|
96
|
+
i <<= 4;
|
|
97
|
+
}
|
|
98
|
+
if (i >>> 30 === 0) {
|
|
99
|
+
n += 2;
|
|
100
|
+
i <<= 2;
|
|
101
|
+
}
|
|
102
|
+
n -= i >>> 31;
|
|
103
|
+
return n;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
106
|
module.exports = HyperLogLog;
|