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.
Files changed (216) hide show
  1. package/.vscode/keep-context.json +3 -3
  2. package/README.md +51 -51
  3. package/bindings/darwin/x64/whatap.node +0 -0
  4. package/bindings/linux/ia32/whatap.node +0 -0
  5. package/bindings/linux/x64/whatap.node +0 -0
  6. package/help.txt +10 -10
  7. package/index.js +8 -8
  8. package/lib/conf/conf-sys-mon.js +100 -100
  9. package/lib/conf/config-default.js +238 -238
  10. package/lib/conf/configure.js +423 -423
  11. package/lib/conf/license.js +41 -41
  12. package/lib/control/cmd-config.js +23 -23
  13. package/lib/control/control-handler.js +344 -344
  14. package/lib/control/packagectr-helper.js +149 -149
  15. package/lib/core/agent.js +329 -328
  16. package/lib/core/interceptor.js +142 -142
  17. package/lib/core/request-agent.js +26 -26
  18. package/lib/counter/counter-manager.js +127 -127
  19. package/lib/counter/meter/meter-activex.js +66 -66
  20. package/lib/counter/meter/meter-httpc.js +57 -57
  21. package/lib/counter/meter/meter-resource.js +9 -9
  22. package/lib/counter/meter/meter-service.js +167 -167
  23. package/lib/counter/meter/meter-socket.io.js +50 -50
  24. package/lib/counter/meter/meter-sql.js +70 -70
  25. package/lib/counter/meter/meter-users.js +57 -57
  26. package/lib/counter/meter.js +183 -183
  27. package/lib/counter/task/activetransaction.js +93 -93
  28. package/lib/counter/task/agentinfo.js +105 -105
  29. package/lib/counter/task/counter-task.js +9 -9
  30. package/lib/counter/task/gcstat.js +34 -34
  31. package/lib/counter/task/heapmem.js +24 -24
  32. package/lib/counter/task/httpc.js +75 -75
  33. package/lib/counter/task/proc-cpu.js +28 -28
  34. package/lib/counter/task/realtimeuser.js +30 -30
  35. package/lib/counter/task/res/systemECSTask.js +54 -54
  36. package/lib/counter/task/res/systemKubeTask.js +52 -52
  37. package/lib/counter/task/res/util/awsEcsClientThread.js +166 -166
  38. package/lib/counter/task/res/util/linuxProcStatUtil.js +13 -13
  39. package/lib/counter/task/res-sys-cpu.js +61 -61
  40. package/lib/counter/task/service.js +201 -201
  41. package/lib/counter/task/socketio.js +29 -29
  42. package/lib/counter/task/sql.js +104 -104
  43. package/lib/counter/task/systemperf.js +42 -42
  44. package/lib/data/datapack-sender.js +256 -256
  45. package/lib/data/dataprofile-agent.js +136 -136
  46. package/lib/data/datatext-agent.js +135 -135
  47. package/lib/data/event-level.js +15 -15
  48. package/lib/data/test.js +48 -48
  49. package/lib/env/constants.js +20 -20
  50. package/lib/kube/kube-client.js +143 -143
  51. package/lib/lang/text-types.js +58 -58
  52. package/lib/logger.js +319 -319
  53. package/lib/net/netflag.js +54 -54
  54. package/lib/net/paramdef.js +40 -40
  55. package/lib/net/receiver.js +65 -65
  56. package/lib/net/security-master.js +182 -173
  57. package/lib/net/sender.js +140 -140
  58. package/lib/net/tcp-return.js +17 -17
  59. package/lib/net/tcp-session.js +285 -285
  60. package/lib/net/tcpreq-client-proxy.js +69 -69
  61. package/lib/net/tcprequest-mgr.js +57 -57
  62. package/lib/observers/cluster-observer.js +21 -21
  63. package/lib/observers/express-observer.js +214 -214
  64. package/lib/observers/file-observer.js +184 -184
  65. package/lib/observers/global-observer.js +30 -30
  66. package/lib/observers/http-observer.js +704 -704
  67. package/lib/observers/maria-observer.js +382 -382
  68. package/lib/observers/memcached-observer.js +55 -55
  69. package/lib/observers/mongo-observer.js +262 -265
  70. package/lib/observers/mongodb-observer.js +197 -197
  71. package/lib/observers/mongoose-observer.js +83 -83
  72. package/lib/observers/mssql-observer.js +205 -205
  73. package/lib/observers/mysql-observer.js +436 -394
  74. package/lib/observers/net-observer.js +72 -72
  75. package/lib/observers/pgsql-observer.js +295 -295
  76. package/lib/observers/process-observer.js +25 -25
  77. package/lib/observers/promise-observer.js +31 -31
  78. package/lib/observers/redis-observer.js +156 -109
  79. package/lib/observers/schedule-observer.js +66 -66
  80. package/lib/observers/socket.io-observer.js +54 -54
  81. package/lib/observers/stream-observer.js +19 -19
  82. package/lib/observers/thrift-observer.js +196 -196
  83. package/lib/pack/activestack-pack.js +54 -54
  84. package/lib/pack/counter-pack.js +649 -649
  85. package/lib/pack/errorsnap-pack.js +68 -68
  86. package/lib/pack/event-pack.js +53 -53
  87. package/lib/pack/hitmap-pack.js +62 -62
  88. package/lib/pack/hitmap-pack1.js +146 -146
  89. package/lib/pack/netstat.js +14 -14
  90. package/lib/pack/pack.js +49 -49
  91. package/lib/pack/packenum.js +60 -60
  92. package/lib/pack/param-pack.js +213 -213
  93. package/lib/pack/profile-pack.js +48 -48
  94. package/lib/pack/realtimeuser-pack.js +40 -40
  95. package/lib/pack/stat-general-pack.js +95 -95
  96. package/lib/pack/staterror-pack.js +119 -119
  97. package/lib/pack/stathttpc-pack.js +66 -66
  98. package/lib/pack/stathttpc-rec.js +78 -78
  99. package/lib/pack/statremote-pack.js +45 -45
  100. package/lib/pack/statservice-pack.js +62 -62
  101. package/lib/pack/statservice-pack1.js +87 -87
  102. package/lib/pack/statservice-rec.js +292 -292
  103. package/lib/pack/statservice-rec_dep.js +151 -151
  104. package/lib/pack/statsql-pack.js +69 -69
  105. package/lib/pack/statsql-rec.js +100 -100
  106. package/lib/pack/statuseragent-pack.js +43 -43
  107. package/lib/pack/tagcount-pack.js +398 -398
  108. package/lib/pack/tagctr.js +14 -14
  109. package/lib/pack/text-pack.js +49 -49
  110. package/lib/pack/time-count.js +25 -25
  111. package/lib/pack/websocket.js +14 -14
  112. package/lib/plugin/plugin-loadermanager.js +56 -56
  113. package/lib/plugin/plugin.js +75 -75
  114. package/lib/requestlog.js +326 -326
  115. package/lib/service/tx-record.js +288 -284
  116. package/lib/stat/stat-error.js +116 -116
  117. package/lib/stat/stat-httpc.js +97 -97
  118. package/lib/stat/stat-remoteip.js +46 -46
  119. package/lib/stat/stat-sql.js +112 -112
  120. package/lib/stat/stat-tranx.js +57 -57
  121. package/lib/stat/stat-tx-caller.js +159 -159
  122. package/lib/stat/stat-tx-domain.js +110 -110
  123. package/lib/stat/stat-tx-referer.js +111 -111
  124. package/lib/stat/stat-useragent.js +48 -48
  125. package/lib/stat/timingsender.js +72 -72
  126. package/lib/step/activestack-step.js +37 -37
  127. package/lib/step/dbc-step.js +35 -35
  128. package/lib/step/http-stepx.js +66 -66
  129. package/lib/step/message-step.js +39 -39
  130. package/lib/step/method-stepx.js +46 -46
  131. package/lib/step/resultset-step.js +39 -39
  132. package/lib/step/securemsg-step.js +43 -43
  133. package/lib/step/socket-step.js +46 -46
  134. package/lib/step/sql-stepx.js +67 -67
  135. package/lib/step/sqlxtype.js +15 -15
  136. package/lib/step/step.js +65 -65
  137. package/lib/step/stepenum.js +53 -53
  138. package/lib/trace/local-context.js +13 -13
  139. package/lib/trace/parsed-sql.js +13 -13
  140. package/lib/trace/profile-collector.js +70 -70
  141. package/lib/trace/serviceurl-pattern-detector.js +117 -117
  142. package/lib/trace/trace-context-manager.js +195 -195
  143. package/lib/trace/trace-context.js +134 -134
  144. package/lib/util/anylist.js +102 -102
  145. package/lib/util/array-util.js +100 -100
  146. package/lib/util/bitutil.js +27 -27
  147. package/lib/util/cardinality/hyperloglog.js +105 -105
  148. package/lib/util/cardinality/murmurhash.js +31 -31
  149. package/lib/util/cardinality/registerset.js +74 -74
  150. package/lib/util/config-util.js +17 -17
  151. package/lib/util/cypher.js +89 -89
  152. package/lib/util/datetimehelper.js +237 -229
  153. package/lib/util/dateutil.js +110 -106
  154. package/lib/util/errordata.js +20 -20
  155. package/lib/util/escape-literal-sql.js +342 -342
  156. package/lib/util/hashutil2.js +126 -126
  157. package/lib/util/hexa32.js +57 -57
  158. package/lib/util/index.js +78 -78
  159. package/lib/util/intint-map.js +47 -47
  160. package/lib/util/intkey-linkedmap.js +26 -26
  161. package/lib/util/intkey-map.js +25 -25
  162. package/lib/util/intset.js +82 -82
  163. package/lib/util/iputil.js +119 -119
  164. package/lib/util/iputil_x.js +526 -526
  165. package/lib/util/keygen.js +17 -17
  166. package/lib/util/kube-util.js +72 -72
  167. package/lib/util/longint-linkedmap.js +35 -35
  168. package/lib/util/longkey-linkedmap.js +25 -25
  169. package/lib/util/longlong-linkedmap.js +37 -37
  170. package/lib/util/nodeutil.js +67 -67
  171. package/lib/util/oidutil.js +96 -93
  172. package/lib/util/paramsecurity.js +78 -78
  173. package/lib/util/pathtree.js +172 -172
  174. package/lib/util/pre-process.js +13 -13
  175. package/lib/util/process-seq.js +165 -165
  176. package/lib/util/property-util.js +35 -35
  177. package/lib/util/request-queue.js +42 -42
  178. package/lib/util/requestdouble-queue.js +72 -72
  179. package/lib/util/resourceprofile.js +156 -156
  180. package/lib/util/seedrandom.js +242 -242
  181. package/lib/util/stop-watch.js +29 -29
  182. package/lib/util/string-util.js +9 -9
  183. package/lib/util/stringkey-linkedmap.js +28 -28
  184. package/lib/util/stringnum-linkedmap.js +31 -31
  185. package/lib/util/stringset.js +65 -65
  186. package/lib/util/system-util.js +9 -9
  187. package/lib/util/userid-util.js +57 -57
  188. package/lib/util/utils.js +67 -67
  189. package/lib/value/blob-value.js +61 -61
  190. package/lib/value/boolean-value.js +51 -51
  191. package/lib/value/decimal-value.js +71 -71
  192. package/lib/value/double-summary.js +105 -105
  193. package/lib/value/double-value.js +50 -50
  194. package/lib/value/float-array.js +59 -59
  195. package/lib/value/float-value.js +64 -64
  196. package/lib/value/int-array.js +59 -59
  197. package/lib/value/int-map-value.js +151 -151
  198. package/lib/value/int-value.js +64 -64
  199. package/lib/value/ip4-value.js +83 -83
  200. package/lib/value/list-value.js +136 -136
  201. package/lib/value/long-array.js +59 -59
  202. package/lib/value/long-summary.js +105 -105
  203. package/lib/value/map-value.js +175 -175
  204. package/lib/value/metric-value.js +157 -157
  205. package/lib/value/null-value.js +42 -42
  206. package/lib/value/number-value.js +34 -34
  207. package/lib/value/summary-value.js +29 -29
  208. package/lib/value/text-array.js +117 -117
  209. package/lib/value/text-value.js +59 -59
  210. package/lib/value/texthash-value.js +49 -49
  211. package/lib/value/value.js +14 -14
  212. package/lib/value/valueenum.js +99 -99
  213. package/logs/whatap-20230906.log +54 -0
  214. package/package.json +28 -28
  215. package/whatap.conf +1 -1
  216. package/logs/whatap-20230616.log +0 -13
