diff --git a/internal/commands/commands.go b/internal/commands/commands.go new file mode 100644 index 0000000..ada56ad --- /dev/null +++ b/internal/commands/commands.go @@ -0,0 +1,411 @@ +/* + * 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) +}