@devskin/agent 1.0.0 → 1.0.1

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 (46) hide show
  1. package/README.md +5 -0
  2. package/dist/agent.d.ts +1 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +24 -1
  5. package/dist/agent.js.map +1 -1
  6. package/dist/api-client.d.ts +2 -1
  7. package/dist/api-client.d.ts.map +1 -1
  8. package/dist/api-client.js +10 -5
  9. package/dist/api-client.js.map +1 -1
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +5 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/instrumentation/elasticsearch.d.ts +3 -0
  15. package/dist/instrumentation/elasticsearch.d.ts.map +1 -0
  16. package/dist/instrumentation/elasticsearch.js +77 -0
  17. package/dist/instrumentation/elasticsearch.js.map +1 -0
  18. package/dist/instrumentation/mongodb.d.ts +3 -0
  19. package/dist/instrumentation/mongodb.d.ts.map +1 -0
  20. package/dist/instrumentation/mongodb.js +121 -0
  21. package/dist/instrumentation/mongodb.js.map +1 -0
  22. package/dist/instrumentation/mysql.d.ts +3 -0
  23. package/dist/instrumentation/mysql.d.ts.map +1 -0
  24. package/dist/instrumentation/mysql.js +223 -0
  25. package/dist/instrumentation/mysql.js.map +1 -0
  26. package/dist/instrumentation/postgres.d.ts +3 -0
  27. package/dist/instrumentation/postgres.d.ts.map +1 -0
  28. package/dist/instrumentation/postgres.js +148 -0
  29. package/dist/instrumentation/postgres.js.map +1 -0
  30. package/dist/instrumentation/redis.d.ts +3 -0
  31. package/dist/instrumentation/redis.d.ts.map +1 -0
  32. package/dist/instrumentation/redis.js +118 -0
  33. package/dist/instrumentation/redis.js.map +1 -0
  34. package/dist/types.d.ts +2 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/types.js.map +1 -1
  37. package/package.json +1 -1
  38. package/src/agent.ts +34 -0
  39. package/src/api-client.ts +13 -5
  40. package/src/index.ts +3 -0
  41. package/src/instrumentation/elasticsearch.ts +98 -0
  42. package/src/instrumentation/mongodb.ts +150 -0
  43. package/src/instrumentation/mysql.ts +294 -0
  44. package/src/instrumentation/postgres.ts +182 -0
  45. package/src/instrumentation/redis.ts +166 -0
  46. package/src/types.ts +6 -0
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instrumentMysql = instrumentMysql;
4
+ const span_1 = require("../span");
5
+ const types_1 = require("../types");
6
+ function instrumentMysql(agent) {
7
+ try {
8
+ let mysql2;
9
+ try {
10
+ mysql2 = require('mysql2');
11
+ }
12
+ catch {
13
+ }
14
+ if (mysql2) {
15
+ instrumentMysql2(agent, mysql2);
16
+ }
17
+ let mysql;
18
+ try {
19
+ mysql = require('mysql');
20
+ }
21
+ catch {
22
+ }
23
+ if (mysql) {
24
+ instrumentMysqlLegacy(agent, mysql);
25
+ }
26
+ }
27
+ catch (error) {
28
+ if (agent.getConfig().debug) {
29
+ console.error('[DevSkin Agent] Failed to instrument MySQL:', error.message);
30
+ }
31
+ }
32
+ }
33
+ function instrumentMysql2(agent, mysql2) {
34
+ const config = agent.getConfig();
35
+ const originalQuery = mysql2.Connection.prototype.query;
36
+ mysql2.Connection.prototype.query = function (sql, values, callback) {
37
+ if (!agent.shouldSample()) {
38
+ return originalQuery.call(this, sql, values, callback);
39
+ }
40
+ let actualSql = sql;
41
+ let actualValues = values;
42
+ let actualCallback = callback;
43
+ if (typeof sql === 'object') {
44
+ actualSql = sql.sql;
45
+ actualValues = sql.values;
46
+ }
47
+ if (typeof values === 'function') {
48
+ actualCallback = values;
49
+ actualValues = undefined;
50
+ }
51
+ const connectionConfig = this.config;
52
+ const dbName = connectionConfig?.database || 'unknown';
53
+ const host = connectionConfig?.host || 'localhost';
54
+ const port = connectionConfig?.port || 3306;
55
+ const user = connectionConfig?.user;
56
+ const span = new span_1.SpanBuilder(`mysql.query`, types_1.SpanKind.CLIENT, config.serviceName, config.serviceVersion, config.environment, agent);
57
+ const queryType = extractQueryType(actualSql);
58
+ span.setAttributes({
59
+ 'db.system': 'mysql',
60
+ 'db.name': dbName,
61
+ 'db.statement': normalizeQuery(actualSql),
62
+ 'db.operation': queryType,
63
+ 'db.user': user,
64
+ 'net.peer.name': host,
65
+ 'net.peer.port': port,
66
+ 'db.connection_string': `mysql://${host}:${port}/${dbName}`,
67
+ });
68
+ span.setAttribute('span.kind', 'client');
69
+ const startTime = Date.now();
70
+ const wrappedCallback = (err, results, fields) => {
71
+ const duration = Date.now() - startTime;
72
+ if (err) {
73
+ span.setStatus(types_1.SpanStatus.ERROR, err.message);
74
+ span.setAttribute('error', true);
75
+ span.setAttribute('error.message', err.message);
76
+ span.setAttribute('error.type', err.code || 'Error');
77
+ }
78
+ else {
79
+ span.setStatus(types_1.SpanStatus.OK);
80
+ if (results) {
81
+ if (Array.isArray(results)) {
82
+ span.setAttribute('db.rows_affected', results.length);
83
+ }
84
+ else if (results.affectedRows !== undefined) {
85
+ span.setAttribute('db.rows_affected', results.affectedRows);
86
+ }
87
+ }
88
+ }
89
+ span.end();
90
+ if (actualCallback) {
91
+ actualCallback(err, results, fields);
92
+ }
93
+ };
94
+ if (actualCallback) {
95
+ return originalQuery.call(this, actualSql, actualValues, wrappedCallback);
96
+ }
97
+ else {
98
+ const query = originalQuery.call(this, actualSql, actualValues);
99
+ return query
100
+ .then((results) => {
101
+ const duration = Date.now() - startTime;
102
+ span.setStatus(types_1.SpanStatus.OK);
103
+ if (results && results[0]) {
104
+ if (Array.isArray(results[0])) {
105
+ span.setAttribute('db.rows_affected', results[0].length);
106
+ }
107
+ else if (results[0].affectedRows !== undefined) {
108
+ span.setAttribute('db.rows_affected', results[0].affectedRows);
109
+ }
110
+ }
111
+ span.end();
112
+ return results;
113
+ })
114
+ .catch((err) => {
115
+ const duration = Date.now() - startTime;
116
+ span.setStatus(types_1.SpanStatus.ERROR, err.message);
117
+ span.setAttribute('error', true);
118
+ span.setAttribute('error.message', err.message);
119
+ span.setAttribute('error.type', err.code || 'Error');
120
+ span.end();
121
+ throw err;
122
+ });
123
+ }
124
+ };
125
+ if (config.debug) {
126
+ console.log('[DevSkin Agent] MySQL2 instrumentation enabled');
127
+ }
128
+ }
129
+ function instrumentMysqlLegacy(agent, mysql) {
130
+ const config = agent.getConfig();
131
+ const originalQuery = mysql.Connection.prototype.query;
132
+ mysql.Connection.prototype.query = function (sql, values, callback) {
133
+ if (!agent.shouldSample()) {
134
+ return originalQuery.call(this, sql, values, callback);
135
+ }
136
+ let actualSql = sql;
137
+ let actualValues = values;
138
+ let actualCallback = callback;
139
+ if (typeof sql === 'object') {
140
+ actualSql = sql.sql;
141
+ actualValues = sql.values;
142
+ }
143
+ if (typeof values === 'function') {
144
+ actualCallback = values;
145
+ actualValues = undefined;
146
+ }
147
+ const connectionConfig = this.config;
148
+ const dbName = connectionConfig?.database || 'unknown';
149
+ const host = connectionConfig?.host || 'localhost';
150
+ const port = connectionConfig?.port || 3306;
151
+ const user = connectionConfig?.user;
152
+ const span = new span_1.SpanBuilder(`mysql.query`, types_1.SpanKind.CLIENT, config.serviceName, config.serviceVersion, config.environment, agent);
153
+ const queryType = extractQueryType(actualSql);
154
+ span.setAttributes({
155
+ 'db.system': 'mysql',
156
+ 'db.name': dbName,
157
+ 'db.statement': normalizeQuery(actualSql),
158
+ 'db.operation': queryType,
159
+ 'db.user': user,
160
+ 'net.peer.name': host,
161
+ 'net.peer.port': port,
162
+ 'db.connection_string': `mysql://${host}:${port}/${dbName}`,
163
+ });
164
+ span.setAttribute('span.kind', 'client');
165
+ const startTime = Date.now();
166
+ const wrappedCallback = (err, results, fields) => {
167
+ if (err) {
168
+ span.setStatus(types_1.SpanStatus.ERROR, err.message);
169
+ span.setAttribute('error', true);
170
+ span.setAttribute('error.message', err.message);
171
+ }
172
+ else {
173
+ span.setStatus(types_1.SpanStatus.OK);
174
+ if (results) {
175
+ if (Array.isArray(results)) {
176
+ span.setAttribute('db.rows_affected', results.length);
177
+ }
178
+ else if (results.affectedRows !== undefined) {
179
+ span.setAttribute('db.rows_affected', results.affectedRows);
180
+ }
181
+ }
182
+ }
183
+ span.end();
184
+ if (actualCallback) {
185
+ actualCallback(err, results, fields);
186
+ }
187
+ };
188
+ return originalQuery.call(this, actualSql, actualValues, wrappedCallback);
189
+ };
190
+ if (config.debug) {
191
+ console.log('[DevSkin Agent] MySQL (legacy) instrumentation enabled');
192
+ }
193
+ }
194
+ function extractQueryType(sql) {
195
+ if (typeof sql !== 'string')
196
+ return 'unknown';
197
+ const normalized = sql.trim().toUpperCase();
198
+ if (normalized.startsWith('SELECT'))
199
+ return 'SELECT';
200
+ if (normalized.startsWith('INSERT'))
201
+ return 'INSERT';
202
+ if (normalized.startsWith('UPDATE'))
203
+ return 'UPDATE';
204
+ if (normalized.startsWith('DELETE'))
205
+ return 'DELETE';
206
+ if (normalized.startsWith('CREATE'))
207
+ return 'CREATE';
208
+ if (normalized.startsWith('DROP'))
209
+ return 'DROP';
210
+ if (normalized.startsWith('ALTER'))
211
+ return 'ALTER';
212
+ if (normalized.startsWith('TRUNCATE'))
213
+ return 'TRUNCATE';
214
+ return 'unknown';
215
+ }
216
+ function normalizeQuery(sql) {
217
+ if (typeof sql !== 'string')
218
+ return String(sql);
219
+ let normalized = sql.substring(0, 10000);
220
+ normalized = normalized.replace(/\s+/g, ' ').trim();
221
+ return normalized;
222
+ }
223
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/instrumentation/mysql.ts"],"names":[],"mappings":";;AAOA,0CA8BC;AApCD,kCAAsC;AACtC,oCAAgD;AAKhD,SAAgB,eAAe,CAAC,KAAY;IAC1C,IAAI,CAAC;QAEH,IAAI,MAAW,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QAGD,IAAI,KAAU,CAAC;QACf,IAAI,CAAC;YACH,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;AACH,CAAC;AAKD,SAAS,gBAAgB,CAAC,KAAY,EAAE,MAAW;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAGjC,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;IACxD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAQ,EAAE,MAAW,EAAE,QAAa;QAChF,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;YAC1B,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC;QAGD,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,IAAI,cAAc,GAAG,QAAQ,CAAC;QAE9B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,CAAC;QAED,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,cAAc,GAAG,MAAM,CAAC;YACxB,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;QAGD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,MAAM,MAAM,GAAG,gBAAgB,EAAE,QAAQ,IAAI,SAAS,CAAC;QACvD,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,WAAW,CAAC;QACnD,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC;QAGpC,MAAM,IAAI,GAAG,IAAI,kBAAW,CAC1B,aAAa,EACb,gBAAQ,CAAC,MAAM,EACf,MAAM,CAAC,WAAY,EACnB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,WAAW,EAClB,KAAK,CACN,CAAC;QAGF,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAG9C,IAAI,CAAC,aAAa,CAAC;YACjB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,cAAc,CAAC,SAAS,CAAC;YACzC,cAAc,EAAE,SAAS;YACzB,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,IAAI;YACrB,sBAAsB,EAAE,WAAW,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE;SAC5D,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAG7B,MAAM,eAAe,GAAG,CAAC,GAAQ,EAAE,OAAY,EAAE,MAAW,EAAE,EAAE;YAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,SAAS,CAAC,kBAAU,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,CAAC,kBAAU,CAAC,EAAE,CAAC,CAAC;gBAE9B,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBACxD,CAAC;yBAAM,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;wBAC9C,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;YAEX,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;QAGF,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YAEN,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAGhE,OAAO,KAAK;iBACT,IAAI,CAAC,CAAC,OAAY,EAAE,EAAE;gBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,kBAAU,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9B,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC3D,CAAC;yBAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;wBACjD,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;gBAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,kBAAU,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,MAAM,GAAG,CAAC;YACZ,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAKD,SAAS,qBAAqB,CAAC,KAAY,EAAE,KAAU;IACrD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAGjC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;IACvD,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAQ,EAAE,MAAW,EAAE,QAAa;QAC/E,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;YAC1B,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,IAAI,cAAc,GAAG,QAAQ,CAAC;QAE9B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,CAAC;QAED,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,cAAc,GAAG,MAAM,CAAC;YACxB,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,MAAM,MAAM,GAAG,gBAAgB,EAAE,QAAQ,IAAI,SAAS,CAAC;QACvD,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,WAAW,CAAC;QACnD,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC;QAEpC,MAAM,IAAI,GAAG,IAAI,kBAAW,CAC1B,aAAa,EACb,gBAAQ,CAAC,MAAM,EACf,MAAM,CAAC,WAAY,EACnB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,WAAW,EAClB,KAAK,CACN,CAAC;QAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC;YACjB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,cAAc,CAAC,SAAS,CAAC;YACzC,cAAc,EAAE,SAAS;YACzB,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,IAAI;YACrB,sBAAsB,EAAE,WAAW,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE;SAC5D,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,eAAe,GAAG,CAAC,GAAQ,EAAE,OAAY,EAAE,MAAW,EAAE,EAAE;YAC9D,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,SAAS,CAAC,kBAAU,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,CAAC,kBAAU,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBACxD,CAAC;yBAAM,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;wBAC9C,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,CAAC;YAEX,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAKD,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE9C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE5C,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACjD,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAEzD,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IAGhD,IAAI,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAGzC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Agent } from '../agent';
2
+ export declare function instrumentPostgres(agent: Agent): void;
3
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/instrumentation/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAOjC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAwIrD"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instrumentPostgres = instrumentPostgres;
4
+ const span_1 = require("../span");
5
+ const types_1 = require("../types");
6
+ function instrumentPostgres(agent) {
7
+ try {
8
+ let pg;
9
+ try {
10
+ pg = require('pg');
11
+ }
12
+ catch {
13
+ return;
14
+ }
15
+ const agentConfig = agent.getConfig();
16
+ const originalQuery = pg.Client.prototype.query;
17
+ pg.Client.prototype.query = function (queryConfig, values, callback) {
18
+ if (!agent.shouldSample()) {
19
+ return originalQuery.call(this, queryConfig, values, callback);
20
+ }
21
+ let actualSql;
22
+ let actualValues;
23
+ let actualCallback;
24
+ if (typeof queryConfig === 'string') {
25
+ actualSql = queryConfig;
26
+ actualValues = values;
27
+ actualCallback = callback;
28
+ }
29
+ else if (typeof queryConfig === 'object') {
30
+ actualSql = queryConfig.text || queryConfig.query;
31
+ actualValues = queryConfig.values;
32
+ actualCallback = values;
33
+ }
34
+ else {
35
+ return originalQuery.call(this, queryConfig, values, callback);
36
+ }
37
+ if (typeof actualValues === 'function') {
38
+ actualCallback = actualValues;
39
+ actualValues = undefined;
40
+ }
41
+ const connectionParams = this.connectionParameters;
42
+ const dbName = connectionParams?.database || 'unknown';
43
+ const host = connectionParams?.host || 'localhost';
44
+ const port = connectionParams?.port || 5432;
45
+ const user = connectionParams?.user;
46
+ const span = new span_1.SpanBuilder(`pg.query`, types_1.SpanKind.CLIENT, agentConfig.serviceName, agentConfig.serviceVersion, agentConfig.environment, agent);
47
+ const queryType = extractQueryType(actualSql);
48
+ span.setAttributes({
49
+ 'db.system': 'postgresql',
50
+ 'db.name': dbName,
51
+ 'db.statement': normalizeQuery(actualSql),
52
+ 'db.operation': queryType,
53
+ 'db.user': user,
54
+ 'net.peer.name': host,
55
+ 'net.peer.port': port,
56
+ 'db.connection_string': `postgresql://${host}:${port}/${dbName}`,
57
+ });
58
+ span.setAttribute('span.kind', 'client');
59
+ const startTime = Date.now();
60
+ if (actualCallback) {
61
+ const wrappedCallback = (err, result) => {
62
+ if (err) {
63
+ span.setStatus(types_1.SpanStatus.ERROR, err.message);
64
+ span.setAttribute('error', true);
65
+ span.setAttribute('error.message', err.message);
66
+ span.setAttribute('error.type', err.code || 'Error');
67
+ }
68
+ else {
69
+ span.setStatus(types_1.SpanStatus.OK);
70
+ if (result && result.rowCount !== undefined) {
71
+ span.setAttribute('db.rows_affected', result.rowCount);
72
+ }
73
+ }
74
+ span.end();
75
+ actualCallback(err, result);
76
+ };
77
+ const newQueryConfig = typeof queryConfig === 'object'
78
+ ? { ...queryConfig, callback: wrappedCallback }
79
+ : { text: actualSql, values: actualValues, callback: wrappedCallback };
80
+ return originalQuery.call(this, newQueryConfig);
81
+ }
82
+ else {
83
+ const queryPromise = originalQuery.call(this, queryConfig, values);
84
+ return queryPromise
85
+ .then((result) => {
86
+ span.setStatus(types_1.SpanStatus.OK);
87
+ if (result && result.rowCount !== undefined) {
88
+ span.setAttribute('db.rows_affected', result.rowCount);
89
+ }
90
+ span.end();
91
+ return result;
92
+ })
93
+ .catch((err) => {
94
+ span.setStatus(types_1.SpanStatus.ERROR, err.message);
95
+ span.setAttribute('error', true);
96
+ span.setAttribute('error.message', err.message);
97
+ span.setAttribute('error.type', err.code || 'Error');
98
+ span.end();
99
+ throw err;
100
+ });
101
+ }
102
+ };
103
+ if (agentConfig.debug) {
104
+ console.log('[DevSkin Agent] PostgreSQL instrumentation enabled');
105
+ }
106
+ }
107
+ catch (error) {
108
+ if (agent.getConfig().debug) {
109
+ console.error('[DevSkin Agent] Failed to instrument PostgreSQL:', error.message);
110
+ }
111
+ }
112
+ }
113
+ function extractQueryType(sql) {
114
+ if (typeof sql !== 'string')
115
+ return 'unknown';
116
+ const normalized = sql.trim().toUpperCase();
117
+ if (normalized.startsWith('SELECT'))
118
+ return 'SELECT';
119
+ if (normalized.startsWith('INSERT'))
120
+ return 'INSERT';
121
+ if (normalized.startsWith('UPDATE'))
122
+ return 'UPDATE';
123
+ if (normalized.startsWith('DELETE'))
124
+ return 'DELETE';
125
+ if (normalized.startsWith('CREATE'))
126
+ return 'CREATE';
127
+ if (normalized.startsWith('DROP'))
128
+ return 'DROP';
129
+ if (normalized.startsWith('ALTER'))
130
+ return 'ALTER';
131
+ if (normalized.startsWith('TRUNCATE'))
132
+ return 'TRUNCATE';
133
+ if (normalized.startsWith('BEGIN'))
134
+ return 'BEGIN';
135
+ if (normalized.startsWith('COMMIT'))
136
+ return 'COMMIT';
137
+ if (normalized.startsWith('ROLLBACK'))
138
+ return 'ROLLBACK';
139
+ return 'unknown';
140
+ }
141
+ function normalizeQuery(sql) {
142
+ if (typeof sql !== 'string')
143
+ return String(sql);
144
+ let normalized = sql.substring(0, 10000);
145
+ normalized = normalized.replace(/\s+/g, ' ').trim();
146
+ return normalized;
147
+ }
148
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/instrumentation/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Agent } from '../agent';
2
+ export declare function instrumentRedis(agent: Agent): void;
3
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/instrumentation/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAOjC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAoBlD"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instrumentRedis = instrumentRedis;
4
+ const span_1 = require("../span");
5
+ const types_1 = require("../types");
6
+ function instrumentRedis(agent) {
7
+ try {
8
+ let ioredis;
9
+ try {
10
+ ioredis = require('ioredis');
11
+ instrumentIORedis(agent, ioredis);
12
+ }
13
+ catch { }
14
+ let redis;
15
+ try {
16
+ redis = require('redis');
17
+ instrumentNodeRedis(agent, redis);
18
+ }
19
+ catch { }
20
+ }
21
+ catch (error) {
22
+ if (agent.getConfig().debug) {
23
+ console.error('[DevSkin Agent] Failed to instrument Redis:', error.message);
24
+ }
25
+ }
26
+ }
27
+ function instrumentIORedis(agent, ioredis) {
28
+ const config = agent.getConfig();
29
+ const originalSendCommand = ioredis.prototype.sendCommand;
30
+ ioredis.prototype.sendCommand = function (command, ...args) {
31
+ if (!agent.shouldSample()) {
32
+ return originalSendCommand.call(this, command, ...args);
33
+ }
34
+ const commandName = command?.name || 'unknown';
35
+ const commandArgs = command?.args || [];
36
+ const host = this.options?.host || 'localhost';
37
+ const port = this.options?.port || 6379;
38
+ const db = this.options?.db || 0;
39
+ const span = new span_1.SpanBuilder(`redis.${commandName}`, types_1.SpanKind.CLIENT, config.serviceName, config.serviceVersion, config.environment, agent);
40
+ span.setAttributes({
41
+ 'db.system': 'redis',
42
+ 'db.name': `${db}`,
43
+ 'db.operation': commandName.toUpperCase(),
44
+ 'db.statement': `${commandName} ${commandArgs.slice(0, 3).join(' ')}`.substring(0, 500),
45
+ 'net.peer.name': host,
46
+ 'net.peer.port': port,
47
+ 'db.connection_string': `redis://${host}:${port}/${db}`,
48
+ });
49
+ span.setAttribute('span.kind', 'client');
50
+ const result = originalSendCommand.call(this, command, ...args);
51
+ if (result && typeof result.then === 'function') {
52
+ return result
53
+ .then((res) => {
54
+ span.setStatus(types_1.SpanStatus.OK);
55
+ span.end();
56
+ return res;
57
+ })
58
+ .catch((err) => {
59
+ span.setStatus(types_1.SpanStatus.ERROR, err.message);
60
+ span.setAttribute('error', true);
61
+ span.setAttribute('error.message', err.message);
62
+ span.end();
63
+ throw err;
64
+ });
65
+ }
66
+ span.end();
67
+ return result;
68
+ };
69
+ if (config.debug) {
70
+ console.log('[DevSkin Agent] IORedis instrumentation enabled');
71
+ }
72
+ }
73
+ function instrumentNodeRedis(agent, redis) {
74
+ const config = agent.getConfig();
75
+ if (redis.createClient) {
76
+ const originalCreateClient = redis.createClient;
77
+ redis.createClient = function (...args) {
78
+ const client = originalCreateClient(...args);
79
+ const originalSendCommand = client.sendCommand;
80
+ if (originalSendCommand) {
81
+ client.sendCommand = function (command) {
82
+ if (!agent.shouldSample()) {
83
+ return originalSendCommand.call(this, command);
84
+ }
85
+ const commandName = command[0] || 'unknown';
86
+ const span = new span_1.SpanBuilder(`redis.${commandName}`, types_1.SpanKind.CLIENT, config.serviceName, config.serviceVersion, config.environment, agent);
87
+ span.setAttributes({
88
+ 'db.system': 'redis',
89
+ 'db.operation': commandName.toUpperCase(),
90
+ 'db.statement': command.join(' ').substring(0, 500),
91
+ });
92
+ const result = originalSendCommand.call(this, command);
93
+ if (result && typeof result.then === 'function') {
94
+ return result
95
+ .then((res) => {
96
+ span.setStatus(types_1.SpanStatus.OK);
97
+ span.end();
98
+ return res;
99
+ })
100
+ .catch((err) => {
101
+ span.setStatus(types_1.SpanStatus.ERROR, err.message);
102
+ span.setAttribute('error', true);
103
+ span.end();
104
+ throw err;
105
+ });
106
+ }
107
+ span.end();
108
+ return result;
109
+ };
110
+ }
111
+ return client;
112
+ };
113
+ }
114
+ if (config.debug) {
115
+ console.log('[DevSkin Agent] Redis (node-redis) instrumentation enabled');
116
+ }
117
+ }
118
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/instrumentation/redis.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export interface AgentConfig {
2
2
  serverUrl: string;
3
3
  apiKey: string;
4
+ applicationId: string;
4
5
  serviceName: string;
5
6
  serviceVersion?: string;
6
7
  environment?: string;
@@ -8,6 +9,7 @@ export interface AgentConfig {
8
9
  sampleRate?: number;
9
10
  instrumentHttp?: boolean;
10
11
  instrumentExpress?: boolean;
12
+ instrumentDatabase?: boolean;
11
13
  batchSize?: number;
12
14
  flushInterval?: number;
13
15
  debug?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAE1B,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;IAGf,WAAW,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,oBAAY,QAAQ;IAClB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAKD,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,KAAK,UAAU;CAChB;AAKD,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAKD,MAAM,WAAW,WAAY,SAAQ,IAAI;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAE1B,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;IAGf,aAAa,EAAE,MAAM,CAAC;IAGtB,WAAW,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAG7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,oBAAY,QAAQ;IAClB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAKD,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,KAAK,UAAU;CAChB;AAKD,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAKD,MAAM,WAAW,WAAY,SAAQ,IAAI;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4CA,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;AACvB,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAKD,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,6BAAe,CAAA;AACjB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAkDA,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;AACvB,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAKD,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,6BAAe,CAAA;AACjB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devskin/agent",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "DevSkin Monitor Agent - JavaScript/Node.js Instrumentation SDK",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/agent.ts CHANGED
@@ -22,6 +22,7 @@ export class Agent {
22
22
  sampleRate: 1.0,
23
23
  instrumentHttp: true,
24
24
  instrumentExpress: true,
25
+ instrumentDatabase: true,
25
26
  batchSize: 100,
26
27
  flushInterval: 10000, // 10 seconds
27
28
  debug: false,
@@ -41,6 +42,7 @@ export class Agent {
41
42
  this.config.serverUrl,
42
43
  this.config.apiKey,
43
44
  this.config.serviceName,
45
+ this.config.applicationId,
44
46
  this.config.debug
45
47
  );
46
48
  }
@@ -71,6 +73,10 @@ export class Agent {
71
73
  await this.initHttpInstrumentation();
72
74
  }
73
75
 
76
+ if (this.config.instrumentDatabase) {
77
+ await this.initDatabaseInstrumentation();
78
+ }
79
+
74
80
  if (this.config.debug) {
75
81
  console.log('[DevSkin Agent] Agent started successfully');
76
82
  }
@@ -111,6 +117,34 @@ export class Agent {
111
117
  }
112
118
  }
113
119
 
120
+ /**
121
+ * Initialize Database instrumentation
122
+ */
123
+ private async initDatabaseInstrumentation(): Promise<void> {
124
+ try {
125
+ // SQL Databases
126
+ const { instrumentMysql } = await import('./instrumentation/mysql');
127
+ instrumentMysql(this);
128
+
129
+ const { instrumentPostgres } = await import('./instrumentation/postgres');
130
+ instrumentPostgres(this);
131
+
132
+ // NoSQL Databases
133
+ const { instrumentMongoDB } = await import('./instrumentation/mongodb');
134
+ instrumentMongoDB(this);
135
+
136
+ const { instrumentRedis } = await import('./instrumentation/redis');
137
+ instrumentRedis(this);
138
+
139
+ const { instrumentElasticsearch } = await import('./instrumentation/elasticsearch');
140
+ instrumentElasticsearch(this);
141
+ } catch (error: any) {
142
+ if (this.config.debug) {
143
+ console.error('[DevSkin Agent] Failed to initialize Database instrumentation:', error.message);
144
+ }
145
+ }
146
+ }
147
+
114
148
  /**
115
149
  * Send service metadata
116
150
  */