whatap 0.5.26 → 1.0.0
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/agent/darwin/arm64/whatap_nodejs +0 -0
- package/agent/linux/amd64/whatap_nodejs +0 -0
- package/agent/linux/arm64/whatap_nodejs +0 -0
- package/build.txt +4 -0
- package/lib/conf/config-default.js +3 -10
- package/lib/conf/configure.js +349 -369
- package/lib/conf/license.js +1 -1
- package/lib/control/packagectr-helper.js +3 -34
- package/lib/core/agent.js +882 -176
- package/lib/core/interceptor.js +6 -6
- package/lib/core/shimmer.js +36 -82
- package/lib/counter/counter-manager.js +8 -79
- package/lib/counter/task/activetransaction.js +17 -68
- package/lib/io/data-inputx.js +3 -13
- package/lib/io/data-outputx.js +206 -268
- package/lib/logger.js +6 -6
- package/lib/net/security-master.js +20 -139
- package/lib/observers/apollo-server-observer.js +27 -33
- package/lib/observers/global-observer.js +80 -155
- package/lib/observers/http-observer.js +236 -666
- package/lib/observers/ioredis-observer.js +294 -0
- package/lib/observers/maria-observer.js +362 -204
- package/lib/observers/mongodb-observer.js +226 -169
- package/lib/observers/mongoose-observer.js +323 -518
- package/lib/observers/mssql-observer.js +418 -177
- package/lib/observers/mysql-observer.js +449 -342
- package/lib/observers/mysql2-observer.js +358 -396
- package/lib/observers/oracle-observer.js +384 -559
- package/lib/observers/pgsql-observer.js +489 -231
- package/lib/observers/prisma-observer.js +92 -303
- package/lib/observers/process-observer.js +35 -79
- package/lib/observers/redis-observer.js +331 -166
- package/lib/observers/socket.io-observer.js +187 -226
- package/lib/observers/websocket-observer.js +301 -175
- package/lib/pack/counter-pack.js +0 -3
- package/lib/pack/log-sink-pack.js +52 -14
- package/lib/pack/tagcount-pack.js +4 -4
- package/lib/{counter/task → system}/gc-action.js +74 -27
- package/lib/trace/trace-context-manager.js +25 -113
- package/lib/trace/trace-context.js +7 -21
- package/lib/trace/trace-httpc.js +11 -17
- package/lib/trace/trace-sql.js +21 -29
- package/lib/udp/async_sender.js +119 -0
- package/lib/udp/index.js +17 -0
- package/lib/udp/packet_enum.js +52 -0
- package/lib/udp/packet_queue.js +69 -0
- package/lib/udp/packet_type_enum.js +33 -0
- package/lib/udp/param_def.js +72 -0
- package/lib/udp/udp_session.js +336 -0
- package/lib/util/escape-literal-sql.js +5 -5
- package/lib/util/hashutil.js +18 -18
- package/lib/util/keygen.js +3 -0
- package/lib/util/linkedset.js +2 -1
- package/lib/util/nodeutil.js +1 -2
- package/lib/util/sql-util.js +178 -0
- package/lib/util/trace-helper.js +91 -0
- package/lib/util/transfer.js +58 -0
- package/lib/value/map-value.js +2 -3
- package/package.json +5 -10
- package/lib/conf/conf-sys-mon.js +0 -101
- package/lib/control/cmd-config.js +0 -24
- package/lib/control/control-handler.js +0 -367
- package/lib/core/request-agent.js +0 -27
- package/lib/counter/meter/meter-activex.js +0 -67
- package/lib/counter/meter/meter-httpc.js +0 -57
- package/lib/counter/meter/meter-resource.js +0 -9
- package/lib/counter/meter/meter-service.js +0 -168
- package/lib/counter/meter/meter-socket.io.js +0 -51
- package/lib/counter/meter/meter-sql.js +0 -71
- package/lib/counter/meter/meter-users.js +0 -58
- package/lib/counter/meter.js +0 -183
- package/lib/counter/task/agentinfo.js +0 -107
- package/lib/counter/task/gcstat.js +0 -34
- package/lib/counter/task/heapmem.js +0 -25
- package/lib/counter/task/httpc.js +0 -76
- package/lib/counter/task/metering-info.js +0 -125
- package/lib/counter/task/proc-cpu.js +0 -29
- package/lib/counter/task/realtimeuser.js +0 -31
- package/lib/counter/task/res/systemECSTask.js +0 -39
- package/lib/counter/task/res/systemKubeTask.js +0 -53
- package/lib/counter/task/res/util/awsEcsClientThread.js +0 -218
- package/lib/counter/task/res/util/linuxProcStatUtil.js +0 -14
- package/lib/counter/task/res-sys-cpu.js +0 -62
- package/lib/counter/task/service.js +0 -202
- package/lib/counter/task/socketio.js +0 -30
- package/lib/counter/task/sql.js +0 -105
- package/lib/counter/task/systemperf.js +0 -43
- package/lib/data/datapack-sender.js +0 -289
- package/lib/data/dataprofile-agent.js +0 -162
- package/lib/data/datatext-agent.js +0 -135
- package/lib/data/event-level.js +0 -15
- package/lib/data/test.js +0 -49
- package/lib/data/zipprofile.js +0 -197
- package/lib/env/constants.js +0 -21
- package/lib/error/error-handler.js +0 -437
- package/lib/kube/kube-client.js +0 -144
- package/lib/lang/text-types.js +0 -58
- package/lib/logsink/line-log-util.js +0 -87
- package/lib/logsink/line-log.js +0 -12
- package/lib/logsink/log-sender.js +0 -78
- package/lib/logsink/log-tracer.js +0 -40
- package/lib/logsink/sender-util.js +0 -56
- package/lib/logsink/zip/zip-send.js +0 -177
- package/lib/net/netflag.js +0 -55
- package/lib/net/receiver.js +0 -66
- package/lib/net/sender.js +0 -141
- package/lib/net/tcp-return.js +0 -18
- package/lib/net/tcp-session.js +0 -286
- package/lib/net/tcpreq-client-proxy.js +0 -70
- package/lib/net/tcprequest-mgr.js +0 -58
- package/lib/observers/cluster-observer.js +0 -22
- package/lib/observers/express-observer.js +0 -215
- package/lib/observers/file-observer.js +0 -184
- package/lib/observers/grpc-observer.js +0 -336
- package/lib/observers/memcached-observer.js +0 -56
- package/lib/observers/mongo-observer.js +0 -317
- package/lib/observers/net-observer.js +0 -77
- package/lib/observers/promise-observer.js +0 -31
- package/lib/observers/schedule-observer.js +0 -67
- package/lib/observers/stream-observer.js +0 -19
- package/lib/observers/thrift-observer.js +0 -197
- package/lib/pack/activestack-pack.js +0 -55
- package/lib/pack/apenum.js +0 -8
- package/lib/pack/errorsnap-pack.js +0 -69
- package/lib/pack/event-pack.js +0 -54
- package/lib/pack/hitmap-pack.js +0 -63
- package/lib/pack/hitmap-pack1.js +0 -152
- package/lib/pack/netstat.js +0 -15
- package/lib/pack/otype.js +0 -7
- package/lib/pack/profile-pack.js +0 -49
- package/lib/pack/realtimeuser-pack.js +0 -41
- package/lib/pack/stat-general-pack.js +0 -96
- package/lib/pack/staterror-pack.js +0 -120
- package/lib/pack/stathttpc-pack.js +0 -66
- package/lib/pack/stathttpc-rec.js +0 -78
- package/lib/pack/statremote-pack.js +0 -46
- package/lib/pack/statservice-pack.js +0 -63
- package/lib/pack/statservice-pack1.js +0 -88
- package/lib/pack/statservice-rec.js +0 -292
- package/lib/pack/statservice-rec_dep.js +0 -151
- package/lib/pack/statsql-pack.js +0 -69
- package/lib/pack/statsql-rec.js +0 -100
- package/lib/pack/statuseragent-pack.js +0 -44
- package/lib/pack/tagctr.js +0 -15
- package/lib/pack/text-pack.js +0 -50
- package/lib/pack/time-count.js +0 -25
- package/lib/pack/websocket.js +0 -15
- package/lib/pack/zip-pack.js +0 -70
- package/lib/pii/pii-item.js +0 -31
- package/lib/pii/pii-mask.js +0 -174
- package/lib/plugin/plugin-loadermanager.js +0 -57
- package/lib/plugin/plugin.js +0 -75
- package/lib/service/tx-record.js +0 -332
- package/lib/stat/stat-error.js +0 -116
- package/lib/stat/stat-httpc.js +0 -98
- package/lib/stat/stat-remote-ip.js +0 -46
- package/lib/stat/stat-remote-ipurl.js +0 -88
- package/lib/stat/stat-sql.js +0 -113
- package/lib/stat/stat-tranx.js +0 -58
- package/lib/stat/stat-tx-caller.js +0 -160
- package/lib/stat/stat-tx-domain.js +0 -111
- package/lib/stat/stat-tx-referer.js +0 -112
- package/lib/stat/stat-useragent.js +0 -48
- package/lib/stat/timingsender.js +0 -76
- package/lib/step/activestack-step.js +0 -38
- package/lib/step/dbc-step.js +0 -36
- package/lib/step/http-stepx.js +0 -67
- package/lib/step/message-step.js +0 -40
- package/lib/step/method-stepx.js +0 -45
- package/lib/step/resultset-step.js +0 -40
- package/lib/step/securemsg-step.js +0 -44
- package/lib/step/socket-step.js +0 -46
- package/lib/step/sql-stepx.js +0 -68
- package/lib/step/sqlxtype.js +0 -16
- package/lib/step/step.js +0 -66
- package/lib/step/stepenum.js +0 -54
- package/lib/topology/link.js +0 -63
- package/lib/topology/nodeinfo.js +0 -123
- package/lib/topology/status-detector.js +0 -111
- package/lib/util/anylist.js +0 -103
- package/lib/util/cardinality/hyperloglog.js +0 -106
- package/lib/util/cardinality/murmurhash.js +0 -31
- package/lib/util/cardinality/registerset.js +0 -75
- package/lib/util/errordata.js +0 -21
- package/lib/util/iputil_x.js +0 -527
- package/lib/util/kube-util.js +0 -73
- package/lib/util/paramsecurity.js +0 -80
- package/lib/util/pre-process.js +0 -13
- package/lib/util/process-seq.js +0 -166
- package/lib/util/property-util.js +0 -36
- package/lib/util/request-queue.js +0 -70
- package/lib/util/requestdouble-queue.js +0 -72
- package/lib/util/resourceprofile.js +0 -157
- package/lib/util/stop-watch.js +0 -30
- package/lib/util/system-util.js +0 -10
- package/lib/util/userid-util.js +0 -57
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 메시지/알림 오류 처리
|
|
3
|
-
* @param {Object} ctx - Trace Context
|
|
4
|
-
* @param {Object} step - Message Step
|
|
5
|
-
* @param {Error} error - 오류 객체
|
|
6
|
-
*/
|
|
7
|
-
function handleMessageError(ctx, step, error) {
|
|
8
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
9
|
-
prefix: 'msg-',
|
|
10
|
-
textType: TextTypes.MESSAGE,
|
|
11
|
-
defaultMessage: 'Message processing error',
|
|
12
|
-
includeStack: false,
|
|
13
|
-
logPrefix: 'MESSAGE-ERROR'
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* 오류 정보를 Context에만 설정 (StatError 생성 없이)
|
|
19
|
-
* @param {Object} ctx - Trace Context
|
|
20
|
-
* @param {Error} error - 오류 객체
|
|
21
|
-
* @param {string} prefix - 오류 접두사
|
|
22
|
-
*/
|
|
23
|
-
function setContextErrorOnly(ctx, error, prefix = '') {
|
|
24
|
-
if (!ctx || !error) return;
|
|
25
|
-
|
|
26
|
-
try {
|
|
27
|
-
// 오류 클래스 정보 설정
|
|
28
|
-
ctx.error_class = error.name || (error.constructor && error.constructor.name) || 'UnknownError';
|
|
29
|
-
|
|
30
|
-
// 오류 메시지 설정
|
|
31
|
-
ctx.error_message = error.message || error.stack || 'Unknown error';
|
|
32
|
-
|
|
33
|
-
// 상태 코드 설정 (있는 경우)
|
|
34
|
-
if (error.status || error.statusCode || error.code) {
|
|
35
|
-
ctx.statusCode = error.status || error.statusCode || error.code;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
} catch (e) {
|
|
39
|
-
Logger.printError(
|
|
40
|
-
'WHATAP-CONTEXT-ERROR',
|
|
41
|
-
'Error setting context error info',
|
|
42
|
-
e,
|
|
43
|
-
false
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
}/**
|
|
47
|
-
* Step 타입에 따라 TextType 자동 추론
|
|
48
|
-
* @param {Object} step - Step 객체
|
|
49
|
-
* @returns {number} - TextTypes 상수
|
|
50
|
-
*/
|
|
51
|
-
function inferTextTypeFromStep(step) {
|
|
52
|
-
if (!step) return TextTypes.MESSAGE;
|
|
53
|
-
|
|
54
|
-
// Step 클래스명 또는 타입으로 판단
|
|
55
|
-
const stepName = step.constructor?.name || '';
|
|
56
|
-
|
|
57
|
-
if (stepName.includes('Http') || step.url !== undefined) {
|
|
58
|
-
return TextTypes.HTTPC_URL;
|
|
59
|
-
}
|
|
60
|
-
if (stepName.includes('Socket') || stepName.includes('Websocket')) {
|
|
61
|
-
return TextTypes.MESSAGE;
|
|
62
|
-
}
|
|
63
|
-
if (stepName.includes('Message') || step.desc !== undefined) {
|
|
64
|
-
return TextTypes.MESSAGE;
|
|
65
|
-
}
|
|
66
|
-
if (stepName.includes('Sql') || step.hash !== undefined) {
|
|
67
|
-
return TextTypes.SQL;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// 기본값
|
|
71
|
-
return TextTypes.MESSAGE;
|
|
72
|
-
}/**
|
|
73
|
-
* 공통 오류 처리 유틸리티
|
|
74
|
-
* 모든 Observer에서 사용할 수 있는 통합 오류 처리 함수들
|
|
75
|
-
*/
|
|
76
|
-
|
|
77
|
-
const StatError = require('../stat/stat-error');
|
|
78
|
-
const TextTypes = require('../lang/text-types');
|
|
79
|
-
const Logger = require('../logger');
|
|
80
|
-
const conf = require('../conf/configure');
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* 공통 오류 정보 설정 함수 (범용)
|
|
84
|
-
* @param {Object} ctx - Trace Context
|
|
85
|
-
* @param {Object} step - Step 객체 (SQL, HTTP, Message 등)
|
|
86
|
-
* @param {Error} error - 오류 객체
|
|
87
|
-
* @param {Object} options - 추가 옵션
|
|
88
|
-
* @param {string} options.prefix - 오류 코드 접두사 (예: 'mysql-', 'httpc-', 'redis-')
|
|
89
|
-
* @param {number} options.textType - TextTypes 상수 (기본값: null, step 타입에 따라 자동 결정)
|
|
90
|
-
* @param {boolean} options.includeStack - 스택 트레이스 포함 여부 (기본값: true)
|
|
91
|
-
* @param {string} options.defaultMessage - 기본 오류 메시지
|
|
92
|
-
* @param {boolean} options.setStatError - StatError 생성 여부 (기본값: true)
|
|
93
|
-
* @param {string} options.logPrefix - 로그 접두사 (기본값: 'COMMON-ERROR')
|
|
94
|
-
*/
|
|
95
|
-
function setCommonErrorInfo(ctx, step, error, options = {}) {
|
|
96
|
-
if (!ctx || !error) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const {
|
|
101
|
-
prefix = '',
|
|
102
|
-
textType = null,
|
|
103
|
-
includeStack = true,
|
|
104
|
-
defaultMessage = 'Error',
|
|
105
|
-
setStatError = true,
|
|
106
|
-
logPrefix = 'COMMON-ERROR'
|
|
107
|
-
} = options;
|
|
108
|
-
|
|
109
|
-
try {
|
|
110
|
-
// 오류 클래스 정보 설정
|
|
111
|
-
const errorClass = error.name || (error.constructor && error.constructor.name) || 'UnknownError';
|
|
112
|
-
ctx.error_class = errorClass;
|
|
113
|
-
|
|
114
|
-
// 오류 코드 생성
|
|
115
|
-
const errorCode = error.code || error.errno || error.errorNum || 'UNKNOWN';
|
|
116
|
-
const fullErrorCode = prefix ? `${prefix}${errorCode}` : errorCode;
|
|
117
|
-
|
|
118
|
-
// 오류 메시지 설정
|
|
119
|
-
const errorMessage = error.message || error.sqlMessage || defaultMessage;
|
|
120
|
-
|
|
121
|
-
// 스택 트레이스 처리
|
|
122
|
-
if (includeStack && conf.trace_sql_error_stack && conf.trace_sql_error_depth && error.stack) {
|
|
123
|
-
const traceDepth = conf.trace_sql_error_depth;
|
|
124
|
-
const errorStack = error.stack.split("\n");
|
|
125
|
-
|
|
126
|
-
if (errorStack.length > traceDepth) {
|
|
127
|
-
ctx.error_message = errorStack.slice(0, traceDepth + 1).join("\n");
|
|
128
|
-
} else {
|
|
129
|
-
ctx.error_message = error.stack;
|
|
130
|
-
}
|
|
131
|
-
} else {
|
|
132
|
-
ctx.error_message = errorMessage;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// StatError 생성 (step이 있고 설정이 활성화된 경우)
|
|
136
|
-
if (step && setStatError) {
|
|
137
|
-
const shouldAddError = shouldIgnoreError(errorCode, errorMessage);
|
|
138
|
-
|
|
139
|
-
if (shouldAddError) {
|
|
140
|
-
// textType이 null이면 step 타입에 따라 자동 결정
|
|
141
|
-
const finalTextType = textType || inferTextTypeFromStep(step);
|
|
142
|
-
|
|
143
|
-
step.error = StatError.addError(
|
|
144
|
-
fullErrorCode,
|
|
145
|
-
errorMessage,
|
|
146
|
-
ctx.service_hash,
|
|
147
|
-
finalTextType,
|
|
148
|
-
step.hash || step.url || null
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
// Context 오류가 아직 설정되지 않았다면 설정
|
|
152
|
-
if (ctx.error && ctx.error.isZero && ctx.error.isZero()) {
|
|
153
|
-
ctx.error = step.error;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
Logger.printError(
|
|
159
|
-
`WHATAP-${logPrefix.toUpperCase()}`,
|
|
160
|
-
`${prefix || 'SYSTEM'} Error: ${fullErrorCode} - ${errorMessage}`,
|
|
161
|
-
error,
|
|
162
|
-
false
|
|
163
|
-
);
|
|
164
|
-
|
|
165
|
-
} catch (e) {
|
|
166
|
-
Logger.printError(
|
|
167
|
-
'WHATAP-ERROR-HANDLER',
|
|
168
|
-
'Error in common error handler',
|
|
169
|
-
e,
|
|
170
|
-
false
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* 오류 무시 여부 확인
|
|
177
|
-
* @param {string} errorCode - 오류 코드
|
|
178
|
-
* @param {string} errorMessage - 오류 메시지
|
|
179
|
-
* @returns {boolean} - 오류를 처리할지 여부
|
|
180
|
-
*/
|
|
181
|
-
function shouldIgnoreError(errorCode, errorMessage) {
|
|
182
|
-
try {
|
|
183
|
-
// 오류 클래스 무시 설정 확인
|
|
184
|
-
if (conf._is_trace_ignore_err_cls_contains === true &&
|
|
185
|
-
conf.trace_ignore_err_cls_contains &&
|
|
186
|
-
errorCode &&
|
|
187
|
-
errorCode.indexOf(conf.trace_ignore_err_cls_contains) >= 0) {
|
|
188
|
-
return false;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// 오류 메시지 무시 설정 확인
|
|
192
|
-
if (conf._is_trace_ignore_err_msg_contains === true &&
|
|
193
|
-
conf.trace_ignore_err_msg_contains &&
|
|
194
|
-
errorMessage &&
|
|
195
|
-
errorMessage.indexOf(conf.trace_ignore_err_msg_contains) >= 0) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// 기본적으로 오류 처리
|
|
200
|
-
return true;
|
|
201
|
-
} catch (e) {
|
|
202
|
-
Logger.printError(
|
|
203
|
-
'WHATAP-ERROR-IGNORE-CHECK',
|
|
204
|
-
'Error checking ignore conditions',
|
|
205
|
-
e,
|
|
206
|
-
false
|
|
207
|
-
);
|
|
208
|
-
return true;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* MySQL 전용 오류 처리
|
|
214
|
-
* @param {Object} ctx - Trace Context
|
|
215
|
-
* @param {Object} step - SQL Step
|
|
216
|
-
* @param {Error} error - MySQL 오류 객체
|
|
217
|
-
*/
|
|
218
|
-
function handleMysqlError(ctx, step, error) {
|
|
219
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
220
|
-
prefix: 'mysql-',
|
|
221
|
-
textType: TextTypes.SQL,
|
|
222
|
-
defaultMessage: 'mysql error'
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* PostgreSQL 전용 오류 처리
|
|
228
|
-
* @param {Object} ctx - Trace Context
|
|
229
|
-
* @param {Object} step - SQL Step
|
|
230
|
-
* @param {Error} error - PostgreSQL 오류 객체
|
|
231
|
-
*/
|
|
232
|
-
function handlePgsqlError(ctx, step, error) {
|
|
233
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
234
|
-
prefix: 'pgsql-',
|
|
235
|
-
textType: TextTypes.SQL,
|
|
236
|
-
defaultMessage: 'postgresql error'
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Oracle 전용 오류 처리
|
|
242
|
-
* @param {Object} ctx - Trace Context
|
|
243
|
-
* @param {Object} step - SQL Step
|
|
244
|
-
* @param {Error} error - Oracle 오류 객체
|
|
245
|
-
*/
|
|
246
|
-
function handleOracleError(ctx, step, error) {
|
|
247
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
248
|
-
prefix: 'oracle-',
|
|
249
|
-
textType: TextTypes.SQL,
|
|
250
|
-
defaultMessage: 'Oracle error'
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* MongoDB 전용 오류 처리
|
|
256
|
-
* @param {Object} ctx - Trace Context
|
|
257
|
-
* @param {Object} step - SQL Step
|
|
258
|
-
* @param {Error} error - MongoDB 오류 객체
|
|
259
|
-
*/
|
|
260
|
-
function handleMongoError(ctx, step, error) {
|
|
261
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
262
|
-
prefix: 'mongodb-',
|
|
263
|
-
textType: TextTypes.SQL,
|
|
264
|
-
defaultMessage: 'MongoDB error'
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Redis 전용 오류 처리
|
|
270
|
-
* @param {Object} ctx - Trace Context
|
|
271
|
-
* @param {Object} step - SQL Step
|
|
272
|
-
* @param {Error} error - Redis 오류 객체
|
|
273
|
-
*/
|
|
274
|
-
function handleRedisError(ctx, step, error) {
|
|
275
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
276
|
-
prefix: 'redis-',
|
|
277
|
-
textType: TextTypes.SQL,
|
|
278
|
-
defaultMessage: 'Redis error'
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* HTTP 클라이언트 오류 처리
|
|
284
|
-
* @param {Object} ctx - Trace Context
|
|
285
|
-
* @param {Object} step - HTTP Step
|
|
286
|
-
* @param {Error} error - HTTP 오류 객체
|
|
287
|
-
*/
|
|
288
|
-
function handleHttpcError(ctx, step, error) {
|
|
289
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
290
|
-
prefix: 'httpc-',
|
|
291
|
-
textType: TextTypes.HTTPC_URL,
|
|
292
|
-
defaultMessage: 'HTTP client error',
|
|
293
|
-
includeStack: false,
|
|
294
|
-
logPrefix: 'HTTPC-ERROR'
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* 일반적인 시스템 오류 처리
|
|
300
|
-
* @param {Object} ctx - Trace Context
|
|
301
|
-
* @param {Object} step - Step 객체 (선택사항)
|
|
302
|
-
* @param {Error} error - 오류 객체
|
|
303
|
-
* @param {string} prefix - 오류 접두사
|
|
304
|
-
*/
|
|
305
|
-
function handleSystemError(ctx, step, error, prefix = 'system') {
|
|
306
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
307
|
-
prefix: `${prefix}-`,
|
|
308
|
-
textType: null, // 자동 추론
|
|
309
|
-
defaultMessage: 'System error',
|
|
310
|
-
includeStack: true,
|
|
311
|
-
logPrefix: 'SYSTEM-ERROR'
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/**
|
|
316
|
-
* gRPC 전용 오류 처리
|
|
317
|
-
* @param {Object} ctx - Trace Context
|
|
318
|
-
* @param {Object} step - gRPC Step (MessageStep)
|
|
319
|
-
* @param {Error} error - gRPC 오류 객체
|
|
320
|
-
*/
|
|
321
|
-
function handleGrpcError(ctx, step, error) {
|
|
322
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
323
|
-
prefix: 'grpc-',
|
|
324
|
-
textType: TextTypes.MESSAGE,
|
|
325
|
-
defaultMessage: 'gRPC error',
|
|
326
|
-
includeStack: true,
|
|
327
|
-
logPrefix: 'GRPC-ERROR'
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* WebSocket 전용 오류 처리
|
|
333
|
-
* @param {Object} ctx - Trace Context
|
|
334
|
-
* @param {Object} step - WebSocket Step (SocketStep)
|
|
335
|
-
* @param {Error} error - WebSocket 오류 객체
|
|
336
|
-
*/
|
|
337
|
-
function handleWebsocketError(ctx, step, error) {
|
|
338
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
339
|
-
prefix: 'websocket-',
|
|
340
|
-
textType: TextTypes.MESSAGE,
|
|
341
|
-
defaultMessage: 'WebSocket error',
|
|
342
|
-
includeStack: false,
|
|
343
|
-
logPrefix: 'WEBSOCKET-ERROR'
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
/**
|
|
348
|
-
* Socket.IO 전용 오류 처리
|
|
349
|
-
* @param {Object} ctx - Trace Context
|
|
350
|
-
* @param {Object} step - Socket.IO Step (SocketStep)
|
|
351
|
-
* @param {Error} error - Socket.IO 오류 객체
|
|
352
|
-
*/
|
|
353
|
-
function handleSocketIOError(ctx, step, error) {
|
|
354
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
355
|
-
prefix: 'socketio-',
|
|
356
|
-
textType: TextTypes.MESSAGE,
|
|
357
|
-
defaultMessage: 'Socket.IO error',
|
|
358
|
-
includeStack: false,
|
|
359
|
-
logPrefix: 'SOCKETIO-ERROR'
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Global Fetch API 오류 처리
|
|
365
|
-
* @param {Object} ctx - Trace Context
|
|
366
|
-
* @param {Object} step - HTTP Step (HttpStepX)
|
|
367
|
-
* @param {Error|Response} error - Fetch 오류 객체 또는 Response 객체
|
|
368
|
-
*/
|
|
369
|
-
function handleFetchError(ctx, step, error) {
|
|
370
|
-
// Response 객체인 경우와 Error 객체인 경우 구분
|
|
371
|
-
const isResponse = error && typeof error.status === 'number';
|
|
372
|
-
|
|
373
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
374
|
-
prefix: 'fetch-',
|
|
375
|
-
textType: TextTypes.HTTPC_URL,
|
|
376
|
-
defaultMessage: isResponse ? 'Fetch HTTP error' : 'Fetch network error',
|
|
377
|
-
includeStack: !isResponse, // Response 객체는 스택 없음
|
|
378
|
-
logPrefix: 'FETCH-ERROR'
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/**
|
|
383
|
-
* Process 관련 오류 처리 (stdout/stderr)
|
|
384
|
-
* @param {Object} ctx - Trace Context
|
|
385
|
-
* @param {Object} step - Process Step
|
|
386
|
-
* @param {Error} error - Process 오류 객체
|
|
387
|
-
*/
|
|
388
|
-
function handleProcessError(ctx, step, error) {
|
|
389
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
390
|
-
prefix: 'process-',
|
|
391
|
-
textType: TextTypes.MESSAGE,
|
|
392
|
-
defaultMessage: 'Process error',
|
|
393
|
-
includeStack: true,
|
|
394
|
-
logPrefix: 'PROCESS-ERROR'
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
399
|
-
* Prisma 전용 오류 처리
|
|
400
|
-
* @param {Object} ctx - Trace Context
|
|
401
|
-
* @param {Object} step - SQL Step
|
|
402
|
-
* @param {Error} error - Prisma 오류 객체
|
|
403
|
-
*/
|
|
404
|
-
function handlePrismaError(ctx, step, error) {
|
|
405
|
-
setCommonErrorInfo(ctx, step, error, {
|
|
406
|
-
prefix: 'prisma-',
|
|
407
|
-
textType: TextTypes.SQL,
|
|
408
|
-
defaultMessage: 'Prisma error'
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
module.exports = {
|
|
413
|
-
setCommonErrorInfo,
|
|
414
|
-
shouldIgnoreError,
|
|
415
|
-
inferTextTypeFromStep,
|
|
416
|
-
setContextErrorOnly,
|
|
417
|
-
|
|
418
|
-
// 데이터베이스 관련
|
|
419
|
-
handleMysqlError,
|
|
420
|
-
handlePgsqlError,
|
|
421
|
-
handleOracleError,
|
|
422
|
-
handleMongoError,
|
|
423
|
-
handleRedisError,
|
|
424
|
-
handlePrismaError,
|
|
425
|
-
|
|
426
|
-
// 네트워크/통신 관련
|
|
427
|
-
handleHttpcError,
|
|
428
|
-
handleFetchError,
|
|
429
|
-
handleGrpcError,
|
|
430
|
-
handleWebsocketError,
|
|
431
|
-
handleSocketIOError,
|
|
432
|
-
|
|
433
|
-
// 시스템 관련
|
|
434
|
-
handleSystemError,
|
|
435
|
-
handleProcessError,
|
|
436
|
-
handleMessageError
|
|
437
|
-
};
|
package/lib/kube/kube-client.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
var net = require('net'),
|
|
2
|
-
conf = require('../conf/configure'),
|
|
3
|
-
MapValue = require('../value/map-value'),
|
|
4
|
-
KubeUtil = require('../util/kube-util'),
|
|
5
|
-
StopWatch = require('../util/stop-watch'),
|
|
6
|
-
DataOutputX = require('../io/data-outputx'),
|
|
7
|
-
DataInputX = require('../io/data-inputx'),
|
|
8
|
-
IPUtil = require('../util/iputil'),
|
|
9
|
-
TcpRequestClientProxy = require('./../net/tcpreq-client-proxy'),
|
|
10
|
-
Logger = require('../logger'),
|
|
11
|
-
SecurityMaster = require('./../net/security-master');
|
|
12
|
-
|
|
13
|
-
const SLEEP_TIME = 15000;
|
|
14
|
-
|
|
15
|
-
var KubeClient = {
|
|
16
|
-
intervalId: undefined,
|
|
17
|
-
run: function(){
|
|
18
|
-
var self = this;
|
|
19
|
-
if(this.intervalId){
|
|
20
|
-
clearInterval(this.intervalId); this.intervalId = undefined;
|
|
21
|
-
}
|
|
22
|
-
this.intervalId = setInterval(function(){
|
|
23
|
-
self.process(conf.pod_name);
|
|
24
|
-
},SLEEP_TIME);
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
process: function(podName){
|
|
28
|
-
var self = this;
|
|
29
|
-
var p = new MapValue();
|
|
30
|
-
|
|
31
|
-
var localAddr = (IPUtil.getIp());
|
|
32
|
-
|
|
33
|
-
SecurityMaster.IP = IPUtil.stringToInt(localAddr);
|
|
34
|
-
|
|
35
|
-
p.putString("cmd", "regist");
|
|
36
|
-
p.putLong("pcode", SecurityMaster.PCODE);
|
|
37
|
-
p.putLong("oid", SecurityMaster.OID);
|
|
38
|
-
p.putString("oname", SecurityMaster.ONAME);
|
|
39
|
-
|
|
40
|
-
p.putString("ip", IPUtil.intToString(SecurityMaster.IP));
|
|
41
|
-
p.putString("hostname", require('os').hostname());
|
|
42
|
-
p.putBoolean("kube.micro", true);
|
|
43
|
-
|
|
44
|
-
if (podName != null) {
|
|
45
|
-
p.putString("pod_name", podName);
|
|
46
|
-
}
|
|
47
|
-
if (conf.OKIND != 0) {
|
|
48
|
-
p.putLong("okind", conf.OKIND);
|
|
49
|
-
p.putString("okind_name", conf.OKIND_NAME);
|
|
50
|
-
}
|
|
51
|
-
if (conf.ONODE != 0) {
|
|
52
|
-
p.putLong("onode", conf.ONODE);
|
|
53
|
-
p.putString("onode_name", conf.ONODE_NAME);
|
|
54
|
-
}
|
|
55
|
-
if (KubeUtil.container_id != null) {
|
|
56
|
-
p.putString("container_id", KubeUtil.container_id);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
this.sendToMaster(p, function(){
|
|
60
|
-
self.sendToNode(p);
|
|
61
|
-
});
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
sendToNode: function(p){
|
|
65
|
-
var self = this;
|
|
66
|
-
|
|
67
|
-
try{
|
|
68
|
-
var client = new TcpRequestClientProxy("Node " + self.node_agent_ip+ ":"+self.node_agent_port);
|
|
69
|
-
client.open( self.node_agent_ip , self.node_agent_port, function(err, data){
|
|
70
|
-
client.send(new DataOutputX().writeValue(p));
|
|
71
|
-
}, function(err, data){
|
|
72
|
-
if(err || !data){
|
|
73
|
-
return console.log("#### errordata" , err, data);
|
|
74
|
-
}
|
|
75
|
-
var m = new DataInputX(data).readValue();
|
|
76
|
-
|
|
77
|
-
self.cpu = m.getFloat("cpu");
|
|
78
|
-
self.cpu_sys = m.getFloat("cpu_sys");
|
|
79
|
-
self.cpu_user = m.getFloat("cpu_user");
|
|
80
|
-
self.throttled_periods = m.getFloat("throttled_periods");
|
|
81
|
-
self.throttled_time = m.getFloat("throttled_time");
|
|
82
|
-
|
|
83
|
-
self.memory = m.getLong("memory");
|
|
84
|
-
self.failcnt = m.getLong("failcnt");
|
|
85
|
-
self.limit = m.getLong("limit");
|
|
86
|
-
self.maxUsage = m.getLong("maxUsage");
|
|
87
|
-
|
|
88
|
-
self.node_recv_time = Date.now();
|
|
89
|
-
self.metering = m.getFloat("metering");
|
|
90
|
-
});
|
|
91
|
-
}catch(e){
|
|
92
|
-
return Logger.printError("WHATAP-128", 'Failed to connect to kubernetes Node!')
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
|
|
96
|
-
sendToMaster: function(p, cb){
|
|
97
|
-
var self = this;
|
|
98
|
-
if (conf.master_agent_host == null) {
|
|
99
|
-
return Logger.printError("WHATAP-129", 'master_agent_host=null', e)
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
var connectOptions = {
|
|
103
|
-
host:
|
|
104
|
-
conf.master_agent_host
|
|
105
|
-
// 'localhost'
|
|
106
|
-
, port: conf.master_agent_port, agent: false
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
try{
|
|
110
|
-
self.auto_oname_reset = conf.auto_oname_reset;
|
|
111
|
-
|
|
112
|
-
var client = new TcpRequestClientProxy("Master " + connectOptions.host+ ":"+connectOptions.port);
|
|
113
|
-
client.open( connectOptions.host , connectOptions.port, function(err, data){
|
|
114
|
-
client.send(new DataOutputX().writeValue(p));
|
|
115
|
-
}, function(err, data){
|
|
116
|
-
if(data === undefined){
|
|
117
|
-
return Logger.printError('WHATAP-802', 'Are You Sure Kubernetes Container ??? (current whatap_micro_enabled=true)', new Error('No Master Whatap'), true);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
var m = new DataInputX(data).readValue();
|
|
121
|
-
self.node_agent_ip = m.getText("node.agent.ip");
|
|
122
|
-
self.node_agent_port = m.getInt("node.agent.port");
|
|
123
|
-
if(cb) cb();
|
|
124
|
-
} );
|
|
125
|
-
}catch(e){
|
|
126
|
-
return Logger.printError("WHATAP-128", 'Failed to connect to kubernetes Master!', e)
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
|
|
130
|
-
recvNodeAddr: function(m){
|
|
131
|
-
var host = m['node.agent.ip'];
|
|
132
|
-
var port = m['node.agent.port'];
|
|
133
|
-
|
|
134
|
-
if(!host){
|
|
135
|
-
this.node_agent_host = host;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if(!port && port !== 0){
|
|
139
|
-
this.node_agent_port = port;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
module.exports = KubeClient;
|
package/lib/lang/text-types.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
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
|
-
exports.SERVICE = 1;
|
|
8
|
-
exports.SQL = 2;
|
|
9
|
-
exports.DB_URL = 3;
|
|
10
|
-
exports.HTTPC_URL = 4;
|
|
11
|
-
exports.ERROR = 5;
|
|
12
|
-
exports.METHOD = 6;
|
|
13
|
-
exports.STACK_ELEMENTS = 7;
|
|
14
|
-
exports.REFERER = 8;
|
|
15
|
-
exports.USER_AGENT = 9;
|
|
16
|
-
exports.HTTPC_HOST = 10;
|
|
17
|
-
exports.MESSAGE = 11;
|
|
18
|
-
exports.CRUD = 12;
|
|
19
|
-
exports.ONAME = 13;
|
|
20
|
-
exports.COMMAND = 14;
|
|
21
|
-
exports.USER_AGENT_OS = 15;
|
|
22
|
-
exports.USER_AGENT_BROWSER = 16;
|
|
23
|
-
exports.CITY = 17;
|
|
24
|
-
exports.LOGIN = 18;
|
|
25
|
-
exports.SQLPARAM = 19;
|
|
26
|
-
exports.HTTP_DOMAIN = 20;
|
|
27
|
-
|
|
28
|
-
exports.SYS_DEVICE_ID = 21;
|
|
29
|
-
exports.SYS_MOUNT_POINT = 22;
|
|
30
|
-
exports.SYS_FILE_SYSTEM = 23;
|
|
31
|
-
exports.SYS_NET_DESC = 24;
|
|
32
|
-
exports.SYS_PROC_CMD1 = 26;
|
|
33
|
-
exports.SYS_PROC_CMD2 = 27;
|
|
34
|
-
exports.SYS_PROC_USER = 28;
|
|
35
|
-
exports.SYS_PROC_STATE = 29;
|
|
36
|
-
exports.SYS_PROC_FILENAME = 30;
|
|
37
|
-
exports.SM_LOG_FILE = 31;
|
|
38
|
-
exports.EXT_META = 32;
|
|
39
|
-
|
|
40
|
-
exports.DB_COUNTER_NAME = 41;
|
|
41
|
-
exports.DB_COUNTER_UNIT = 42;
|
|
42
|
-
|
|
43
|
-
exports.CW_AGENT_IP = 51;
|
|
44
|
-
exports.CW_MXID = 52;
|
|
45
|
-
|
|
46
|
-
exports.MTRACE_SPEC = 53;
|
|
47
|
-
|
|
48
|
-
exports.MTRACE_CALLER_URL = 54;
|
|
49
|
-
exports.OKIND_NAME = 57;
|
|
50
|
-
exports.KUBE_COUNT_NAME = 59;
|
|
51
|
-
|
|
52
|
-
exports.CONTAINER_ID= 60;
|
|
53
|
-
exports.PODNAME= 61;
|
|
54
|
-
exports.CONTAINER_IMAGE =62;
|
|
55
|
-
exports.ONODE_NAME = 63;
|
|
56
|
-
exports.CONTAINER_COMMAND=64;
|
|
57
|
-
exports.REPLICASETNAME = 65;
|
|
58
|
-
exports.NAMESPACE = 66;
|