@johnboxcodes/boxlogger 0.2.1 → 0.3.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 +12 -0
- package/README.md +0 -2
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/logger.d.ts +4 -4
- package/dist/logger.js +4 -4
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -2
- package/dist/stores/sqlite.d.ts +0 -204
- package/dist/stores/sqlite.d.ts.map +0 -1
- package/dist/stores/sqlite.js +0 -608
- package/dist/stores/sqlite.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.0] - 2026-02-03
|
|
9
|
+
|
|
10
|
+
### Removed
|
|
11
|
+
- **BREAKING: SQLite provider completely removed**
|
|
12
|
+
- No native dependencies (better-sqlite3 removed)
|
|
13
|
+
- Simplified to console and memory providers only
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Package now works everywhere without any native dependencies
|
|
17
|
+
- Smaller bundle size
|
|
18
|
+
- Perfect for Next.js Edge runtime and browser environments
|
|
19
|
+
|
|
8
20
|
## [0.2.0] - 2026-02-02
|
|
9
21
|
|
|
10
22
|
### Added
|
package/README.md
CHANGED
|
@@ -74,7 +74,6 @@ await Sentry.init('console', {
|
|
|
74
74
|
```typescript
|
|
75
75
|
import * as Sentry from '@johnboxcodes/boxlogger';
|
|
76
76
|
|
|
77
|
-
await Sentry.init('sqlite', {
|
|
78
77
|
filename: './logs.db',
|
|
79
78
|
service: 'my-service',
|
|
80
79
|
environment: 'production',
|
|
@@ -111,7 +110,6 @@ const logger = await create(new MyCustomStore(), {
|
|
|
111
110
|
Initialize the logger with a storage provider.
|
|
112
111
|
|
|
113
112
|
```typescript
|
|
114
|
-
await Sentry.init('sqlite', {
|
|
115
113
|
filename: './logs.db',
|
|
116
114
|
service: 'my-api',
|
|
117
115
|
environment: 'production',
|
package/dist/browser.js
CHANGED
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AA+B3B,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AA+B3B,qDAAqD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @example Quick Start
|
|
10
10
|
* ```typescript
|
|
11
|
-
* import * as Sentry from '@
|
|
11
|
+
* import * as Sentry from '@johnboxcodes/boxlogger';
|
|
12
12
|
*
|
|
13
|
-
* // Initialize with
|
|
14
|
-
* await Sentry.init('
|
|
13
|
+
* // Initialize with Console storage
|
|
14
|
+
* await Sentry.init('console', { service: 'my-app' });
|
|
15
15
|
*
|
|
16
16
|
* // 1. captureException - The Error Workhorse
|
|
17
17
|
* try {
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @example Quick Start
|
|
10
10
|
* ```typescript
|
|
11
|
-
* import * as Sentry from '@
|
|
11
|
+
* import * as Sentry from '@johnboxcodes/boxlogger';
|
|
12
12
|
*
|
|
13
|
-
* // Initialize with
|
|
14
|
-
* await Sentry.init('
|
|
13
|
+
* // Initialize with Console storage
|
|
14
|
+
* await Sentry.init('console', { service: 'my-app' });
|
|
15
15
|
*
|
|
16
16
|
* // 1. captureException - The Error Workhorse
|
|
17
17
|
* try {
|
package/dist/logger.d.ts
CHANGED
|
@@ -15,14 +15,14 @@ import type { LoggerConfig, LogLevel, LogEntry, LogMetadata, Session, StoreProvi
|
|
|
15
15
|
* - Multiple log levels (fatal, error, warn, info, debug, trace)
|
|
16
16
|
* - Session tracking
|
|
17
17
|
* - Structured metadata (tags, user, request, error info)
|
|
18
|
-
* - Pluggable storage backends (
|
|
18
|
+
* - Pluggable storage backends (Console, Memory)
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
22
|
-
* import { Logger } from '@
|
|
23
|
-
* import {
|
|
22
|
+
* import { Logger } from '@johnboxcodes/boxlogger';
|
|
23
|
+
* import { ConsoleStoreProvider } from '@johnboxcodes/boxlogger/console';
|
|
24
24
|
*
|
|
25
|
-
* const store = new
|
|
25
|
+
* const store = new ConsoleStoreProvider();
|
|
26
26
|
* await store.init();
|
|
27
27
|
*
|
|
28
28
|
* const logger = new Logger({
|
package/dist/logger.js
CHANGED
|
@@ -48,14 +48,14 @@ const LOG_LEVEL_VALUES = {
|
|
|
48
48
|
* - Multiple log levels (fatal, error, warn, info, debug, trace)
|
|
49
49
|
* - Session tracking
|
|
50
50
|
* - Structured metadata (tags, user, request, error info)
|
|
51
|
-
* - Pluggable storage backends (
|
|
51
|
+
* - Pluggable storage backends (Console, Memory)
|
|
52
52
|
*
|
|
53
53
|
* @example
|
|
54
54
|
* ```typescript
|
|
55
|
-
* import { Logger } from '@
|
|
56
|
-
* import {
|
|
55
|
+
* import { Logger } from '@johnboxcodes/boxlogger';
|
|
56
|
+
* import { ConsoleStoreProvider } from '@johnboxcodes/boxlogger/console';
|
|
57
57
|
*
|
|
58
|
-
* const store = new
|
|
58
|
+
* const store = new ConsoleStoreProvider();
|
|
59
59
|
* await store.init();
|
|
60
60
|
*
|
|
61
61
|
* const logger = new Logger({
|
package/dist/types.d.ts
CHANGED
|
@@ -213,7 +213,7 @@ export interface StoreProviderConfig {
|
|
|
213
213
|
* All methods are async to support both sync and async stores.
|
|
214
214
|
*/
|
|
215
215
|
export interface StoreProvider {
|
|
216
|
-
/** Provider name (e.g., '
|
|
216
|
+
/** Provider name (e.g., 'console', 'memory') */
|
|
217
217
|
readonly name: string;
|
|
218
218
|
/**
|
|
219
219
|
* Check if the store is ready for operations
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@johnboxcodes/boxlogger",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Lightweight, Sentry-compatible backend logger with pluggable storage providers (SQLite, Memory) for Node.js",
|
|
5
5
|
"author": "johnbox codes",
|
|
6
6
|
"license": "MIT",
|
|
@@ -67,7 +67,6 @@
|
|
|
67
67
|
"logger",
|
|
68
68
|
"logging",
|
|
69
69
|
"backend",
|
|
70
|
-
"sqlite",
|
|
71
70
|
"storage",
|
|
72
71
|
"nodejs",
|
|
73
72
|
"sentry",
|
package/dist/stores/sqlite.d.ts
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite Store Provider
|
|
3
|
-
*
|
|
4
|
-
* Persistent storage using better-sqlite3 - the most reliable SQLite library for Node.js.
|
|
5
|
-
*
|
|
6
|
-
* @module stores/sqlite
|
|
7
|
-
* @packageDocumentation
|
|
8
|
-
*/
|
|
9
|
-
import Database, { type Database as DatabaseType } from 'better-sqlite3';
|
|
10
|
-
import { BaseStoreProvider } from './base.js';
|
|
11
|
-
import type { StoreProviderConfig, LogEntry, Session, LogFilter, SessionFilter, StoreStats } from '../types.js';
|
|
12
|
-
/**
|
|
13
|
-
* Configuration options for SQLite store
|
|
14
|
-
*/
|
|
15
|
-
export interface SQLiteStoreConfig extends StoreProviderConfig {
|
|
16
|
-
/**
|
|
17
|
-
* Path to SQLite database file
|
|
18
|
-
* @default ':memory:' for in-memory database
|
|
19
|
-
*/
|
|
20
|
-
filename?: string;
|
|
21
|
-
/**
|
|
22
|
-
* Enable WAL mode for better concurrent read performance
|
|
23
|
-
* @default true
|
|
24
|
-
*/
|
|
25
|
-
walMode?: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Cache size in KB (negative for number of pages)
|
|
28
|
-
* @default -2000 (2000 pages)
|
|
29
|
-
*/
|
|
30
|
-
cacheSize?: number;
|
|
31
|
-
/**
|
|
32
|
-
* Enable foreign keys
|
|
33
|
-
* @default true
|
|
34
|
-
*/
|
|
35
|
-
foreignKeys?: boolean;
|
|
36
|
-
/**
|
|
37
|
-
* Create indexes for common queries
|
|
38
|
-
* @default true
|
|
39
|
-
*/
|
|
40
|
-
createIndexes?: boolean;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* SQLite store provider using better-sqlite3
|
|
44
|
-
*
|
|
45
|
-
* @remarks
|
|
46
|
-
* Uses synchronous better-sqlite3 for maximum performance and reliability.
|
|
47
|
-
* Supports both file-based and in-memory databases.
|
|
48
|
-
*
|
|
49
|
-
* Features:
|
|
50
|
-
* - WAL mode for concurrent reads
|
|
51
|
-
* - Automatic schema creation and migration
|
|
52
|
-
* - Full-text search on message field
|
|
53
|
-
* - Efficient indexes for common query patterns
|
|
54
|
-
* - Transaction support for bulk operations
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* ```typescript
|
|
58
|
-
* import { SQLiteStoreProvider } from '@nodelogger/core/sqlite';
|
|
59
|
-
*
|
|
60
|
-
* // File-based persistent storage
|
|
61
|
-
* const store = new SQLiteStoreProvider({
|
|
62
|
-
* filename: './logs.db',
|
|
63
|
-
* walMode: true
|
|
64
|
-
* });
|
|
65
|
-
* await store.init();
|
|
66
|
-
*
|
|
67
|
-
* // In-memory (fast, non-persistent)
|
|
68
|
-
* const memStore = new SQLiteStoreProvider();
|
|
69
|
-
* await memStore.init();
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
export declare class SQLiteStoreProvider extends BaseStoreProvider {
|
|
73
|
-
readonly name = "sqlite";
|
|
74
|
-
private db;
|
|
75
|
-
private sqliteConfig;
|
|
76
|
-
constructor(config?: SQLiteStoreConfig);
|
|
77
|
-
/**
|
|
78
|
-
* Initialize the SQLite database
|
|
79
|
-
*/
|
|
80
|
-
init(): Promise<void>;
|
|
81
|
-
/**
|
|
82
|
-
* Close the database connection
|
|
83
|
-
*/
|
|
84
|
-
close(): Promise<void>;
|
|
85
|
-
/**
|
|
86
|
-
* Create database schema
|
|
87
|
-
*/
|
|
88
|
-
private createSchema;
|
|
89
|
-
/**
|
|
90
|
-
* Save a log entry
|
|
91
|
-
* @param entry - Log entry to save
|
|
92
|
-
*/
|
|
93
|
-
saveLog(entry: LogEntry): Promise<void>;
|
|
94
|
-
/**
|
|
95
|
-
* Save multiple log entries in a transaction
|
|
96
|
-
* @param entries - Log entries to save
|
|
97
|
-
*/
|
|
98
|
-
saveLogs(entries: LogEntry[]): Promise<void>;
|
|
99
|
-
/**
|
|
100
|
-
* Get log entries matching filter
|
|
101
|
-
* @param filter - Query filter
|
|
102
|
-
* @returns Matching log entries
|
|
103
|
-
*/
|
|
104
|
-
getLogs(filter?: LogFilter): Promise<LogEntry[]>;
|
|
105
|
-
/**
|
|
106
|
-
* Delete log entries matching filter
|
|
107
|
-
* @param filter - Query filter
|
|
108
|
-
* @returns Number of deleted entries
|
|
109
|
-
*/
|
|
110
|
-
deleteLogs(filter?: LogFilter): Promise<number>;
|
|
111
|
-
/**
|
|
112
|
-
* Count log entries matching filter
|
|
113
|
-
* @param filter - Query filter
|
|
114
|
-
* @returns Count of matching entries
|
|
115
|
-
*/
|
|
116
|
-
countLogs(filter?: LogFilter): Promise<number>;
|
|
117
|
-
/**
|
|
118
|
-
* Enforce maximum log limit by deleting oldest entries
|
|
119
|
-
*/
|
|
120
|
-
private enforceLogLimit;
|
|
121
|
-
/**
|
|
122
|
-
* Create a new session
|
|
123
|
-
* @param session - Session to create
|
|
124
|
-
*/
|
|
125
|
-
createSession(session: Session): Promise<void>;
|
|
126
|
-
/**
|
|
127
|
-
* Update an existing session
|
|
128
|
-
* @param sessionId - Session ID
|
|
129
|
-
* @param updates - Partial session data
|
|
130
|
-
*/
|
|
131
|
-
updateSession(sessionId: string, updates: Partial<Session>): Promise<void>;
|
|
132
|
-
/**
|
|
133
|
-
* Get a session by ID
|
|
134
|
-
* @param sessionId - Session ID
|
|
135
|
-
* @returns Session or null
|
|
136
|
-
*/
|
|
137
|
-
getSession(sessionId: string): Promise<Session | null>;
|
|
138
|
-
/**
|
|
139
|
-
* Get sessions matching filter
|
|
140
|
-
* @param filter - Query filter
|
|
141
|
-
* @returns Matching sessions
|
|
142
|
-
*/
|
|
143
|
-
getSessions(filter?: SessionFilter): Promise<Session[]>;
|
|
144
|
-
/**
|
|
145
|
-
* Delete a session and its logs
|
|
146
|
-
* @param sessionId - Session ID
|
|
147
|
-
*/
|
|
148
|
-
deleteSession(sessionId: string): Promise<void>;
|
|
149
|
-
/**
|
|
150
|
-
* Enforce maximum session limit
|
|
151
|
-
*/
|
|
152
|
-
private enforceSessionLimit;
|
|
153
|
-
/**
|
|
154
|
-
* Clean up old data
|
|
155
|
-
* @param olderThan - Delete entries older than this date
|
|
156
|
-
* @returns Number of deleted entries
|
|
157
|
-
*/
|
|
158
|
-
cleanup(olderThan: Date): Promise<number>;
|
|
159
|
-
/**
|
|
160
|
-
* Get storage statistics
|
|
161
|
-
* @returns Storage stats
|
|
162
|
-
*/
|
|
163
|
-
getStats(): Promise<StoreStats>;
|
|
164
|
-
/**
|
|
165
|
-
* Build WHERE clause from filter
|
|
166
|
-
*/
|
|
167
|
-
private buildWhereClause;
|
|
168
|
-
/**
|
|
169
|
-
* Build complete SELECT query from filter
|
|
170
|
-
*/
|
|
171
|
-
private buildLogQuery;
|
|
172
|
-
/**
|
|
173
|
-
* Convert SQLite row to LogEntry
|
|
174
|
-
*/
|
|
175
|
-
private rowToLogEntry;
|
|
176
|
-
/**
|
|
177
|
-
* Convert SQLite row to Session
|
|
178
|
-
*/
|
|
179
|
-
private rowToSession;
|
|
180
|
-
/**
|
|
181
|
-
* Execute raw SQL query
|
|
182
|
-
* @param sql - SQL query
|
|
183
|
-
* @param params - Query parameters
|
|
184
|
-
* @returns Query results
|
|
185
|
-
*/
|
|
186
|
-
query<T>(sql: string, ...params: unknown[]): T[];
|
|
187
|
-
/**
|
|
188
|
-
* Execute raw SQL statement
|
|
189
|
-
* @param sql - SQL statement
|
|
190
|
-
* @param params - Statement parameters
|
|
191
|
-
* @returns Run result
|
|
192
|
-
*/
|
|
193
|
-
execute(sql: string, ...params: unknown[]): Database.RunResult;
|
|
194
|
-
/**
|
|
195
|
-
* Run VACUUM to optimize database
|
|
196
|
-
*/
|
|
197
|
-
vacuum(): void;
|
|
198
|
-
/**
|
|
199
|
-
* Get the underlying better-sqlite3 database instance
|
|
200
|
-
* @returns Database instance or null
|
|
201
|
-
*/
|
|
202
|
-
getDatabase(): DatabaseType | null;
|
|
203
|
-
}
|
|
204
|
-
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/stores/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/stores/sqlite.js
DELETED
|
@@ -1,608 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite Store Provider
|
|
3
|
-
*
|
|
4
|
-
* Persistent storage using better-sqlite3 - the most reliable SQLite library for Node.js.
|
|
5
|
-
*
|
|
6
|
-
* @module stores/sqlite
|
|
7
|
-
* @packageDocumentation
|
|
8
|
-
*/
|
|
9
|
-
import Database from 'better-sqlite3';
|
|
10
|
-
import { BaseStoreProvider } from './base.js';
|
|
11
|
-
/**
|
|
12
|
-
* SQLite store provider using better-sqlite3
|
|
13
|
-
*
|
|
14
|
-
* @remarks
|
|
15
|
-
* Uses synchronous better-sqlite3 for maximum performance and reliability.
|
|
16
|
-
* Supports both file-based and in-memory databases.
|
|
17
|
-
*
|
|
18
|
-
* Features:
|
|
19
|
-
* - WAL mode for concurrent reads
|
|
20
|
-
* - Automatic schema creation and migration
|
|
21
|
-
* - Full-text search on message field
|
|
22
|
-
* - Efficient indexes for common query patterns
|
|
23
|
-
* - Transaction support for bulk operations
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* import { SQLiteStoreProvider } from '@nodelogger/core/sqlite';
|
|
28
|
-
*
|
|
29
|
-
* // File-based persistent storage
|
|
30
|
-
* const store = new SQLiteStoreProvider({
|
|
31
|
-
* filename: './logs.db',
|
|
32
|
-
* walMode: true
|
|
33
|
-
* });
|
|
34
|
-
* await store.init();
|
|
35
|
-
*
|
|
36
|
-
* // In-memory (fast, non-persistent)
|
|
37
|
-
* const memStore = new SQLiteStoreProvider();
|
|
38
|
-
* await memStore.init();
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export class SQLiteStoreProvider extends BaseStoreProvider {
|
|
42
|
-
name = 'sqlite';
|
|
43
|
-
db = null;
|
|
44
|
-
sqliteConfig;
|
|
45
|
-
constructor(config) {
|
|
46
|
-
super(config);
|
|
47
|
-
this.sqliteConfig = {
|
|
48
|
-
maxLogs: config?.maxLogs ?? 100000,
|
|
49
|
-
maxSessions: config?.maxSessions ?? 10000,
|
|
50
|
-
cleanupInterval: config?.cleanupInterval ?? 0,
|
|
51
|
-
retentionPeriod: config?.retentionPeriod ?? 30 * 24 * 60 * 60 * 1000,
|
|
52
|
-
filename: config?.filename ?? ':memory:',
|
|
53
|
-
walMode: config?.walMode ?? true,
|
|
54
|
-
cacheSize: config?.cacheSize ?? -2000,
|
|
55
|
-
foreignKeys: config?.foreignKeys ?? true,
|
|
56
|
-
createIndexes: config?.createIndexes ?? true,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Initialize the SQLite database
|
|
61
|
-
*/
|
|
62
|
-
async init() {
|
|
63
|
-
this.db = new Database(this.sqliteConfig.filename);
|
|
64
|
-
// Configure database
|
|
65
|
-
if (this.sqliteConfig.walMode && this.sqliteConfig.filename !== ':memory:') {
|
|
66
|
-
this.db.pragma('journal_mode = WAL');
|
|
67
|
-
}
|
|
68
|
-
this.db.pragma(`cache_size = ${this.sqliteConfig.cacheSize}`);
|
|
69
|
-
if (this.sqliteConfig.foreignKeys) {
|
|
70
|
-
this.db.pragma('foreign_keys = ON');
|
|
71
|
-
}
|
|
72
|
-
// Create schema
|
|
73
|
-
this.createSchema();
|
|
74
|
-
this._ready = true;
|
|
75
|
-
this.startCleanupTimer();
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Close the database connection
|
|
79
|
-
*/
|
|
80
|
-
async close() {
|
|
81
|
-
this.stopCleanupTimer();
|
|
82
|
-
if (this.db) {
|
|
83
|
-
this.db.close();
|
|
84
|
-
this.db = null;
|
|
85
|
-
}
|
|
86
|
-
this._ready = false;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Create database schema
|
|
90
|
-
*/
|
|
91
|
-
createSchema() {
|
|
92
|
-
if (!this.db)
|
|
93
|
-
return;
|
|
94
|
-
// Logs table
|
|
95
|
-
this.db.exec(`
|
|
96
|
-
CREATE TABLE IF NOT EXISTS logs (
|
|
97
|
-
id TEXT PRIMARY KEY,
|
|
98
|
-
timestamp TEXT NOT NULL,
|
|
99
|
-
level TEXT NOT NULL,
|
|
100
|
-
message TEXT NOT NULL,
|
|
101
|
-
logger TEXT,
|
|
102
|
-
session_id TEXT,
|
|
103
|
-
service TEXT,
|
|
104
|
-
environment TEXT,
|
|
105
|
-
release TEXT,
|
|
106
|
-
hostname TEXT,
|
|
107
|
-
pid INTEGER,
|
|
108
|
-
metadata TEXT,
|
|
109
|
-
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
110
|
-
)
|
|
111
|
-
`);
|
|
112
|
-
// Sessions table
|
|
113
|
-
this.db.exec(`
|
|
114
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
115
|
-
id TEXT PRIMARY KEY,
|
|
116
|
-
started_at TEXT NOT NULL,
|
|
117
|
-
ended_at TEXT,
|
|
118
|
-
status TEXT NOT NULL DEFAULT 'active',
|
|
119
|
-
error_count INTEGER DEFAULT 0,
|
|
120
|
-
duration INTEGER,
|
|
121
|
-
user_data TEXT,
|
|
122
|
-
attributes TEXT,
|
|
123
|
-
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
124
|
-
)
|
|
125
|
-
`);
|
|
126
|
-
// Create indexes for common query patterns
|
|
127
|
-
if (this.sqliteConfig.createIndexes) {
|
|
128
|
-
this.db.exec(`
|
|
129
|
-
CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON logs(timestamp DESC);
|
|
130
|
-
CREATE INDEX IF NOT EXISTS idx_logs_level ON logs(level);
|
|
131
|
-
CREATE INDEX IF NOT EXISTS idx_logs_session_id ON logs(session_id);
|
|
132
|
-
CREATE INDEX IF NOT EXISTS idx_logs_service ON logs(service);
|
|
133
|
-
CREATE INDEX IF NOT EXISTS idx_logs_environment ON logs(environment);
|
|
134
|
-
CREATE INDEX IF NOT EXISTS idx_logs_level_timestamp ON logs(level, timestamp DESC);
|
|
135
|
-
|
|
136
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
|
|
137
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_started_at ON sessions(started_at DESC);
|
|
138
|
-
`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// =========================================================================
|
|
142
|
-
// Log Operations
|
|
143
|
-
// =========================================================================
|
|
144
|
-
/**
|
|
145
|
-
* Save a log entry
|
|
146
|
-
* @param entry - Log entry to save
|
|
147
|
-
*/
|
|
148
|
-
async saveLog(entry) {
|
|
149
|
-
this.ensureReady();
|
|
150
|
-
const stmt = this.db.prepare(`
|
|
151
|
-
INSERT INTO logs (id, timestamp, level, message, logger, session_id,
|
|
152
|
-
service, environment, release, hostname, pid, metadata)
|
|
153
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
154
|
-
`);
|
|
155
|
-
stmt.run(entry.id || this.generateId(), entry.timestamp || this.now(), entry.level, entry.message, entry.logger ?? null, entry.sessionId ?? null, entry.service ?? null, entry.environment ?? null, entry.release ?? null, entry.hostname ?? null, entry.pid ?? null, entry.metadata ? JSON.stringify(entry.metadata) : null);
|
|
156
|
-
// Enforce max logs limit
|
|
157
|
-
await this.enforceLogLimit();
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Save multiple log entries in a transaction
|
|
161
|
-
* @param entries - Log entries to save
|
|
162
|
-
*/
|
|
163
|
-
async saveLogs(entries) {
|
|
164
|
-
this.ensureReady();
|
|
165
|
-
const stmt = this.db.prepare(`
|
|
166
|
-
INSERT INTO logs (id, timestamp, level, message, logger, session_id,
|
|
167
|
-
service, environment, release, hostname, pid, metadata)
|
|
168
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
169
|
-
`);
|
|
170
|
-
const insertMany = this.db.transaction((logs) => {
|
|
171
|
-
for (const entry of logs) {
|
|
172
|
-
stmt.run(entry.id || this.generateId(), entry.timestamp || this.now(), entry.level, entry.message, entry.logger ?? null, entry.sessionId ?? null, entry.service ?? null, entry.environment ?? null, entry.release ?? null, entry.hostname ?? null, entry.pid ?? null, entry.metadata ? JSON.stringify(entry.metadata) : null);
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
insertMany(entries);
|
|
176
|
-
await this.enforceLogLimit();
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Get log entries matching filter
|
|
180
|
-
* @param filter - Query filter
|
|
181
|
-
* @returns Matching log entries
|
|
182
|
-
*/
|
|
183
|
-
async getLogs(filter) {
|
|
184
|
-
this.ensureReady();
|
|
185
|
-
const { sql, params } = this.buildLogQuery(filter);
|
|
186
|
-
const stmt = this.db.prepare(sql);
|
|
187
|
-
const rows = stmt.all(...params);
|
|
188
|
-
return rows.map((row) => this.rowToLogEntry(row));
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Delete log entries matching filter
|
|
192
|
-
* @param filter - Query filter
|
|
193
|
-
* @returns Number of deleted entries
|
|
194
|
-
*/
|
|
195
|
-
async deleteLogs(filter) {
|
|
196
|
-
this.ensureReady();
|
|
197
|
-
if (!filter) {
|
|
198
|
-
const result = this.db.prepare('DELETE FROM logs').run();
|
|
199
|
-
return result.changes;
|
|
200
|
-
}
|
|
201
|
-
const { whereClauses, params } = this.buildWhereClause(filter);
|
|
202
|
-
const sql = `DELETE FROM logs${whereClauses ? ` WHERE ${whereClauses}` : ''}`;
|
|
203
|
-
const result = this.db.prepare(sql).run(...params);
|
|
204
|
-
return result.changes;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Count log entries matching filter
|
|
208
|
-
* @param filter - Query filter
|
|
209
|
-
* @returns Count of matching entries
|
|
210
|
-
*/
|
|
211
|
-
async countLogs(filter) {
|
|
212
|
-
this.ensureReady();
|
|
213
|
-
const { whereClauses, params } = this.buildWhereClause(filter);
|
|
214
|
-
const sql = `SELECT COUNT(*) as count FROM logs${whereClauses ? ` WHERE ${whereClauses}` : ''}`;
|
|
215
|
-
const row = this.db.prepare(sql).get(...params);
|
|
216
|
-
return row.count;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Enforce maximum log limit by deleting oldest entries
|
|
220
|
-
*/
|
|
221
|
-
async enforceLogLimit() {
|
|
222
|
-
const count = await this.countLogs();
|
|
223
|
-
if (count > this.sqliteConfig.maxLogs) {
|
|
224
|
-
const excess = count - this.sqliteConfig.maxLogs;
|
|
225
|
-
this.db.prepare(`
|
|
226
|
-
DELETE FROM logs WHERE id IN (
|
|
227
|
-
SELECT id FROM logs ORDER BY timestamp ASC LIMIT ?
|
|
228
|
-
)
|
|
229
|
-
`).run(excess);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
// =========================================================================
|
|
233
|
-
// Session Operations
|
|
234
|
-
// =========================================================================
|
|
235
|
-
/**
|
|
236
|
-
* Create a new session
|
|
237
|
-
* @param session - Session to create
|
|
238
|
-
*/
|
|
239
|
-
async createSession(session) {
|
|
240
|
-
this.ensureReady();
|
|
241
|
-
const stmt = this.db.prepare(`
|
|
242
|
-
INSERT INTO sessions (id, started_at, ended_at, status, error_count,
|
|
243
|
-
duration, user_data, attributes)
|
|
244
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
245
|
-
`);
|
|
246
|
-
stmt.run(session.id || this.generateId(), session.startedAt || this.now(), session.endedAt ?? null, session.status || 'active', session.errorCount || 0, session.duration ?? null, session.user ? JSON.stringify(session.user) : null, session.attributes ? JSON.stringify(session.attributes) : null);
|
|
247
|
-
// Enforce max sessions limit
|
|
248
|
-
await this.enforceSessionLimit();
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Update an existing session
|
|
252
|
-
* @param sessionId - Session ID
|
|
253
|
-
* @param updates - Partial session data
|
|
254
|
-
*/
|
|
255
|
-
async updateSession(sessionId, updates) {
|
|
256
|
-
this.ensureReady();
|
|
257
|
-
const setClauses = [];
|
|
258
|
-
const params = [];
|
|
259
|
-
if (updates.endedAt !== undefined) {
|
|
260
|
-
setClauses.push('ended_at = ?');
|
|
261
|
-
params.push(updates.endedAt);
|
|
262
|
-
}
|
|
263
|
-
if (updates.status !== undefined) {
|
|
264
|
-
setClauses.push('status = ?');
|
|
265
|
-
params.push(updates.status);
|
|
266
|
-
}
|
|
267
|
-
if (updates.errorCount !== undefined) {
|
|
268
|
-
setClauses.push('error_count = ?');
|
|
269
|
-
params.push(updates.errorCount);
|
|
270
|
-
}
|
|
271
|
-
if (updates.duration !== undefined) {
|
|
272
|
-
setClauses.push('duration = ?');
|
|
273
|
-
params.push(updates.duration);
|
|
274
|
-
}
|
|
275
|
-
if (updates.user !== undefined) {
|
|
276
|
-
setClauses.push('user_data = ?');
|
|
277
|
-
params.push(updates.user ? JSON.stringify(updates.user) : null);
|
|
278
|
-
}
|
|
279
|
-
if (updates.attributes !== undefined) {
|
|
280
|
-
setClauses.push('attributes = ?');
|
|
281
|
-
params.push(updates.attributes ? JSON.stringify(updates.attributes) : null);
|
|
282
|
-
}
|
|
283
|
-
if (setClauses.length === 0)
|
|
284
|
-
return;
|
|
285
|
-
params.push(sessionId);
|
|
286
|
-
const sql = `UPDATE sessions SET ${setClauses.join(', ')} WHERE id = ?`;
|
|
287
|
-
const result = this.db.prepare(sql).run(...params);
|
|
288
|
-
if (result.changes === 0) {
|
|
289
|
-
throw new Error(`Session not found: ${sessionId}`);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Get a session by ID
|
|
294
|
-
* @param sessionId - Session ID
|
|
295
|
-
* @returns Session or null
|
|
296
|
-
*/
|
|
297
|
-
async getSession(sessionId) {
|
|
298
|
-
this.ensureReady();
|
|
299
|
-
const row = this.db.prepare('SELECT * FROM sessions WHERE id = ?').get(sessionId);
|
|
300
|
-
return row ? this.rowToSession(row) : null;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Get sessions matching filter
|
|
304
|
-
* @param filter - Query filter
|
|
305
|
-
* @returns Matching sessions
|
|
306
|
-
*/
|
|
307
|
-
async getSessions(filter) {
|
|
308
|
-
this.ensureReady();
|
|
309
|
-
let sql = 'SELECT * FROM sessions';
|
|
310
|
-
const params = [];
|
|
311
|
-
const whereClauses = [];
|
|
312
|
-
if (filter?.status) {
|
|
313
|
-
const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
|
|
314
|
-
whereClauses.push(`status IN (${statuses.map(() => '?').join(',')})`);
|
|
315
|
-
params.push(...statuses);
|
|
316
|
-
}
|
|
317
|
-
if (filter?.userId !== undefined) {
|
|
318
|
-
whereClauses.push('json_extract(user_data, "$.id") = ?');
|
|
319
|
-
params.push(String(filter.userId));
|
|
320
|
-
}
|
|
321
|
-
if (filter?.startTime) {
|
|
322
|
-
whereClauses.push('started_at >= ?');
|
|
323
|
-
params.push(filter.startTime instanceof Date
|
|
324
|
-
? filter.startTime.toISOString()
|
|
325
|
-
: filter.startTime);
|
|
326
|
-
}
|
|
327
|
-
if (filter?.endTime) {
|
|
328
|
-
whereClauses.push('started_at <= ?');
|
|
329
|
-
params.push(filter.endTime instanceof Date ? filter.endTime.toISOString() : filter.endTime);
|
|
330
|
-
}
|
|
331
|
-
if (whereClauses.length > 0) {
|
|
332
|
-
sql += ` WHERE ${whereClauses.join(' AND ')}`;
|
|
333
|
-
}
|
|
334
|
-
sql += ' ORDER BY started_at DESC';
|
|
335
|
-
if (filter?.limit) {
|
|
336
|
-
sql += ' LIMIT ?';
|
|
337
|
-
params.push(filter.limit);
|
|
338
|
-
}
|
|
339
|
-
if (filter?.offset) {
|
|
340
|
-
sql += ' OFFSET ?';
|
|
341
|
-
params.push(filter.offset);
|
|
342
|
-
}
|
|
343
|
-
const rows = this.db.prepare(sql).all(...params);
|
|
344
|
-
return rows.map((row) => this.rowToSession(row));
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Delete a session and its logs
|
|
348
|
-
* @param sessionId - Session ID
|
|
349
|
-
*/
|
|
350
|
-
async deleteSession(sessionId) {
|
|
351
|
-
this.ensureReady();
|
|
352
|
-
const deleteAll = this.db.transaction(() => {
|
|
353
|
-
this.db.prepare('DELETE FROM logs WHERE session_id = ?').run(sessionId);
|
|
354
|
-
this.db.prepare('DELETE FROM sessions WHERE id = ?').run(sessionId);
|
|
355
|
-
});
|
|
356
|
-
deleteAll();
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* Enforce maximum session limit
|
|
360
|
-
*/
|
|
361
|
-
async enforceSessionLimit() {
|
|
362
|
-
const row = this.db.prepare('SELECT COUNT(*) as count FROM sessions').get();
|
|
363
|
-
if (row.count > this.sqliteConfig.maxSessions) {
|
|
364
|
-
const excess = row.count - this.sqliteConfig.maxSessions;
|
|
365
|
-
this.db.prepare(`
|
|
366
|
-
DELETE FROM sessions WHERE id IN (
|
|
367
|
-
SELECT id FROM sessions
|
|
368
|
-
WHERE status != 'active'
|
|
369
|
-
ORDER BY started_at ASC LIMIT ?
|
|
370
|
-
)
|
|
371
|
-
`).run(excess);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
// =========================================================================
|
|
375
|
-
// Maintenance Operations
|
|
376
|
-
// =========================================================================
|
|
377
|
-
/**
|
|
378
|
-
* Clean up old data
|
|
379
|
-
* @param olderThan - Delete entries older than this date
|
|
380
|
-
* @returns Number of deleted entries
|
|
381
|
-
*/
|
|
382
|
-
async cleanup(olderThan) {
|
|
383
|
-
this.ensureReady();
|
|
384
|
-
const cutoff = olderThan.toISOString();
|
|
385
|
-
let deleted = 0;
|
|
386
|
-
const cleanupTx = this.db.transaction(() => {
|
|
387
|
-
// Delete old logs
|
|
388
|
-
const logsResult = this.db.prepare('DELETE FROM logs WHERE timestamp < ?').run(cutoff);
|
|
389
|
-
deleted += logsResult.changes;
|
|
390
|
-
// Delete old ended sessions
|
|
391
|
-
const sessionsResult = this.db.prepare("DELETE FROM sessions WHERE status != 'active' AND ended_at < ?").run(cutoff);
|
|
392
|
-
deleted += sessionsResult.changes;
|
|
393
|
-
});
|
|
394
|
-
cleanupTx();
|
|
395
|
-
return deleted;
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* Get storage statistics
|
|
399
|
-
* @returns Storage stats
|
|
400
|
-
*/
|
|
401
|
-
async getStats() {
|
|
402
|
-
this.ensureReady();
|
|
403
|
-
const totalLogs = this.db.prepare('SELECT COUNT(*) as count FROM logs').get()
|
|
404
|
-
.count;
|
|
405
|
-
const totalSessions = this.db.prepare('SELECT COUNT(*) as count FROM sessions').get().count;
|
|
406
|
-
const activeSessions = this.db.prepare("SELECT COUNT(*) as count FROM sessions WHERE status = 'active'").get().count;
|
|
407
|
-
// Get logs by level
|
|
408
|
-
const levelRows = this.db.prepare('SELECT level, COUNT(*) as count FROM logs GROUP BY level').all();
|
|
409
|
-
const logsByLevel = {
|
|
410
|
-
fatal: 0,
|
|
411
|
-
error: 0,
|
|
412
|
-
warn: 0,
|
|
413
|
-
info: 0,
|
|
414
|
-
debug: 0,
|
|
415
|
-
trace: 0,
|
|
416
|
-
};
|
|
417
|
-
for (const row of levelRows) {
|
|
418
|
-
logsByLevel[row.level] = row.count;
|
|
419
|
-
}
|
|
420
|
-
// Get oldest and newest logs
|
|
421
|
-
const oldest = this.db.prepare('SELECT timestamp FROM logs ORDER BY timestamp ASC LIMIT 1').get();
|
|
422
|
-
const newest = this.db.prepare('SELECT timestamp FROM logs ORDER BY timestamp DESC LIMIT 1').get();
|
|
423
|
-
// Get database size (for file-based databases)
|
|
424
|
-
let sizeBytes;
|
|
425
|
-
if (this.sqliteConfig.filename !== ':memory:') {
|
|
426
|
-
try {
|
|
427
|
-
const pageCount = this.db.pragma('page_count')[0]?.page_count;
|
|
428
|
-
const pageSize = this.db.pragma('page_size')[0]
|
|
429
|
-
?.page_size;
|
|
430
|
-
if (pageCount && pageSize) {
|
|
431
|
-
sizeBytes = pageCount * pageSize;
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
catch {
|
|
435
|
-
// Ignore if pragma fails
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
return {
|
|
439
|
-
totalLogs,
|
|
440
|
-
totalSessions,
|
|
441
|
-
activeSessions,
|
|
442
|
-
logsByLevel,
|
|
443
|
-
sizeBytes,
|
|
444
|
-
oldestLog: oldest?.timestamp,
|
|
445
|
-
newestLog: newest?.timestamp,
|
|
446
|
-
};
|
|
447
|
-
}
|
|
448
|
-
// =========================================================================
|
|
449
|
-
// Query Building Helpers
|
|
450
|
-
// =========================================================================
|
|
451
|
-
/**
|
|
452
|
-
* Build WHERE clause from filter
|
|
453
|
-
*/
|
|
454
|
-
buildWhereClause(filter) {
|
|
455
|
-
if (!filter)
|
|
456
|
-
return { whereClauses: '', params: [] };
|
|
457
|
-
const clauses = [];
|
|
458
|
-
const params = [];
|
|
459
|
-
if (filter.level) {
|
|
460
|
-
const levels = Array.isArray(filter.level) ? filter.level : [filter.level];
|
|
461
|
-
clauses.push(`level IN (${levels.map(() => '?').join(',')})`);
|
|
462
|
-
params.push(...levels);
|
|
463
|
-
}
|
|
464
|
-
if (filter.sessionId) {
|
|
465
|
-
clauses.push('session_id = ?');
|
|
466
|
-
params.push(filter.sessionId);
|
|
467
|
-
}
|
|
468
|
-
if (filter.logger) {
|
|
469
|
-
clauses.push('logger = ?');
|
|
470
|
-
params.push(filter.logger);
|
|
471
|
-
}
|
|
472
|
-
if (filter.startTime) {
|
|
473
|
-
clauses.push('timestamp >= ?');
|
|
474
|
-
params.push(filter.startTime instanceof Date
|
|
475
|
-
? filter.startTime.toISOString()
|
|
476
|
-
: filter.startTime);
|
|
477
|
-
}
|
|
478
|
-
if (filter.endTime) {
|
|
479
|
-
clauses.push('timestamp <= ?');
|
|
480
|
-
params.push(filter.endTime instanceof Date ? filter.endTime.toISOString() : filter.endTime);
|
|
481
|
-
}
|
|
482
|
-
if (filter.search) {
|
|
483
|
-
clauses.push('message LIKE ?');
|
|
484
|
-
params.push(`%${filter.search}%`);
|
|
485
|
-
}
|
|
486
|
-
if (filter.service) {
|
|
487
|
-
clauses.push('service = ?');
|
|
488
|
-
params.push(filter.service);
|
|
489
|
-
}
|
|
490
|
-
if (filter.environment) {
|
|
491
|
-
clauses.push('environment = ?');
|
|
492
|
-
params.push(filter.environment);
|
|
493
|
-
}
|
|
494
|
-
if (filter.traceId) {
|
|
495
|
-
clauses.push('json_extract(metadata, "$.traceId") = ?');
|
|
496
|
-
params.push(filter.traceId);
|
|
497
|
-
}
|
|
498
|
-
if (filter.tags && Object.keys(filter.tags).length > 0) {
|
|
499
|
-
for (const [key, value] of Object.entries(filter.tags)) {
|
|
500
|
-
clauses.push(`json_extract(metadata, "$.tags.${key}") = ?`);
|
|
501
|
-
params.push(value);
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
return {
|
|
505
|
-
whereClauses: clauses.join(' AND '),
|
|
506
|
-
params,
|
|
507
|
-
};
|
|
508
|
-
}
|
|
509
|
-
/**
|
|
510
|
-
* Build complete SELECT query from filter
|
|
511
|
-
*/
|
|
512
|
-
buildLogQuery(filter) {
|
|
513
|
-
const { whereClauses, params } = this.buildWhereClause(filter);
|
|
514
|
-
let sql = 'SELECT * FROM logs';
|
|
515
|
-
if (whereClauses) {
|
|
516
|
-
sql += ` WHERE ${whereClauses}`;
|
|
517
|
-
}
|
|
518
|
-
// Ordering
|
|
519
|
-
const orderBy = filter?.orderBy || 'timestamp';
|
|
520
|
-
const direction = filter?.orderDirection || 'desc';
|
|
521
|
-
sql += ` ORDER BY ${orderBy} ${direction.toUpperCase()}`;
|
|
522
|
-
// Pagination
|
|
523
|
-
if (filter?.limit) {
|
|
524
|
-
sql += ' LIMIT ?';
|
|
525
|
-
params.push(filter.limit);
|
|
526
|
-
}
|
|
527
|
-
if (filter?.offset) {
|
|
528
|
-
sql += ' OFFSET ?';
|
|
529
|
-
params.push(filter.offset);
|
|
530
|
-
}
|
|
531
|
-
return { sql, params };
|
|
532
|
-
}
|
|
533
|
-
// =========================================================================
|
|
534
|
-
// Row Conversion Helpers
|
|
535
|
-
// =========================================================================
|
|
536
|
-
/**
|
|
537
|
-
* Convert SQLite row to LogEntry
|
|
538
|
-
*/
|
|
539
|
-
rowToLogEntry(row) {
|
|
540
|
-
return {
|
|
541
|
-
id: row.id,
|
|
542
|
-
timestamp: row.timestamp,
|
|
543
|
-
level: row.level,
|
|
544
|
-
message: row.message,
|
|
545
|
-
logger: row.logger ?? undefined,
|
|
546
|
-
sessionId: row.session_id ?? undefined,
|
|
547
|
-
service: row.service ?? undefined,
|
|
548
|
-
environment: row.environment ?? undefined,
|
|
549
|
-
release: row.release ?? undefined,
|
|
550
|
-
hostname: row.hostname ?? undefined,
|
|
551
|
-
pid: row.pid ?? undefined,
|
|
552
|
-
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
/**
|
|
556
|
-
* Convert SQLite row to Session
|
|
557
|
-
*/
|
|
558
|
-
rowToSession(row) {
|
|
559
|
-
return {
|
|
560
|
-
id: row.id,
|
|
561
|
-
startedAt: row.started_at,
|
|
562
|
-
endedAt: row.ended_at ?? undefined,
|
|
563
|
-
status: row.status,
|
|
564
|
-
errorCount: row.error_count,
|
|
565
|
-
duration: row.duration ?? undefined,
|
|
566
|
-
user: row.user_data ? JSON.parse(row.user_data) : undefined,
|
|
567
|
-
attributes: row.attributes ? JSON.parse(row.attributes) : undefined,
|
|
568
|
-
};
|
|
569
|
-
}
|
|
570
|
-
// =========================================================================
|
|
571
|
-
// Additional SQLite-Specific Methods
|
|
572
|
-
// =========================================================================
|
|
573
|
-
/**
|
|
574
|
-
* Execute raw SQL query
|
|
575
|
-
* @param sql - SQL query
|
|
576
|
-
* @param params - Query parameters
|
|
577
|
-
* @returns Query results
|
|
578
|
-
*/
|
|
579
|
-
query(sql, ...params) {
|
|
580
|
-
this.ensureReady();
|
|
581
|
-
return this.db.prepare(sql).all(...params);
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Execute raw SQL statement
|
|
585
|
-
* @param sql - SQL statement
|
|
586
|
-
* @param params - Statement parameters
|
|
587
|
-
* @returns Run result
|
|
588
|
-
*/
|
|
589
|
-
execute(sql, ...params) {
|
|
590
|
-
this.ensureReady();
|
|
591
|
-
return this.db.prepare(sql).run(...params);
|
|
592
|
-
}
|
|
593
|
-
/**
|
|
594
|
-
* Run VACUUM to optimize database
|
|
595
|
-
*/
|
|
596
|
-
vacuum() {
|
|
597
|
-
this.ensureReady();
|
|
598
|
-
this.db.exec('VACUUM');
|
|
599
|
-
}
|
|
600
|
-
/**
|
|
601
|
-
* Get the underlying better-sqlite3 database instance
|
|
602
|
-
* @returns Database instance or null
|
|
603
|
-
*/
|
|
604
|
-
getDatabase() {
|
|
605
|
-
return this.db;
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
//# sourceMappingURL=sqlite.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/stores/sqlite.ts"],"names":[],"mappings":"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"}
|