diff --git a/internal/commands/commands.go b/internal/commands/commands.go deleted file mode 100644 index ada56ad..0000000 --- a/internal/commands/commands.go +++ /dev/null @@ -1,411 +0,0 @@ -/* - * Copyright 2026 Safronov Grigorii - * - * Licensed under the CDDL, Version 1.0 (the "License"); - * you may not use this file except in compliance with the License. - * - * You may obtain a copy of the License at - * https://opensource.org/licenses/CDDL-1.0 - */ - -// Файл: internal/commands/commands.go -// Назначение: Реализация MongoDB-подобных команд CRUD и команд управления кластером. -// Добавлены команды для работы с индексами, ACL, триггерами, ограничениями и кросс-датацентровой миграцией. - -package commands - -import ( - "futriis/pkg/utils" -) - -// ShowHelp отображает справку по всем доступным командам -func ShowHelp() { - helpText := ` -=== FUTRIIS DATABASE COMMANDS === - -DATABASE MANAGEMENT: - use - Switch to database - show dbs - List all databases - show collections - List collections in current database - -COLLECTION OPERATIONS: - db.createCollection("") - Create new collection - db..insert({...}) - Insert document into collection - db..find({_id: "..."}) - Find document by ID - db..find() - Find all documents in collection - db..findByIndex("", "") - Find by secondary index - db..update({_id: "..."}, {...}) - Update document - db..remove({_id: "..."}) - Delete document - -INDEX MANAGEMENT: - db..createIndex("", ["field1", "field2"], true|false) - Create index (last param = unique) - db..dropIndex("") - Drop index - db..listIndexes() - List all indexes - -CONSTRAINTS: - db..addRequired("") - Add required field constraint - db..addUnique("") - Add unique constraint - db..addMin("", ) - Add minimum value constraint - db..addMax("", ) - Add maximum value constraint - db..addEnum("", [values]) - Add enum constraint - -TRIGGERS (MongoDB-like syntax): - db..createTrigger("", "", { - condition: { field: "", operator: "", value: }, - action: "", - operations: [ - { type: "set", field: "", value: "" }, - { type: "inc", field: "", value: }, - { type: "currentDate", field: "" } - ] - }) - - Events: BEFORE_INSERT, AFTER_INSERT, BEFORE_UPDATE, AFTER_UPDATE, BEFORE_DELETE, AFTER_DELETE - Actions: abort (cancel operation), skip (skip operation), modify (modify document), log (write to log), notify (send notification) - Special values: $$NOW (current timestamp), $$USER (current user), $$ROLE (current role) - - db..dropTrigger("") - Drop trigger - db..listTriggers() - List all triggers on collection - db..enableTrigger("") - Enable trigger - db..disableTrigger("") - Disable trigger - db.getTriggerLog() - Show trigger execution log - -TRIGGER EXAMPLES: - // Auto-set updated_at timestamp on every update - db.users.createTrigger("update_timestamp", "BEFORE_UPDATE", { - action: "modify", - operations: [{ type: "set", field: "updated_at", value: "$$NOW" }] - }) - - // Prevent deletion of active users - db.users.createTrigger("protect_active", "BEFORE_DELETE", { - condition: { field: "status", operator: "eq", value: "active" }, - action: "abort" - }) - - // Log all inserts - db.orders.createTrigger("audit_log", "AFTER_INSERT", { - action: "log", - description: "Log all order creations" - }) - - // Increment counter on document insert - db.stats.createTrigger("inc_counter", "AFTER_INSERT", { - action: "modify", - operations: [{ type: "inc", field: "counter", value: 1 }] - }) - -ACL MANAGEMENT: - acl createUser "" "" [roles] - Create new user - acl createRole "" - Create new role - acl grant "" "" - Grant permission to role - acl addUserRole "" "" - Add role to user - acl login "" "" - Login (returns session token) - acl logout - Logout current session - acl listUsers - List all users - acl listRoles - List all roles - -TRANSACTIONS (MongoDB-like syntax): - session = db.startSession() - Start a new session - session.startTransaction() - Begin a transaction - session.commitTransaction() - Commit current transaction - session.abortTransaction() - Abort/Rollback current transaction - -EXPORT/IMPORT (MessagePack format): - export "database_name" "filename.msgpack" - Export entire database - import "database_name" "filename.msgpack" - Import database from .msgpack file - -CROSS-DATACENTER MIGRATION COMMANDS: - migration status [task_id] - Show migration status (current or specific) - migration list - List all migration tasks - migration start [database] [collection] - Start new migration - migration pause - Pause a running migration - migration resume - Resume a paused migration - migration cancel - Cancel a migration - migration stats - Show migration statistics - migration config - Show migration configuration - migration queue - Show change queue status - migration validate - Validate a completed migration - -MIGRATION EXAMPLES: - // List all migration tasks - migration list - - // Check status of current migration - migration status - - // Check status of specific task - migration status mig_1234567890_dc-primary - - // Start migration: all databases, all collections - migration start dc-primary dc-secondary - - // Start migration: specific database, all collections - migration start dc-primary dc-secondary mydb - - // Start migration: specific database and collection - migration start dc-primary dc-secondary mydb users - - // Pause running migration - migration pause mig_1234567890_dc-primary - - // Resume paused migration - migration resume mig_1234567890_dc-primary - - // Cancel migration - migration cancel mig_1234567890_dc-primary - - // Show migration statistics - migration stats - - // Show current configuration - migration config - - // Show queue status - migration queue - -MIGRATION MODES (config.toml): - manual - Fully manual: all operations require explicit commands - semi_auto - Semi-automatic: main migration manual, delta sync automatic (default) - auto - Fully automatic: continuous migration with delta sync - -MIGRATION STATUS COLORS: - 🟢 completed - Migration successfully finished - 🟡 migrating - Migration in progress - 🟡 delta_sync - Delta synchronization in progress - 🔵 preparing - Preparing metadata - 🔵 validating - Validating data - 🟠 paused - Paused by user - 🔴 failed - Migration failed - -================================================================================ - -CLUSTER MANAGEMENT: - cluster status - Show cluster status - cluster nodes - List all cluster nodes - cluster add - Add node to cluster - cluster remove - Remove node from cluster - cluster sync - Sync collection across cluster - cluster replication-factor [n] - Get or set replication factor - cluster leader - Show cluster leader - cluster health - Check cluster health - -HTTP API: - The database also exposes HTTP RESTful API on port 8080 (configurable) - See documentation for endpoints: /api/db/, /api/index/, /api/acl/, /api/constraint/, /api/trigger/, /api/migration/ - -UTILITIES: - help - Show this help message - exit / quit - Exit database - -` - utils.Println(helpText) -} - -// ShowMigrationHelp отображает справку по командам миграции -func ShowMigrationHelp() { - migrationHelp := ` -=== CROSS-DATACENTER MIGRATION HELP === - -OVERVIEW: - Cross-datacenter migration allows seamless data transfer between geographically - distributed futriix clusters without downtime. - -LIFECYCLE: - Idle → Preparing → Migrating → Delta Sync → Validating → Completed - ↘ ↘ ↘ - Paused Failed (errors) - -COMMANDS: - migration status [task_id] Show migration status - migration list List all migration tasks - migration start [database] [collection] - Start new migration - migration pause Pause migration - migration resume Resume migration - migration cancel Cancel migration - migration stats Show statistics - migration config Show configuration - migration queue Show queue status - migration validate Validate migrated data - -CONFIGURATION (config.toml): - [migration] - enabled = false - mode = "semi_auto" # manual, semi_auto, auto - - [migration.source] - name = "dc-primary" - endpoint = "localhost:8080" - timeout_sec = 30 - - [migration.target] - name = "dc-secondary" - endpoint = "localhost:8081" - timeout_sec = 30 - - [migration.settings] - batch_size = 1000 - workers = 4 - compression = "snappy" # snappy, lz4, zstd - resume_enabled = true - checkpoint_interval_sec = 30 - max_retries = 3 - retry_backoff_sec = 5 - collections = [] - exclude_collections = [] - - [migration.delta] - enabled = true - interval_sec = 60 - max_lag_sec = 300 - - [migration.validation] - enabled = true - sample_percent = 10 - max_errors = 100 - -FEATURES: - ✅ Resume after interruption (checkpoints) - ✅ Parallel transfer (configurable workers) - ✅ Compression (Snappy, LZ4, Zstd) - ✅ Delta sync (continuous replication) - ✅ Data validation (checksums) - ✅ Fault-tolerant (automatic retries) - ✅ Idempotent operations - ✅ Persistent change queue - ✅ Audit logging - ✅ Cross-datacenter support - -EXAMPLES: - # Start migration all databases - migration start dc-primary dc-secondary - - # Start migration specific database - migration start dc-primary dc-secondary mydb - - # Start migration specific collection - migration start dc-primary dc-secondary mydb users - - # Check migration status - migration status - - # Check specific task - migration status mig_1234567890_dc-primary - - # List all migration tasks - migration list - - # Validate migrated data - migration validate mig_1234567890_dc-primary - - # Show migration statistics - migration stats - - # Show queue status - migration queue -` - utils.Println(migrationHelp) -} - -// ShowMigrationStatusInfo отображает подробную информацию о статусе миграции -func ShowMigrationStatusInfo() { - statusInfo := ` -=== MIGRATION STATUS DETAILS === - -FIELD DESCRIPTION -───────────────────────────────────────────────────────────────────────────── -ID Unique task identifier -Source DC Source datacenter name -Target DC Target datacenter name -Status Current migration state -Progress Migration progress percentage -Total Docs Total documents to migrate -Migrated Docs Successfully migrated documents -Failed Docs Failed documents -Skipped Docs Skipped documents -Start Time Migration start time -End Time Migration completion time -Last Checkpoint Last checkpoint timestamp -Error Error message if migration failed - -STATUS VALUES: - idle - No active migration - preparing - Collecting metadata - migrating - Data transfer in progress - delta_sync - Synchronizing changes - validating - Validating data - completed - Migration finished successfully - failed - Migration failed with error - paused - Migration paused by user - -TROUBLESHOOTING: - If migration fails, check: - 1. Network connectivity between datacenters - 2. Target datacenter is running - 3. Configuration file is correct - 4. Logs for detailed error messages - - To recover from failure: - 1. Check migration status - 2. If status is "failed", check error message - 3. Fix the issue - 4. Resume migration: migration resume - 5. Or cancel and start new: migration cancel && migration start -` - utils.Println(statusInfo) -} - -// ShowMigrationConfigInfo отображает информацию о конфигурации миграции -func ShowMigrationConfigInfo() { - configInfo := ` -=== MIGRATION CONFIGURATION GUIDE === - -GENERAL SETTINGS: - enabled - Enable/disable migration system - mode - Manual, semi_auto, or auto - -SOURCE DATACENTER: - name - Source datacenter identifier - endpoint - HTTP endpoint URL - timeout_sec - Request timeout in seconds - -TARGET DATACENTER: - name - Target datacenter identifier - endpoint - HTTP endpoint URL - timeout_sec - Request timeout in seconds - -MIGRATION SETTINGS: - batch_size - Documents per batch (default: 1000) - workers - Parallel workers (default: 4) - compression - Compression algorithm: snappy, lz4, zstd - resume_enabled - Enable resume from checkpoint - checkpoint_interval_sec - Checkpoint save interval - max_retries - Maximum retry attempts - retry_backoff_sec - Backoff between retries - collections - Specific collections to migrate (empty = all) - exclude_collections - Collections to exclude - -DELTA SYNC SETTINGS: - enabled - Enable delta synchronization - interval_sec - Sync interval in seconds - max_lag_sec - Maximum acceptable lag - -VALIDATION SETTINGS: - enabled - Enable data validation - sample_percent - Percentage of documents to validate - max_errors - Maximum errors before stopping - -EXAMPLE CONFIGURATION: - [migration] - enabled = true - mode = "semi_auto" - - [migration.settings] - batch_size = 2000 - workers = 8 - compression = "zstd" - resume_enabled = true - checkpoint_interval_sec = 60 -` - utils.Println(configInfo) -}