@@ -1,242 +1,242 @@
1
- /*
2
- Copyright 2014 David Bau.
3
-
4
- Permission is hereby granted, free of charge, to any person obtaining
5
- a copy of this software and associated documentation files (the
6
- "Software"), to deal in the Software without restriction, including
7
- without limitation the rights to use, copy, modify, merge, publish,
8
- distribute, sublicense, and/or sell copies of the Software, and to
9
- permit persons to whom the Software is furnished to do so, subject to
10
- the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be
13
- included in all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
-
23
- */
24
-
25
- (function (pool, math) {
26
- //
27
- // The following constants are related to IEEE 754 limits.
28
- //
29
- var global = this,
30
- width = 256, // each RC4 output is 0 <= x < 256
31
- chunks = 6, // at least six RC4 outputs for each double
32
- digits = 52, // there are 52 significant digits in a double
33
- rngname = 'random', // rngname: name for Math.random and Math.seedrandom
34
- startdenom = math.pow(width, chunks),
35
- significance = math.pow(2, digits),
36
- overflow = significance * 2,
37
- mask = width - 1,
38
- nodecrypto; // node.js crypto module, initialized at the bottom.
39
-
40
- //
41
- // seedrandom()
42
- // This is the seedrandom function described above.
43
- //
44
- function seedrandom(seed, options, callback) {
45
- var key = [];
46
- options = (options == true) ? { entropy: true } : (options || {});
47
-
48
- // Flatten the seed string or build one from local entropy if needed.
49
- var shortseed = mixkey(flatten(
50
- options.entropy ? [seed, tostring(pool)] :
51
- (seed == null) ? autoseed() : seed, 3), key);
52
-
53
- // Use the seed to initialize an ARC4 generator.
54
- var arc4 = new ARC4(key);
55
-
56
- // This function returns a random double in [0, 1) that contains
57
- // randomness in every bit of the mantissa of the IEEE 754 value.
58
- var prng = function() {
59
- var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48
60
- d = startdenom, // and denominator d = 2 ^ 48.
61
- x = 0; // and no 'extra last byte'.
62
- while (n < significance) { // Fill up all significant digits by
63
- n = (n + x) * width; // shifting numerator and
64
- d *= width; // denominator and generating a
65
- x = arc4.g(1); // new least-significant-byte.
66
- }
67
- while (n >= overflow) { // To avoid rounding up, before adding
68
- n /= 2; // last byte, shift everything
69
- d /= 2; // right using integer math until
70
- x >>>= 1; // we have exactly the desired bits.
71
- }
72
- return (n + x) / d; // Form the number within [0, 1).
73
- };
74
-
75
- prng.int32 = function() { return arc4.g(4) | 0; }
76
- prng.quick = function() { return arc4.g(4) / 0x100000000; }
77
- prng.double = prng;
78
-
79
- // Mix the randomness into accumulated entropy.
80
- mixkey(tostring(arc4.S), pool);
81
-
82
- // Calling convention: what to return as a function of prng, seed, is_math.
83
- return (options.pass || callback ||
84
- function(prng, seed, is_math_call, state) {
85
- if (state) {
86
- // Load the arc4 state from the given state if it has an S array.
87
- if (state.S) { copy(state, arc4); }
88
- // Only provide the .state method if requested via options.state.
89
- prng.state = function() { return copy(arc4, {}); }
90
- }
91
-
92
- // If called as a method of Math (Math.seedrandom()), mutate
93
- // Math.random because that is how seedrandom.js has worked since v1.0.
94
- if (is_math_call) { math[rngname] = prng; return seed; }
95
-
96
- // Otherwise, it is a newer calling convention, so return the
97
- // prng directly.
98
- else return prng;
99
- })(
100
- prng,
101
- shortseed,
102
- 'global' in options ? options.global : (this == math),
103
- options.state);
104
- }
105
- math['seed' + rngname] = seedrandom;
106
-
107
- //
108
- // ARC4
109
- //
110
- // An ARC4 implementation. The constructor takes a key in the form of
111
- // an array of at most (width) integers that should be 0 <= x < (width).
112
- //
113
- // The g(count) method returns a pseudorandom integer that concatenates
114
- // the next (count) outputs from ARC4. Its return value is a number x
115
- // that is in the range 0 <= x < (width ^ count).
116
- //
117
- function ARC4(key) {
118
- var t, keylen = key.length,
119
- me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];
120
-
121
- // The empty key [] is treated as [0].
122
- if (!keylen) { key = [keylen++]; }
123
-
124
- // Set up S using the standard key scheduling algorithm.
125
- while (i < width) {
126
- s[i] = i++;
127
- }
128
- for (i = 0; i < width; i++) {
129
- s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];
130
- s[j] = t;
131
- }
132
-
133
- // The "g" method returns the next (count) outputs as one number.
134
- (me.g = function(count) {
135
- // Using instance members instead of closure state nearly doubles speed.
136
- var t, r = 0,
137
- i = me.i, j = me.j, s = me.S;
138
- while (count--) {
139
- t = s[i = mask & (i + 1)];
140
- r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];
141
- }
142
- me.i = i; me.j = j;
143
- return r;
144
- // For robust unpredictability, the function call below automatically
145
- // discards an initial batch of values. This is called RC4-drop[256].
146
- // See http://google.com/search?q=rsa+fluhrer+response&btnI
147
- })(width);
148
- }
149
-
150
- //
151
- // copy()
152
- // Copies internal state of ARC4 to or from a plain object.
153
- //
154
- function copy(f, t) {
155
- t.i = f.i;
156
- t.j = f.j;
157
- t.S = f.S.slice();
158
- return t;
159
- };
160
-
161
- //
162
- // flatten()
163
- // Converts an object tree to nested arrays of strings.
164
- //
165
- function flatten(obj, depth) {
166
- var result = [], typ = (typeof obj), prop;
167
- if (depth && typ == 'object') {
168
- for (prop in obj) {
169
- try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}
170
- }
171
- }
172
- return (result.length ? result : typ == 'string' ? obj : obj + '\0');
173
- }
174
-
175
- //
176
- // mixkey()
177
- // Mixes a string seed into a key that is an array of integers, and
178
- // returns a shortened string seed that is equivalent to the result key.
179
- //
180
- function mixkey(seed, key) {
181
- var stringseed = seed + '', smear, j = 0;
182
- while (j < stringseed.length) {
183
- key[mask & j] =
184
- mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));
185
- }
186
- return tostring(key);
187
- }
188
-
189
- //
190
- // autoseed()
191
- // Returns an object for autoseeding, using window.crypto and Node crypto
192
- // module if available.
193
- //
194
- function autoseed() {
195
- try {
196
- if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); }
197
- var out = new Uint8Array(width);
198
- (global.crypto || global.msCrypto).getRandomValues(out);
199
- return tostring(out);
200
- } catch (e) {
201
- var browser = global.navigator,
202
- plugins = browser && browser.plugins;
203
- return [+new Date, global, plugins, global.screen, tostring(pool)];
204
- }
205
- }
206
-
207
- //
208
- // tostring()
209
- // Converts an array of charcodes to a string
210
- //
211
- function tostring(a) {
212
- return String.fromCharCode.apply(0, a);
213
- }
214
-
215
- //
216
- // When seedrandom.js is loaded, we immediately mix a few bits
217
- // from the built-in RNG into the entropy pool. Because we do
218
- // not want to interfere with deterministic PRNG state later,
219
- // seedrandom will not call math.random on its own again after
220
- // initialization.
221
- //
222
- mixkey(math.random(), pool);
223
-
224
- //
225
- // Nodejs and AMD support: export the implementation as a module using
226
- // either convention.
227
- //
228
- if ((typeof module) == 'object' && module.exports) {
229
- module.exports = seedrandom;
230
- // When in node.js, try using crypto package for autoseeding.
231
- try {
232
- nodecrypto = require('crypto');
233
- } catch (ex) {}
234
- } else if ((typeof define) == 'function' && define.amd) {
235
- define(function() { return seedrandom; });
236
- }
237
-
238
- // End anonymous scope, and pass initial values.
239
- })(
240
- [], // pool: entropy pool starts empty
241
- Math // math: package containing random, pow, and seedrandom
242
- );
1
+ /*
2
+ Copyright 2014 David Bau.
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+ */
24
+
25
+ (function (pool, math) {
26
+ //
27
+ // The following constants are related to IEEE 754 limits.
28
+ //
29
+ var global = this,
30
+ width = 256, // each RC4 output is 0 <= x < 256
31
+ chunks = 6, // at least six RC4 outputs for each double
32
+ digits = 52, // there are 52 significant digits in a double
33
+ rngname = 'random', // rngname: name for Math.random and Math.seedrandom
34
+ startdenom = math.pow(width, chunks),
35
+ significance = math.pow(2, digits),
36
+ overflow = significance * 2,
37
+ mask = width - 1,
38
+ nodecrypto; // node.js crypto module, initialized at the bottom.
39
+
40
+ //
41
+ // seedrandom()
42
+ // This is the seedrandom function described above.
43
+ //
44
+ function seedrandom(seed, options, callback) {
45
+ var key = [];
46
+ options = (options == true) ? { entropy: true } : (options || {});
47
+
48
+ // Flatten the seed string or build one from local entropy if needed.
49
+ var shortseed = mixkey(flatten(
50
+ options.entropy ? [seed, tostring(pool)] :
51
+ (seed == null) ? autoseed() : seed, 3), key);
52
+
53
+ // Use the seed to initialize an ARC4 generator.
54
+ var arc4 = new ARC4(key);
55
+
56
+ // This function returns a random double in [0, 1) that contains
57
+ // randomness in every bit of the mantissa of the IEEE 754 value.
58
+ var prng = function() {
59
+ var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48
60
+ d = startdenom, // and denominator d = 2 ^ 48.
61
+ x = 0; // and no 'extra last byte'.
62
+ while (n < significance) { // Fill up all significant digits by
63
+ n = (n + x) * width; // shifting numerator and
64
+ d *= width; // denominator and generating a
65
+ x = arc4.g(1); // new least-significant-byte.
66
+ }
67
+ while (n >= overflow) { // To avoid rounding up, before adding
68
+ n /= 2; // last byte, shift everything
69
+ d /= 2; // right using integer math until
70
+ x >>>= 1; // we have exactly the desired bits.
71
+ }
72
+ return (n + x) / d; // Form the number within [0, 1).
73
+ };
74
+
75
+ prng.int32 = function() { return arc4.g(4) | 0; }
76
+ prng.quick = function() { return arc4.g(4) / 0x100000000; }
77
+ prng.double = prng;
78
+
79
+ // Mix the randomness into accumulated entropy.
80
+ mixkey(tostring(arc4.S), pool);
81
+
82
+ // Calling convention: what to return as a function of prng, seed, is_math.
83
+ return (options.pass || callback ||
84
+ function(prng, seed, is_math_call, state) {
85
+ if (state) {
86
+ // Load the arc4 state from the given state if it has an S array.
87
+ if (state.S) { copy(state, arc4); }
88
+ // Only provide the .state method if requested via options.state.
89
+ prng.state = function() { return copy(arc4, {}); }
90
+ }
91
+
92
+ // If called as a method of Math (Math.seedrandom()), mutate
93
+ // Math.random because that is how seedrandom.js has worked since v1.0.
94
+ if (is_math_call) { math[rngname] = prng; return seed; }
95
+
96
+ // Otherwise, it is a newer calling convention, so return the
97
+ // prng directly.
98
+ else return prng;
99
+ })(
100
+ prng,
101
+ shortseed,
102
+ 'global' in options ? options.global : (this == math),
103
+ options.state);
104
+ }
105
+ math['seed' + rngname] = seedrandom;
106
+
107
+ //
108
+ // ARC4
109
+ //
110
+ // An ARC4 implementation. The constructor takes a key in the form of
111
+ // an array of at most (width) integers that should be 0 <= x < (width).
112
+ //
113
+ // The g(count) method returns a pseudorandom integer that concatenates
114
+ // the next (count) outputs from ARC4. Its return value is a number x
115
+ // that is in the range 0 <= x < (width ^ count).
116
+ //
117
+ function ARC4(key) {
118
+ var t, keylen = key.length,
119
+ me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];
120
+
121
+ // The empty key [] is treated as [0].
122
+ if (!keylen) { key = [keylen++]; }
123
+
124
+ // Set up S using the standard key scheduling algorithm.
125
+ while (i < width) {
126
+ s[i] = i++;
127
+ }
128
+ for (i = 0; i < width; i++) {
129
+ s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];
130
+ s[j] = t;
131
+ }
132
+
133
+ // The "g" method returns the next (count) outputs as one number.
134
+ (me.g = function(count) {
135
+ // Using instance members instead of closure state nearly doubles speed.
136
+ var t, r = 0,
137
+ i = me.i, j = me.j, s = me.S;
138
+ while (count--) {
139
+ t = s[i = mask & (i + 1)];
140
+ r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];
141
+ }
142
+ me.i = i; me.j = j;
143
+ return r;
144
+ // For robust unpredictability, the function call below automatically
145
+ // discards an initial batch of values. This is called RC4-drop[256].
146
+ // See http://google.com/search?q=rsa+fluhrer+response&btnI
147
+ })(width);
148
+ }
149
+
150
+ //
151
+ // copy()
152
+ // Copies internal state of ARC4 to or from a plain object.
153
+ //
154
+ function copy(f, t) {
155
+ t.i = f.i;
156
+ t.j = f.j;
157
+ t.S = f.S.slice();
158
+ return t;
159
+ };
160
+
161
+ //
162
+ // flatten()
163
+ // Converts an object tree to nested arrays of strings.
164
+ //
165
+ function flatten(obj, depth) {
166
+ var result = [], typ = (typeof obj), prop;
167
+ if (depth && typ == 'object') {
168
+ for (prop in obj) {
169
+ try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}
170
+ }
171
+ }
172
+ return (result.length ? result : typ == 'string' ? obj : obj + '\0');
173
+ }
174
+
175
+ //
176
+ // mixkey()
177
+ // Mixes a string seed into a key that is an array of integers, and
178
+ // returns a shortened string seed that is equivalent to the result key.
179
+ //
180
+ function mixkey(seed, key) {
181
+ var stringseed = seed + '', smear, j = 0;
182
+ while (j < stringseed.length) {
183
+ key[mask & j] =
184
+ mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));
185
+ }
186
+ return tostring(key);
187
+ }
188
+
189
+ //
190
+ // autoseed()
191
+ // Returns an object for autoseeding, using window.crypto and Node crypto
192
+ // module if available.
193
+ //
194
+ function autoseed() {
195
+ try {
196
+ if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); }
197
+ var out = new Uint8Array(width);
198
+ (global.crypto || global.msCrypto).getRandomValues(out);
199
+ return tostring(out);
200
+ } catch (e) {
201
+ var browser = global.navigator,
202
+ plugins = browser && browser.plugins;
203
+ return [+new Date, global, plugins, global.screen, tostring(pool)];
204
+ }
205
+ }
206
+
207
+ //
208
+ // tostring()
209
+ // Converts an array of charcodes to a string
210
+ //
211
+ function tostring(a) {
212
+ return String.fromCharCode.apply(0, a);
213
+ }
214
+
215
+ //
216
+ // When seedrandom.js is loaded, we immediately mix a few bits
217
+ // from the built-in RNG into the entropy pool. Because we do
218
+ // not want to interfere with deterministic PRNG state later,
219
+ // seedrandom will not call math.random on its own again after
220
+ // initialization.
221
+ //
222
+ mixkey(math.random(), pool);
223
+
224
+ //
225
+ // Nodejs and AMD support: export the implementation as a module using
226
+ // either convention.
227
+ //
228
+ if ((typeof module) == 'object' && module.exports) {
229
+ module.exports = seedrandom;
230
+ // When in node.js, try using crypto package for autoseeding.
231
+ try {
232
+ nodecrypto = require('crypto');
233
+ } catch (ex) {}
234
+ } else if ((typeof define) == 'function' && define.amd) {
235
+ define(function() { return seedrandom; });
236
+ }
237
+
238
+ // End anonymous scope, and pass initial values.
239
+ })(
240
+ [], // pool: entropy pool starts empty
241
+ Math // math: package containing random, pow, and seedrandom
242
+ );
@@ -1,30 +1,30 @@
1
- var DateUtil = require('./../util/dateutil')
2
-
3
- var StopWatch = function(){
4
- this.stime = DateUtil.currentTime();
5
- this.etime = 0;
6
- }
7
-
8
- StopWatch.prototype.start = function(){
9
- this.stime = DateUtil.currentTime();
10
- this.etime = 0;
11
- }
12
-
13
- StopWatch.prototype.getTime = function(){
14
- if(this.etime === 0){
15
- var now = DateUtil.currentTime();
16
- return now - this.stime;
17
- }else{
18
- return this.etime = this.stime;
19
- }
20
- }
21
-
22
- StopWatch.prototype.stop = function(){
23
- if(this.etime === 0){
24
- this.etime = DateUtil.currentTime()
25
- }
26
-
27
- return this.etime - this.stime;
28
- }
29
-
1
+ var DateUtil = require('./../util/dateutil')
2
+
3
+ var StopWatch = function(){
4
+ this.stime = DateUtil.currentTime();
5
+ this.etime = 0;
6
+ }
7
+
8
+ StopWatch.prototype.start = function(){
9
+ this.stime = DateUtil.currentTime();
10
+ this.etime = 0;
11
+ }
12
+
13
+ StopWatch.prototype.getTime = function(){
14
+ if(this.etime === 0){
15
+ var now = DateUtil.currentTime();
16
+ return now - this.stime;
17
+ }else{
18
+ return this.etime = this.stime;
19
+ }
20
+ }
21
+
22
+ StopWatch.prototype.stop = function(){
23
+ if(this.etime === 0){
24
+ this.etime = DateUtil.currentTime()
25
+ }
26
+
27
+ return this.etime - this.stime;
28
+ }
29
+
30
30
  module.exports = StopWatch;
