whatap 0.4.46 → 0.4.49
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/lib/core/agent.js +2 -0
- package/lib/counter/task/res/systemKubeTask.js +2 -9
- package/lib/counter/task/systemperf.js +10 -1
- package/lib/observers/maria-observer.js +370 -0
- package/lib/observers/mysql-observer.js +1 -1
- package/lib/util/hashutil2.js +127 -0
- package/lib/util/kube-util.js +4 -3
- package/package.json +2 -2
package/lib/core/agent.js
CHANGED
|
@@ -15,6 +15,7 @@ var Interceptor = require('./interceptor').Interceptor,
|
|
|
15
15
|
ExpressObserver = require('../observers/express-observer').ExpressObserver,
|
|
16
16
|
GlobalObserver = require('../observers/global-observer').GlobalObserver,
|
|
17
17
|
MysqlObserver = require('../observers/mysql-observer').MysqlObserver,
|
|
18
|
+
MariaObserver = require('../observers/maria-observer').MariaObserver,
|
|
18
19
|
SocketioObserver = require('../observers/socket.io-observer').SocketIOObserver,
|
|
19
20
|
ProcessObserver = require('../observers/process-observer').ProcessObserver,
|
|
20
21
|
FileObserver = require('../observers/file-observer').FileObserver,
|
|
@@ -244,6 +245,7 @@ NodeAgent.prototype.loadObserves = function() {
|
|
|
244
245
|
observes.push(NetObserver);
|
|
245
246
|
observes.push(ClusterObserver);
|
|
246
247
|
observes.push(MysqlObserver);
|
|
248
|
+
observes.push(MariaObserver);
|
|
247
249
|
observes.push(SocketioObserver);
|
|
248
250
|
observes.push(ExpressObserver);
|
|
249
251
|
observes.push(FileObserver);
|
|
@@ -41,15 +41,8 @@ SystemKubeTask.prototype.process = function (p) {
|
|
|
41
41
|
p.cpu_cores = 1; // static one core in nodejs
|
|
42
42
|
p.host_ip = SecurityMaster.IP;
|
|
43
43
|
var now = Date.now();
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// 몽땅 만들어야 함.
|
|
47
|
-
p.cpu = KubeClient.cpu * ConfSysMon.correction_factor_cpu;
|
|
48
|
-
p.mem = KubeClient.memory * ConfSysMon.correction_factor_pcpu;
|
|
49
|
-
// p.metering = KubeClient.metering == 0 ? p.cpu_cores : KubeClient.metering;
|
|
50
|
-
p.metering = 1;
|
|
51
|
-
}
|
|
52
|
-
|
|
44
|
+
p.cpu = 0;
|
|
45
|
+
p.mem = 0;
|
|
53
46
|
if (p.metering != 0) {
|
|
54
47
|
this.last_metering = p.metering;
|
|
55
48
|
} else {
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
var CounterTask = require('./counter-task'),
|
|
8
8
|
ResourceProfile = require('./../../util/resourceprofile'),
|
|
9
|
+
KubeUtil = require('./../../util/kube-util'),
|
|
9
10
|
SecurityMaster = require('../../net/security-master');
|
|
10
11
|
|
|
11
12
|
function SystemPerf(){
|
|
@@ -25,10 +26,18 @@ SystemPerf.prototype.process = function(p) {
|
|
|
25
26
|
p.cpu_proc = cpu.proc;
|
|
26
27
|
|
|
27
28
|
p.disk = ResourceProfile.getDisk().usage;
|
|
28
|
-
|
|
29
|
+
|
|
30
|
+
if(p.version <= 1) p.mem = ResourceProfile.getMemory().usage;
|
|
31
|
+
else p.mem = ResourceProfile.getMemoryV2().usage;
|
|
32
|
+
|
|
29
33
|
p.cpu_cores = cpu.core;
|
|
30
34
|
p.host_ip = SecurityMaster.IP;
|
|
31
35
|
p.pid=process.pid;
|
|
36
|
+
|
|
37
|
+
if (KubeUtil.container_id != null) {
|
|
38
|
+
p.mem = 0;
|
|
39
|
+
p.cpu = 0;
|
|
40
|
+
}
|
|
32
41
|
};
|
|
33
42
|
|
|
34
43
|
module.exports = SystemPerf;
|
|
@@ -0,0 +1,370 @@
|
|
|
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 TraceContextManager = require('../trace/trace-context-manager'),
|
|
8
|
+
ParsedSql = require('../trace/parsed-sql'),
|
|
9
|
+
SqlStepX = require('../step/sql-stepx'),
|
|
10
|
+
DBCStep = require('../step/dbc-step'),
|
|
11
|
+
ResultSetStep = require('../step/resultset-step'),
|
|
12
|
+
DataTextAgent = require('../data/datatext-agent'),
|
|
13
|
+
StatSql = require('../stat/stat-sql'),
|
|
14
|
+
MeterSql = require('../counter/meter/meter-sql'),
|
|
15
|
+
conf = require('../conf/configure'),
|
|
16
|
+
IntKeyMap = require('../util/intkey-map'),
|
|
17
|
+
EscapeLiteralSQL = require('../util/escape-literal-sql'),
|
|
18
|
+
HashUtil = require('../util/hashutil'),
|
|
19
|
+
StatError = require('../stat/stat-error'),
|
|
20
|
+
TextTypes = require('../lang/text-types'),
|
|
21
|
+
ParamSecurity = require('../util/paramsecurity'),
|
|
22
|
+
Logger = require('../logger'),
|
|
23
|
+
conf = require('../conf/configure'),
|
|
24
|
+
DateUtil = require('../util/dateutil'),
|
|
25
|
+
Buffer = require('buffer').Buffer;
|
|
26
|
+
|
|
27
|
+
var MariaObserver = function (agent) {
|
|
28
|
+
this.agent = agent;
|
|
29
|
+
this.packages = ['mariadb/callback'];
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
var queryHook = function (dbc_hash, agent) {
|
|
33
|
+
|
|
34
|
+
return function (obj, args) {
|
|
35
|
+
var ctx = TraceContextManager.getCurrentContext();
|
|
36
|
+
|
|
37
|
+
if (ctx == null || args[0] == null) { return; }
|
|
38
|
+
if(args[0].sql == null && typeof args[0] != 'string') { return; }
|
|
39
|
+
|
|
40
|
+
var sql_step = new SqlStepX();
|
|
41
|
+
sql_step.start_time = ctx.getElapsedTime();
|
|
42
|
+
ctx.profile.push(sql_step);
|
|
43
|
+
|
|
44
|
+
ctx.footprint('Maria Query Start');
|
|
45
|
+
|
|
46
|
+
ctx.sql_count++;
|
|
47
|
+
|
|
48
|
+
var sql = args.length > 0 ? args[0] : undefined,
|
|
49
|
+
psql = null;
|
|
50
|
+
|
|
51
|
+
if(typeof sql !== 'string') {
|
|
52
|
+
sql = args[0].sql || undefined;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (typeof sql === 'string' && sql.length > 0) {
|
|
56
|
+
try {
|
|
57
|
+
psql = escapeLiteral(sql);
|
|
58
|
+
} catch (e) {
|
|
59
|
+
Logger.printError('WHATAP-191', 'MariaObserver escapeliteral error', e);
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
sql = '';
|
|
63
|
+
psql = escapeLiteral(sql);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if(psql != null) {
|
|
67
|
+
sql_step.hash = psql.sql;
|
|
68
|
+
// sql_step.crud = psql.type.charCodeAt(0);
|
|
69
|
+
}
|
|
70
|
+
sql_step.dbc = dbc_hash;
|
|
71
|
+
|
|
72
|
+
var els = new EscapeLiteralSQL(sql);
|
|
73
|
+
els.process();
|
|
74
|
+
|
|
75
|
+
ctx.active_sqlhash = sql_step.hash;
|
|
76
|
+
ctx.active_dbc = sql_step.dbc;
|
|
77
|
+
//ctx.active_crud = sql_step.crud;
|
|
78
|
+
|
|
79
|
+
if(conf.profile_sql_param_enabled) {
|
|
80
|
+
var params = args.length > 1 && Array.isArray(args[1]) ? args[1] : undefined;
|
|
81
|
+
sql_step.setTrue(1);
|
|
82
|
+
var crc = {value : 0};
|
|
83
|
+
sql_step.p1 = toParamBytes(psql.param, crc);
|
|
84
|
+
if(params != undefined) {
|
|
85
|
+
const result = params.map((param) => {
|
|
86
|
+
if(typeof param === 'string'){
|
|
87
|
+
return `'${param}'`
|
|
88
|
+
}
|
|
89
|
+
return param
|
|
90
|
+
}).toString()
|
|
91
|
+
sql_step.p2 = toParamBytes(result, crc);
|
|
92
|
+
}
|
|
93
|
+
sql_step.pcrc = crc.value;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var lastCallback = false;
|
|
97
|
+
|
|
98
|
+
function queryCallback(obj, args) {
|
|
99
|
+
if (ctx == null) { return; }
|
|
100
|
+
TraceContextManager.resume(ctx._id);
|
|
101
|
+
|
|
102
|
+
if(args[0]) {
|
|
103
|
+
try{
|
|
104
|
+
sql_step.error = StatError.addError(
|
|
105
|
+
('Maria-'+args[0].code ),
|
|
106
|
+
(args[0].message || 'Maria error'),
|
|
107
|
+
ctx.service_hash,
|
|
108
|
+
TextTypes.SQL, sql_step.hash);
|
|
109
|
+
if(ctx.error.isZero()) {
|
|
110
|
+
ctx.error = sql_step.error;
|
|
111
|
+
}
|
|
112
|
+
}catch(e) {
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
sql_step.elapsed = ctx.getElapsedTime() - sql_step.start_time;
|
|
118
|
+
ctx.sql_time += sql_step.elapsed;
|
|
119
|
+
|
|
120
|
+
ctx.footprint('Maria Query Done');
|
|
121
|
+
|
|
122
|
+
MeterSql.add(dbc_hash, sql_step.elapsed, false);
|
|
123
|
+
StatSql.addSqlTime( ctx.service_hash, sql_step.dbc,
|
|
124
|
+
sql_step.hash, sql_step.elapsed, args[0] != null, 0);
|
|
125
|
+
|
|
126
|
+
if (Array.isArray(args[1]) && psql != null && psql.type === 'S') {
|
|
127
|
+
var result_step = new ResultSetStep();
|
|
128
|
+
result_step.start_time = ctx.getElapsedTime();
|
|
129
|
+
result_step.elapsed = 0;
|
|
130
|
+
result_step.fetch = args[1].length;
|
|
131
|
+
result_step.sqlhash = psql.sql;
|
|
132
|
+
result_step.dbc = dbc_hash;
|
|
133
|
+
ctx.profile.push(result_step);
|
|
134
|
+
MeterSql.addFetch(result_step.dbc, result_step.fetch, 0);
|
|
135
|
+
StatSql.addFetch(result_step.dbc, result_step.sqlhash, result_step.fetch, 0);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (args[1] != null && psql != null && psql.type === 'U') {
|
|
139
|
+
sql_step.updated = args[1].affectedRows || 0;
|
|
140
|
+
//StatSql.addUpdate(dbc_hash, psql.sql, sql_step.updated);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
lastCallback = agent.aop.functionHook(args, -1, queryCallback);
|
|
145
|
+
|
|
146
|
+
if(lastCallback === false && args.length>0 && args[0]._callback){
|
|
147
|
+
agent.aop.both(args[0], '_callback', queryCallback);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
var toParamBytes = function(p, crc) {
|
|
153
|
+
if(p == null || p.length === 0) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
try{
|
|
157
|
+
return ParamSecurity.encrypt(Buffer.from(p), crc);
|
|
158
|
+
} catch(e) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
var errorDelegate = function () {
|
|
164
|
+
return function (obj, args) {
|
|
165
|
+
var ctx = TraceContextManager.getCurrentContext();
|
|
166
|
+
if(ctx == null) { return; }
|
|
167
|
+
|
|
168
|
+
var laststep = ctx.profile.getLastSteps(1);
|
|
169
|
+
if(laststep == null || laststep.length === 0) { return; }
|
|
170
|
+
|
|
171
|
+
var step = laststep[0];
|
|
172
|
+
if(!args[0].fatal) {
|
|
173
|
+
MeterSql.add(step.dbc, step.elapsed, true);
|
|
174
|
+
StatSql.addSqlTime(ctx, ctx.service_hash, step.dbc, step.hash, step.elapsed, true, 0);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
try{
|
|
178
|
+
if(args[0].fatal) {
|
|
179
|
+
// Connection Error
|
|
180
|
+
step.error = StatError.addError( 'Maria-'+args[0].code, args[0].message, ctx.service_hash); /*long*/
|
|
181
|
+
} else {
|
|
182
|
+
step.error = StatError.addError( 'Maria-'+args[0].code, args[0].message, ctx.service_hash, TextTypes.SQL, step.hash); /*long*/
|
|
183
|
+
}
|
|
184
|
+
if (ctx.error.isZero()) { ctx.error = step.error; }
|
|
185
|
+
} catch(e) {
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
MariaObserver.prototype.inject = function (mod, moduleName) {
|
|
191
|
+
if(mod.__whatap_observe__) { return; }
|
|
192
|
+
mod.__whatap_observe__ = true;
|
|
193
|
+
|
|
194
|
+
var self = this;
|
|
195
|
+
var aop = self.agent.aop;
|
|
196
|
+
|
|
197
|
+
if( conf.sql_enabled === false ) { return; }
|
|
198
|
+
var dbc_hash=0;
|
|
199
|
+
aop.both(mod, 'createConnection',
|
|
200
|
+
function (obj, args, lctx) {
|
|
201
|
+
var ctx = lctx.context;
|
|
202
|
+
if(ctx == null || ctx.db_opening) { return; }
|
|
203
|
+
ctx.db_opening = true;
|
|
204
|
+
ctx.footprint('Maria Connecting Start');
|
|
205
|
+
|
|
206
|
+
var dbc_step = new DBCStep();
|
|
207
|
+
dbc_step.start_time = ctx.getElapsedTime();
|
|
208
|
+
lctx.step = dbc_step;
|
|
209
|
+
},
|
|
210
|
+
function (obj, args, ret, lctx) {
|
|
211
|
+
if(dbc_hash === 0){
|
|
212
|
+
var dbc;
|
|
213
|
+
if(args.length > 0) {
|
|
214
|
+
var info = (args[0] || {});
|
|
215
|
+
dbc = 'maria://';
|
|
216
|
+
dbc += info.user || '';
|
|
217
|
+
dbc += "@";
|
|
218
|
+
dbc += info.host || '';
|
|
219
|
+
dbc += '/';
|
|
220
|
+
dbc += info.database || '';
|
|
221
|
+
dbc_hash = HashUtil.hashFromString(dbc);
|
|
222
|
+
DataTextAgent.DBC.add(dbc_hash, dbc);
|
|
223
|
+
DataTextAgent.METHOD.add(dbc_hash, dbc);
|
|
224
|
+
DataTextAgent.ERROR.add(dbc_hash, dbc);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
aop.both(ret, 'query', queryHook(dbc_hash, self.agent), function (obj, args, ret, lctx) {
|
|
229
|
+
var ctx = lctx.context;
|
|
230
|
+
TraceContextManager.resume(ctx);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
aop.both(ret, 'execute', queryHook(dbc_hash, self.agent), function (obj, args, ret, lctx) {
|
|
234
|
+
var ctx = lctx.context;
|
|
235
|
+
TraceContextManager.resume(ctx);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
aop.after(ret._protocol, '_delegateError', errorDelegate());
|
|
239
|
+
|
|
240
|
+
var ctx = lctx.context,
|
|
241
|
+
step = lctx.step;
|
|
242
|
+
|
|
243
|
+
if (ctx == null || step == null) { return; }
|
|
244
|
+
|
|
245
|
+
TraceContextManager.resume(ctx);
|
|
246
|
+
ctx.footprint('Maria Connecting Done');
|
|
247
|
+
ctx.db_opening = false;
|
|
248
|
+
step.hash = dbc_hash;
|
|
249
|
+
|
|
250
|
+
aop.both(ret, 'connect', function (obj, args) {
|
|
251
|
+
var ctx = TraceContextManager.getCurrentContext();
|
|
252
|
+
if (ctx == null) { return; }
|
|
253
|
+
|
|
254
|
+
ctx.footprint('Maria Connecting Start');
|
|
255
|
+
|
|
256
|
+
ctx.db_opening=true;
|
|
257
|
+
|
|
258
|
+
aop.functionHook(args, -1, function (obj, args) {
|
|
259
|
+
if (args[0] && step.error.isZero()) {
|
|
260
|
+
step.error = StatError.addError('Maria-'+args[0].code,
|
|
261
|
+
args[0].message, ctx.service_hash);
|
|
262
|
+
step.elapsed = ctx.getElapsedTime() - step.start_time;
|
|
263
|
+
}
|
|
264
|
+
TraceContextManager.resume(ctx._id);
|
|
265
|
+
});
|
|
266
|
+
ctx.profile.push(step);
|
|
267
|
+
}
|
|
268
|
+
,
|
|
269
|
+
function (obj, args, ret, lctx) {
|
|
270
|
+
if(lctx.context){
|
|
271
|
+
ctx.db_opening=false;
|
|
272
|
+
ctx.footprint('Maria Connecting Done');
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
var dbc_pool_hash=0;
|
|
280
|
+
aop.after(mod, ['createPool', 'createPoolCluster'], function (obj, args, ret) {
|
|
281
|
+
|
|
282
|
+
var dbc = 'maria://';
|
|
283
|
+
if(dbc_pool_hash==0){
|
|
284
|
+
if(args.length > 0) {
|
|
285
|
+
var info = args[0];
|
|
286
|
+
//Open [DatabaseName] connection 메세지 보여줄때 필요함.
|
|
287
|
+
dbc += info.user || '';
|
|
288
|
+
dbc += "@";
|
|
289
|
+
dbc += info.host || '';
|
|
290
|
+
dbc += '/';
|
|
291
|
+
dbc += info.database || '';
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
dbc_pool_hash = HashUtil.hashFromString(dbc);
|
|
295
|
+
DataTextAgent.DBC.add(dbc_pool_hash, dbc);
|
|
296
|
+
DataTextAgent.METHOD.add(dbc_pool_hash, dbc);
|
|
297
|
+
DataTextAgent.ERROR.add(dbc_pool_hash, dbc);
|
|
298
|
+
}
|
|
299
|
+
aop.both(ret, 'getConnection', function (obj, args, lctx) {
|
|
300
|
+
var ctx = TraceContextManager.getCurrentContext();
|
|
301
|
+
if(ctx == null) {return;}
|
|
302
|
+
|
|
303
|
+
var dbc_step = new DBCStep();
|
|
304
|
+
dbc_step.hash = dbc_pool_hash;
|
|
305
|
+
dbc_step.start_time = ctx.getElapsedTime();
|
|
306
|
+
|
|
307
|
+
aop.functionHook(args, -1, function (obj, args) {
|
|
308
|
+
dbc_step.elapsed = ctx.getElapsedTime() - dbc_step.start_time;
|
|
309
|
+
ctx.profile.push(dbc_step);
|
|
310
|
+
|
|
311
|
+
TraceContextManager.resume(ctx._id);
|
|
312
|
+
DataTextAgent.DBC.add(dbc_hash, dbc);
|
|
313
|
+
|
|
314
|
+
if(args[0] != null) { return; }
|
|
315
|
+
var conn = args[1];
|
|
316
|
+
if(conn.__query_hook__) { return; }
|
|
317
|
+
conn.__query_hook__ = true;
|
|
318
|
+
aop.before(conn, 'query', queryHook(dbc_pool_hash, self.agent));
|
|
319
|
+
aop.before(conn, 'execute', queryHook(dbc_pool_hash, self.agent));
|
|
320
|
+
aop.before(conn._protocol, '_delegateError', errorDelegate(ctx));
|
|
321
|
+
});
|
|
322
|
+
}, function (obj, args, ret, lctx) {
|
|
323
|
+
MeterSql.setConnection(1, 0, dbc);
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
var checkedSql = new IntKeyMap(2000).setMax(2000);
|
|
329
|
+
var nonLiteSql = new IntKeyMap(5000).setMax(5000);
|
|
330
|
+
var date = DateUtil.yyyymmdd();
|
|
331
|
+
|
|
332
|
+
function escapeLiteral(sql) {
|
|
333
|
+
if(sql == null) { sql = ''; }
|
|
334
|
+
|
|
335
|
+
if(date !== DateUtil.yyyymmdd()) {
|
|
336
|
+
checkedSql.clear();
|
|
337
|
+
nonLiteSql.clear();
|
|
338
|
+
date = DateUtil.yyyymmdd();
|
|
339
|
+
Logger.print('WHATAP-SQL-CLEAR', 'MariaObserver CLEAR OK!!!!!!!!!!!!!!!!', false);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
var sqlHash = HashUtil.hashFromString(sql);
|
|
343
|
+
var psql = nonLiteSql.get(sqlHash);
|
|
344
|
+
|
|
345
|
+
if(psql != null) {
|
|
346
|
+
return psql;
|
|
347
|
+
}
|
|
348
|
+
psql = checkedSql.get(sqlHash);
|
|
349
|
+
|
|
350
|
+
if(psql != null) {
|
|
351
|
+
return psql;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
var els = new EscapeLiteralSQL(sql);
|
|
355
|
+
els.process();
|
|
356
|
+
|
|
357
|
+
var hash = HashUtil.hashFromString(els.getParsedSql());
|
|
358
|
+
DataTextAgent.SQL.add(hash, els.getParsedSql());
|
|
359
|
+
|
|
360
|
+
if(hash === sqlHash) {
|
|
361
|
+
psql = new ParsedSql(els.sqlType, hash, null);
|
|
362
|
+
nonLiteSql.put(sqlHash, psql);
|
|
363
|
+
} else {
|
|
364
|
+
psql = new ParsedSql(els.sqlType, hash, els.getParameter());
|
|
365
|
+
checkedSql.put(sqlHash, psql);
|
|
366
|
+
}
|
|
367
|
+
return psql;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
exports.MariaObserver = MariaObserver;
|
|
@@ -0,0 +1,127 @@
|
|
|
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 Buffer = require('buffer').Buffer;
|
|
8
|
+
|
|
9
|
+
const CRC_TABLE = [ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
|
|
10
|
+
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
|
|
11
|
+
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
|
|
12
|
+
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
|
|
13
|
+
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
|
|
14
|
+
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
|
|
15
|
+
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
|
|
16
|
+
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
|
|
17
|
+
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
|
|
18
|
+
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
|
|
19
|
+
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
|
|
20
|
+
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
|
|
21
|
+
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
|
|
22
|
+
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
|
|
23
|
+
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
|
24
|
+
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
|
|
25
|
+
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
|
|
26
|
+
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
|
|
27
|
+
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
|
|
28
|
+
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
|
29
|
+
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
|
|
30
|
+
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
|
|
31
|
+
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
|
|
32
|
+
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
|
|
33
|
+
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
|
|
34
|
+
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
|
|
35
|
+
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
|
|
36
|
+
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
|
|
37
|
+
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
|
|
38
|
+
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
|
39
|
+
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
|
|
40
|
+
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d];
|
|
41
|
+
|
|
42
|
+
for(var i = 0 ; i < CRC_TABLE.length; i ++){
|
|
43
|
+
CRC_TABLE[i] = hexToInt( CRC_TABLE[i].toString(16) );
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function hexToInt(hex) {
|
|
47
|
+
if (hex.length % 2 != 0) {
|
|
48
|
+
hex = "0" + hex;
|
|
49
|
+
}
|
|
50
|
+
var num = parseInt(hex, 16);
|
|
51
|
+
var maxVal = Math.pow(2, hex.length / 2 * 8);
|
|
52
|
+
if (num > maxVal / 2 - 1) {
|
|
53
|
+
num = num - maxVal
|
|
54
|
+
}
|
|
55
|
+
return num;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
var getBytes = function (string) {
|
|
59
|
+
var utf8 = unescape(encodeURIComponent(string));
|
|
60
|
+
var arr = [];
|
|
61
|
+
|
|
62
|
+
for (var i = 0; i < utf8.length; i++) {
|
|
63
|
+
arr.push(utf8.charCodeAt(i));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return arr;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
var hashUtil2 = {
|
|
70
|
+
crc32 : function(str) {
|
|
71
|
+
var buf = Buffer.alloc(str.length);
|
|
72
|
+
buf.write(str, 'utf-8');
|
|
73
|
+
var crc = 0;
|
|
74
|
+
crc = crc ^ (-1);
|
|
75
|
+
for ( var n = 0; n < buf.length; n++) {
|
|
76
|
+
crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8);
|
|
77
|
+
}
|
|
78
|
+
return crc ^ (-1);
|
|
79
|
+
},
|
|
80
|
+
toStr: function(n,def){
|
|
81
|
+
if(n){
|
|
82
|
+
return n.toString();
|
|
83
|
+
}
|
|
84
|
+
return def? def:'';
|
|
85
|
+
},
|
|
86
|
+
hashFromString: function(str){
|
|
87
|
+
if(str){
|
|
88
|
+
return this.hash(Buffer.from(str));
|
|
89
|
+
}else{
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
hash: function(bytes /* bytes[] */){
|
|
94
|
+
var crc = 0xffffffff;
|
|
95
|
+
var var2 = getBytes(bytes);
|
|
96
|
+
var var3 = bytes.length;
|
|
97
|
+
|
|
98
|
+
for(var var4 = 0 ; var4 < var3; ++var4){
|
|
99
|
+
var b = var2[var4];
|
|
100
|
+
crc = crc >>> 8 ^ CRC_TABLE[(crc ^ b) & 0xff];
|
|
101
|
+
}
|
|
102
|
+
crc = crc ^ 0xffffffff;
|
|
103
|
+
return crc;
|
|
104
|
+
},
|
|
105
|
+
hash64: function(bytes /* bytes[] */){
|
|
106
|
+
var crc = 0xffffffffffffffff;
|
|
107
|
+
var var2 = getBytes(bytes);
|
|
108
|
+
var var3 = bytes.length;
|
|
109
|
+
|
|
110
|
+
for(var var4 = 0 ; var4 < var3; ++var4){
|
|
111
|
+
var b = var2[var4];
|
|
112
|
+
crc = crc >>> 8 ^ CRC_TABLE[(crc ^ b) & 0xff];
|
|
113
|
+
}
|
|
114
|
+
crc = crc ^ 0xffffffffffffffff;
|
|
115
|
+
return crc;
|
|
116
|
+
},
|
|
117
|
+
toInt: function(buf /* buf[] */){
|
|
118
|
+
var ch1 = buf[0] & 255;
|
|
119
|
+
var ch2 = buf[1] & 255;
|
|
120
|
+
var ch3 = buf[2] & 255;
|
|
121
|
+
var ch4 = buf[3] & 255;
|
|
122
|
+
return (ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
//console.log(hashUtil2.hash("feb15b32459051413cc959fddc8036b6240ebd3da77762593b4924393baa9239"));
|
|
126
|
+
//console.log(hashUtil2.hash64("feb15b32459051413cc959fddc8036b6240ebd3da77762593b4924393baa9239"));
|
|
127
|
+
module.exports = hashUtil2;
|
package/lib/util/kube-util.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var fs = require('fs');
|
|
2
|
-
var
|
|
2
|
+
var HashUtil2 = require('./hashutil2'),
|
|
3
3
|
Logger = require('./../logger')
|
|
4
4
|
;
|
|
5
5
|
|
|
@@ -18,13 +18,14 @@ var KubeUtil = {
|
|
|
18
18
|
var line = contents[i];
|
|
19
19
|
if(line){
|
|
20
20
|
this.container_id = line.substr(line.lastIndexOf('/')+1) || '';
|
|
21
|
-
this.container_id = this.container_id.replace(/^(docker-)+|(\\.scope)+$/ig, "");
|
|
21
|
+
this.container_id = this.container_id.replace(/^(docker-)+|(containerd-)+|(crio-)+|(\\.scope)+$/ig, "");
|
|
22
22
|
if(this.container_id.length > 5){
|
|
23
|
-
this.container_key =
|
|
23
|
+
this.container_key = HashUtil2.hash(this.container_id);
|
|
24
24
|
break;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
Logger.print('WHATAP-800' , 'id:' + this.container_id + ' // key:' + this.container_key , false)
|
|
28
29
|
}catch(e){
|
|
29
30
|
Logger.printError('WHATAP-800', 'KubeUtil(loadContainerId) ', e)
|
|
30
31
|
}
|
package/package.json
CHANGED