node-consul-service 1.0.69 → 1.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/consul/types.d.ts +1 -0
- package/dist/index.cjs.js +105 -40
- package/dist/index.esm.js +105 -40
- package/dist/utils/callLogger.d.ts +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/memoryStore.d.ts +17 -0
- package/package.json +1 -1
package/dist/consul/types.d.ts
CHANGED
package/dist/index.cjs.js
CHANGED
|
@@ -88,47 +88,91 @@ async function deregisterService(id) {
|
|
|
88
88
|
console.log(`🛑 Service "${id}" deregistered successfully.`);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
async function ensureLogDir$1() {
|
|
95
|
-
await require$$6.promises.mkdir(
|
|
91
|
+
const BASE_LOG_DIR$1 = '/home/log';
|
|
92
|
+
// اسم السيرفس الحالي اللي بيعمل الـ discovery
|
|
93
|
+
const CURRENT_SERVICE$1 = process.env.SERVICE_NAME || 'unknown-service';
|
|
94
|
+
async function ensureLogDir$1(dir) {
|
|
95
|
+
await require$$6.promises.mkdir(dir, { recursive: true });
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
function formatLogLine(serviceName, instance, elapsedMs) {
|
|
97
|
+
function formatLogLine(targetService, instance, elapsedMs) {
|
|
99
98
|
var _a, _b, _c, _d, _e;
|
|
100
99
|
const ts = new Date().toISOString();
|
|
101
|
-
const addr = (_b = (_a = instance.ServiceAddress) !== null && _a !== void 0 ? _a : instance.
|
|
100
|
+
const addr = (_b = (_a = instance.ServiceAddress) !== null && _a !== void 0 ? _a : instance.Address) !== null && _b !== void 0 ? _b : 'unknown';
|
|
102
101
|
const port = (_c = instance.ServicePort) !== null && _c !== void 0 ? _c : 'unknown';
|
|
103
102
|
const node = (_d = instance.Node) !== null && _d !== void 0 ? _d : 'N/A';
|
|
104
103
|
const id = (_e = instance.ServiceID) !== null && _e !== void 0 ? _e : 'N/A';
|
|
105
104
|
const elapsed = elapsedMs !== undefined ? ` | Elapsed=${elapsedMs}ms` : '';
|
|
106
|
-
return `${ts} |
|
|
105
|
+
return `${ts} | Target=${targetService} | ${addr}:${port} | Node=${node} | ID=${id}${elapsed}\n`;
|
|
107
106
|
}
|
|
108
|
-
|
|
109
|
-
async function appendDiscoveryLog(serviceName, instance, elapsedMs) {
|
|
107
|
+
async function appendDiscoveryLog(targetService, instance, elapsedMs) {
|
|
110
108
|
try {
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
await
|
|
109
|
+
// فولدر خاص بالسيرفس الحالي
|
|
110
|
+
const serviceDir = path.join(BASE_LOG_DIR$1, CURRENT_SERVICE$1);
|
|
111
|
+
await ensureLogDir$1(serviceDir);
|
|
112
|
+
// اللوج يروح في ملف ثابت detect.log
|
|
113
|
+
const file = path.join(serviceDir, 'detect.log');
|
|
114
|
+
const line = formatLogLine(targetService, instance, elapsedMs);
|
|
115
|
+
await require$$6.promises.appendFile(file, line, { encoding: 'utf8' });
|
|
114
116
|
}
|
|
115
117
|
catch (err) {
|
|
116
118
|
console.error('❌ Failed to write discovery log:', err);
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
|
|
122
|
+
const store = new Map();
|
|
123
|
+
/**
|
|
124
|
+
* Set a value in memory with optional TTL (ms).
|
|
125
|
+
*/
|
|
126
|
+
function set(key, value, ttl) {
|
|
127
|
+
const record = { value };
|
|
128
|
+
{
|
|
129
|
+
record.expiresAt = Date.now() + ttl;
|
|
130
|
+
}
|
|
131
|
+
store.set(key, record);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get a value from memory.
|
|
135
|
+
* Returns undefined if key does not exist or expired.
|
|
136
|
+
*/
|
|
137
|
+
function get$1(key) {
|
|
138
|
+
const record = store.get(key);
|
|
139
|
+
if (!record)
|
|
140
|
+
return undefined;
|
|
141
|
+
if (record.expiresAt && record.expiresAt < Date.now()) {
|
|
142
|
+
store.delete(key);
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
return record.value;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const CACHE_TTL = 10000; // 10 ثواني – عدلها حسب احتياجك
|
|
120
149
|
async function listServices() {
|
|
150
|
+
const cacheKey = 'services:list';
|
|
151
|
+
const cached = get$1(cacheKey);
|
|
152
|
+
if (cached)
|
|
153
|
+
return cached;
|
|
121
154
|
const services = await getClient().agent.service.list();
|
|
122
|
-
|
|
155
|
+
const values = Object.values(services);
|
|
156
|
+
set(cacheKey, values, CACHE_TTL);
|
|
157
|
+
return values;
|
|
123
158
|
}
|
|
124
159
|
async function getServiceInstances(serviceName) {
|
|
160
|
+
const cacheKey = `services:${serviceName}`;
|
|
161
|
+
const cached = get$1(cacheKey);
|
|
162
|
+
if (cached)
|
|
163
|
+
return cached;
|
|
125
164
|
const start = Date.now();
|
|
126
165
|
const services = await getClient().catalog.service.nodes(serviceName);
|
|
127
166
|
const elapsed = Date.now() - start;
|
|
128
167
|
console.log(`⏱️ Discovery for ${serviceName} took ${elapsed}ms`);
|
|
168
|
+
set(cacheKey, services, CACHE_TTL);
|
|
129
169
|
return services;
|
|
130
170
|
}
|
|
131
171
|
async function getRandomServiceInstance(serviceName) {
|
|
172
|
+
const cacheKey = `random:${serviceName}`;
|
|
173
|
+
const cached = get$1(cacheKey);
|
|
174
|
+
if (cached)
|
|
175
|
+
return cached;
|
|
132
176
|
const start = Date.now();
|
|
133
177
|
const instances = await getServiceInstances(serviceName);
|
|
134
178
|
if (!instances.length)
|
|
@@ -137,11 +181,20 @@ async function getRandomServiceInstance(serviceName) {
|
|
|
137
181
|
const instance = instances[randomIndex];
|
|
138
182
|
const elapsed = Date.now() - start;
|
|
139
183
|
await appendDiscoveryLog(serviceName, instance, elapsed);
|
|
184
|
+
// cache random instance
|
|
185
|
+
set(cacheKey, instance, CACHE_TTL);
|
|
140
186
|
return instance;
|
|
141
187
|
}
|
|
142
188
|
async function getServiceUrl(serviceName) {
|
|
189
|
+
const cacheKey = `url:${serviceName}`;
|
|
190
|
+
const cached = get$1(cacheKey);
|
|
191
|
+
if (cached)
|
|
192
|
+
return cached;
|
|
143
193
|
const instance = await getRandomServiceInstance(serviceName);
|
|
144
|
-
|
|
194
|
+
const url = `http://${instance.ServiceAddress}:${instance.ServicePort}`;
|
|
195
|
+
// cache url
|
|
196
|
+
set(cacheKey, url, CACHE_TTL);
|
|
197
|
+
return url;
|
|
145
198
|
}
|
|
146
199
|
|
|
147
200
|
function bind(fn, thisArg) {
|
|
@@ -20259,20 +20312,34 @@ const {
|
|
|
20259
20312
|
mergeConfig
|
|
20260
20313
|
} = axios;
|
|
20261
20314
|
|
|
20262
|
-
const
|
|
20263
|
-
const
|
|
20264
|
-
async function ensureLogDir() {
|
|
20265
|
-
await require$$6.promises.mkdir(
|
|
20315
|
+
const BASE_LOG_DIR = '/home/log';
|
|
20316
|
+
const CURRENT_SERVICE = process.env.SERVICE_NAME || 'unknown-service';
|
|
20317
|
+
async function ensureLogDir(dir) {
|
|
20318
|
+
await require$$6.promises.mkdir(dir, { recursive: true });
|
|
20266
20319
|
}
|
|
20267
|
-
function
|
|
20320
|
+
function getLogFileForStatus(status) {
|
|
20321
|
+
const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
|
|
20322
|
+
const serviceDir = path.join(BASE_LOG_DIR, CURRENT_SERVICE);
|
|
20323
|
+
if (status >= 200 && status < 300)
|
|
20324
|
+
return path.join(serviceDir, `calls-2xx-${date}.log`);
|
|
20325
|
+
if (status >= 400 && status < 500)
|
|
20326
|
+
return path.join(serviceDir, `calls-4xx-${date}.log`);
|
|
20327
|
+
if (status >= 500 && status < 600)
|
|
20328
|
+
return path.join(serviceDir, `calls-5xx-${date}.log`);
|
|
20329
|
+
return path.join(serviceDir, `calls-other-${date}.log`);
|
|
20330
|
+
}
|
|
20331
|
+
function formatCallLogLine(targetService, url, method, status, elapsedMs, errorMessage) {
|
|
20268
20332
|
const ts = new Date().toISOString();
|
|
20269
|
-
|
|
20333
|
+
const errPart = errorMessage ? ` | Error="${errorMessage}"` : '';
|
|
20334
|
+
return `${ts} | Caller=${CURRENT_SERVICE} | Target=${targetService} | ${method.toUpperCase()} ${url} | Status=${status} | Elapsed=${elapsedMs}ms${errPart}\n`;
|
|
20270
20335
|
}
|
|
20271
|
-
async function appendCallLog(
|
|
20336
|
+
async function appendCallLog(targetService, url, method, status, elapsedMs, errorMessage) {
|
|
20272
20337
|
try {
|
|
20273
|
-
|
|
20274
|
-
const
|
|
20275
|
-
await
|
|
20338
|
+
const file = getLogFileForStatus(status);
|
|
20339
|
+
const dir = path.dirname(file);
|
|
20340
|
+
await ensureLogDir(dir);
|
|
20341
|
+
const line = formatCallLogLine(targetService, url, method, status, elapsedMs, errorMessage);
|
|
20342
|
+
await require$$6.promises.appendFile(file, line, { encoding: 'utf8' });
|
|
20276
20343
|
}
|
|
20277
20344
|
catch (err) {
|
|
20278
20345
|
console.error('❌ Failed to write call log:', err);
|
|
@@ -20280,35 +20347,33 @@ async function appendCallLog(serviceName, url, method, status, elapsedMs) {
|
|
|
20280
20347
|
}
|
|
20281
20348
|
|
|
20282
20349
|
async function callService(serviceName, options = {}) {
|
|
20283
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
20350
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
20284
20351
|
const { method = 'GET', path = '/', data, headers, params, } = options;
|
|
20285
20352
|
const start = Date.now();
|
|
20286
20353
|
try {
|
|
20354
|
+
// ...
|
|
20287
20355
|
const instance = await getRandomServiceInstance(serviceName);
|
|
20288
20356
|
const url = `http://${instance.ServiceAddress}:${instance.ServicePort}${path}`;
|
|
20289
|
-
const response = await axios.request({
|
|
20290
|
-
url,
|
|
20291
|
-
method,
|
|
20292
|
-
data,
|
|
20293
|
-
headers,
|
|
20294
|
-
params,
|
|
20295
|
-
});
|
|
20357
|
+
const response = await axios.request({ url, method, data, headers, params });
|
|
20296
20358
|
const elapsed = Date.now() - start;
|
|
20297
|
-
//
|
|
20359
|
+
// سجل في فولدر السيرفس الحالي (مش target)
|
|
20298
20360
|
await appendCallLog(serviceName, url, method, response.status, elapsed);
|
|
20299
20361
|
return response.data;
|
|
20300
20362
|
}
|
|
20301
20363
|
catch (error) {
|
|
20302
20364
|
const elapsed = Date.now() - start;
|
|
20303
|
-
// 📌 سجل الفشل كمان
|
|
20304
20365
|
const status = (_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : 0;
|
|
20305
|
-
|
|
20366
|
+
const url = (_d = (_c = error.config) === null || _c === void 0 ? void 0 : _c.url) !== null && _d !== void 0 ? _d : '';
|
|
20367
|
+
const methodUsed = (_f = (_e = error.config) === null || _e === void 0 ? void 0 : _e.method) !== null && _f !== void 0 ? _f : method;
|
|
20368
|
+
const message = (_g = error.message) !== null && _g !== void 0 ? _g : 'Unknown error';
|
|
20369
|
+
// 📌 سجل الفشل مع رسالة الخطأ
|
|
20370
|
+
await appendCallLog(serviceName, url, methodUsed, status, elapsed, message);
|
|
20306
20371
|
return {
|
|
20307
20372
|
success: false,
|
|
20308
|
-
message
|
|
20373
|
+
message,
|
|
20309
20374
|
status,
|
|
20310
|
-
code: (
|
|
20311
|
-
data: (
|
|
20375
|
+
code: (_k = (_j = (_h = error.response) === null || _h === void 0 ? void 0 : _h.data) === null || _j === void 0 ? void 0 : _j.code) !== null && _k !== void 0 ? _k : "",
|
|
20376
|
+
data: (_l = error.response) === null || _l === void 0 ? void 0 : _l.data,
|
|
20312
20377
|
};
|
|
20313
20378
|
}
|
|
20314
20379
|
}
|
package/dist/index.esm.js
CHANGED
|
@@ -86,47 +86,91 @@ async function deregisterService(id) {
|
|
|
86
86
|
console.log(`🛑 Service "${id}" deregistered successfully.`);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
async function ensureLogDir$1() {
|
|
93
|
-
await promises.mkdir(
|
|
89
|
+
const BASE_LOG_DIR$1 = '/home/log';
|
|
90
|
+
// اسم السيرفس الحالي اللي بيعمل الـ discovery
|
|
91
|
+
const CURRENT_SERVICE$1 = process.env.SERVICE_NAME || 'unknown-service';
|
|
92
|
+
async function ensureLogDir$1(dir) {
|
|
93
|
+
await promises.mkdir(dir, { recursive: true });
|
|
94
94
|
}
|
|
95
|
-
|
|
96
|
-
function formatLogLine(serviceName, instance, elapsedMs) {
|
|
95
|
+
function formatLogLine(targetService, instance, elapsedMs) {
|
|
97
96
|
var _a, _b, _c, _d, _e;
|
|
98
97
|
const ts = new Date().toISOString();
|
|
99
|
-
const addr = (_b = (_a = instance.ServiceAddress) !== null && _a !== void 0 ? _a : instance.
|
|
98
|
+
const addr = (_b = (_a = instance.ServiceAddress) !== null && _a !== void 0 ? _a : instance.Address) !== null && _b !== void 0 ? _b : 'unknown';
|
|
100
99
|
const port = (_c = instance.ServicePort) !== null && _c !== void 0 ? _c : 'unknown';
|
|
101
100
|
const node = (_d = instance.Node) !== null && _d !== void 0 ? _d : 'N/A';
|
|
102
101
|
const id = (_e = instance.ServiceID) !== null && _e !== void 0 ? _e : 'N/A';
|
|
103
102
|
const elapsed = elapsedMs !== undefined ? ` | Elapsed=${elapsedMs}ms` : '';
|
|
104
|
-
return `${ts} |
|
|
103
|
+
return `${ts} | Target=${targetService} | ${addr}:${port} | Node=${node} | ID=${id}${elapsed}\n`;
|
|
105
104
|
}
|
|
106
|
-
|
|
107
|
-
async function appendDiscoveryLog(serviceName, instance, elapsedMs) {
|
|
105
|
+
async function appendDiscoveryLog(targetService, instance, elapsedMs) {
|
|
108
106
|
try {
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
await
|
|
107
|
+
// فولدر خاص بالسيرفس الحالي
|
|
108
|
+
const serviceDir = path.join(BASE_LOG_DIR$1, CURRENT_SERVICE$1);
|
|
109
|
+
await ensureLogDir$1(serviceDir);
|
|
110
|
+
// اللوج يروح في ملف ثابت detect.log
|
|
111
|
+
const file = path.join(serviceDir, 'detect.log');
|
|
112
|
+
const line = formatLogLine(targetService, instance, elapsedMs);
|
|
113
|
+
await promises.appendFile(file, line, { encoding: 'utf8' });
|
|
112
114
|
}
|
|
113
115
|
catch (err) {
|
|
114
116
|
console.error('❌ Failed to write discovery log:', err);
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
|
|
120
|
+
const store = new Map();
|
|
121
|
+
/**
|
|
122
|
+
* Set a value in memory with optional TTL (ms).
|
|
123
|
+
*/
|
|
124
|
+
function set(key, value, ttl) {
|
|
125
|
+
const record = { value };
|
|
126
|
+
{
|
|
127
|
+
record.expiresAt = Date.now() + ttl;
|
|
128
|
+
}
|
|
129
|
+
store.set(key, record);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get a value from memory.
|
|
133
|
+
* Returns undefined if key does not exist or expired.
|
|
134
|
+
*/
|
|
135
|
+
function get$1(key) {
|
|
136
|
+
const record = store.get(key);
|
|
137
|
+
if (!record)
|
|
138
|
+
return undefined;
|
|
139
|
+
if (record.expiresAt && record.expiresAt < Date.now()) {
|
|
140
|
+
store.delete(key);
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
return record.value;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const CACHE_TTL = 10000; // 10 ثواني – عدلها حسب احتياجك
|
|
118
147
|
async function listServices() {
|
|
148
|
+
const cacheKey = 'services:list';
|
|
149
|
+
const cached = get$1(cacheKey);
|
|
150
|
+
if (cached)
|
|
151
|
+
return cached;
|
|
119
152
|
const services = await getClient().agent.service.list();
|
|
120
|
-
|
|
153
|
+
const values = Object.values(services);
|
|
154
|
+
set(cacheKey, values, CACHE_TTL);
|
|
155
|
+
return values;
|
|
121
156
|
}
|
|
122
157
|
async function getServiceInstances(serviceName) {
|
|
158
|
+
const cacheKey = `services:${serviceName}`;
|
|
159
|
+
const cached = get$1(cacheKey);
|
|
160
|
+
if (cached)
|
|
161
|
+
return cached;
|
|
123
162
|
const start = Date.now();
|
|
124
163
|
const services = await getClient().catalog.service.nodes(serviceName);
|
|
125
164
|
const elapsed = Date.now() - start;
|
|
126
165
|
console.log(`⏱️ Discovery for ${serviceName} took ${elapsed}ms`);
|
|
166
|
+
set(cacheKey, services, CACHE_TTL);
|
|
127
167
|
return services;
|
|
128
168
|
}
|
|
129
169
|
async function getRandomServiceInstance(serviceName) {
|
|
170
|
+
const cacheKey = `random:${serviceName}`;
|
|
171
|
+
const cached = get$1(cacheKey);
|
|
172
|
+
if (cached)
|
|
173
|
+
return cached;
|
|
130
174
|
const start = Date.now();
|
|
131
175
|
const instances = await getServiceInstances(serviceName);
|
|
132
176
|
if (!instances.length)
|
|
@@ -135,11 +179,20 @@ async function getRandomServiceInstance(serviceName) {
|
|
|
135
179
|
const instance = instances[randomIndex];
|
|
136
180
|
const elapsed = Date.now() - start;
|
|
137
181
|
await appendDiscoveryLog(serviceName, instance, elapsed);
|
|
182
|
+
// cache random instance
|
|
183
|
+
set(cacheKey, instance, CACHE_TTL);
|
|
138
184
|
return instance;
|
|
139
185
|
}
|
|
140
186
|
async function getServiceUrl(serviceName) {
|
|
187
|
+
const cacheKey = `url:${serviceName}`;
|
|
188
|
+
const cached = get$1(cacheKey);
|
|
189
|
+
if (cached)
|
|
190
|
+
return cached;
|
|
141
191
|
const instance = await getRandomServiceInstance(serviceName);
|
|
142
|
-
|
|
192
|
+
const url = `http://${instance.ServiceAddress}:${instance.ServicePort}`;
|
|
193
|
+
// cache url
|
|
194
|
+
set(cacheKey, url, CACHE_TTL);
|
|
195
|
+
return url;
|
|
143
196
|
}
|
|
144
197
|
|
|
145
198
|
function bind(fn, thisArg) {
|
|
@@ -20257,20 +20310,34 @@ const {
|
|
|
20257
20310
|
mergeConfig
|
|
20258
20311
|
} = axios;
|
|
20259
20312
|
|
|
20260
|
-
const
|
|
20261
|
-
const
|
|
20262
|
-
async function ensureLogDir() {
|
|
20263
|
-
await promises.mkdir(
|
|
20313
|
+
const BASE_LOG_DIR = '/home/log';
|
|
20314
|
+
const CURRENT_SERVICE = process.env.SERVICE_NAME || 'unknown-service';
|
|
20315
|
+
async function ensureLogDir(dir) {
|
|
20316
|
+
await promises.mkdir(dir, { recursive: true });
|
|
20264
20317
|
}
|
|
20265
|
-
function
|
|
20318
|
+
function getLogFileForStatus(status) {
|
|
20319
|
+
const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
|
|
20320
|
+
const serviceDir = path.join(BASE_LOG_DIR, CURRENT_SERVICE);
|
|
20321
|
+
if (status >= 200 && status < 300)
|
|
20322
|
+
return path.join(serviceDir, `calls-2xx-${date}.log`);
|
|
20323
|
+
if (status >= 400 && status < 500)
|
|
20324
|
+
return path.join(serviceDir, `calls-4xx-${date}.log`);
|
|
20325
|
+
if (status >= 500 && status < 600)
|
|
20326
|
+
return path.join(serviceDir, `calls-5xx-${date}.log`);
|
|
20327
|
+
return path.join(serviceDir, `calls-other-${date}.log`);
|
|
20328
|
+
}
|
|
20329
|
+
function formatCallLogLine(targetService, url, method, status, elapsedMs, errorMessage) {
|
|
20266
20330
|
const ts = new Date().toISOString();
|
|
20267
|
-
|
|
20331
|
+
const errPart = errorMessage ? ` | Error="${errorMessage}"` : '';
|
|
20332
|
+
return `${ts} | Caller=${CURRENT_SERVICE} | Target=${targetService} | ${method.toUpperCase()} ${url} | Status=${status} | Elapsed=${elapsedMs}ms${errPart}\n`;
|
|
20268
20333
|
}
|
|
20269
|
-
async function appendCallLog(
|
|
20334
|
+
async function appendCallLog(targetService, url, method, status, elapsedMs, errorMessage) {
|
|
20270
20335
|
try {
|
|
20271
|
-
|
|
20272
|
-
const
|
|
20273
|
-
await
|
|
20336
|
+
const file = getLogFileForStatus(status);
|
|
20337
|
+
const dir = path.dirname(file);
|
|
20338
|
+
await ensureLogDir(dir);
|
|
20339
|
+
const line = formatCallLogLine(targetService, url, method, status, elapsedMs, errorMessage);
|
|
20340
|
+
await promises.appendFile(file, line, { encoding: 'utf8' });
|
|
20274
20341
|
}
|
|
20275
20342
|
catch (err) {
|
|
20276
20343
|
console.error('❌ Failed to write call log:', err);
|
|
@@ -20278,35 +20345,33 @@ async function appendCallLog(serviceName, url, method, status, elapsedMs) {
|
|
|
20278
20345
|
}
|
|
20279
20346
|
|
|
20280
20347
|
async function callService(serviceName, options = {}) {
|
|
20281
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
20348
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
20282
20349
|
const { method = 'GET', path = '/', data, headers, params, } = options;
|
|
20283
20350
|
const start = Date.now();
|
|
20284
20351
|
try {
|
|
20352
|
+
// ...
|
|
20285
20353
|
const instance = await getRandomServiceInstance(serviceName);
|
|
20286
20354
|
const url = `http://${instance.ServiceAddress}:${instance.ServicePort}${path}`;
|
|
20287
|
-
const response = await axios.request({
|
|
20288
|
-
url,
|
|
20289
|
-
method,
|
|
20290
|
-
data,
|
|
20291
|
-
headers,
|
|
20292
|
-
params,
|
|
20293
|
-
});
|
|
20355
|
+
const response = await axios.request({ url, method, data, headers, params });
|
|
20294
20356
|
const elapsed = Date.now() - start;
|
|
20295
|
-
//
|
|
20357
|
+
// سجل في فولدر السيرفس الحالي (مش target)
|
|
20296
20358
|
await appendCallLog(serviceName, url, method, response.status, elapsed);
|
|
20297
20359
|
return response.data;
|
|
20298
20360
|
}
|
|
20299
20361
|
catch (error) {
|
|
20300
20362
|
const elapsed = Date.now() - start;
|
|
20301
|
-
// 📌 سجل الفشل كمان
|
|
20302
20363
|
const status = (_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : 0;
|
|
20303
|
-
|
|
20364
|
+
const url = (_d = (_c = error.config) === null || _c === void 0 ? void 0 : _c.url) !== null && _d !== void 0 ? _d : '';
|
|
20365
|
+
const methodUsed = (_f = (_e = error.config) === null || _e === void 0 ? void 0 : _e.method) !== null && _f !== void 0 ? _f : method;
|
|
20366
|
+
const message = (_g = error.message) !== null && _g !== void 0 ? _g : 'Unknown error';
|
|
20367
|
+
// 📌 سجل الفشل مع رسالة الخطأ
|
|
20368
|
+
await appendCallLog(serviceName, url, methodUsed, status, elapsed, message);
|
|
20304
20369
|
return {
|
|
20305
20370
|
success: false,
|
|
20306
|
-
message
|
|
20371
|
+
message,
|
|
20307
20372
|
status,
|
|
20308
|
-
code: (
|
|
20309
|
-
data: (
|
|
20373
|
+
code: (_k = (_j = (_h = error.response) === null || _h === void 0 ? void 0 : _h.data) === null || _j === void 0 ? void 0 : _j.code) !== null && _k !== void 0 ? _k : "",
|
|
20374
|
+
data: (_l = error.response) === null || _l === void 0 ? void 0 : _l.data,
|
|
20310
20375
|
};
|
|
20311
20376
|
}
|
|
20312
20377
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function appendCallLog(
|
|
1
|
+
export declare function appendCallLog(targetService: string, url: string, method: string, status: number, elapsedMs: number, errorMessage?: string): Promise<void>;
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ServiceInstance } from '../consul/types';
|
|
2
|
-
export declare function appendDiscoveryLog(
|
|
2
|
+
export declare function appendDiscoveryLog(targetService: string, instance: ServiceInstance, elapsedMs?: number): Promise<void>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set a value in memory with optional TTL (ms).
|
|
3
|
+
*/
|
|
4
|
+
export declare function set(key: string, value: any, ttl?: number): void;
|
|
5
|
+
/**
|
|
6
|
+
* Get a value from memory.
|
|
7
|
+
* Returns undefined if key does not exist or expired.
|
|
8
|
+
*/
|
|
9
|
+
export declare function get<T = any>(key: string): T | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Delete a value.
|
|
12
|
+
*/
|
|
13
|
+
export declare function del(key: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Clear all keys.
|
|
16
|
+
*/
|
|
17
|
+
export declare function clear(): void;
|