@plyaz/db 0.0.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/README.md +169 -0
- package/dist/adapters/drizzle/DrizzleAdapter.d.ts +269 -0
- package/dist/adapters/drizzle/DrizzleAdapter.d.ts.map +1 -0
- package/dist/adapters/index.d.ts +20 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/sql/SQLAdapter.d.ts +282 -0
- package/dist/adapters/sql/SQLAdapter.d.ts.map +1 -0
- package/dist/adapters/supabase/SupabaseAdapter.d.ts +305 -0
- package/dist/adapters/supabase/SupabaseAdapter.d.ts.map +1 -0
- package/dist/advanced/backup/BackupService.d.ts +159 -0
- package/dist/advanced/backup/BackupService.d.ts.map +1 -0
- package/dist/advanced/backup/index.d.ts +2 -0
- package/dist/advanced/backup/index.d.ts.map +1 -0
- package/dist/advanced/caching/CacheEvict.decorator.d.ts +3 -0
- package/dist/advanced/caching/CacheEvict.decorator.d.ts.map +1 -0
- package/dist/advanced/caching/Cacheable.decorator.d.ts +99 -0
- package/dist/advanced/caching/Cacheable.decorator.d.ts.map +1 -0
- package/dist/advanced/caching/RedisCache.d.ts +417 -0
- package/dist/advanced/caching/RedisCache.d.ts.map +1 -0
- package/dist/advanced/caching/index.d.ts +4 -0
- package/dist/advanced/caching/index.d.ts.map +1 -0
- package/dist/advanced/connection-pool/DynamicPool.d.ts +234 -0
- package/dist/advanced/connection-pool/DynamicPool.d.ts.map +1 -0
- package/dist/advanced/connection-pool/index.d.ts +2 -0
- package/dist/advanced/connection-pool/index.d.ts.map +1 -0
- package/dist/advanced/index.d.ts +8 -0
- package/dist/advanced/index.d.ts.map +1 -0
- package/dist/advanced/monitoring/AlertManager.d.ts +72 -0
- package/dist/advanced/monitoring/AlertManager.d.ts.map +1 -0
- package/dist/advanced/monitoring/MetricsCollector.d.ts +81 -0
- package/dist/advanced/monitoring/MetricsCollector.d.ts.map +1 -0
- package/dist/advanced/monitoring/index.d.ts +3 -0
- package/dist/advanced/monitoring/index.d.ts.map +1 -0
- package/dist/advanced/multi-tenancy/TenantContext.d.ts +52 -0
- package/dist/advanced/multi-tenancy/TenantContext.d.ts.map +1 -0
- package/dist/advanced/multi-tenancy/TenantRepository.d.ts +292 -0
- package/dist/advanced/multi-tenancy/TenantRepository.d.ts.map +1 -0
- package/dist/advanced/multi-tenancy/index.d.ts +3 -0
- package/dist/advanced/multi-tenancy/index.d.ts.map +1 -0
- package/dist/advanced/read-replica/ReadReplicaAdapter.d.ts +516 -0
- package/dist/advanced/read-replica/ReadReplicaAdapter.d.ts.map +1 -0
- package/dist/advanced/read-replica/ReadReplicaManager.d.ts +68 -0
- package/dist/advanced/read-replica/ReadReplicaManager.d.ts.map +1 -0
- package/dist/advanced/read-replica/UseReplica.decorator.d.ts +24 -0
- package/dist/advanced/read-replica/UseReplica.decorator.d.ts.map +1 -0
- package/dist/advanced/read-replica/index.d.ts +3 -0
- package/dist/advanced/read-replica/index.d.ts.map +1 -0
- package/dist/advanced/sharding/ShardKey.d.ts +80 -0
- package/dist/advanced/sharding/ShardKey.d.ts.map +1 -0
- package/dist/advanced/sharding/ShardRouter.d.ts +66 -0
- package/dist/advanced/sharding/ShardRouter.d.ts.map +1 -0
- package/dist/advanced/sharding/index.d.ts +3 -0
- package/dist/advanced/sharding/index.d.ts.map +1 -0
- package/dist/builder/query/index.d.ts +7 -0
- package/dist/builder/query/index.d.ts.map +1 -0
- package/dist/builder/query/orm.d.ts +22 -0
- package/dist/builder/query/orm.d.ts.map +1 -0
- package/dist/builder/query/sql.d.ts +29 -0
- package/dist/builder/query/sql.d.ts.map +1 -0
- package/dist/extensions/AuditExtension.d.ts +468 -0
- package/dist/extensions/AuditExtension.d.ts.map +1 -0
- package/dist/extensions/CachingAdapter.d.ts +451 -0
- package/dist/extensions/CachingAdapter.d.ts.map +1 -0
- package/dist/extensions/EncryptionExtension.d.ts +95 -0
- package/dist/extensions/EncryptionExtension.d.ts.map +1 -0
- package/dist/extensions/ReadReplicaAdapter.d.ts +32 -0
- package/dist/extensions/ReadReplicaAdapter.d.ts.map +1 -0
- package/dist/extensions/SoftDeleteExtension.d.ts +430 -0
- package/dist/extensions/SoftDeleteExtension.d.ts.map +1 -0
- package/dist/extensions/index.d.ts +79 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/factory/AdapterFactory.d.ts +111 -0
- package/dist/factory/AdapterFactory.d.ts.map +1 -0
- package/dist/factory/createDatabaseService.d.ts +121 -0
- package/dist/factory/createDatabaseService.d.ts.map +1 -0
- package/dist/index.cjs +8518 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +8480 -0
- package/dist/index.mjs.map +1 -0
- package/dist/repository/BaseRepository.d.ts +209 -0
- package/dist/repository/BaseRepository.d.ts.map +1 -0
- package/dist/repository/index.d.ts +80 -0
- package/dist/repository/index.d.ts.map +1 -0
- package/dist/security/index.cjs +118 -0
- package/dist/security/index.cjs.map +1 -0
- package/dist/security/index.d.ts +3 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.mjs +114 -0
- package/dist/security/index.mjs.map +1 -0
- package/dist/security/sanitizers/html.sanitizer.d.ts +31 -0
- package/dist/security/sanitizers/html.sanitizer.d.ts.map +1 -0
- package/dist/security/serializers/DataValidation.d.ts +34 -0
- package/dist/security/serializers/DataValidation.d.ts.map +1 -0
- package/dist/service/DatabaseService.d.ts +136 -0
- package/dist/service/DatabaseService.d.ts.map +1 -0
- package/dist/service/EventEmitter.d.ts +110 -0
- package/dist/service/EventEmitter.d.ts.map +1 -0
- package/dist/service/HealthManager.d.ts +166 -0
- package/dist/service/HealthManager.d.ts.map +1 -0
- package/dist/utils/ConfigMerger.d.ts +227 -0
- package/dist/utils/ConfigMerger.d.ts.map +1 -0
- package/dist/utils/databaseResultHelpers.d.ts +98 -0
- package/dist/utils/databaseResultHelpers.d.ts.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/normalizeDetails.d.ts +111 -0
- package/dist/utils/normalizeDetails.d.ts.map +1 -0
- package/dist/utils/pagination.d.ts +77 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/regex.d.ts +199 -0
- package/dist/utils/regex.d.ts.map +1 -0
- package/dist/utils/typeGuards.d.ts +57 -0
- package/dist/utils/typeGuards.d.ts.map +1 -0
- package/dist/utils/validation.d.ts +146 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/package.json +156 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisCache.d.ts","sourceRoot":"","sources":["../../../src/advanced/caching/RedisCache.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0MG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,UAAU,CAAS;IAG3B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;gBACS,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAKxD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAyB3E;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,EACxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAgBhC;;;;;;;;;;;;;;;;;OAiBG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAqBrD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAwBvE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,CACT,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GACvD,MAAM;IAKT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAoBrD;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/advanced/caching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { type DatabaseResult, type DatabaseHealthStatus, type DynamicPoolConfig, type PoolMetrics } from "@plyaz/types/db";
|
|
2
|
+
/**
|
|
3
|
+
* Dynamic connection pool that automatically adjusts size based on load.
|
|
4
|
+
* Provides detailed metrics and health monitoring.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const pool = new DynamicPool('postgres://localhost:5432/db', {
|
|
9
|
+
* min: 2,
|
|
10
|
+
* max: 20,
|
|
11
|
+
* scaling: {
|
|
12
|
+
* enabled: true,
|
|
13
|
+
* scaleUpThreshold: 80,
|
|
14
|
+
* scaleDownThreshold: 20,
|
|
15
|
+
* scaleInterval: 30000,
|
|
16
|
+
* maxScale: 5
|
|
17
|
+
* }
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Execute a query
|
|
21
|
+
* const result = await pool.query('SELECT * FROM users');
|
|
22
|
+
*
|
|
23
|
+
* // Get pool metrics
|
|
24
|
+
* const metrics = pool.getMetrics();
|
|
25
|
+
* console.log(`Active connections: ${metrics.activeConnections}`);
|
|
26
|
+
*
|
|
27
|
+
* // Health check
|
|
28
|
+
* const health = await pool.healthCheck();
|
|
29
|
+
* console.log(`Pool healthy: ${health.value?.isHealthy}`);
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ### High-Traffic Application
|
|
34
|
+
* ```typescript
|
|
35
|
+
* class DatabasePool {
|
|
36
|
+
* private pool: DynamicPool;
|
|
37
|
+
*
|
|
38
|
+
* constructor() {
|
|
39
|
+
* this.pool = new DynamicPool(process.env.DATABASE_URL, {
|
|
40
|
+
* min: 5,
|
|
41
|
+
* max: 50,
|
|
42
|
+
* scaling: {
|
|
43
|
+
* enabled: true,
|
|
44
|
+
* scaleUpThreshold: 75,
|
|
45
|
+
* scaleDownThreshold: 25,
|
|
46
|
+
* scaleInterval: 15000, // Check every 15 seconds
|
|
47
|
+
* maxScale: 10
|
|
48
|
+
* }
|
|
49
|
+
* });
|
|
50
|
+
* }
|
|
51
|
+
*
|
|
52
|
+
* async query<T>(sql: string, params: object[] = []): Promise<DatabaseResult<T[]>> {
|
|
53
|
+
* return this.pool.query<T>(sql, params);
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
56
|
+
* async getHealthStatus(): Promise<DatabaseResult<HealthStatus>> {
|
|
57
|
+
* return this.pool.healthCheck();
|
|
58
|
+
* }
|
|
59
|
+
*
|
|
60
|
+
* async shutdown(): Promise<void> {
|
|
61
|
+
* await this.pool.end();
|
|
62
|
+
* }
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ### Connection Pool Monitoring
|
|
68
|
+
* ```typescript
|
|
69
|
+
* class PoolMonitor {
|
|
70
|
+
* constructor(private pool: DynamicPool) {}
|
|
71
|
+
*
|
|
72
|
+
* async startMonitoring(): Promise<void> {
|
|
73
|
+
* setInterval(() => {
|
|
74
|
+
* const metrics = this.pool.getMetrics();
|
|
75
|
+
* const utilization = metrics.totalConnections > 0
|
|
76
|
+
* ? (metrics.activeConnections / metrics.totalConnections) * 100
|
|
77
|
+
* : 0;
|
|
78
|
+
*
|
|
79
|
+
* console.log(`Pool Utilization: ${utilization.toFixed(1)}%`);
|
|
80
|
+
* console.log(`Active: ${metrics.activeConnections}, Idle: ${metrics.idleConnections}`);
|
|
81
|
+
* console.log(`Waiting: ${metrics.waitingRequests}`);
|
|
82
|
+
*
|
|
83
|
+
* // Alert if pool is under pressure
|
|
84
|
+
* if (utilization > 90) {
|
|
85
|
+
* console.warn('Pool utilization is very high!');
|
|
86
|
+
* }
|
|
87
|
+
* }, 30000); // Every 30 seconds
|
|
88
|
+
* }
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ### Auto-scaling Configuration
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const poolConfig: DynamicPoolConfig = {
|
|
96
|
+
* min: 3,
|
|
97
|
+
* max: 30,
|
|
98
|
+
* idleTimeoutMillis: 60000, // 1 minute
|
|
99
|
+
* acquireTimeoutMillis: 5000, // 5 seconds
|
|
100
|
+
* scaling: {
|
|
101
|
+
* enabled: true,
|
|
102
|
+
* scaleUpThreshold: 80, // Scale up when 80% utilized
|
|
103
|
+
* scaleDownThreshold: 20, // Scale down when 20% idle
|
|
104
|
+
* scaleInterval: 10000, // Check every 10 seconds
|
|
105
|
+
* maxScale: 5 // Add/remove up to 5 connections at once
|
|
106
|
+
* }
|
|
107
|
+
* };
|
|
108
|
+
*
|
|
109
|
+
* const pool = new DynamicPool('postgres://localhost:5432/myapp', poolConfig);
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export declare class DynamicPool {
|
|
113
|
+
private pool;
|
|
114
|
+
private config;
|
|
115
|
+
private metrics;
|
|
116
|
+
private scalingTimer?;
|
|
117
|
+
/**
|
|
118
|
+
* Creates a new DynamicPool instance.
|
|
119
|
+
* @param connectionString Database connection string
|
|
120
|
+
* @param config Pool configuration options
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // Basic configuration
|
|
125
|
+
* const pool = new DynamicPool('postgres://localhost:5432/db');
|
|
126
|
+
*
|
|
127
|
+
* // Advanced configuration
|
|
128
|
+
* const pool = new DynamicPool('postgres://localhost:5432/db', {
|
|
129
|
+
* min: 5,
|
|
130
|
+
* max: 25,
|
|
131
|
+
* scaling: {
|
|
132
|
+
* enabled: true,
|
|
133
|
+
* scaleUpThreshold: 75,
|
|
134
|
+
* scaleInterval: 20000
|
|
135
|
+
* }
|
|
136
|
+
* });
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
constructor(connectionString: string, config?: Partial<DynamicPoolConfig>);
|
|
140
|
+
/**
|
|
141
|
+
* Sets up event listeners for the connection pool.
|
|
142
|
+
*/
|
|
143
|
+
private setupEventListeners;
|
|
144
|
+
/**
|
|
145
|
+
* Starts the auto-scaling timer.
|
|
146
|
+
*/
|
|
147
|
+
private startScalingTimer;
|
|
148
|
+
/**
|
|
149
|
+
* Adjusts pool size based on current load.
|
|
150
|
+
*/
|
|
151
|
+
private adjustPoolSize;
|
|
152
|
+
/**
|
|
153
|
+
* Adjusts the pool connection count.
|
|
154
|
+
* @param newCount New connection count
|
|
155
|
+
*/
|
|
156
|
+
private adjustPoolCount;
|
|
157
|
+
/**
|
|
158
|
+
* Executes a database query with timing and error tracking.
|
|
159
|
+
* @param sql SQL query string
|
|
160
|
+
* @param params Query parameters
|
|
161
|
+
* @returns Query result
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* // Simple query
|
|
166
|
+
* const result = await pool.query('SELECT * FROM users');
|
|
167
|
+
*
|
|
168
|
+
* // Query with parameters
|
|
169
|
+
* const result = await pool.query(
|
|
170
|
+
* 'SELECT * FROM users WHERE id = $1 AND active = $2',
|
|
171
|
+
* [123, true]
|
|
172
|
+
* );
|
|
173
|
+
*
|
|
174
|
+
* // Query with type safety
|
|
175
|
+
* const users = await pool.query<User>('SELECT * FROM users');
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
query<T extends object>(sql: string, params?: object[]): Promise<DatabaseResult<T[]>>;
|
|
179
|
+
/**
|
|
180
|
+
* Performs a health check on the connection pool.
|
|
181
|
+
* @returns Health status with detailed metrics
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```typescript
|
|
185
|
+
* const health = await pool.healthCheck();
|
|
186
|
+
* if (health.success && health.value?.isHealthy) {
|
|
187
|
+
* console.log('Pool is healthy');
|
|
188
|
+
* console.log(`Response time: ${health.value.responseTime}ms`);
|
|
189
|
+
* } else {
|
|
190
|
+
* console.log('Pool health check failed');
|
|
191
|
+
* }
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
|
|
195
|
+
/**
|
|
196
|
+
* Gets current pool metrics.
|
|
197
|
+
* @returns Pool performance metrics
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* const metrics = pool.getMetrics();
|
|
202
|
+
* console.log(`Total connections: ${metrics.totalConnections}`);
|
|
203
|
+
* console.log(`Active connections: ${metrics.activeConnections}`);
|
|
204
|
+
* console.log(`Idle connections: ${metrics.idleConnections}`);
|
|
205
|
+
* console.log(`Average acquisition time: ${metrics.averageAcquisitionTime}ms`);
|
|
206
|
+
*
|
|
207
|
+
* // Calculate utilization rate
|
|
208
|
+
* const utilizationRate = metrics.totalConnections > 0
|
|
209
|
+
* ? (metrics.activeConnections / metrics.totalConnections) * 100
|
|
210
|
+
* : 0;
|
|
211
|
+
* console.log(`Utilization rate: ${utilizationRate.toFixed(1)}%`);
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
getMetrics(): PoolMetrics;
|
|
215
|
+
/**
|
|
216
|
+
* Closes all connections in the pool.
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```typescript
|
|
220
|
+
* // Graceful shutdown
|
|
221
|
+
* async function shutdown() {
|
|
222
|
+
* console.log('Closing database connections...');
|
|
223
|
+
* await pool.end();
|
|
224
|
+
* console.log('Database connections closed');
|
|
225
|
+
* }
|
|
226
|
+
*
|
|
227
|
+
* // Handle process signals
|
|
228
|
+
* process.on('SIGTERM', shutdown);
|
|
229
|
+
* process.on('SIGINT', shutdown);
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
end(): Promise<void>;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=DynamicPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicPool.d.ts","sourceRoot":"","sources":["../../../src/advanced/connection-pool/DynamicPool.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAIzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GG;AAEH,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAOE;IACjB,OAAO,CAAC,YAAY,CAAC,CAAiC;IAEtD;;;;;;;;;;;;;;;;;;;;;OAqBG;gBAED,gBAAgB,EAAE,MAAM,EACxB,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAqBzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2C3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,cAAc;IA4BtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,KAAK,CAAC,CAAC,SAAS,MAAM,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IA6C/B;;;;;;;;;;;;;;OAcG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IA2ClE;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,IAAI,WAAW;IAIzB;;;;;;;;;;;;;;;;OAgBG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/advanced/connection-pool/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/advanced/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,cAAc,CAAC;AAG7B,cAAc,UAAU,CAAC;AAGzB,cAAc,iBAAiB,CAAC;AAGhC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
import type { Alert, AlertRule } from "@plyaz/types";
|
|
3
|
+
/**
|
|
4
|
+
* Manages database alerts with configurable rules and automatic resolution.
|
|
5
|
+
* Provides real-time alerting for various database issues.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const alertManager = new AlertManager();
|
|
10
|
+
*
|
|
11
|
+
* // Add custom alert rule
|
|
12
|
+
* alertManager.addRule({
|
|
13
|
+
* id: 'high-error-rate',
|
|
14
|
+
* condition: (metrics) => (metrics.errorRate as number) > 5,
|
|
15
|
+
* message: (metrics) => `High error rate: ${metrics.errorRate}%`,
|
|
16
|
+
* severity: 'error',
|
|
17
|
+
* source: 'database'
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Evaluate metrics against rules
|
|
21
|
+
* const metrics = { errorRate: 7.2, poolUtilization: 85 };
|
|
22
|
+
* alertManager.evaluate(metrics);
|
|
23
|
+
*
|
|
24
|
+
* // Get active alerts
|
|
25
|
+
* const activeAlerts = alertManager.getActiveAlerts();
|
|
26
|
+
*
|
|
27
|
+
* // Resolve an alert
|
|
28
|
+
* alertManager.resolveAlert('alert-id');
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class AlertManager extends EventEmitter {
|
|
32
|
+
private alerts;
|
|
33
|
+
private alertRules;
|
|
34
|
+
private readonly logger;
|
|
35
|
+
constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Sets up default alert rules for common database issues.
|
|
38
|
+
*/
|
|
39
|
+
private setupDefaultRules;
|
|
40
|
+
/**
|
|
41
|
+
* Adds a custom alert rule.
|
|
42
|
+
* @param rule Alert rule definition
|
|
43
|
+
*/
|
|
44
|
+
addRule(rule: AlertRule): void;
|
|
45
|
+
/**
|
|
46
|
+
* Evaluates metrics against all alert rules.
|
|
47
|
+
* @param metrics Database and pool metrics
|
|
48
|
+
*/
|
|
49
|
+
evaluate(metrics: Record<string, object>): void;
|
|
50
|
+
/**
|
|
51
|
+
* Triggers an alert based on a rule.
|
|
52
|
+
* @param rule Alert rule that was triggered
|
|
53
|
+
* @param metrics Current metrics
|
|
54
|
+
*/
|
|
55
|
+
private triggerAlert;
|
|
56
|
+
/**
|
|
57
|
+
* Marks an alert as resolved.
|
|
58
|
+
* @param alertId ID of the alert to resolve
|
|
59
|
+
*/
|
|
60
|
+
resolveAlert(alertId: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Gets all currently active (unresolved) alerts.
|
|
63
|
+
* @returns Array of active alerts
|
|
64
|
+
*/
|
|
65
|
+
getActiveAlerts(): Alert[];
|
|
66
|
+
/**
|
|
67
|
+
* Gets all alerts (both active and resolved).
|
|
68
|
+
* @returns Array of all alerts
|
|
69
|
+
*/
|
|
70
|
+
getAllAlerts(): Alert[];
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=AlertManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlertManager.d.ts","sourceRoot":"","sources":["../../../src/advanced/monitoring/AlertManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAA6B,MAAM,cAAc,CAAC;AAGhF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;;IAOjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkEzB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ/C;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA2BpB;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASnC;;;OAGG;IACH,eAAe,IAAI,KAAK,EAAE;IAI1B;;;OAGG;IACH,YAAY,IAAI,KAAK,EAAE;CAGxB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { PoolMetrics, QueryMetrics } from "@plyaz/types";
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
/**
|
|
4
|
+
* Collects and analyzes database performance metrics.
|
|
5
|
+
* Provides insights into query performance, pool usage, and potential issues.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const collector = new MetricsCollector();
|
|
10
|
+
*
|
|
11
|
+
* // Record a query metric
|
|
12
|
+
* collector.recordQuery({
|
|
13
|
+
* query: 'SELECT * FROM users WHERE id = $1',
|
|
14
|
+
* duration: 45,
|
|
15
|
+
* timestamp: new Date(),
|
|
16
|
+
* success: true,
|
|
17
|
+
* table: 'users',
|
|
18
|
+
* operation: 'findById'
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Get top slow queries
|
|
22
|
+
* const slowQueries = collector.getTopSlowQueries(10);
|
|
23
|
+
*
|
|
24
|
+
* // Detect N+1 queries
|
|
25
|
+
* const nPlusOneQueries = collector.detectNPlusOneQueries();
|
|
26
|
+
*
|
|
27
|
+
* // Get query frequency
|
|
28
|
+
* const frequency = collector.getQueryFrequency();
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class MetricsCollector extends EventEmitter {
|
|
32
|
+
private queryMetrics;
|
|
33
|
+
private poolMetrics;
|
|
34
|
+
private alerts;
|
|
35
|
+
private readonly logger;
|
|
36
|
+
private readonly SLOW_QUERY_THRESHOLD;
|
|
37
|
+
private readonly POOL_EXHAUSTION_THRESHOLD;
|
|
38
|
+
private readonly REPLICA_LAG_THRESHOLD;
|
|
39
|
+
private readonly DISK_SPACE_THRESHOLD;
|
|
40
|
+
/**
|
|
41
|
+
* Records query execution metrics.
|
|
42
|
+
* @param metrics Query execution metrics
|
|
43
|
+
*/
|
|
44
|
+
recordQuery(metrics: QueryMetrics): void;
|
|
45
|
+
/**
|
|
46
|
+
* Records connection pool metrics.
|
|
47
|
+
* @param metrics Pool performance metrics
|
|
48
|
+
*/
|
|
49
|
+
recordPoolMetrics(metrics: PoolMetrics): void;
|
|
50
|
+
/**
|
|
51
|
+
* Gets the top slow queries.
|
|
52
|
+
* @param limit Number of queries to return
|
|
53
|
+
* @returns Array of slowest queries
|
|
54
|
+
*/
|
|
55
|
+
getTopSlowQueries(limit?: number): QueryMetrics[];
|
|
56
|
+
/**
|
|
57
|
+
* Gets query frequency statistics.
|
|
58
|
+
* @returns Object mapping normalized queries to frequency counts
|
|
59
|
+
*/
|
|
60
|
+
getQueryFrequency(): Record<string, number>;
|
|
61
|
+
/**
|
|
62
|
+
* Detects potential N+1 query patterns.
|
|
63
|
+
* @returns Array of suspicious queries with their execution counts
|
|
64
|
+
*/
|
|
65
|
+
detectNPlusOneQueries(): {
|
|
66
|
+
query: string;
|
|
67
|
+
count: number;
|
|
68
|
+
}[];
|
|
69
|
+
/**
|
|
70
|
+
* Normalizes a query for frequency analysis.
|
|
71
|
+
* @param query Original SQL query
|
|
72
|
+
* @returns Normalized query string
|
|
73
|
+
*/
|
|
74
|
+
private normalizeQuery;
|
|
75
|
+
/**
|
|
76
|
+
* Emits an alert event.
|
|
77
|
+
* @param message Alert message
|
|
78
|
+
*/
|
|
79
|
+
private emitAlert;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=MetricsCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsCollector.d.ts","sourceRoot":"","sources":["../../../src/advanced/monitoring/MetricsCollector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAM;IAChD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAE3C;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAkBxC;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IA2B7C;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAOrD;;;OAGG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW3C;;;OAGG;IACH,qBAAqB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE;IAa3D;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAKtB;;;OAGG;IACH,OAAO,CAAC,SAAS;CASlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/advanced/monitoring/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { TenantInfo } from "@plyaz/types";
|
|
2
|
+
/**
|
|
3
|
+
* Manages tenant context throughout the application using AsyncLocalStorage.
|
|
4
|
+
* Provides a way to isolate tenant-specific data and operations.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const tenant: TenantInfo = {
|
|
9
|
+
* id: 'tenant-123',
|
|
10
|
+
* name: 'Acme Corp',
|
|
11
|
+
* schema: 'acme_corp'
|
|
12
|
+
* };
|
|
13
|
+
*
|
|
14
|
+
* // Run code within tenant context
|
|
15
|
+
* const result = await TenantContext.run(tenant, async () => {
|
|
16
|
+
* // This code has access to the tenant context
|
|
17
|
+
* const currentTenant = TenantContext.current();
|
|
18
|
+
* console.log(`Running as tenant: ${currentTenant?.name}`);
|
|
19
|
+
*
|
|
20
|
+
* // Perform tenant-specific operations
|
|
21
|
+
* return await userService.getUsers();
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Access current tenant from anywhere
|
|
25
|
+
* const current = TenantContext.current();
|
|
26
|
+
* if (current) {
|
|
27
|
+
* console.log(`Current tenant: ${current.name}`);
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class TenantContext {
|
|
32
|
+
private static storage;
|
|
33
|
+
/**
|
|
34
|
+
* Runs a function within a specific tenant context.
|
|
35
|
+
* @param tenant Tenant information
|
|
36
|
+
* @param callback Function to execute within tenant context
|
|
37
|
+
* @returns Result of the callback function
|
|
38
|
+
*/
|
|
39
|
+
static run<T>(tenant: TenantInfo, callback: () => Promise<T>): Promise<T>;
|
|
40
|
+
/**
|
|
41
|
+
* Gets the current tenant context.
|
|
42
|
+
* @returns Current tenant information or undefined if no context is set
|
|
43
|
+
*/
|
|
44
|
+
static current(): TenantInfo | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Gets the current tenant context or throws an error if none is set.
|
|
47
|
+
* @returns Current tenant information
|
|
48
|
+
* @throws Error if no tenant context is available
|
|
49
|
+
*/
|
|
50
|
+
static requireCurrent(): TenantInfo;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=TenantContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TenantContext.d.ts","sourceRoot":"","sources":["../../../src/advanced/multi-tenancy/TenantContext.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAuC;IAE7D;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzE;;;OAGG;IACH,MAAM,CAAC,OAAO,IAAI,UAAU,GAAG,SAAS;IAIxC;;;;OAIG;IACH,MAAM,CAAC,cAAc,IAAI,UAAU;CAepC"}
|