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.
Files changed (196) hide show
  1. package/agent/darwin/arm64/whatap_nodejs +0 -0
  2. package/agent/linux/amd64/whatap_nodejs +0 -0
  3. package/agent/linux/arm64/whatap_nodejs +0 -0
  4. package/build.txt +4 -0
  5. package/lib/conf/config-default.js +3 -10
  6. package/lib/conf/configure.js +349 -369
  7. package/lib/conf/license.js +1 -1
  8. package/lib/control/packagectr-helper.js +3 -34
  9. package/lib/core/agent.js +882 -176
  10. package/lib/core/interceptor.js +6 -6
  11. package/lib/core/shimmer.js +36 -82
  12. package/lib/counter/counter-manager.js +8 -79
  13. package/lib/counter/task/activetransaction.js +17 -68
  14. package/lib/io/data-inputx.js +3 -13
  15. package/lib/io/data-outputx.js +206 -268
  16. package/lib/logger.js +6 -6
  17. package/lib/net/security-master.js +20 -139
  18. package/lib/observers/apollo-server-observer.js +27 -33
  19. package/lib/observers/global-observer.js +80 -155
  20. package/lib/observers/http-observer.js +236 -666
  21. package/lib/observers/ioredis-observer.js +294 -0
  22. package/lib/observers/maria-observer.js +362 -204
  23. package/lib/observers/mongodb-observer.js +226 -169
  24. package/lib/observers/mongoose-observer.js +323 -518
  25. package/lib/observers/mssql-observer.js +418 -177
  26. package/lib/observers/mysql-observer.js +449 -342
  27. package/lib/observers/mysql2-observer.js +358 -396
  28. package/lib/observers/oracle-observer.js +384 -559
  29. package/lib/observers/pgsql-observer.js +489 -231
  30. package/lib/observers/prisma-observer.js +92 -303
  31. package/lib/observers/process-observer.js +35 -79
  32. package/lib/observers/redis-observer.js +331 -166
  33. package/lib/observers/socket.io-observer.js +187 -226
  34. package/lib/observers/websocket-observer.js +301 -175
  35. package/lib/pack/counter-pack.js +0 -3
  36. package/lib/pack/log-sink-pack.js +52 -14
  37. package/lib/pack/tagcount-pack.js +4 -4
  38. package/lib/{counter/task → system}/gc-action.js +74 -27
  39. package/lib/trace/trace-context-manager.js +25 -113
  40. package/lib/trace/trace-context.js +7 -21
  41. package/lib/trace/trace-httpc.js +11 -17
  42. package/lib/trace/trace-sql.js +21 -29
  43. package/lib/udp/async_sender.js +119 -0
  44. package/lib/udp/index.js +17 -0
  45. package/lib/udp/packet_enum.js +52 -0
  46. package/lib/udp/packet_queue.js +69 -0
  47. package/lib/udp/packet_type_enum.js +33 -0
  48. package/lib/udp/param_def.js +72 -0
  49. package/lib/udp/udp_session.js +336 -0
  50. package/lib/util/escape-literal-sql.js +5 -5
  51. package/lib/util/hashutil.js +18 -18
  52. package/lib/util/keygen.js +3 -0
  53. package/lib/util/linkedset.js +2 -1
  54. package/lib/util/nodeutil.js +1 -2
  55. package/lib/util/sql-util.js +178 -0
  56. package/lib/util/trace-helper.js +91 -0
  57. package/lib/util/transfer.js +58 -0
  58. package/lib/value/map-value.js +2 -3
  59. package/package.json +5 -10
  60. package/lib/conf/conf-sys-mon.js +0 -101
  61. package/lib/control/cmd-config.js +0 -24
  62. package/lib/control/control-handler.js +0 -367
  63. package/lib/core/request-agent.js +0 -27
  64. package/lib/counter/meter/meter-activex.js +0 -67
  65. package/lib/counter/meter/meter-httpc.js +0 -57
  66. package/lib/counter/meter/meter-resource.js +0 -9
  67. package/lib/counter/meter/meter-service.js +0 -168
  68. package/lib/counter/meter/meter-socket.io.js +0 -51
  69. package/lib/counter/meter/meter-sql.js +0 -71
  70. package/lib/counter/meter/meter-users.js +0 -58
  71. package/lib/counter/meter.js +0 -183
  72. package/lib/counter/task/agentinfo.js +0 -107
  73. package/lib/counter/task/gcstat.js +0 -34
  74. package/lib/counter/task/heapmem.js +0 -25
  75. package/lib/counter/task/httpc.js +0 -76
  76. package/lib/counter/task/metering-info.js +0 -125
  77. package/lib/counter/task/proc-cpu.js +0 -29
  78. package/lib/counter/task/realtimeuser.js +0 -31
  79. package/lib/counter/task/res/systemECSTask.js +0 -39
  80. package/lib/counter/task/res/systemKubeTask.js +0 -53
  81. package/lib/counter/task/res/util/awsEcsClientThread.js +0 -218
  82. package/lib/counter/task/res/util/linuxProcStatUtil.js +0 -14
  83. package/lib/counter/task/res-sys-cpu.js +0 -62
  84. package/lib/counter/task/service.js +0 -202
  85. package/lib/counter/task/socketio.js +0 -30
  86. package/lib/counter/task/sql.js +0 -105
  87. package/lib/counter/task/systemperf.js +0 -43
  88. package/lib/data/datapack-sender.js +0 -289
  89. package/lib/data/dataprofile-agent.js +0 -162
  90. package/lib/data/datatext-agent.js +0 -135
  91. package/lib/data/event-level.js +0 -15
  92. package/lib/data/test.js +0 -49
  93. package/lib/data/zipprofile.js +0 -197
  94. package/lib/env/constants.js +0 -21
  95. package/lib/error/error-handler.js +0 -437
  96. package/lib/kube/kube-client.js +0 -144
  97. package/lib/lang/text-types.js +0 -58
  98. package/lib/logsink/line-log-util.js +0 -87
  99. package/lib/logsink/line-log.js +0 -12
  100. package/lib/logsink/log-sender.js +0 -78
  101. package/lib/logsink/log-tracer.js +0 -40
  102. package/lib/logsink/sender-util.js +0 -56
  103. package/lib/logsink/zip/zip-send.js +0 -177
  104. package/lib/net/netflag.js +0 -55
  105. package/lib/net/receiver.js +0 -66
  106. package/lib/net/sender.js +0 -141
  107. package/lib/net/tcp-return.js +0 -18
  108. package/lib/net/tcp-session.js +0 -286
  109. package/lib/net/tcpreq-client-proxy.js +0 -70
  110. package/lib/net/tcprequest-mgr.js +0 -58
  111. package/lib/observers/cluster-observer.js +0 -22
  112. package/lib/observers/express-observer.js +0 -215
  113. package/lib/observers/file-observer.js +0 -184
  114. package/lib/observers/grpc-observer.js +0 -336
  115. package/lib/observers/memcached-observer.js +0 -56
  116. package/lib/observers/mongo-observer.js +0 -317
  117. package/lib/observers/net-observer.js +0 -77
  118. package/lib/observers/promise-observer.js +0 -31
  119. package/lib/observers/schedule-observer.js +0 -67
  120. package/lib/observers/stream-observer.js +0 -19
  121. package/lib/observers/thrift-observer.js +0 -197
  122. package/lib/pack/activestack-pack.js +0 -55
  123. package/lib/pack/apenum.js +0 -8
  124. package/lib/pack/errorsnap-pack.js +0 -69
  125. package/lib/pack/event-pack.js +0 -54
  126. package/lib/pack/hitmap-pack.js +0 -63
  127. package/lib/pack/hitmap-pack1.js +0 -152
  128. package/lib/pack/netstat.js +0 -15
  129. package/lib/pack/otype.js +0 -7
  130. package/lib/pack/profile-pack.js +0 -49
  131. package/lib/pack/realtimeuser-pack.js +0 -41
  132. package/lib/pack/stat-general-pack.js +0 -96
  133. package/lib/pack/staterror-pack.js +0 -120
  134. package/lib/pack/stathttpc-pack.js +0 -66
  135. package/lib/pack/stathttpc-rec.js +0 -78
  136. package/lib/pack/statremote-pack.js +0 -46
  137. package/lib/pack/statservice-pack.js +0 -63
  138. package/lib/pack/statservice-pack1.js +0 -88
  139. package/lib/pack/statservice-rec.js +0 -292
  140. package/lib/pack/statservice-rec_dep.js +0 -151
  141. package/lib/pack/statsql-pack.js +0 -69
  142. package/lib/pack/statsql-rec.js +0 -100
  143. package/lib/pack/statuseragent-pack.js +0 -44
  144. package/lib/pack/tagctr.js +0 -15
  145. package/lib/pack/text-pack.js +0 -50
  146. package/lib/pack/time-count.js +0 -25
  147. package/lib/pack/websocket.js +0 -15
  148. package/lib/pack/zip-pack.js +0 -70
  149. package/lib/pii/pii-item.js +0 -31
  150. package/lib/pii/pii-mask.js +0 -174
  151. package/lib/plugin/plugin-loadermanager.js +0 -57
  152. package/lib/plugin/plugin.js +0 -75
  153. package/lib/service/tx-record.js +0 -332
  154. package/lib/stat/stat-error.js +0 -116
  155. package/lib/stat/stat-httpc.js +0 -98
  156. package/lib/stat/stat-remote-ip.js +0 -46
  157. package/lib/stat/stat-remote-ipurl.js +0 -88
  158. package/lib/stat/stat-sql.js +0 -113
  159. package/lib/stat/stat-tranx.js +0 -58
  160. package/lib/stat/stat-tx-caller.js +0 -160
  161. package/lib/stat/stat-tx-domain.js +0 -111
  162. package/lib/stat/stat-tx-referer.js +0 -112
  163. package/lib/stat/stat-useragent.js +0 -48
  164. package/lib/stat/timingsender.js +0 -76
  165. package/lib/step/activestack-step.js +0 -38
  166. package/lib/step/dbc-step.js +0 -36
  167. package/lib/step/http-stepx.js +0 -67
  168. package/lib/step/message-step.js +0 -40
  169. package/lib/step/method-stepx.js +0 -45
  170. package/lib/step/resultset-step.js +0 -40
  171. package/lib/step/securemsg-step.js +0 -44
  172. package/lib/step/socket-step.js +0 -46
  173. package/lib/step/sql-stepx.js +0 -68
  174. package/lib/step/sqlxtype.js +0 -16
  175. package/lib/step/step.js +0 -66
  176. package/lib/step/stepenum.js +0 -54
  177. package/lib/topology/link.js +0 -63
  178. package/lib/topology/nodeinfo.js +0 -123
  179. package/lib/topology/status-detector.js +0 -111
  180. package/lib/util/anylist.js +0 -103
  181. package/lib/util/cardinality/hyperloglog.js +0 -106
  182. package/lib/util/cardinality/murmurhash.js +0 -31
  183. package/lib/util/cardinality/registerset.js +0 -75
  184. package/lib/util/errordata.js +0 -21
  185. package/lib/util/iputil_x.js +0 -527
  186. package/lib/util/kube-util.js +0 -73
  187. package/lib/util/paramsecurity.js +0 -80
  188. package/lib/util/pre-process.js +0 -13
  189. package/lib/util/process-seq.js +0 -166
  190. package/lib/util/property-util.js +0 -36
  191. package/lib/util/request-queue.js +0 -70
  192. package/lib/util/requestdouble-queue.js +0 -72
  193. package/lib/util/resourceprofile.js +0 -157
  194. package/lib/util/stop-watch.js +0 -30
  195. package/lib/util/system-util.js +0 -10
  196. 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
- };
@@ -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;
@@ -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;