fix(services): Improve logging and enhance MongoDB Compass integration
This commit is contained in:
		| @@ -1,5 +1,13 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## 2025-08-15 - 1.17.1 - fix(services) | ||||
| Improve services module logging and enhance MongoDB Compass integration | ||||
|  | ||||
| - Refactored services module to use centralized logger from gitzone.logging.ts | ||||
| - Automatically display MongoDB Compass connection string when starting services or checking status | ||||
| - Removed custom printMessage wrapper in favor of standard logger.log() calls | ||||
| - Consistent logging across all service commands | ||||
|  | ||||
| ## 2025-08-14 - 1.17.0 - feat(services) | ||||
| Add comprehensive development services management for MongoDB and MinIO containers | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| { | ||||
|   "name": "@git.zone/cli", | ||||
|   "private": false, | ||||
|   "version": "1.17.0", | ||||
|   "version": "1.17.1", | ||||
|   "description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.", | ||||
|   "main": "dist_ts/index.ts", | ||||
|   "typings": "dist_ts/index.d.ts", | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| import * as plugins from './mod.plugins.js'; | ||||
| import * as helpers from './helpers.js'; | ||||
| import { logger } from '../gitzone.logging.js'; | ||||
|  | ||||
| export type ContainerStatus = 'running' | 'stopped' | 'not_exists'; | ||||
|  | ||||
| @@ -147,7 +148,7 @@ export class DockerContainer { | ||||
|       const result = await this.smartshell.exec(command); | ||||
|       return result.exitCode === 0; | ||||
|     } catch (error) { | ||||
|       helpers.printMessage(`Failed to run container: ${error.message}`, 'red'); | ||||
|       logger.log('error', `Failed to run container: ${error.message}`); | ||||
|       return false; | ||||
|     } | ||||
|   } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| import * as plugins from './mod.plugins.js'; | ||||
| import * as helpers from './helpers.js'; | ||||
| import { logger } from '../gitzone.logging.js'; | ||||
|  | ||||
| export interface IServiceConfig { | ||||
|   PROJECT_NAME: string; | ||||
| @@ -111,10 +112,10 @@ export class ServiceConfiguration { | ||||
|      | ||||
|     await this.saveConfig(); | ||||
|      | ||||
|     helpers.printMessage('✅ Created .nogit/env.json with project defaults', 'green'); | ||||
|     helpers.printMessage(`📍 MongoDB port: ${mongoPort}`, 'blue'); | ||||
|     helpers.printMessage(`📍 S3 API port: ${s3Port}`, 'blue'); | ||||
|     helpers.printMessage(`📍 S3 Console port: ${s3ConsolePort}`, 'blue'); | ||||
|     logger.log('ok', '✅ Created .nogit/env.json with project defaults'); | ||||
|     logger.log('info', `📍 MongoDB port: ${mongoPort}`); | ||||
|     logger.log('info', `📍 S3 API port: ${s3Port}`); | ||||
|     logger.log('info', `📍 S3 Console port: ${s3ConsolePort}`); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
| @@ -209,9 +210,9 @@ export class ServiceConfiguration { | ||||
|      | ||||
|     if (updated) { | ||||
|       await this.saveConfig(); | ||||
|       helpers.printMessage(`✅ Added missing fields: ${fieldsAdded.join(', ')}`, 'green'); | ||||
|       logger.log('ok', `✅ Added missing fields: ${fieldsAdded.join(', ')}`); | ||||
|     } else { | ||||
|       helpers.printMessage('✅ Configuration complete', 'green'); | ||||
|       logger.log('ok', '✅ Configuration complete'); | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import * as plugins from './mod.plugins.js'; | ||||
| import * as helpers from './helpers.js'; | ||||
| import { ServiceConfiguration } from './classes.serviceconfiguration.js'; | ||||
| import { DockerContainer } from './classes.dockercontainer.js'; | ||||
| import { logger } from '../gitzone.logging.js'; | ||||
|  | ||||
| export class ServiceManager { | ||||
|   private config: ServiceConfiguration; | ||||
| @@ -18,20 +19,20 @@ export class ServiceManager { | ||||
|   public async init(): Promise<void> { | ||||
|     // Check Docker availability | ||||
|     if (!(await this.docker.checkDocker())) { | ||||
|       helpers.printMessage('Error: Docker is not installed. Please install Docker first.', 'red'); | ||||
|       logger.log('error', 'Error: Docker is not installed. Please install Docker first.'); | ||||
|       process.exit(1); | ||||
|     } | ||||
|      | ||||
|     // Load or create configuration | ||||
|     await this.config.loadOrCreate(); | ||||
|     helpers.printMessage(`📋 Project: ${this.config.getConfig().PROJECT_NAME}`, 'magenta'); | ||||
|     logger.log('info', `📋 Project: ${this.config.getConfig().PROJECT_NAME}`); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
|    * Start MongoDB service | ||||
|    */ | ||||
|   public async startMongoDB(): Promise<void> { | ||||
|     helpers.printMessage('📦 MongoDB:', 'yellow'); | ||||
|     logger.log('note', '📦 MongoDB:'); | ||||
|      | ||||
|     const config = this.config.getConfig(); | ||||
|     const containers = this.config.getContainerNames(); | ||||
| @@ -44,19 +45,19 @@ export class ServiceManager { | ||||
|      | ||||
|     switch (status) { | ||||
|       case 'running': | ||||
|         helpers.printMessage('  Already running ✓', 'green'); | ||||
|         logger.log('ok', '  Already running ✓'); | ||||
|         break; | ||||
|          | ||||
|       case 'stopped': | ||||
|         if (await this.docker.start(containers.mongo)) { | ||||
|           helpers.printMessage('  Started ✓', 'green'); | ||||
|           logger.log('ok', '  Started ✓'); | ||||
|         } else { | ||||
|           helpers.printMessage('  Failed to start', 'red'); | ||||
|           logger.log('error', '  Failed to start'); | ||||
|         } | ||||
|         break; | ||||
|          | ||||
|       case 'not_exists': | ||||
|         helpers.printMessage('  Creating container...', 'yellow'); | ||||
|         logger.log('note', '  Creating container...'); | ||||
|          | ||||
|         const success = await this.docker.run({ | ||||
|           name: containers.mongo, | ||||
| @@ -76,23 +77,28 @@ export class ServiceManager { | ||||
|         }); | ||||
|          | ||||
|         if (success) { | ||||
|           helpers.printMessage('  Created and started ✓', 'green'); | ||||
|           logger.log('ok', '  Created and started ✓'); | ||||
|         } else { | ||||
|           helpers.printMessage('  Failed to create container', 'red'); | ||||
|           logger.log('error', '  Failed to create container'); | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|      | ||||
|     helpers.printMessage(`  Container: ${containers.mongo}`, 'cyan'); | ||||
|     helpers.printMessage(`  Port: ${config.MONGODB_PORT}`, 'cyan'); | ||||
|     helpers.printMessage(`  Connection: ${this.config.getMongoConnectionString()}`, 'blue'); | ||||
|     logger.log('info', `  Container: ${containers.mongo}`); | ||||
|     logger.log('info', `  Port: ${config.MONGODB_PORT}`); | ||||
|     logger.log('info', `  Connection: ${this.config.getMongoConnectionString()}`); | ||||
|      | ||||
|     // Show Compass connection string | ||||
|     const networkIp = await helpers.getLocalNetworkIp(); | ||||
|     const compassString = `mongodb://${config.MONGODB_USER}:${config.MONGODB_PASS}@${networkIp}:${config.MONGODB_PORT}/${config.MONGODB_NAME}?authSource=admin`; | ||||
|     logger.log('ok', `  Compass: ${compassString}`); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
|    * Start MinIO service | ||||
|    */ | ||||
|   public async startMinIO(): Promise<void> { | ||||
|     helpers.printMessage('📦 S3/MinIO:', 'yellow'); | ||||
|     logger.log('note', '📦 S3/MinIO:'); | ||||
|      | ||||
|     const config = this.config.getConfig(); | ||||
|     const containers = this.config.getContainerNames(); | ||||
| @@ -105,19 +111,19 @@ export class ServiceManager { | ||||
|      | ||||
|     switch (status) { | ||||
|       case 'running': | ||||
|         helpers.printMessage('  Already running ✓', 'green'); | ||||
|         logger.log('ok', '  Already running ✓'); | ||||
|         break; | ||||
|          | ||||
|       case 'stopped': | ||||
|         if (await this.docker.start(containers.minio)) { | ||||
|           helpers.printMessage('  Started ✓', 'green'); | ||||
|           logger.log('ok', '  Started ✓'); | ||||
|         } else { | ||||
|           helpers.printMessage('  Failed to start', 'red'); | ||||
|           logger.log('error', '  Failed to start'); | ||||
|         } | ||||
|         break; | ||||
|          | ||||
|       case 'not_exists': | ||||
|         helpers.printMessage('  Creating container...', 'yellow'); | ||||
|         logger.log('note', '  Creating container...'); | ||||
|          | ||||
|         const success = await this.docker.run({ | ||||
|           name: containers.minio, | ||||
| @@ -138,7 +144,7 @@ export class ServiceManager { | ||||
|         }); | ||||
|          | ||||
|         if (success) { | ||||
|           helpers.printMessage('  Created and started ✓', 'green'); | ||||
|           logger.log('ok', '  Created and started ✓'); | ||||
|            | ||||
|           // Wait for MinIO to be ready | ||||
|           await plugins.smartdelay.delayFor(3000); | ||||
| @@ -154,37 +160,37 @@ export class ServiceManager { | ||||
|             `mc mb local/${config.S3_BUCKET}` | ||||
|           ); | ||||
|            | ||||
|           helpers.printMessage(`  Bucket '${config.S3_BUCKET}' created ✓`, 'green'); | ||||
|           logger.log('ok', `  Bucket '${config.S3_BUCKET}' created ✓`); | ||||
|         } else { | ||||
|           helpers.printMessage('  Failed to create container', 'red'); | ||||
|           logger.log('error', '  Failed to create container'); | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|      | ||||
|     helpers.printMessage(`  Container: ${containers.minio}`, 'cyan'); | ||||
|     helpers.printMessage(`  Port: ${config.S3_PORT}`, 'cyan'); | ||||
|     helpers.printMessage(`  Bucket: ${config.S3_BUCKET}`, 'cyan'); | ||||
|     helpers.printMessage(`  API: http://${config.S3_HOST}:${config.S3_PORT}`, 'blue'); | ||||
|     helpers.printMessage(`  Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT} (login: ${config.S3_USER}/***)`, 'blue'); | ||||
|     logger.log('info', `  Container: ${containers.minio}`); | ||||
|     logger.log('info', `  Port: ${config.S3_PORT}`); | ||||
|     logger.log('info', `  Bucket: ${config.S3_BUCKET}`); | ||||
|     logger.log('info', `  API: http://${config.S3_HOST}:${config.S3_PORT}`); | ||||
|     logger.log('info', `  Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT} (login: ${config.S3_USER}/***)`); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
|    * Stop MongoDB service | ||||
|    */ | ||||
|   public async stopMongoDB(): Promise<void> { | ||||
|     helpers.printMessage('📦 MongoDB:', 'yellow'); | ||||
|     logger.log('note', '📦 MongoDB:'); | ||||
|      | ||||
|     const containers = this.config.getContainerNames(); | ||||
|     const status = await this.docker.getStatus(containers.mongo); | ||||
|      | ||||
|     if (status === 'running') { | ||||
|       if (await this.docker.stop(containers.mongo)) { | ||||
|         helpers.printMessage('  Stopped ✓', 'green'); | ||||
|         logger.log('ok', '  Stopped ✓'); | ||||
|       } else { | ||||
|         helpers.printMessage('  Failed to stop', 'red'); | ||||
|         logger.log('error', '  Failed to stop'); | ||||
|       } | ||||
|     } else { | ||||
|       helpers.printMessage('  Not running', 'yellow'); | ||||
|       logger.log('note', '  Not running'); | ||||
|     } | ||||
|   } | ||||
|    | ||||
| @@ -192,19 +198,19 @@ export class ServiceManager { | ||||
|    * Stop MinIO service | ||||
|    */ | ||||
|   public async stopMinIO(): Promise<void> { | ||||
|     helpers.printMessage('📦 S3/MinIO:', 'yellow'); | ||||
|     logger.log('note', '📦 S3/MinIO:'); | ||||
|      | ||||
|     const containers = this.config.getContainerNames(); | ||||
|     const status = await this.docker.getStatus(containers.minio); | ||||
|      | ||||
|     if (status === 'running') { | ||||
|       if (await this.docker.stop(containers.minio)) { | ||||
|         helpers.printMessage('  Stopped ✓', 'green'); | ||||
|         logger.log('ok', '  Stopped ✓'); | ||||
|       } else { | ||||
|         helpers.printMessage('  Failed to stop', 'red'); | ||||
|         logger.log('error', '  Failed to stop'); | ||||
|       } | ||||
|     } else { | ||||
|       helpers.printMessage('  Not running', 'yellow'); | ||||
|       logger.log('note', '  Not running'); | ||||
|     } | ||||
|   } | ||||
|    | ||||
| @@ -217,23 +223,28 @@ export class ServiceManager { | ||||
|     const config = this.config.getConfig(); | ||||
|     const containers = this.config.getContainerNames(); | ||||
|      | ||||
|     helpers.printMessage(`Project: ${config.PROJECT_NAME}`, 'magenta'); | ||||
|     logger.log('info', `Project: ${config.PROJECT_NAME}`); | ||||
|     console.log(); | ||||
|      | ||||
|     // MongoDB status | ||||
|     const mongoStatus = await this.docker.getStatus(containers.mongo); | ||||
|     switch (mongoStatus) { | ||||
|       case 'running': | ||||
|         helpers.printMessage('📦 MongoDB: 🟢 Running', 'green'); | ||||
|         helpers.printMessage(`   ├─ Container: ${containers.mongo}`, 'cyan'); | ||||
|         helpers.printMessage(`   └─ ${this.config.getMongoConnectionString()}`, 'cyan'); | ||||
|         logger.log('ok', '📦 MongoDB: 🟢 Running'); | ||||
|         logger.log('info', `   ├─ Container: ${containers.mongo}`); | ||||
|         logger.log('info', `   ├─ Connection: ${this.config.getMongoConnectionString()}`); | ||||
|          | ||||
|         // Show Compass connection string | ||||
|         const networkIp = await helpers.getLocalNetworkIp(); | ||||
|         const compassString = `mongodb://${config.MONGODB_USER}:${config.MONGODB_PASS}@${networkIp}:${config.MONGODB_PORT}/${config.MONGODB_NAME}?authSource=admin`; | ||||
|         logger.log('ok', `   └─ Compass: ${compassString}`); | ||||
|         break; | ||||
|       case 'stopped': | ||||
|         helpers.printMessage('📦 MongoDB: 🟡 Stopped', 'yellow'); | ||||
|         helpers.printMessage(`   └─ Container: ${containers.mongo}`, 'cyan'); | ||||
|         logger.log('note', '📦 MongoDB: 🟡 Stopped'); | ||||
|         logger.log('info', `   └─ Container: ${containers.mongo}`); | ||||
|         break; | ||||
|       case 'not_exists': | ||||
|         helpers.printMessage('📦 MongoDB: ⚪ Not installed', 'magenta'); | ||||
|         logger.log('info', '📦 MongoDB: ⚪ Not installed'); | ||||
|         break; | ||||
|     } | ||||
|      | ||||
| @@ -241,18 +252,18 @@ export class ServiceManager { | ||||
|     const minioStatus = await this.docker.getStatus(containers.minio); | ||||
|     switch (minioStatus) { | ||||
|       case 'running': | ||||
|         helpers.printMessage('📦 S3/MinIO: 🟢 Running', 'green'); | ||||
|         helpers.printMessage(`   ├─ Container: ${containers.minio}`, 'cyan'); | ||||
|         helpers.printMessage(`   ├─ API: http://${config.S3_HOST}:${config.S3_PORT}`, 'cyan'); | ||||
|         helpers.printMessage(`   ├─ Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`, 'cyan'); | ||||
|         helpers.printMessage(`   └─ Bucket: ${config.S3_BUCKET}`, 'cyan'); | ||||
|         logger.log('ok', '📦 S3/MinIO: 🟢 Running'); | ||||
|         logger.log('info', `   ├─ Container: ${containers.minio}`); | ||||
|         logger.log('info', `   ├─ API: http://${config.S3_HOST}:${config.S3_PORT}`); | ||||
|         logger.log('info', `   ├─ Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`); | ||||
|         logger.log('info', `   └─ Bucket: ${config.S3_BUCKET}`); | ||||
|         break; | ||||
|       case 'stopped': | ||||
|         helpers.printMessage('📦 S3/MinIO: 🟡 Stopped', 'yellow'); | ||||
|         helpers.printMessage(`   └─ Container: ${containers.minio}`, 'cyan'); | ||||
|         logger.log('note', '📦 S3/MinIO: 🟡 Stopped'); | ||||
|         logger.log('info', `   └─ Container: ${containers.minio}`); | ||||
|         break; | ||||
|       case 'not_exists': | ||||
|         helpers.printMessage('📦 S3/MinIO: ⚪ Not installed', 'magenta'); | ||||
|         logger.log('info', '📦 S3/MinIO: ⚪ Not installed'); | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
| @@ -265,30 +276,30 @@ export class ServiceManager { | ||||
|      | ||||
|     const config = this.config.getConfig(); | ||||
|      | ||||
|     helpers.printMessage(`Project: ${config.PROJECT_NAME}`, 'magenta'); | ||||
|     logger.log('info', `Project: ${config.PROJECT_NAME}`); | ||||
|     console.log(); | ||||
|      | ||||
|     helpers.printMessage('MongoDB:', 'yellow'); | ||||
|     helpers.printMessage(`  Host: ${config.MONGODB_HOST}:${config.MONGODB_PORT}`, undefined); | ||||
|     helpers.printMessage(`  Database: ${config.MONGODB_NAME}`, undefined); | ||||
|     helpers.printMessage(`  User: ${config.MONGODB_USER}`, undefined); | ||||
|     helpers.printMessage('  Password: ***', undefined); | ||||
|     helpers.printMessage(`  Container: ${this.config.getContainerNames().mongo}`, undefined); | ||||
|     helpers.printMessage(`  Data: ${this.config.getDataDirectories().mongo}`, undefined); | ||||
|     helpers.printMessage(`  Connection: ${this.config.getMongoConnectionString()}`, 'blue'); | ||||
|     logger.log('note', 'MongoDB:'); | ||||
|     logger.log('info', `  Host: ${config.MONGODB_HOST}:${config.MONGODB_PORT}`); | ||||
|     logger.log('info', `  Database: ${config.MONGODB_NAME}`); | ||||
|     logger.log('info', `  User: ${config.MONGODB_USER}`); | ||||
|     logger.log('info', '  Password: ***'); | ||||
|     logger.log('info', `  Container: ${this.config.getContainerNames().mongo}`); | ||||
|     logger.log('info', `  Data: ${this.config.getDataDirectories().mongo}`); | ||||
|     logger.log('info', `  Connection: ${this.config.getMongoConnectionString()}`); | ||||
|      | ||||
|     console.log(); | ||||
|     helpers.printMessage('S3/MinIO:', 'yellow'); | ||||
|     helpers.printMessage(`  Host: ${config.S3_HOST}`, undefined); | ||||
|     helpers.printMessage(`  API Port: ${config.S3_PORT}`, undefined); | ||||
|     helpers.printMessage(`  Console Port: ${config.S3_CONSOLE_PORT}`, undefined); | ||||
|     helpers.printMessage(`  User: ${config.S3_USER}`, undefined); | ||||
|     helpers.printMessage('  Password: ***', undefined); | ||||
|     helpers.printMessage(`  Bucket: ${config.S3_BUCKET}`, undefined); | ||||
|     helpers.printMessage(`  Container: ${this.config.getContainerNames().minio}`, undefined); | ||||
|     helpers.printMessage(`  Data: ${this.config.getDataDirectories().minio}`, undefined); | ||||
|     helpers.printMessage(`  API URL: http://${config.S3_HOST}:${config.S3_PORT}`, 'blue'); | ||||
|     helpers.printMessage(`  Console URL: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`, 'blue'); | ||||
|     logger.log('note', 'S3/MinIO:'); | ||||
|     logger.log('info', `  Host: ${config.S3_HOST}`); | ||||
|     logger.log('info', `  API Port: ${config.S3_PORT}`); | ||||
|     logger.log('info', `  Console Port: ${config.S3_CONSOLE_PORT}`); | ||||
|     logger.log('info', `  User: ${config.S3_USER}`); | ||||
|     logger.log('info', '  Password: ***'); | ||||
|     logger.log('info', `  Bucket: ${config.S3_BUCKET}`); | ||||
|     logger.log('info', `  Container: ${this.config.getContainerNames().minio}`); | ||||
|     logger.log('info', `  Data: ${this.config.getDataDirectories().minio}`); | ||||
|     logger.log('info', `  API URL: http://${config.S3_HOST}:${config.S3_PORT}`); | ||||
|     logger.log('info', `  Console URL: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
| @@ -302,20 +313,20 @@ export class ServiceManager { | ||||
|      | ||||
|     const connectionString = `mongodb://${config.MONGODB_USER}:${config.MONGODB_PASS}@${networkIp}:${config.MONGODB_PORT}/${config.MONGODB_NAME}?authSource=admin`; | ||||
|      | ||||
|     helpers.printMessage('MongoDB Compass is a GUI tool for MongoDB. To connect:', 'cyan'); | ||||
|     logger.log('info', 'MongoDB Compass is a GUI tool for MongoDB. To connect:'); | ||||
|     console.log(); | ||||
|     helpers.printMessage('1. Download MongoDB Compass from:', undefined); | ||||
|     helpers.printMessage('   https://www.mongodb.com/products/compass', 'blue'); | ||||
|     logger.log('info', '1. Download MongoDB Compass from:'); | ||||
|     logger.log('info', '   https://www.mongodb.com/products/compass'); | ||||
|     console.log(); | ||||
|     helpers.printMessage('2. Open Compass and paste this connection string:', undefined); | ||||
|     helpers.printMessage(`   ${connectionString}`, 'green'); | ||||
|     logger.log('info', '2. Open Compass and paste this connection string:'); | ||||
|     logger.log('ok', `   ${connectionString}`); | ||||
|     console.log(); | ||||
|     helpers.printMessage('Connection Details:', 'yellow'); | ||||
|     helpers.printMessage(`  Network IP: ${networkIp}`, undefined); | ||||
|     helpers.printMessage(`  Port: ${config.MONGODB_PORT}`, undefined); | ||||
|     helpers.printMessage(`  Database: ${config.MONGODB_NAME}`, undefined); | ||||
|     helpers.printMessage(`  Username: ${config.MONGODB_USER}`, undefined); | ||||
|     helpers.printMessage(`  Auth Source: admin`, undefined); | ||||
|     logger.log('note', 'Connection Details:'); | ||||
|     logger.log('info', `  Network IP: ${networkIp}`); | ||||
|     logger.log('info', `  Port: ${config.MONGODB_PORT}`); | ||||
|     logger.log('info', `  Database: ${config.MONGODB_NAME}`); | ||||
|     logger.log('info', `  Username: ${config.MONGODB_USER}`); | ||||
|     logger.log('info', `  Auth Source: admin`); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
| @@ -332,7 +343,7 @@ export class ServiceManager { | ||||
|           const logs = await this.docker.logs(containers.mongo, lines); | ||||
|           console.log(logs); | ||||
|         } else { | ||||
|           helpers.printMessage('MongoDB container is not running', 'yellow'); | ||||
|           logger.log('note', 'MongoDB container is not running'); | ||||
|         } | ||||
|         break; | ||||
|          | ||||
| @@ -343,7 +354,7 @@ export class ServiceManager { | ||||
|           const logs = await this.docker.logs(containers.minio, lines); | ||||
|           console.log(logs); | ||||
|         } else { | ||||
|           helpers.printMessage('S3/MinIO container is not running', 'yellow'); | ||||
|           logger.log('note', 'S3/MinIO container is not running'); | ||||
|         } | ||||
|         break; | ||||
|          | ||||
| @@ -355,7 +366,7 @@ export class ServiceManager { | ||||
|         break; | ||||
|          | ||||
|       default: | ||||
|         helpers.printMessage('Usage: gitzone services logs [mongo|s3|all] [lines]', 'yellow'); | ||||
|         logger.log('note', 'Usage: gitzone services logs [mongo|s3|all] [lines]'); | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
| @@ -369,20 +380,20 @@ export class ServiceManager { | ||||
|      | ||||
|     if (await this.docker.exists(containers.mongo)) { | ||||
|       if (await this.docker.remove(containers.mongo, true)) { | ||||
|         helpers.printMessage('  MongoDB container removed ✓', 'green'); | ||||
|         logger.log('ok', '  MongoDB container removed ✓'); | ||||
|         removed = true; | ||||
|       } | ||||
|     } | ||||
|      | ||||
|     if (await this.docker.exists(containers.minio)) { | ||||
|       if (await this.docker.remove(containers.minio, true)) { | ||||
|         helpers.printMessage('  S3/MinIO container removed ✓', 'green'); | ||||
|         logger.log('ok', '  S3/MinIO container removed ✓'); | ||||
|         removed = true; | ||||
|       } | ||||
|     } | ||||
|      | ||||
|     if (!removed) { | ||||
|       helpers.printMessage('  No containers to remove', 'yellow'); | ||||
|       logger.log('note', '  No containers to remove'); | ||||
|     } | ||||
|   } | ||||
|    | ||||
| @@ -395,18 +406,18 @@ export class ServiceManager { | ||||
|      | ||||
|     if (await plugins.smartfile.fs.fileExists(directories.mongo)) { | ||||
|       await plugins.smartfile.fs.remove(directories.mongo); | ||||
|       helpers.printMessage('  MongoDB data removed ✓', 'green'); | ||||
|       logger.log('ok', '  MongoDB data removed ✓'); | ||||
|       cleaned = true; | ||||
|     } | ||||
|      | ||||
|     if (await plugins.smartfile.fs.fileExists(directories.minio)) { | ||||
|       await plugins.smartfile.fs.remove(directories.minio); | ||||
|       helpers.printMessage('  S3/MinIO data removed ✓', 'green'); | ||||
|       logger.log('ok', '  S3/MinIO data removed ✓'); | ||||
|       cleaned = true; | ||||
|     } | ||||
|      | ||||
|     if (!cleaned) { | ||||
|       helpers.printMessage('  No data to clean', 'yellow'); | ||||
|       logger.log('note', '  No data to clean'); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| import * as plugins from './mod.plugins.js'; | ||||
| import * as net from 'net'; | ||||
| import { logger } from '../gitzone.logging.js'; | ||||
|  | ||||
| /** | ||||
|  * Check if a port is available | ||||
| @@ -58,40 +59,14 @@ export const getProjectName = (): string => { | ||||
|   return plugins.path.basename(process.cwd()); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Print colored message to console | ||||
|  */ | ||||
| export const printMessage = (message: string, color?: 'green' | 'yellow' | 'red' | 'blue' | 'magenta' | 'cyan') => { | ||||
|   const logger = new plugins.smartlog.ConsoleLog(); | ||||
|    | ||||
|   switch (color) { | ||||
|     case 'green': | ||||
|       logger.log('ok', message); | ||||
|       break; | ||||
|     case 'yellow': | ||||
|       logger.log('note', message); | ||||
|       break; | ||||
|     case 'red': | ||||
|       logger.log('error', message); | ||||
|       break; | ||||
|     case 'blue': | ||||
|     case 'magenta': | ||||
|     case 'cyan': | ||||
|       logger.log('info', message); | ||||
|       break; | ||||
|     default: | ||||
|       logger.log('info', message); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Print a header with decorative lines | ||||
|  */ | ||||
| export const printHeader = (title: string) => { | ||||
|   console.log(); | ||||
|   printMessage('═══════════════════════════════════════════════════════════════', 'cyan'); | ||||
|   printMessage(`  ${title}`, 'cyan'); | ||||
|   printMessage('═══════════════════════════════════════════════════════════════', 'cyan'); | ||||
|   logger.log('info', '═══════════════════════════════════════════════════════════════'); | ||||
|   logger.log('info', `  ${title}`); | ||||
|   logger.log('info', '═══════════════════════════════════════════════════════════════'); | ||||
|   console.log(); | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| import * as plugins from './mod.plugins.js'; | ||||
| import * as helpers from './helpers.js'; | ||||
| import { ServiceManager } from './classes.servicemanager.js'; | ||||
| import { logger } from '../gitzone.logging.js'; | ||||
|  | ||||
| export const run = async (argvArg: any) => { | ||||
|   const serviceManager = new ServiceManager(); | ||||
| @@ -76,8 +77,8 @@ async function handleStart(serviceManager: ServiceManager, service: string) { | ||||
|       break; | ||||
|        | ||||
|     default: | ||||
|       helpers.printMessage(`Unknown service: ${service}`, 'red'); | ||||
|       helpers.printMessage('Use: mongo, s3, or all', 'yellow'); | ||||
|       logger.log('error', `Unknown service: ${service}`); | ||||
|       logger.log('note', 'Use: mongo, s3, or all'); | ||||
|       break; | ||||
|   } | ||||
| } | ||||
| @@ -104,8 +105,8 @@ async function handleStop(serviceManager: ServiceManager, service: string) { | ||||
|       break; | ||||
|        | ||||
|     default: | ||||
|       helpers.printMessage(`Unknown service: ${service}`, 'red'); | ||||
|       helpers.printMessage('Use: mongo, s3, or all', 'yellow'); | ||||
|       logger.log('error', `Unknown service: ${service}`); | ||||
|       logger.log('note', 'Use: mongo, s3, or all'); | ||||
|       break; | ||||
|   } | ||||
| } | ||||
| @@ -139,28 +140,28 @@ async function handleRestart(serviceManager: ServiceManager, service: string) { | ||||
|       break; | ||||
|        | ||||
|     default: | ||||
|       helpers.printMessage(`Unknown service: ${service}`, 'red'); | ||||
|       logger.log('error', `Unknown service: ${service}`); | ||||
|       break; | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function handleRemove(serviceManager: ServiceManager) { | ||||
|   helpers.printHeader('Removing Containers'); | ||||
|   helpers.printMessage('⚠️  This will remove containers but preserve data', 'yellow'); | ||||
|   logger.log('note', '⚠️  This will remove containers but preserve data'); | ||||
|    | ||||
|   const shouldContinue = await plugins.smartinteract.SmartInteract.getCliConfirmation('Continue?', false); | ||||
|    | ||||
|   if (shouldContinue) { | ||||
|     await serviceManager.removeContainers(); | ||||
|   } else { | ||||
|     helpers.printMessage('Cancelled', 'yellow'); | ||||
|     logger.log('note', 'Cancelled'); | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function handleClean(serviceManager: ServiceManager) { | ||||
|   helpers.printHeader('Clean All'); | ||||
|   helpers.printMessage('⚠️  WARNING: This will remove all containers and data!', 'red'); | ||||
|   helpers.printMessage('This action cannot be undone!', 'red'); | ||||
|   logger.log('error', '⚠️  WARNING: This will remove all containers and data!'); | ||||
|   logger.log('error', 'This action cannot be undone!'); | ||||
|    | ||||
|   const smartinteraction = new plugins.smartinteract.SmartInteract(); | ||||
|   const confirmAnswer = await smartinteraction.askQuestion({ | ||||
| @@ -174,45 +175,45 @@ async function handleClean(serviceManager: ServiceManager) { | ||||
|     await serviceManager.removeContainers(); | ||||
|     console.log(); | ||||
|     await serviceManager.cleanData(); | ||||
|     helpers.printMessage('All cleaned ✓', 'green'); | ||||
|     logger.log('ok', 'All cleaned ✓'); | ||||
|   } else { | ||||
|     helpers.printMessage('Cancelled', 'yellow'); | ||||
|     logger.log('note', 'Cancelled'); | ||||
|   } | ||||
| } | ||||
|  | ||||
| function showHelp() { | ||||
|   helpers.printHeader('GitZone Services Manager'); | ||||
|    | ||||
|   helpers.printMessage('Usage: gitzone services [command] [options]', 'green'); | ||||
|   logger.log('ok', 'Usage: gitzone services [command] [options]'); | ||||
|   console.log(); | ||||
|    | ||||
|   helpers.printMessage('Commands:', 'yellow'); | ||||
|   helpers.printMessage('  start [service]   Start services (mongo|s3|all)', undefined); | ||||
|   helpers.printMessage('  stop [service]    Stop services (mongo|s3|all)', undefined); | ||||
|   helpers.printMessage('  restart [service] Restart services (mongo|s3|all)', undefined); | ||||
|   helpers.printMessage('  status            Show service status', undefined); | ||||
|   helpers.printMessage('  config            Show current configuration', undefined); | ||||
|   helpers.printMessage('  compass           Show MongoDB Compass connection string', undefined); | ||||
|   helpers.printMessage('  logs [service]    Show logs (mongo|s3|all) [lines]', undefined); | ||||
|   helpers.printMessage('  remove            Remove all containers', undefined); | ||||
|   helpers.printMessage('  clean             Remove all containers and data ⚠️', undefined); | ||||
|   helpers.printMessage('  help              Show this help message', undefined); | ||||
|   logger.log('note', 'Commands:'); | ||||
|   logger.log('info', '  start [service]   Start services (mongo|s3|all)'); | ||||
|   logger.log('info', '  stop [service]    Stop services (mongo|s3|all)'); | ||||
|   logger.log('info', '  restart [service] Restart services (mongo|s3|all)'); | ||||
|   logger.log('info', '  status            Show service status'); | ||||
|   logger.log('info', '  config            Show current configuration'); | ||||
|   logger.log('info', '  compass           Show MongoDB Compass connection string'); | ||||
|   logger.log('info', '  logs [service]    Show logs (mongo|s3|all) [lines]'); | ||||
|   logger.log('info', '  remove            Remove all containers'); | ||||
|   logger.log('info', '  clean             Remove all containers and data ⚠️'); | ||||
|   logger.log('info', '  help              Show this help message'); | ||||
|   console.log(); | ||||
|    | ||||
|   helpers.printMessage('Features:', 'yellow'); | ||||
|   helpers.printMessage('  • Auto-creates .nogit/env.json with smart defaults', undefined); | ||||
|   helpers.printMessage('  • Random ports (20000-30000) to avoid conflicts', undefined); | ||||
|   helpers.printMessage('  • Project-specific containers for multi-project support', undefined); | ||||
|   helpers.printMessage('  • Preserves custom configuration values', undefined); | ||||
|   helpers.printMessage('  • MongoDB Compass connection support', undefined); | ||||
|   logger.log('note', 'Features:'); | ||||
|   logger.log('info', '  • Auto-creates .nogit/env.json with smart defaults'); | ||||
|   logger.log('info', '  • Random ports (20000-30000) to avoid conflicts'); | ||||
|   logger.log('info', '  • Project-specific containers for multi-project support'); | ||||
|   logger.log('info', '  • Preserves custom configuration values'); | ||||
|   logger.log('info', '  • MongoDB Compass connection support'); | ||||
|   console.log(); | ||||
|    | ||||
|   helpers.printMessage('Examples:', 'yellow'); | ||||
|   helpers.printMessage('  gitzone services start          # Start all services', undefined); | ||||
|   helpers.printMessage('  gitzone services start mongo    # Start only MongoDB', undefined); | ||||
|   helpers.printMessage('  gitzone services stop           # Stop all services', undefined); | ||||
|   helpers.printMessage('  gitzone services status         # Check service status', undefined); | ||||
|   helpers.printMessage('  gitzone services config         # Show configuration', undefined); | ||||
|   helpers.printMessage('  gitzone services compass        # Get MongoDB Compass connection', undefined); | ||||
|   helpers.printMessage('  gitzone services logs mongo 50  # Show last 50 lines of MongoDB logs', undefined); | ||||
|   logger.log('note', 'Examples:'); | ||||
|   logger.log('info', '  gitzone services start          # Start all services'); | ||||
|   logger.log('info', '  gitzone services start mongo    # Start only MongoDB'); | ||||
|   logger.log('info', '  gitzone services stop           # Stop all services'); | ||||
|   logger.log('info', '  gitzone services status         # Check service status'); | ||||
|   logger.log('info', '  gitzone services config         # Show configuration'); | ||||
|   logger.log('info', '  gitzone services compass        # Get MongoDB Compass connection'); | ||||
|   logger.log('info', '  gitzone services logs mongo 50  # Show last 50 lines of MongoDB logs'); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user