@hypnosis/docker-mcp-server 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/adapter-registry.d.ts +5 -5
- package/dist/adapters/adapter-registry.js +5 -5
- package/dist/adapters/database-adapter.d.ts +8 -8
- package/dist/adapters/database-adapter.js +1 -1
- package/dist/adapters/postgresql.d.ts +8 -8
- package/dist/adapters/postgresql.js +26 -26
- package/dist/adapters/postgresql.js.map +1 -1
- package/dist/adapters/redis.d.ts +9 -9
- package/dist/adapters/redis.js +23 -23
- package/dist/adapters/redis.js.map +1 -1
- package/dist/adapters/sqlite.d.ts +6 -6
- package/dist/adapters/sqlite.js +14 -14
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/adapters/types.d.ts +6 -6
- package/dist/adapters/types.js +1 -1
- package/dist/discovery/project-discovery.d.ts.map +1 -1
- package/dist/discovery/project-discovery.js +17 -3
- package/dist/discovery/project-discovery.js.map +1 -1
- package/dist/index.js +55 -17
- package/dist/index.js.map +1 -1
- package/dist/managers/compose-manager.d.ts.map +1 -1
- package/dist/managers/compose-manager.js +33 -4
- package/dist/managers/compose-manager.js.map +1 -1
- package/dist/managers/container-manager.d.ts +13 -13
- package/dist/managers/container-manager.js +28 -28
- package/dist/managers/container-manager.js.map +1 -1
- package/dist/tools/container-tools.d.ts +4 -4
- package/dist/tools/container-tools.js +8 -8
- package/dist/tools/container-tools.js.map +1 -1
- package/dist/tools/database-tools.d.ts +3 -3
- package/dist/tools/database-tools.js +4 -4
- package/dist/tools/database-tools.js.map +1 -1
- package/dist/tools/env-tools.d.ts +4 -4
- package/dist/tools/env-tools.js +9 -9
- package/dist/tools/env-tools.js.map +1 -1
- package/dist/tools/executor-tool.d.ts +3 -3
- package/dist/tools/executor-tool.js +6 -6
- package/dist/tools/executor-tool.js.map +1 -1
- package/dist/tools/mcp-health-tool.d.ts +4 -4
- package/dist/tools/mcp-health-tool.js +5 -5
- package/dist/tools/mcp-health-tool.js.map +1 -1
- package/dist/utils/compose-exec.d.ts.map +1 -1
- package/dist/utils/compose-exec.js +16 -1
- package/dist/utils/compose-exec.js.map +1 -1
- package/dist/utils/port-utils.d.ts +24 -0
- package/dist/utils/port-utils.d.ts.map +1 -0
- package/dist/utils/port-utils.js +89 -0
- package/dist/utils/port-utils.js.map +1 -0
- package/dist/utils/workspace.d.ts +34 -0
- package/dist/utils/workspace.d.ts.map +1 -0
- package/dist/utils/workspace.js +52 -0
- package/dist/utils/workspace.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Adapter Registry
|
|
3
|
-
*
|
|
3
|
+
* Registration and retrieval of Database Adapters by database type
|
|
4
4
|
*/
|
|
5
5
|
import type { DatabaseAdapter } from './database-adapter.js';
|
|
6
6
|
export declare class AdapterRegistry {
|
|
7
7
|
private adapters;
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Register adapter
|
|
10
10
|
*/
|
|
11
11
|
register(type: string, adapter: DatabaseAdapter): void;
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Get adapter by type
|
|
14
14
|
*/
|
|
15
15
|
get(serviceType: string): DatabaseAdapter;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Check if adapter exists
|
|
18
18
|
*/
|
|
19
19
|
has(serviceType: string): boolean;
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* Get list of all registered types
|
|
22
22
|
*/
|
|
23
23
|
getRegisteredTypes(): string[];
|
|
24
24
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Adapter Registry
|
|
3
|
-
*
|
|
3
|
+
* Registration and retrieval of Database Adapters by database type
|
|
4
4
|
*/
|
|
5
5
|
import { logger } from '../utils/logger.js';
|
|
6
6
|
export class AdapterRegistry {
|
|
7
7
|
adapters = new Map();
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Register adapter
|
|
10
10
|
*/
|
|
11
11
|
register(type, adapter) {
|
|
12
12
|
const normalizedType = type.toLowerCase();
|
|
@@ -14,7 +14,7 @@ export class AdapterRegistry {
|
|
|
14
14
|
logger.debug(`Registered adapter for: ${type}`);
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Get adapter by type
|
|
18
18
|
*/
|
|
19
19
|
get(serviceType) {
|
|
20
20
|
const type = serviceType.toLowerCase();
|
|
@@ -28,13 +28,13 @@ export class AdapterRegistry {
|
|
|
28
28
|
return adapter;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Check if adapter exists
|
|
32
32
|
*/
|
|
33
33
|
has(serviceType) {
|
|
34
34
|
return this.adapters.has(serviceType.toLowerCase());
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* Get list of all registered types
|
|
38
38
|
*/
|
|
39
39
|
getRegisteredTypes() {
|
|
40
40
|
return Array.from(this.adapters.keys());
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Database Adapter Interface
|
|
3
|
-
*
|
|
3
|
+
* Interface for working with different database types
|
|
4
4
|
*/
|
|
5
5
|
import type { ServiceConfig } from '../discovery/types.js';
|
|
6
6
|
import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionInfo } from './types.js';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Interface for Database Adapters
|
|
9
|
+
* All adapters must implement this interface
|
|
10
10
|
*/
|
|
11
11
|
export interface DatabaseAdapter {
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Execute query or command
|
|
14
14
|
*/
|
|
15
15
|
query(service: string, query: string, options?: QueryOptions): Promise<string>;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Create backup
|
|
18
18
|
*/
|
|
19
19
|
backup(service: string, options: BackupOptions): Promise<string>;
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* Restore from backup
|
|
22
22
|
*/
|
|
23
23
|
restore(service: string, backupPath: string, options?: RestoreOptions): Promise<void>;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* Get database status
|
|
26
26
|
*/
|
|
27
27
|
status(service: string): Promise<DBStatus>;
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* Get connection info from environment
|
|
30
30
|
*/
|
|
31
31
|
getConnectionInfo(service: ServiceConfig, env: Record<string, string>): ConnectionInfo;
|
|
32
32
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PostgreSQL Adapter
|
|
3
|
-
*
|
|
3
|
+
* DatabaseAdapter implementation for PostgreSQL
|
|
4
4
|
*/
|
|
5
5
|
import type { DatabaseAdapter } from './database-adapter.js';
|
|
6
6
|
import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionInfo } from './types.js';
|
|
@@ -11,31 +11,31 @@ export declare class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
11
11
|
private envManager;
|
|
12
12
|
constructor();
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Execute SQL query
|
|
15
15
|
*/
|
|
16
16
|
query(service: string, query: string, options?: QueryOptions): Promise<string>;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Create backup
|
|
19
19
|
*/
|
|
20
20
|
backup(service: string, options: BackupOptions): Promise<string>;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Restore from backup
|
|
23
23
|
*/
|
|
24
24
|
restore(service: string, backupPath: string, options?: RestoreOptions): Promise<void>;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Get database status
|
|
27
27
|
*/
|
|
28
28
|
status(service: string): Promise<DBStatus>;
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* Get connection info from environment
|
|
31
31
|
*/
|
|
32
32
|
getConnectionInfo(service: ServiceConfig, env: Record<string, string>): ConnectionInfo;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Parse PostgreSQL version from output
|
|
35
35
|
*/
|
|
36
36
|
private parseVersion;
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* Parse single value from SQL output (first row, first column)
|
|
39
39
|
*/
|
|
40
40
|
private parseSingleValue;
|
|
41
41
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PostgreSQL Adapter
|
|
3
|
-
*
|
|
3
|
+
* DatabaseAdapter implementation for PostgreSQL
|
|
4
4
|
*/
|
|
5
5
|
import { ContainerManager } from '../managers/container-manager.js';
|
|
6
6
|
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
@@ -17,10 +17,10 @@ export class PostgreSQLAdapter {
|
|
|
17
17
|
this.envManager = new EnvManager();
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Execute SQL query
|
|
21
21
|
*/
|
|
22
22
|
async query(service, query, options) {
|
|
23
|
-
//
|
|
23
|
+
// SQL validation (if enabled)
|
|
24
24
|
sqlValidator.validate(query);
|
|
25
25
|
const project = await this.projectDiscovery.findProject();
|
|
26
26
|
const serviceConfig = project.services[service];
|
|
@@ -31,10 +31,10 @@ export class PostgreSQLAdapter {
|
|
|
31
31
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
32
32
|
const db = options?.database || conn.database;
|
|
33
33
|
const user = options?.user || conn.user;
|
|
34
|
-
//
|
|
34
|
+
// Build psql command
|
|
35
35
|
const format = options?.format || 'table';
|
|
36
36
|
let cmd = ['psql', '-U', user, '-d', db];
|
|
37
|
-
//
|
|
37
|
+
// Output format
|
|
38
38
|
if (format === 'json') {
|
|
39
39
|
cmd.push('--json');
|
|
40
40
|
}
|
|
@@ -43,7 +43,7 @@ export class PostgreSQLAdapter {
|
|
|
43
43
|
}
|
|
44
44
|
// SQL query
|
|
45
45
|
cmd.push('-c', query);
|
|
46
|
-
//
|
|
46
|
+
// Password via PGPASSWORD env var
|
|
47
47
|
const envVars = conn.password ? [`PGPASSWORD=${conn.password}`] : [];
|
|
48
48
|
logger.debug(`Executing PostgreSQL query in ${service}: ${query}`);
|
|
49
49
|
const output = await this.containerManager.exec(service, project.name, cmd, {
|
|
@@ -52,7 +52,7 @@ export class PostgreSQLAdapter {
|
|
|
52
52
|
return output;
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* Create backup
|
|
56
56
|
*/
|
|
57
57
|
async backup(service, options) {
|
|
58
58
|
const project = await this.projectDiscovery.findProject();
|
|
@@ -64,9 +64,9 @@ export class PostgreSQLAdapter {
|
|
|
64
64
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
65
65
|
const format = options.format || 'custom';
|
|
66
66
|
const output = options.output || `/backups/postgres-backup-${Date.now()}.dump`;
|
|
67
|
-
//
|
|
67
|
+
// Build pg_dump command
|
|
68
68
|
let cmd = ['pg_dump', '-U', conn.user, '-d', conn.database];
|
|
69
|
-
//
|
|
69
|
+
// Backup format
|
|
70
70
|
if (format === 'custom') {
|
|
71
71
|
cmd.push('-Fc'); // Custom format (compressed)
|
|
72
72
|
}
|
|
@@ -76,8 +76,8 @@ export class PostgreSQLAdapter {
|
|
|
76
76
|
else if (format === 'directory') {
|
|
77
77
|
cmd.push('-Fd'); // Directory format
|
|
78
78
|
}
|
|
79
|
-
// 'sql' format -
|
|
80
|
-
// Backup
|
|
79
|
+
// 'sql' format - default (plain SQL)
|
|
80
|
+
// Backup specific tables
|
|
81
81
|
if (options.tables && options.tables.length > 0) {
|
|
82
82
|
for (const table of options.tables) {
|
|
83
83
|
cmd.push('-t', table);
|
|
@@ -85,7 +85,7 @@ export class PostgreSQLAdapter {
|
|
|
85
85
|
}
|
|
86
86
|
// Output file
|
|
87
87
|
cmd.push('-f', output);
|
|
88
|
-
//
|
|
88
|
+
// Password via PGPASSWORD
|
|
89
89
|
const envVars = conn.password ? [`PGPASSWORD=${conn.password}`] : [];
|
|
90
90
|
logger.info(`Creating PostgreSQL backup: ${output}`);
|
|
91
91
|
await this.containerManager.exec(service, project.name, cmd, {
|
|
@@ -94,7 +94,7 @@ export class PostgreSQLAdapter {
|
|
|
94
94
|
return output;
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
97
|
+
* Restore from backup
|
|
98
98
|
*/
|
|
99
99
|
async restore(service, backupPath, options) {
|
|
100
100
|
const project = await this.projectDiscovery.findProject();
|
|
@@ -105,7 +105,7 @@ export class PostgreSQLAdapter {
|
|
|
105
105
|
const env = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
106
106
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
107
107
|
const db = options?.database || conn.database;
|
|
108
|
-
//
|
|
108
|
+
// Determine backup format by extension
|
|
109
109
|
const isCustomFormat = backupPath.endsWith('.dump') || backupPath.endsWith('.backup');
|
|
110
110
|
let cmd;
|
|
111
111
|
if (isCustomFormat) {
|
|
@@ -126,7 +126,7 @@ export class PostgreSQLAdapter {
|
|
|
126
126
|
// SQL format → psql
|
|
127
127
|
cmd = ['psql', '-U', conn.user, '-d', db, '-f', backupPath];
|
|
128
128
|
}
|
|
129
|
-
//
|
|
129
|
+
// Password via PGPASSWORD
|
|
130
130
|
const envVars = conn.password ? [`PGPASSWORD=${conn.password}`] : [];
|
|
131
131
|
logger.info(`Restoring PostgreSQL from backup: ${backupPath}`);
|
|
132
132
|
await this.containerManager.exec(service, project.name, cmd, {
|
|
@@ -134,7 +134,7 @@ export class PostgreSQLAdapter {
|
|
|
134
134
|
});
|
|
135
135
|
}
|
|
136
136
|
/**
|
|
137
|
-
*
|
|
137
|
+
* Get database status
|
|
138
138
|
*/
|
|
139
139
|
async status(service) {
|
|
140
140
|
const project = await this.projectDiscovery.findProject();
|
|
@@ -144,16 +144,16 @@ export class PostgreSQLAdapter {
|
|
|
144
144
|
}
|
|
145
145
|
const env = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
146
146
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
147
|
-
//
|
|
147
|
+
// Get version
|
|
148
148
|
const versionOutput = await this.query(service, 'SELECT version();');
|
|
149
149
|
const version = this.parseVersion(versionOutput);
|
|
150
|
-
//
|
|
150
|
+
// Get database size
|
|
151
151
|
const sizeOutput = await this.query(service, "SELECT pg_size_pretty(pg_database_size(current_database())) as size;");
|
|
152
152
|
const size = this.parseSingleValue(sizeOutput);
|
|
153
|
-
//
|
|
153
|
+
// Get connection count
|
|
154
154
|
const connectionsOutput = await this.query(service, "SELECT count(*) as connections FROM pg_stat_activity WHERE datname = current_database();");
|
|
155
155
|
const connections = parseInt(this.parseSingleValue(connectionsOutput) || '0');
|
|
156
|
-
//
|
|
156
|
+
// Get uptime
|
|
157
157
|
const uptimeOutput = await this.query(service, "SELECT date_trunc('second', current_timestamp - pg_postmaster_start_time()) as uptime;");
|
|
158
158
|
const uptime = this.parseSingleValue(uptimeOutput);
|
|
159
159
|
return {
|
|
@@ -166,7 +166,7 @@ export class PostgreSQLAdapter {
|
|
|
166
166
|
};
|
|
167
167
|
}
|
|
168
168
|
/**
|
|
169
|
-
*
|
|
169
|
+
* Get connection info from environment
|
|
170
170
|
*/
|
|
171
171
|
getConnectionInfo(service, env) {
|
|
172
172
|
return {
|
|
@@ -178,24 +178,24 @@ export class PostgreSQLAdapter {
|
|
|
178
178
|
};
|
|
179
179
|
}
|
|
180
180
|
/**
|
|
181
|
-
*
|
|
181
|
+
* Parse PostgreSQL version from output
|
|
182
182
|
*/
|
|
183
183
|
parseVersion(versionOutput) {
|
|
184
184
|
const match = versionOutput.match(/PostgreSQL\s+(\d+\.\d+)/i);
|
|
185
185
|
return match ? match[1] : 'unknown';
|
|
186
186
|
}
|
|
187
187
|
/**
|
|
188
|
-
*
|
|
188
|
+
* Parse single value from SQL output (first row, first column)
|
|
189
189
|
*/
|
|
190
190
|
parseSingleValue(output) {
|
|
191
|
-
//
|
|
191
|
+
// Simple parsing: take first line after header
|
|
192
192
|
const lines = output.split('\n').filter((line) => line.trim().length > 0);
|
|
193
193
|
if (lines.length < 2) {
|
|
194
194
|
return '';
|
|
195
195
|
}
|
|
196
|
-
//
|
|
196
|
+
// Skip header, take first data row
|
|
197
197
|
const dataLine = lines[1];
|
|
198
|
-
//
|
|
198
|
+
// Remove extra spaces
|
|
199
199
|
return dataLine.trim();
|
|
200
200
|
}
|
|
201
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/adapters/postgresql.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,iBAAiB;IACpB,gBAAgB,CAAmB;IACnC,gBAAgB,CAAmB;IACnC,UAAU,CAAa;IAE/B;QACE,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,KAAa,EAAE,OAAsB;QAChE,
|
|
1
|
+
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/adapters/postgresql.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/redis.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Redis Adapter
|
|
3
|
-
*
|
|
3
|
+
* DatabaseAdapter implementation for Redis
|
|
4
4
|
*/
|
|
5
5
|
import type { DatabaseAdapter } from './database-adapter.js';
|
|
6
6
|
import type { QueryOptions, BackupOptions, RestoreOptions, DBStatus, ConnectionInfo } from './types.js';
|
|
@@ -11,35 +11,35 @@ export declare class RedisAdapter implements DatabaseAdapter {
|
|
|
11
11
|
private envManager;
|
|
12
12
|
constructor();
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Execute Redis command
|
|
15
15
|
*/
|
|
16
16
|
query(service: string, query: string, options?: QueryOptions): Promise<string>;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Create backup (RDB snapshot)
|
|
19
19
|
*/
|
|
20
20
|
backup(service: string, options: BackupOptions): Promise<string>;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Restore from backup
|
|
23
23
|
*/
|
|
24
24
|
restore(service: string, backupPath: string, options?: RestoreOptions): Promise<void>;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Get database status
|
|
27
27
|
*/
|
|
28
28
|
status(service: string): Promise<DBStatus>;
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* Get connection info from environment
|
|
31
31
|
*/
|
|
32
32
|
getConnectionInfo(service: ServiceConfig, env: Record<string, string>): ConnectionInfo;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Wait for BGSAVE to complete
|
|
35
35
|
*/
|
|
36
36
|
private waitForBgsave;
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* Parse Redis INFO output
|
|
39
39
|
*/
|
|
40
40
|
private parseRedisInfo;
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* Format uptime in human-readable format
|
|
43
43
|
*/
|
|
44
44
|
private formatUptime;
|
|
45
45
|
}
|
package/dist/adapters/redis.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Redis Adapter
|
|
3
|
-
*
|
|
3
|
+
* DatabaseAdapter implementation for Redis
|
|
4
4
|
*/
|
|
5
5
|
import { ContainerManager } from '../managers/container-manager.js';
|
|
6
6
|
import { ProjectDiscovery } from '../discovery/project-discovery.js';
|
|
@@ -16,7 +16,7 @@ export class RedisAdapter {
|
|
|
16
16
|
this.envManager = new EnvManager();
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Execute Redis command
|
|
20
20
|
*/
|
|
21
21
|
async query(service, query, options) {
|
|
22
22
|
const project = await this.projectDiscovery.findProject();
|
|
@@ -26,13 +26,13 @@ export class RedisAdapter {
|
|
|
26
26
|
}
|
|
27
27
|
const env = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
28
28
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
29
|
-
//
|
|
29
|
+
// Build redis-cli command
|
|
30
30
|
let cmd = ['redis-cli'];
|
|
31
|
-
//
|
|
31
|
+
// Password (if needed)
|
|
32
32
|
if (conn.password) {
|
|
33
33
|
cmd.push('-a', conn.password);
|
|
34
34
|
}
|
|
35
|
-
//
|
|
35
|
+
// Redis command
|
|
36
36
|
const commandParts = query.trim().split(/\s+/);
|
|
37
37
|
cmd.push(...commandParts);
|
|
38
38
|
logger.debug(`Executing Redis command in ${service}: ${query}`);
|
|
@@ -40,7 +40,7 @@ export class RedisAdapter {
|
|
|
40
40
|
return output;
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* Create backup (RDB snapshot)
|
|
44
44
|
*/
|
|
45
45
|
async backup(service, options) {
|
|
46
46
|
const project = await this.projectDiscovery.findProject();
|
|
@@ -51,7 +51,7 @@ export class RedisAdapter {
|
|
|
51
51
|
const env = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
52
52
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
53
53
|
const output = options.output || `/backups/redis-backup-${Date.now()}.rdb`;
|
|
54
|
-
// 1.
|
|
54
|
+
// 1. Create snapshot (BGSAVE - background, non-blocking)
|
|
55
55
|
logger.info('Creating Redis snapshot (BGSAVE)...');
|
|
56
56
|
let cmd = ['redis-cli'];
|
|
57
57
|
if (conn.password) {
|
|
@@ -59,34 +59,34 @@ export class RedisAdapter {
|
|
|
59
59
|
}
|
|
60
60
|
cmd.push('BGSAVE');
|
|
61
61
|
await this.containerManager.exec(service, project.name, cmd);
|
|
62
|
-
// 2.
|
|
62
|
+
// 2. Wait for BGSAVE to complete
|
|
63
63
|
await this.waitForBgsave(service, conn.password);
|
|
64
|
-
// 3.
|
|
64
|
+
// 3. Copy dump.rdb to output (usually /data/dump.rdb in container)
|
|
65
65
|
logger.info(`Copying dump.rdb to ${output}...`);
|
|
66
66
|
const copyCmd = ['cp', '/data/dump.rdb', output];
|
|
67
67
|
await this.containerManager.exec(service, project.name, copyCmd);
|
|
68
68
|
return output;
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Restore from backup
|
|
72
72
|
*/
|
|
73
73
|
async restore(service, backupPath, options) {
|
|
74
74
|
const project = await this.projectDiscovery.findProject();
|
|
75
75
|
logger.info(`Restoring Redis from backup: ${backupPath}`);
|
|
76
|
-
// 1.
|
|
76
|
+
// 1. Stop container
|
|
77
77
|
logger.info('Stopping Redis container...');
|
|
78
78
|
await this.containerManager.stopContainer(service, project.name);
|
|
79
|
-
// 2.
|
|
79
|
+
// 2. Copy backup file to location where Redis will find it
|
|
80
80
|
logger.info('Copying backup file...');
|
|
81
81
|
const copyCmd = ['cp', backupPath, '/data/dump.rdb'];
|
|
82
82
|
await this.containerManager.exec(service, project.name, copyCmd);
|
|
83
|
-
// 3.
|
|
83
|
+
// 3. Start container (Redis will automatically load dump.rdb)
|
|
84
84
|
logger.info('Starting Redis container...');
|
|
85
85
|
await this.containerManager.startContainer(service, project.name);
|
|
86
86
|
logger.info('Redis restore completed');
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
|
-
*
|
|
89
|
+
* Get database status
|
|
90
90
|
*/
|
|
91
91
|
async status(service) {
|
|
92
92
|
const project = await this.projectDiscovery.findProject();
|
|
@@ -96,7 +96,7 @@ export class RedisAdapter {
|
|
|
96
96
|
}
|
|
97
97
|
const env = this.envManager.loadEnv(project.projectDir, service, serviceConfig);
|
|
98
98
|
const conn = this.getConnectionInfo(serviceConfig, env);
|
|
99
|
-
//
|
|
99
|
+
// Get INFO
|
|
100
100
|
const infoOutput = await this.query(service, 'INFO');
|
|
101
101
|
const info = this.parseRedisInfo(infoOutput);
|
|
102
102
|
return {
|
|
@@ -112,7 +112,7 @@ export class RedisAdapter {
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
/**
|
|
115
|
-
*
|
|
115
|
+
* Get connection info from environment
|
|
116
116
|
*/
|
|
117
117
|
getConnectionInfo(service, env) {
|
|
118
118
|
return {
|
|
@@ -124,12 +124,12 @@ export class RedisAdapter {
|
|
|
124
124
|
};
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
|
-
*
|
|
127
|
+
* Wait for BGSAVE to complete
|
|
128
128
|
*/
|
|
129
129
|
async waitForBgsave(service, password) {
|
|
130
130
|
const project = await this.projectDiscovery.findProject();
|
|
131
131
|
let attempts = 0;
|
|
132
|
-
const maxAttempts = 30; // 30
|
|
132
|
+
const maxAttempts = 30; // 30 seconds maximum
|
|
133
133
|
while (attempts < maxAttempts) {
|
|
134
134
|
let cmd = ['redis-cli'];
|
|
135
135
|
if (password) {
|
|
@@ -138,7 +138,7 @@ export class RedisAdapter {
|
|
|
138
138
|
cmd.push('LASTSAVE');
|
|
139
139
|
const output = await this.containerManager.exec(service, project.name, cmd);
|
|
140
140
|
const lastsave = parseInt(output.trim());
|
|
141
|
-
//
|
|
141
|
+
// Check that BGSAVE is complete
|
|
142
142
|
cmd = ['redis-cli'];
|
|
143
143
|
if (password) {
|
|
144
144
|
cmd.push('-a', password);
|
|
@@ -150,14 +150,14 @@ export class RedisAdapter {
|
|
|
150
150
|
logger.debug('BGSAVE completed');
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
|
-
//
|
|
153
|
+
// Wait 1 second before next check
|
|
154
154
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
155
155
|
attempts++;
|
|
156
156
|
}
|
|
157
157
|
throw new Error('BGSAVE timeout: backup did not complete in 30 seconds');
|
|
158
158
|
}
|
|
159
159
|
/**
|
|
160
|
-
*
|
|
160
|
+
* Parse Redis INFO output
|
|
161
161
|
*/
|
|
162
162
|
parseRedisInfo(info) {
|
|
163
163
|
const result = {};
|
|
@@ -165,7 +165,7 @@ export class RedisAdapter {
|
|
|
165
165
|
if (line.includes(':')) {
|
|
166
166
|
const [key, ...valueParts] = line.split(':');
|
|
167
167
|
const value = valueParts.join(':').trim();
|
|
168
|
-
//
|
|
168
|
+
// Special handling for db0 (keys)
|
|
169
169
|
if (key.startsWith('db0')) {
|
|
170
170
|
if (!result.db0) {
|
|
171
171
|
result.db0 = {};
|
|
@@ -183,7 +183,7 @@ export class RedisAdapter {
|
|
|
183
183
|
return result;
|
|
184
184
|
}
|
|
185
185
|
/**
|
|
186
|
-
*
|
|
186
|
+
* Format uptime in human-readable format
|
|
187
187
|
*/
|
|
188
188
|
formatUptime(seconds) {
|
|
189
189
|
const days = Math.floor(seconds / 86400);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,YAAY;IACf,gBAAgB,CAAmB;IACnC,gBAAgB,CAAmB;IACnC,UAAU,CAAa;IAE/B;QACE,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,KAAa,EAAE,OAAsB;QAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,wBAAwB,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAExD,
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"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"}
|