@@ -1,10 +1,10 @@
1
- var StringUtil = {
2
- isEmpty: function isEmpty(s){
3
- return s === undefined || s === null || s.length == 0;
4
- },
5
- isNotEmpty: function isNotEmpty(s){
6
- return !s && s.length > 0;
7
- }
8
- }
9
-
1
+ var StringUtil = {
2
+ isEmpty: function isEmpty(s){
3
+ return s === undefined || s === null || s.length == 0;
4
+ },
5
+ isNotEmpty: function isNotEmpty(s){
6
+ return !s && s.length > 0;
7
+ }
8
+ }
9
+
10
10
  module.exports = StringUtil;
@@ -1,29 +1,29 @@
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
- var LinkedMap = require('./linkedmap'),
9
- HashUtil = require('./hashutil');;
10
-
11
- function StringKeyLinkedMap(initCapacity, loadFactor){
12
- LinkedMap.call(this, initCapacity, loadFactor);
13
- return this;
14
- }
15
-
16
- StringKeyLinkedMap.prototype = new LinkedMap();
17
- StringKeyLinkedMap.prototype.constructor = StringKeyLinkedMap;
18
-
19
- StringKeyLinkedMap.prototype.hash = function (key /*string*/) {
20
- return Math.abs(this.strHash(key));
21
- }
22
- StringKeyLinkedMap.prototype.equals = function (key1, key2) {
23
- return key1 === key2;
24
- };
25
- StringKeyLinkedMap.prototype.sum = function (key1, key2) {
26
- return key2;
27
- };
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
+
8
+ var LinkedMap = require('./linkedmap'),
9
+ HashUtil = require('./hashutil');;
10
+
11
+ function StringKeyLinkedMap(initCapacity, loadFactor){
12
+ LinkedMap.call(this, initCapacity, loadFactor);
13
+ return this;
14
+ }
15
+
16
+ StringKeyLinkedMap.prototype = new LinkedMap();
17
+ StringKeyLinkedMap.prototype.constructor = StringKeyLinkedMap;
18
+
19
+ StringKeyLinkedMap.prototype.hash = function (key /*string*/) {
20
+ return Math.abs(this.strHash(key));
21
+ }
22
+ StringKeyLinkedMap.prototype.equals = function (key1, key2) {
23
+ return key1 === key2;
24
+ };
25
+ StringKeyLinkedMap.prototype.sum = function (key1, key2) {
26
+ return key2;
27
+ };
28
+
29
29
  module.exports = StringKeyLinkedMap;