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