@hypnosis/docker-mcp-server 1.0.1 → 1.0.4

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.
Files changed (56) hide show
  1. package/README.md +15 -1
  2. package/dist/adapters/adapter-registry.d.ts +5 -5
  3. package/dist/adapters/adapter-registry.js +5 -5
  4. package/dist/adapters/database-adapter.d.ts +8 -8
  5. package/dist/adapters/database-adapter.js +1 -1
  6. package/dist/adapters/postgresql.d.ts +8 -8
  7. package/dist/adapters/postgresql.js +26 -26
  8. package/dist/adapters/postgresql.js.map +1 -1
  9. package/dist/adapters/redis.d.ts +9 -9
  10. package/dist/adapters/redis.js +23 -23
  11. package/dist/adapters/redis.js.map +1 -1
  12. package/dist/adapters/sqlite.d.ts +6 -6
  13. package/dist/adapters/sqlite.js +14 -14
  14. package/dist/adapters/sqlite.js.map +1 -1
  15. package/dist/adapters/types.d.ts +6 -6
  16. package/dist/adapters/types.js +1 -1
  17. package/dist/discovery/project-discovery.d.ts.map +1 -1
  18. package/dist/discovery/project-discovery.js +17 -3
  19. package/dist/discovery/project-discovery.js.map +1 -1
  20. package/dist/index.js +56 -18
  21. package/dist/index.js.map +1 -1
  22. package/dist/managers/compose-manager.d.ts.map +1 -1
  23. package/dist/managers/compose-manager.js +33 -4
  24. package/dist/managers/compose-manager.js.map +1 -1
  25. package/dist/managers/container-manager.d.ts +57 -13
  26. package/dist/managers/container-manager.d.ts.map +1 -1
  27. package/dist/managers/container-manager.js +140 -28
  28. package/dist/managers/container-manager.js.map +1 -1
  29. package/dist/tools/container-tools.d.ts +6 -4
  30. package/dist/tools/container-tools.d.ts.map +1 -1
  31. package/dist/tools/container-tools.js +87 -8
  32. package/dist/tools/container-tools.js.map +1 -1
  33. package/dist/tools/database-tools.d.ts +3 -3
  34. package/dist/tools/database-tools.js +4 -4
  35. package/dist/tools/database-tools.js.map +1 -1
  36. package/dist/tools/env-tools.d.ts +4 -4
  37. package/dist/tools/env-tools.js +9 -9
  38. package/dist/tools/env-tools.js.map +1 -1
  39. package/dist/tools/executor-tool.d.ts +3 -3
  40. package/dist/tools/executor-tool.js +6 -6
  41. package/dist/tools/executor-tool.js.map +1 -1
  42. package/dist/tools/mcp-health-tool.d.ts +4 -4
  43. package/dist/tools/mcp-health-tool.js +5 -5
  44. package/dist/tools/mcp-health-tool.js.map +1 -1
  45. package/dist/utils/compose-exec.d.ts.map +1 -1
  46. package/dist/utils/compose-exec.js +16 -1
  47. package/dist/utils/compose-exec.js.map +1 -1
  48. package/dist/utils/port-utils.d.ts +24 -0
  49. package/dist/utils/port-utils.d.ts.map +1 -0
  50. package/dist/utils/port-utils.js +89 -0
  51. package/dist/utils/port-utils.js.map +1 -0
  52. package/dist/utils/workspace.d.ts +34 -0
  53. package/dist/utils/workspace.d.ts.map +1 -0
  54. package/dist/utils/workspace.js +52 -0
  55. package/dist/utils/workspace.js.map +1 -0
  56. package/package.json +1 -1
package/README.md CHANGED
@@ -7,8 +7,9 @@ Universal Docker MCP server for AI assistants (Cursor, Claude Desktop). Manage D
7
7
 
8
8
  ## ✨ Features
9
9
 
10
- - ✅ **16 MCP Commands** — Container management, database operations, environment handling
10
+ - ✅ **18 MCP Commands** — Container management, database operations, environment handling, resource monitoring
11
11
  - ✅ **Database Support** — PostgreSQL, Redis, SQLite with extensible adapter pattern
12
+ - ✅ **Resource Monitoring** — Container stats (CPU, Memory, Network, Block I/O), images, volumes, networks
12
13
  - ✅ **Auto-Discovery** — Automatically finds and parses `docker-compose.yml` files
13
14
  - ✅ **Security** — Automatic secrets masking in environment variables
14
15
  - ✅ **Follow Logs** — Real-time log streaming with `follow` mode
@@ -111,12 +112,25 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
111
112
  | `docker_compose_config` | Show parsed compose config | `docker_compose_config()` |
112
113
  | `docker_healthcheck` | Check health of all services | `docker_healthcheck()` |
113
114
 
115
+ ### Resource Monitoring (2 commands)
116
+
117
+ | Command | Description | Example |
118
+ |---------|-------------|---------|
119
+ | `docker_container_stats` | Get container resource usage | `docker_container_stats("web")` |
120
+ | `docker_resource_list` | List Docker resources | `docker_resource_list("images")` |
121
+
114
122
  ### Universal Executor (1 command)
115
123
 
116
124
  | Command | Description | Example |
117
125
  |---------|-------------|---------|
118
126
  | `docker_exec` | Execute any command in container | `docker_exec("web", "npm test")` |
119
127
 
128
+ ### MCP Health (1 command)
129
+
130
+ | Command | Description | Example |
131
+ |---------|-------------|---------|
132
+ | `docker_mcp_health` | Server diagnostics | `docker_mcp_health()` |
133
+
120
134
  ## 💡 Usage Examples
