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,14 +1,14 @@
|
|
|
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
|
-
function LocalContext(ctx, step, option) {
|
|
8
|
-
this.step = step;
|
|
9
|
-
this.context = ctx;
|
|
10
|
-
this.option = option;
|
|
11
|
-
this.service = false;
|
|
12
|
-
};
|
|
13
|
-
|
|
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
|
+
function LocalContext(ctx, step, option) {
|
|
8
|
+
this.step = step;
|
|
9
|
+
this.context = ctx;
|
|
10
|
+
this.option = option;
|
|
11
|
+
this.service = false;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
14
|
module.exports = LocalContext;
|
package/lib/trace/parsed-sql.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
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
|
-
function ParsedSql(type, sql, param) {
|
|
8
|
-
this.sql = sql;
|
|
9
|
-
this.type = type;
|
|
10
|
-
this.param = param;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
module.exports = ParsedSql;
|
|
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
|
+
function ParsedSql(type, sql, param) {
|
|
8
|
+
this.sql = sql;
|
|
9
|
+
this.type = type;
|
|
10
|
+
this.param = param;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
module.exports = ParsedSql;
|
|
@@ -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
|
-
|
|
8
|
-
function ProfileCollector(context) {
|
|
9
|
-
this.context = context;
|
|
10
|
-
this.buffer = [];
|
|
11
|
-
this.buffer_length = 100 - 10;
|
|
12
|
-
this.position = 0;
|
|
13
|
-
this.parent_index = -1;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
ProfileCollector.prototype.hasStep = function () {
|
|
17
|
-
return this.position > 0;
|
|
18
|
-
};
|
|
19
|
-
ProfileCollector.prototype.push = function (step) {
|
|
20
|
-
if(this.position >= this.buffer_length) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
step.index = this.position;
|
|
24
|
-
step.parent = this.parent_index;
|
|
25
|
-
this.parent_index = this.position;
|
|
26
|
-
this.buffer[this.position] = step;
|
|
27
|
-
this.position++;
|
|
28
|
-
};
|
|
29
|
-
ProfileCollector.prototype.add = function (step) {
|
|
30
|
-
if(this.position >= this.buffer_length) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
step.index = this.position;
|
|
34
|
-
step.parent = this.parent_index;
|
|
35
|
-
this.buffer[this.position] = step;
|
|
36
|
-
this.position++;
|
|
37
|
-
};
|
|
38
|
-
ProfileCollector.prototype.addEnd = function (step) {
|
|
39
|
-
if(this.position >= this.buffer.length) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
step.index = this.position;
|
|
43
|
-
step.parent = this.parent_index;
|
|
44
|
-
this.buffer[this.position] = step;
|
|
45
|
-
this.position++;
|
|
46
|
-
};
|
|
47
|
-
ProfileCollector.prototype.pop = function (step) {
|
|
48
|
-
this.parent_index = step.parent;
|
|
49
|
-
};
|
|
50
|
-
ProfileCollector.prototype.getLastSteps = function (n) {
|
|
51
|
-
var cnt = this.position > n ? n : this.position;
|
|
52
|
-
var buff = new Array(cnt);
|
|
53
|
-
for(var x = this.position - cnt, i=0; i<cnt; i++) {
|
|
54
|
-
buff[i] = this.buffer[x+i];
|
|
55
|
-
}
|
|
56
|
-
return buff;
|
|
57
|
-
};
|
|
58
|
-
ProfileCollector.prototype.getSteps = function () {
|
|
59
|
-
if(this.position >= this.buffer.length) {
|
|
60
|
-
return this.buffer;
|
|
61
|
-
}
|
|
62
|
-
if(this.position > 0) {
|
|
63
|
-
//clone
|
|
64
|
-
return this.buffer.slice();
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
ProfileCollector.prototype.getStep4Error = function () {
|
|
68
|
-
return this.getLastSteps(5);
|
|
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
|
+
|
|
8
|
+
function ProfileCollector(context) {
|
|
9
|
+
this.context = context;
|
|
10
|
+
this.buffer = [];
|
|
11
|
+
this.buffer_length = 100 - 10;
|
|
12
|
+
this.position = 0;
|
|
13
|
+
this.parent_index = -1;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
ProfileCollector.prototype.hasStep = function () {
|
|
17
|
+
return this.position > 0;
|
|
18
|
+
};
|
|
19
|
+
ProfileCollector.prototype.push = function (step) {
|
|
20
|
+
if(this.position >= this.buffer_length) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
step.index = this.position;
|
|
24
|
+
step.parent = this.parent_index;
|
|
25
|
+
this.parent_index = this.position;
|
|
26
|
+
this.buffer[this.position] = step;
|
|
27
|
+
this.position++;
|
|
28
|
+
};
|
|
29
|
+
ProfileCollector.prototype.add = function (step) {
|
|
30
|
+
if(this.position >= this.buffer_length) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
step.index = this.position;
|
|
34
|
+
step.parent = this.parent_index;
|
|
35
|
+
this.buffer[this.position] = step;
|
|
36
|
+
this.position++;
|
|
37
|
+
};
|
|
38
|
+
ProfileCollector.prototype.addEnd = function (step) {
|
|
39
|
+
if(this.position >= this.buffer.length) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
step.index = this.position;
|
|
43
|
+
step.parent = this.parent_index;
|
|
44
|
+
this.buffer[this.position] = step;
|
|
45
|
+
this.position++;
|
|
46
|
+
};
|
|
47
|
+
ProfileCollector.prototype.pop = function (step) {
|
|
48
|
+
this.parent_index = step.parent;
|
|
49
|
+
};
|
|
50
|
+
ProfileCollector.prototype.getLastSteps = function (n) {
|
|
51
|
+
var cnt = this.position > n ? n : this.position;
|
|
52
|
+
var buff = new Array(cnt);
|
|
53
|
+
for(var x = this.position - cnt, i=0; i<cnt; i++) {
|
|
54
|
+
buff[i] = this.buffer[x+i];
|
|
55
|
+
}
|
|
56
|
+
return buff;
|
|
57
|
+
};
|
|
58
|
+
ProfileCollector.prototype.getSteps = function () {
|
|
59
|
+
if(this.position >= this.buffer.length) {
|
|
60
|
+
return this.buffer;
|
|
61
|
+
}
|
|
62
|
+
if(this.position > 0) {
|
|
63
|
+
//clone
|
|
64
|
+
return this.buffer.slice();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
ProfileCollector.prototype.getStep4Error = function () {
|
|
68
|
+
return this.getLastSteps(5);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
71
|
module.exports = ProfileCollector;
|
|
@@ -1,118 +1,118 @@
|
|
|
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
|
-
PathTree = require('../util/pathtree'),
|
|
9
|
-
IntKeyLinkedMap = require('../util/intkey-linkedmap'),
|
|
10
|
-
IntSet = require('../util/intset'),
|
|
11
|
-
StringSet = require('../util/stringset'),
|
|
12
|
-
HashUtil = require('../util/hashutil'),
|
|
13
|
-
last_conf_value = (conf.trace_normalize_urls || ''),
|
|
14
|
-
trace_auto_normalize_enabled = conf.trace_auto_normalize_enabled;
|
|
15
|
-
|
|
16
|
-
var last_build = 0;
|
|
17
|
-
var pathMap = {
|
|
18
|
-
pathParamUrlSet : new StringSet().setMax(500),
|
|
19
|
-
noPathParamUrlHashSet : new IntSet().setMax(1000)
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
function ServiceURLPatternDetector() {
|
|
23
|
-
this.restUrlTable= new PathTree();
|
|
24
|
-
this.noNeedSet= new IntSet().setMax(2000);
|
|
25
|
-
this.parsedSet = new IntKeyLinkedMap().setMax(2000);
|
|
26
|
-
}
|
|
27
|
-
ServiceURLPatternDetector.prototype.start = function (stime) {
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
ServiceURLPatternDetector.prototype.build = function (force) {
|
|
31
|
-
try {
|
|
32
|
-
var self = this;
|
|
33
|
-
var now = Date.now();
|
|
34
|
-
if(force === false && now < last_build + 10000) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
last_build = now;
|
|
38
|
-
|
|
39
|
-
var pathTreeTmp = new PathTree();
|
|
40
|
-
var noNeedTmp = new IntSet().setMax(2000);
|
|
41
|
-
|
|
42
|
-
if(conf.trace_auto_normalize_enabled) {
|
|
43
|
-
pathMap.pathParamUrlSet.forEach(function (val) {
|
|
44
|
-
self.addPath(pathTreeTmp, val);
|
|
45
|
-
});
|
|
46
|
-
pathMap.noPathParamUrlHashSet.forEach(function (val) {
|
|
47
|
-
noNeedTmp.add(val);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
var urls = conf.trace_normalize_urls.split(',').filter(function (el) {
|
|
52
|
-
return el.length != 0;
|
|
53
|
-
});
|
|
54
|
-
if(urls != null) {
|
|
55
|
-
for (var i = 0; i<urls.length; i++) {
|
|
56
|
-
var u = urls[i];
|
|
57
|
-
if (u && u.indexOf(':') >= 0) {
|
|
58
|
-
self.addPath(pathTreeTmp, u);
|
|
59
|
-
} else {
|
|
60
|
-
noNeedTmp.add(HashUtil.hashFromString(u));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
self.restUrlTable = pathTreeTmp;
|
|
65
|
-
self.noNeedSet = noNeedTmp;
|
|
66
|
-
self.parsedSet.clear();
|
|
67
|
-
} catch (e) {
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
ServiceURLPatternDetector.prototype.addPath = function (pathTree, path) {
|
|
71
|
-
if(path == null) { return; }
|
|
72
|
-
path = path.trim();
|
|
73
|
-
if(path.length < 3) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
var nodes = path.split('/').filter(function (el) {
|
|
78
|
-
return el.length != 0;
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
if(nodes.length === 0) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
for(var i=0; i<nodes.length; i++) {
|
|
85
|
-
if(nodes[i].startsWith(":")) {
|
|
86
|
-
nodes[i] = "*";
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if(nodes.length === 1 && nodes[0] === '*') {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
pathTree.insert(nodes, path);
|
|
93
|
-
};
|
|
94
|
-
ServiceURLPatternDetector.prototype.normalize = function (url) {
|
|
95
|
-
if(conf.trace_normalize_enabled === false || this.restUrlTable.size()==0){
|
|
96
|
-
return url;
|
|
97
|
-
}
|
|
98
|
-
var hash = HashUtil.hashFromString(url);
|
|
99
|
-
if(this.noNeedSet.hasKey(hash)) {
|
|
100
|
-
return url;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
var newUrl = this.parsedSet.get(hash);
|
|
104
|
-
if(newUrl != null) {
|
|
105
|
-
return newUrl;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
newUrl = this.restUrlTable.find(url);
|
|
109
|
-
if(newUrl == null) {
|
|
110
|
-
this.noNeedSet.add(hash);
|
|
111
|
-
return url;
|
|
112
|
-
}
|
|
113
|
-
this.parsedSet.put(hash, newUrl);
|
|
114
|
-
return newUrl;
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
exports.Detector = new ServiceURLPatternDetector();
|
|
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
|
+
PathTree = require('../util/pathtree'),
|
|
9
|
+
IntKeyLinkedMap = require('../util/intkey-linkedmap'),
|
|
10
|
+
IntSet = require('../util/intset'),
|
|
11
|
+
StringSet = require('../util/stringset'),
|
|
12
|
+
HashUtil = require('../util/hashutil'),
|
|
13
|
+
last_conf_value = (conf.trace_normalize_urls || ''),
|
|
14
|
+
trace_auto_normalize_enabled = conf.trace_auto_normalize_enabled;
|
|
15
|
+
|
|
16
|
+
var last_build = 0;
|
|
17
|
+
var pathMap = {
|
|
18
|
+
pathParamUrlSet : new StringSet().setMax(500),
|
|
19
|
+
noPathParamUrlHashSet : new IntSet().setMax(1000)
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
function ServiceURLPatternDetector() {
|
|
23
|
+
this.restUrlTable= new PathTree();
|
|
24
|
+
this.noNeedSet= new IntSet().setMax(2000);
|
|
25
|
+
this.parsedSet = new IntKeyLinkedMap().setMax(2000);
|
|
26
|
+
}
|
|
27
|
+
ServiceURLPatternDetector.prototype.start = function (stime) {
|
|
28
|
+
|
|
29
|
+
};
|
|
30
|
+
ServiceURLPatternDetector.prototype.build = function (force) {
|
|
31
|
+
try {
|
|
32
|
+
var self = this;
|
|
33
|
+
var now = Date.now();
|
|
34
|
+
if(force === false && now < last_build + 10000) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
last_build = now;
|
|
38
|
+
|
|
39
|
+
var pathTreeTmp = new PathTree();
|
|
40
|
+
var noNeedTmp = new IntSet().setMax(2000);
|
|
41
|
+
|
|
42
|
+
if(conf.trace_auto_normalize_enabled) {
|
|
43
|
+
pathMap.pathParamUrlSet.forEach(function (val) {
|
|
44
|
+
self.addPath(pathTreeTmp, val);
|
|
45
|
+
});
|
|
46
|
+
pathMap.noPathParamUrlHashSet.forEach(function (val) {
|
|
47
|
+
noNeedTmp.add(val);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
var urls = conf.trace_normalize_urls.split(',').filter(function (el) {
|
|
52
|
+
return el.length != 0;
|
|
53
|
+
});
|
|
54
|
+
if(urls != null) {
|
|
55
|
+
for (var i = 0; i<urls.length; i++) {
|
|
56
|
+
var u = urls[i];
|
|
57
|
+
if (u && u.indexOf(':') >= 0) {
|
|
58
|
+
self.addPath(pathTreeTmp, u);
|
|
59
|
+
} else {
|
|
60
|
+
noNeedTmp.add(HashUtil.hashFromString(u));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
self.restUrlTable = pathTreeTmp;
|
|
65
|
+
self.noNeedSet = noNeedTmp;
|
|
66
|
+
self.parsedSet.clear();
|
|
67
|
+
} catch (e) {
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
ServiceURLPatternDetector.prototype.addPath = function (pathTree, path) {
|
|
71
|
+
if(path == null) { return; }
|
|
72
|
+
path = path.trim();
|
|
73
|
+
if(path.length < 3) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var nodes = path.split('/').filter(function (el) {
|
|
78
|
+
return el.length != 0;
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
if(nodes.length === 0) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
for(var i=0; i<nodes.length; i++) {
|
|
85
|
+
if(nodes[i].startsWith(":")) {
|
|
86
|
+
nodes[i] = "*";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if(nodes.length === 1 && nodes[0] === '*') {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
pathTree.insert(nodes, path);
|
|
93
|
+
};
|
|
94
|
+
ServiceURLPatternDetector.prototype.normalize = function (url) {
|
|
95
|
+
if(conf.trace_normalize_enabled === false || this.restUrlTable.size()==0){
|
|
96
|
+
return url;
|
|
97
|
+
}
|
|
98
|
+
var hash = HashUtil.hashFromString(url);
|
|
99
|
+
if(this.noNeedSet.hasKey(hash)) {
|
|
100
|
+
return url;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
var newUrl = this.parsedSet.get(hash);
|
|
104
|
+
if(newUrl != null) {
|
|
105
|
+
return newUrl;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
newUrl = this.restUrlTable.find(url);
|
|
109
|
+
if(newUrl == null) {
|
|
110
|
+
this.noNeedSet.add(hash);
|
|
111
|
+
return url;
|
|
112
|
+
}
|
|
113
|
+
this.parsedSet.put(hash, newUrl);
|
|
114
|
+
return newUrl;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
exports.Detector = new ServiceURLPatternDetector();
|
|
118
118
|
exports.PathMap = pathMap;
|