@mastra/loggers 1.2.0 → 1.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/docs/SKILL.md +3 -2
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-observability-logging.md +101 -5
- package/dist/docs/references/reference-core-mastra-class.md +61 -8
- package/dist/docs/references/reference-file-based-agents-logger.md +30 -0
- package/dist/docs/references/reference-logging-pino-logger.md +12 -8
- package/dist/file/index.cjs +117 -151
- package/dist/file/index.cjs.map +1 -1
- package/dist/file/index.js +115 -148
- package/dist/file/index.js.map +1 -1
- package/dist/http/index.cjs +137 -165
- package/dist/http/index.cjs.map +1 -1
- package/dist/http/index.js +135 -162
- package/dist/http/index.js.map +1 -1
- package/dist/index.cjs +164 -99
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +139 -92
- package/dist/index.js.map +1 -1
- package/dist/pino.d.ts +16 -1
- package/dist/pino.d.ts.map +1 -1
- package/dist/upstash/index.cjs +178 -215
- package/dist/upstash/index.cjs.map +1 -1
- package/dist/upstash/index.js +176 -212
- package/dist/upstash/index.js.map +1 -1
- package/package.json +15 -14
package/dist/upstash/index.js
CHANGED
|
@@ -1,216 +1,180 @@
|
|
|
1
|
-
import { LoggerTransport } from
|
|
2
|
-
|
|
3
|
-
// src/upstash/index.ts
|
|
1
|
+
import { LoggerTransport } from "@mastra/core/logger";
|
|
2
|
+
//#region src/upstash/index.ts
|
|
4
3
|
var UpstashTransport = class extends LoggerTransport {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
toDate,
|
|
178
|
-
logLevel,
|
|
179
|
-
filters,
|
|
180
|
-
page: pageInput,
|
|
181
|
-
perPage: perPageInput
|
|
182
|
-
}) {
|
|
183
|
-
try {
|
|
184
|
-
const page = pageInput === 0 ? 1 : pageInput ?? 1;
|
|
185
|
-
const perPage = perPageInput ?? 100;
|
|
186
|
-
const allLogs = await this.listLogs({ fromDate, toDate, logLevel, filters, returnPaginationResults: false });
|
|
187
|
-
const logs = allLogs?.logs?.filter((log) => log.runId === runId) || [];
|
|
188
|
-
const total = logs.length;
|
|
189
|
-
const resolvedPerPage = perPage || 100;
|
|
190
|
-
const start = (page - 1) * resolvedPerPage;
|
|
191
|
-
const end = start + resolvedPerPage;
|
|
192
|
-
const paginatedLogs = logs.slice(start, end);
|
|
193
|
-
const hasMore = end < total;
|
|
194
|
-
return {
|
|
195
|
-
logs: paginatedLogs,
|
|
196
|
-
total,
|
|
197
|
-
page,
|
|
198
|
-
perPage: resolvedPerPage,
|
|
199
|
-
hasMore
|
|
200
|
-
};
|
|
201
|
-
} catch (error) {
|
|
202
|
-
console.error("Error getting logs by runId from Upstash:", error);
|
|
203
|
-
return {
|
|
204
|
-
logs: [],
|
|
205
|
-
total: 0,
|
|
206
|
-
page: pageInput ?? 1,
|
|
207
|
-
perPage: perPageInput ?? 100,
|
|
208
|
-
hasMore: false
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
}
|
|
4
|
+
upstashUrl;
|
|
5
|
+
upstashToken;
|
|
6
|
+
listName;
|
|
7
|
+
maxListLength;
|
|
8
|
+
batchSize;
|
|
9
|
+
flushInterval;
|
|
10
|
+
logBuffer;
|
|
11
|
+
lastFlush;
|
|
12
|
+
flushIntervalId;
|
|
13
|
+
constructor(opts) {
|
|
14
|
+
super({ objectMode: true });
|
|
15
|
+
if (!opts.upstashUrl || !opts.upstashToken) throw new Error("Upstash URL and token are required");
|
|
16
|
+
this.upstashUrl = opts.upstashUrl;
|
|
17
|
+
this.upstashToken = opts.upstashToken;
|
|
18
|
+
this.listName = opts.listName || "application-logs";
|
|
19
|
+
this.maxListLength = opts.maxListLength || 1e4;
|
|
20
|
+
this.batchSize = opts.batchSize || 100;
|
|
21
|
+
this.flushInterval = opts.flushInterval || 1e4;
|
|
22
|
+
this.logBuffer = [];
|
|
23
|
+
this.lastFlush = Date.now();
|
|
24
|
+
this.flushIntervalId = setInterval(() => {
|
|
25
|
+
this._flush().catch((err) => {
|
|
26
|
+
console.error("Error flushing logs to Upstash:", err);
|
|
27
|
+
});
|
|
28
|
+
}, this.flushInterval);
|
|
29
|
+
}
|
|
30
|
+
async executeUpstashCommand(command) {
|
|
31
|
+
const response = await fetch(`${this.upstashUrl}/pipeline`, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `Bearer ${this.upstashToken}`,
|
|
35
|
+
"Content-Type": "application/json"
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify([command])
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) throw new Error(`Failed to execute Upstash command: ${response.statusText}`);
|
|
40
|
+
return response.json();
|
|
41
|
+
}
|
|
42
|
+
async _flush() {
|
|
43
|
+
if (this.logBuffer.length === 0) return;
|
|
44
|
+
const now = Date.now();
|
|
45
|
+
const logs = this.logBuffer.splice(0, this.batchSize);
|
|
46
|
+
try {
|
|
47
|
+
const command = [
|
|
48
|
+
"LPUSH",
|
|
49
|
+
this.listName,
|
|
50
|
+
...logs.map((log) => JSON.stringify(log))
|
|
51
|
+
];
|
|
52
|
+
if (this.maxListLength > 0) command.push("LTRIM", this.listName, 0, this.maxListLength - 1);
|
|
53
|
+
await this.executeUpstashCommand(command);
|
|
54
|
+
this.lastFlush = now;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
this.logBuffer.unshift(...logs);
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
_write(chunk, encoding, callback) {
|
|
61
|
+
if (typeof callback === "function") {
|
|
62
|
+
this._transform(chunk, encoding || "utf8", callback);
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
this._transform(chunk, encoding || "utf8", (error) => {
|
|
66
|
+
if (error) console.error("Transform error in write:", error);
|
|
67
|
+
});
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
_transform(chunk, _enc, cb) {
|
|
71
|
+
try {
|
|
72
|
+
const log = typeof chunk === "string" ? JSON.parse(chunk) : chunk;
|
|
73
|
+
if (!log.time) log.time = Date.now();
|
|
74
|
+
this.logBuffer.push(log);
|
|
75
|
+
if (this.logBuffer.length >= this.batchSize) this._flush().catch((err) => {
|
|
76
|
+
console.error("Error flushing logs to Upstash:", err);
|
|
77
|
+
});
|
|
78
|
+
cb(null, chunk);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
cb(error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
_destroy(err, cb) {
|
|
84
|
+
clearInterval(this.flushIntervalId);
|
|
85
|
+
if (this.logBuffer.length > 0) this._flush().then(() => cb(err)).catch((flushErr) => {
|
|
86
|
+
console.error("Error in final flush:", flushErr);
|
|
87
|
+
cb(err || flushErr);
|
|
88
|
+
});
|
|
89
|
+
else cb(err);
|
|
90
|
+
}
|
|
91
|
+
async listLogs(params) {
|
|
92
|
+
try {
|
|
93
|
+
const command = [
|
|
94
|
+
"LRANGE",
|
|
95
|
+
this.listName,
|
|
96
|
+
0,
|
|
97
|
+
-1
|
|
98
|
+
];
|
|
99
|
+
let filteredLogs = ((await this.executeUpstashCommand(command))?.[0]?.result?.map((log) => {
|
|
100
|
+
try {
|
|
101
|
+
return JSON.parse(log);
|
|
102
|
+
} catch {
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
}) || []).filter((record) => record !== null && typeof record === "object");
|
|
106
|
+
const { fromDate, toDate, logLevel, filters, returnPaginationResults: returnPaginationResultsInput, page: pageInput, perPage: perPageInput } = params || {};
|
|
107
|
+
const page = pageInput === 0 ? 1 : pageInput ?? 1;
|
|
108
|
+
const perPage = perPageInput ?? 100;
|
|
109
|
+
const returnPaginationResults = returnPaginationResultsInput ?? true;
|
|
110
|
+
if (filters) filteredLogs = filteredLogs.filter((log) => Object.entries(filters || {}).every(([key, value]) => log[key] === value));
|
|
111
|
+
if (logLevel) filteredLogs = filteredLogs.filter((log) => log.level === logLevel);
|
|
112
|
+
if (fromDate) filteredLogs = filteredLogs.filter((log) => new Date(log.time).getTime() >= fromDate.getTime());
|
|
113
|
+
if (toDate) filteredLogs = filteredLogs.filter((log) => new Date(log.time).getTime() <= toDate.getTime());
|
|
114
|
+
if (!returnPaginationResults) return {
|
|
115
|
+
logs: filteredLogs,
|
|
116
|
+
total: filteredLogs.length,
|
|
117
|
+
page,
|
|
118
|
+
perPage: filteredLogs.length,
|
|
119
|
+
hasMore: false
|
|
120
|
+
};
|
|
121
|
+
const total = filteredLogs.length;
|
|
122
|
+
const resolvedPerPage = perPage || 100;
|
|
123
|
+
const start = (page - 1) * resolvedPerPage;
|
|
124
|
+
const end = start + resolvedPerPage;
|
|
125
|
+
return {
|
|
126
|
+
logs: filteredLogs.slice(start, end),
|
|
127
|
+
total,
|
|
128
|
+
page,
|
|
129
|
+
perPage: resolvedPerPage,
|
|
130
|
+
hasMore: end < total
|
|
131
|
+
};
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error("Error getting logs from Upstash:", error);
|
|
134
|
+
return {
|
|
135
|
+
logs: [],
|
|
136
|
+
total: 0,
|
|
137
|
+
page: params?.page ?? 1,
|
|
138
|
+
perPage: params?.perPage ?? 100,
|
|
139
|
+
hasMore: false
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async listLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page: pageInput, perPage: perPageInput }) {
|
|
144
|
+
try {
|
|
145
|
+
const page = pageInput === 0 ? 1 : pageInput ?? 1;
|
|
146
|
+
const perPage = perPageInput ?? 100;
|
|
147
|
+
const logs = (await this.listLogs({
|
|
148
|
+
fromDate,
|
|
149
|
+
toDate,
|
|
150
|
+
logLevel,
|
|
151
|
+
filters,
|
|
152
|
+
returnPaginationResults: false
|
|
153
|
+
}))?.logs?.filter((log) => log.runId === runId) || [];
|
|
154
|
+
const total = logs.length;
|
|
155
|
+
const resolvedPerPage = perPage || 100;
|
|
156
|
+
const start = (page - 1) * resolvedPerPage;
|
|
157
|
+
const end = start + resolvedPerPage;
|
|
158
|
+
return {
|
|
159
|
+
logs: logs.slice(start, end),
|
|
160
|
+
total,
|
|
161
|
+
page,
|
|
162
|
+
perPage: resolvedPerPage,
|
|
163
|
+
hasMore: end < total
|
|
164
|
+
};
|
|
165
|
+
} catch (error) {
|
|
166
|
+
console.error("Error getting logs by runId from Upstash:", error);
|
|
167
|
+
return {
|
|
168
|
+
logs: [],
|
|
169
|
+
total: 0,
|
|
170
|
+
page: pageInput ?? 1,
|
|
171
|
+
perPage: perPageInput ?? 100,
|
|
172
|
+
hasMore: false
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
212
176
|
};
|
|
213
|
-
|
|
177
|
+
//#endregion
|
|
214
178
|
export { UpstashTransport };
|
|
215
|
-
|
|
179
|
+
|
|
216
180
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/upstash/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { LoggerTransport } from '@mastra/core/logger';\nimport type { BaseLogMessage, LogLevel } from '@mastra/core/logger';\n\nexport class UpstashTransport extends LoggerTransport {\n upstashUrl: string;\n upstashToken: string;\n listName: string;\n maxListLength: number;\n batchSize: number;\n flushInterval: number;\n logBuffer: any[];\n lastFlush: number;\n flushIntervalId: NodeJS.Timeout;\n\n constructor(opts: {\n listName?: string;\n maxListLength?: number;\n batchSize?: number;\n upstashUrl: string;\n flushInterval?: number;\n upstashToken: string;\n }) {\n super({ objectMode: true });\n\n if (!opts.upstashUrl || !opts.upstashToken) {\n throw new Error('Upstash URL and token are required');\n }\n\n this.upstashUrl = opts.upstashUrl;\n this.upstashToken = opts.upstashToken;\n this.listName = opts.listName || 'application-logs';\n this.maxListLength = opts.maxListLength || 10000;\n this.batchSize = opts.batchSize || 100;\n this.flushInterval = opts.flushInterval || 10000;\n\n this.logBuffer = [];\n this.lastFlush = Date.now();\n\n // Start flush interval\n this.flushIntervalId = setInterval(() => {\n this._flush().catch(err => {\n console.error('Error flushing logs to Upstash:', err);\n });\n }, this.flushInterval);\n }\n\n private async executeUpstashCommand(command: any[]): Promise<any> {\n const response = await fetch(`${this.upstashUrl}/pipeline`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.upstashToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify([command]),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to execute Upstash command: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n async _flush() {\n if (this.logBuffer.length === 0) {\n return;\n }\n\n const now = Date.now();\n const logs = this.logBuffer.splice(0, this.batchSize);\n\n try {\n // Prepare the Upstash Redis command\n const command = ['LPUSH', this.listName, ...logs.map(log => JSON.stringify(log))];\n\n // Trim the list if it exceeds maxListLength\n if (this.maxListLength > 0) {\n command.push('LTRIM', this.listName, 0 as any, (this.maxListLength - 1) as any);\n }\n\n // Send logs to Upstash Redis\n await this.executeUpstashCommand(command);\n this.lastFlush = now;\n } catch (error) {\n // On error, put logs back in the buffer\n this.logBuffer.unshift(...logs);\n throw error;\n }\n }\n\n _write(chunk: any, encoding?: string, callback?: (error?: Error | null) => void): boolean {\n if (typeof callback === 'function') {\n this._transform(chunk, encoding || 'utf8', callback);\n return true;\n }\n\n this._transform(chunk, encoding || 'utf8', (error: Error | null) => {\n if (error) console.error('Transform error in write:', error);\n });\n return true;\n }\n\n _transform(chunk: string, _enc: string, cb: Function) {\n try {\n // Parse the log line if it's a string\n const log = typeof chunk === 'string' ? JSON.parse(chunk) : chunk;\n\n // Add timestamp if not present\n if (!log.time) {\n log.time = Date.now();\n }\n\n // Add to buffer\n this.logBuffer.push(log);\n\n // Flush if buffer reaches batch size\n if (this.logBuffer.length >= this.batchSize) {\n this._flush().catch(err => {\n console.error('Error flushing logs to Upstash:', err);\n });\n }\n\n // Pass through the log\n cb(null, chunk);\n } catch (error) {\n cb(error);\n }\n }\n\n _destroy(err: Error, cb: Function) {\n clearInterval(this.flushIntervalId);\n\n // Final flush\n if (this.logBuffer.length > 0) {\n this._flush()\n .then(() => cb(err))\n .catch(flushErr => {\n console.error('Error in final flush:', flushErr);\n cb(err || flushErr);\n });\n } else {\n cb(err);\n }\n }\n\n async listLogs(params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean; // default true\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n // Get all logs from the list\n const command = ['LRANGE', this.listName, 0, -1];\n const response = await this.executeUpstashCommand(command);\n\n const logs =\n (response?.[0]?.result?.map((log: string) => {\n try {\n // Parse the logs from JSON strings back to objects\n return JSON.parse(log);\n } catch {\n return {};\n }\n }) as BaseLogMessage[]) || [];\n\n let filteredLogs = logs.filter(record => record !== null && typeof record === 'object');\n\n const {\n fromDate,\n toDate,\n logLevel,\n filters,\n returnPaginationResults: returnPaginationResultsInput,\n page: pageInput,\n perPage: perPageInput,\n } = params || {};\n\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const returnPaginationResults = returnPaginationResultsInput ?? true;\n\n if (filters) {\n filteredLogs = filteredLogs.filter(log =>\n Object.entries(filters || {}).every(([key, value]) => log[key as keyof BaseLogMessage] === value),\n );\n }\n\n if (logLevel) {\n filteredLogs = filteredLogs.filter(log => log.level === logLevel);\n }\n\n if (fromDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() >= fromDate!.getTime());\n }\n\n if (toDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() <= toDate!.getTime());\n }\n\n if (!returnPaginationResults) {\n return {\n logs: filteredLogs,\n total: filteredLogs.length,\n page,\n perPage: filteredLogs.length,\n hasMore: false,\n };\n }\n\n const total = filteredLogs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = filteredLogs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs from Upstash:', error);\n return {\n logs: [],\n total: 0,\n page: params?.page ?? 1,\n perPage: params?.perPage ?? 100,\n hasMore: false,\n };\n }\n }\n\n async listLogsByRunId({\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: pageInput,\n perPage: perPageInput,\n }: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const allLogs = await this.listLogs({ fromDate, toDate, logLevel, filters, returnPaginationResults: false });\n const logs = (allLogs?.logs?.filter((log: any) => log.runId === runId) || []) as BaseLogMessage[];\n const total = logs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = logs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs by runId from Upstash:', error);\n return {\n logs: [],\n total: 0,\n page: pageInput ?? 1,\n perPage: perPageInput ?? 100,\n hasMore: false,\n };\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/upstash/index.ts"],"sourcesContent":["import { LoggerTransport } from '@mastra/core/logger';\nimport type { BaseLogMessage, LogLevel } from '@mastra/core/logger';\n\nexport class UpstashTransport extends LoggerTransport {\n upstashUrl: string;\n upstashToken: string;\n listName: string;\n maxListLength: number;\n batchSize: number;\n flushInterval: number;\n logBuffer: any[];\n lastFlush: number;\n flushIntervalId: NodeJS.Timeout;\n\n constructor(opts: {\n listName?: string;\n maxListLength?: number;\n batchSize?: number;\n upstashUrl: string;\n flushInterval?: number;\n upstashToken: string;\n }) {\n super({ objectMode: true });\n\n if (!opts.upstashUrl || !opts.upstashToken) {\n throw new Error('Upstash URL and token are required');\n }\n\n this.upstashUrl = opts.upstashUrl;\n this.upstashToken = opts.upstashToken;\n this.listName = opts.listName || 'application-logs';\n this.maxListLength = opts.maxListLength || 10000;\n this.batchSize = opts.batchSize || 100;\n this.flushInterval = opts.flushInterval || 10000;\n\n this.logBuffer = [];\n this.lastFlush = Date.now();\n\n // Start flush interval\n this.flushIntervalId = setInterval(() => {\n this._flush().catch(err => {\n console.error('Error flushing logs to Upstash:', err);\n });\n }, this.flushInterval);\n }\n\n private async executeUpstashCommand(command: any[]): Promise<any> {\n const response = await fetch(`${this.upstashUrl}/pipeline`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.upstashToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify([command]),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to execute Upstash command: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n async _flush() {\n if (this.logBuffer.length === 0) {\n return;\n }\n\n const now = Date.now();\n const logs = this.logBuffer.splice(0, this.batchSize);\n\n try {\n // Prepare the Upstash Redis command\n const command = ['LPUSH', this.listName, ...logs.map(log => JSON.stringify(log))];\n\n // Trim the list if it exceeds maxListLength\n if (this.maxListLength > 0) {\n command.push('LTRIM', this.listName, 0 as any, (this.maxListLength - 1) as any);\n }\n\n // Send logs to Upstash Redis\n await this.executeUpstashCommand(command);\n this.lastFlush = now;\n } catch (error) {\n // On error, put logs back in the buffer\n this.logBuffer.unshift(...logs);\n throw error;\n }\n }\n\n _write(chunk: any, encoding?: string, callback?: (error?: Error | null) => void): boolean {\n if (typeof callback === 'function') {\n this._transform(chunk, encoding || 'utf8', callback);\n return true;\n }\n\n this._transform(chunk, encoding || 'utf8', (error: Error | null) => {\n if (error) console.error('Transform error in write:', error);\n });\n return true;\n }\n\n _transform(chunk: string, _enc: string, cb: Function) {\n try {\n // Parse the log line if it's a string\n const log = typeof chunk === 'string' ? JSON.parse(chunk) : chunk;\n\n // Add timestamp if not present\n if (!log.time) {\n log.time = Date.now();\n }\n\n // Add to buffer\n this.logBuffer.push(log);\n\n // Flush if buffer reaches batch size\n if (this.logBuffer.length >= this.batchSize) {\n this._flush().catch(err => {\n console.error('Error flushing logs to Upstash:', err);\n });\n }\n\n // Pass through the log\n cb(null, chunk);\n } catch (error) {\n cb(error);\n }\n }\n\n _destroy(err: Error, cb: Function) {\n clearInterval(this.flushIntervalId);\n\n // Final flush\n if (this.logBuffer.length > 0) {\n this._flush()\n .then(() => cb(err))\n .catch(flushErr => {\n console.error('Error in final flush:', flushErr);\n cb(err || flushErr);\n });\n } else {\n cb(err);\n }\n }\n\n async listLogs(params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean; // default true\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n // Get all logs from the list\n const command = ['LRANGE', this.listName, 0, -1];\n const response = await this.executeUpstashCommand(command);\n\n const logs =\n (response?.[0]?.result?.map((log: string) => {\n try {\n // Parse the logs from JSON strings back to objects\n return JSON.parse(log);\n } catch {\n return {};\n }\n }) as BaseLogMessage[]) || [];\n\n let filteredLogs = logs.filter(record => record !== null && typeof record === 'object');\n\n const {\n fromDate,\n toDate,\n logLevel,\n filters,\n returnPaginationResults: returnPaginationResultsInput,\n page: pageInput,\n perPage: perPageInput,\n } = params || {};\n\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const returnPaginationResults = returnPaginationResultsInput ?? true;\n\n if (filters) {\n filteredLogs = filteredLogs.filter(log =>\n Object.entries(filters || {}).every(([key, value]) => log[key as keyof BaseLogMessage] === value),\n );\n }\n\n if (logLevel) {\n filteredLogs = filteredLogs.filter(log => log.level === logLevel);\n }\n\n if (fromDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() >= fromDate!.getTime());\n }\n\n if (toDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() <= toDate!.getTime());\n }\n\n if (!returnPaginationResults) {\n return {\n logs: filteredLogs,\n total: filteredLogs.length,\n page,\n perPage: filteredLogs.length,\n hasMore: false,\n };\n }\n\n const total = filteredLogs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = filteredLogs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs from Upstash:', error);\n return {\n logs: [],\n total: 0,\n page: params?.page ?? 1,\n perPage: params?.perPage ?? 100,\n hasMore: false,\n };\n }\n }\n\n async listLogsByRunId({\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: pageInput,\n perPage: perPageInput,\n }: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const allLogs = await this.listLogs({ fromDate, toDate, logLevel, filters, returnPaginationResults: false });\n const logs = (allLogs?.logs?.filter((log: any) => log.runId === runId) || []) as BaseLogMessage[];\n const total = logs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = logs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs by runId from Upstash:', error);\n return {\n logs: [],\n total: 0,\n page: pageInput ?? 1,\n perPage: perPageInput ?? 100,\n hasMore: false,\n };\n }\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/loggers",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0-alpha.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -69,17 +69,17 @@
|
|
|
69
69
|
"pino-pretty": "^13.1.3"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
"@types/node": "22.
|
|
73
|
-
"@vitest/coverage-v8": "4.1.
|
|
74
|
-
"@vitest/ui": "4.1.
|
|
75
|
-
"eslint": "^10.
|
|
76
|
-
"
|
|
77
|
-
"tsx": "^4.
|
|
72
|
+
"@types/node": "22.20.1",
|
|
73
|
+
"@vitest/coverage-v8": "4.1.10",
|
|
74
|
+
"@vitest/ui": "4.1.10",
|
|
75
|
+
"eslint": "^10.7.0",
|
|
76
|
+
"tsdown": "0.22.9",
|
|
77
|
+
"tsx": "^4.23.1",
|
|
78
78
|
"typescript": "^6.0.3",
|
|
79
|
-
"vitest": "4.1.
|
|
80
|
-
"@internal/
|
|
81
|
-
"@internal/
|
|
82
|
-
"@mastra/core": "1.
|
|
79
|
+
"vitest": "4.1.10",
|
|
80
|
+
"@internal/types-builder": "0.0.101",
|
|
81
|
+
"@internal/lint": "0.0.126",
|
|
82
|
+
"@mastra/core": "1.63.0-alpha.0"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"@mastra/core": ">=1.0.0-0 <2.0.0-0"
|
|
@@ -88,9 +88,10 @@
|
|
|
88
88
|
"node": ">=22.13.0"
|
|
89
89
|
},
|
|
90
90
|
"scripts": {
|
|
91
|
-
"build:lib": "
|
|
92
|
-
"build:watch": "
|
|
91
|
+
"build:lib": "tsdown --silent --config tsdown.config.ts",
|
|
92
|
+
"build:watch": "tsdown --watch --silent --config tsdown.config.ts",
|
|
93
93
|
"test": "vitest run",
|
|
94
|
-
"lint": "eslint ."
|
|
94
|
+
"lint": "oxlint . && eslint .",
|
|
95
|
+
"lint:fix": "oxlint --fix . && eslint --fix ."
|
|
95
96
|
}
|
|
96
97
|
}
|