121
135
 
122
136
  ### Example 1: Web Development (Next.js + Redis)
@@ -1,24 +1,24 @@
1
1
  /**
2
2
  * Adapter Registry
3
- * Регистрация и получение Database Adapters по типу БД
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
- * Регистрация и получение Database Adapters по типу БД
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
- * Интерфейс для Database Adapters
9
- * Все адаптеры должны реализовать этот интерфейс
8
+ * Interface for Database Adapters
9
+ * All adapters must implement this interface
10
10
  */
11
11
  export interface DatabaseAdapter {
12
12
  /**
13
- * Выполнить query или команду
13
+ * Execute query or command
14
14
  */
15
15
  query(service: string, query: string, options?: QueryOptions): Promise<string>;
16
16
  /**
17
- * Создать backup
17
+ * Create backup
18
18
  */
19
19
  backup(service: string, options: BackupOptions): Promise<string>;
20
20
  /**
21
- * Восстановить из backup
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
- * Получить connection info из environment
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
  * Database Adapter Interface
3
- * Интерфейс для работы с разными типами БД
3
+ * Interface for working with different database types
4
4
  */
5
5
  export {};
6
6
  //# sourceMappingURL=database-adapter.js.map
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * PostgreSQL Adapter
3
- * Реализация DatabaseAdapter для PostgreSQL
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
- * Выполнить SQL query
14
+ * Execute SQL query
15
15
  */
16
16
  query(service: string, query: string, options?: QueryOptions): Promise<string>;
17
17
  /**
18
- * Создать backup
18
+ * Create backup
19
19
  */
20
20
  backup(service: string, options: BackupOptions): Promise<string>;
21
21
  /**
22
- * Восстановить из backup
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
- * Получить connection info из environment
30
+ * Get connection info from environment
31
31
  */
32
32
  getConnectionInfo(service: ServiceConfig, env: Record<string, string>): ConnectionInfo;
33
33
  /**
34
- * Парсит версию PostgreSQL из output
34
+ * Parse PostgreSQL version from output
35
35
  */
36
36
  private parseVersion;
37
37
  /**
38
- * Парсит одно значение из SQL output (первая строка, первый столбец)
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
- * Реализация DatabaseAdapter для PostgreSQL
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
- * Выполнить SQL query
20
+ * Execute SQL query
21
21
  */
22
22
  async query(service, query, options) {
23
- // Валидация SQL (если включена)
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
- // Строим команду psql
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
- // Пароль через PGPASSWORD env var
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
- * Создать backup
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
- // Строим команду pg_dump
67
+ // Build pg_dump command
68
68
  let cmd = ['pg_dump', '-U', conn.user, '-d', conn.database];
69
- // Формат backup
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 - по умолчанию (plain SQL)
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
- // Пароль через PGPASSWORD
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
- * Восстановить из backup
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
- // Определяем формат backup по расширению
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
- // Пароль через PGPASSWORD
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
- // Получаем uptime
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
- * Получить connection info из environment
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
- * Парсит версию PostgreSQL из output
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
- * Парсит одно значение из SQL output (первая строка, первый столбец)
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":"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"}
1
+ {"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/adapters/postgresql.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Redis Adapter
3
- * Реализация DatabaseAdapter для Redis
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
- * Выполнить Redis команду
14
+ * Execute Redis command
15
15
  */
16
16
  query(service: string, query: string, options?: QueryOptions): Promise<string>;
17
17
  /**
18
- * Создать backup (RDB snapshot)
18
+ * Create backup (RDB snapshot)
19
19
  */
20
20
  backup(service: string, options: BackupOptions): Promise<string>;
21
21
  /**
22
- * Восстановить из backup
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
- * Получить connection info из environment
30
+ * Get connection info from environment
31
31
  */
32
32
  getConnectionInfo(service: ServiceConfig, env: Record<string, string>): ConnectionInfo;
33
33
  /**
34
- * Ждать завершения BGSAVE
34
+ * Wait for BGSAVE to complete
35
35
  */
36
36
  private waitForBgsave;
37
37
  /**
38
- * Парсит Redis INFO output
38
+ * Parse Redis INFO output
39
39
  */
40
40
  private parseRedisInfo;
41
41
  /**
42
- * Форматирует uptime в человекочитаемый формат
42
+ * Format uptime in human-readable format
43
43
  */
44
44
  private formatUptime;
45
45
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Redis Adapter
3
- * Реализация DatabaseAdapter для Redis
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
- * Выполнить Redis команду
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
- // Строим команду redis-cli
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
- // Команда Redis
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
- * Создать backup (RDB snapshot)
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. Создать snapshot (BGSAVE - фоновый, не блокирует)
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. Ждем завершения BGSAVE
62
+ // 2. Wait for BGSAVE to complete
63
63
  await this.waitForBgsave(service, conn.password);
64
- // 3. Копируем dump.rdb в output (обычно /data/dump.rdb в контейнере)
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
- * Восстановить из backup
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. Копировать backup файл в место где Redis его найдет
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. Запустить контейнер (Redis автоматически загрузит dump.rdb)
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
- // Получаем INFO
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
- * Получить connection info из environment
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
- * Ждать завершения BGSAVE
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
- // Проверяем что BGSAVE завершен
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
- // Ждем 1 секунду перед следующей проверкой
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
- * Парсит Redis INFO output
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
- // Специальная обработка для db0 (keys)
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
- * Форматирует uptime в человекочитаемый формат
186
+ * Format uptime in human-readable format
187
187
  */
188
188
  formatUptime(seconds) {
189
189
  const days = Math.floor(seconds / 86400);