using CommandLine; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using RedisManager.Utils; namespace RedisManager.Commands { /// /// Contains command line options and implementations for Redis connection management operations. /// Provides functionality for AUTH, QUIT, CLIENT LIST, CLIENT KILL, CLIENT GETNAME, and CLIENT SETNAME commands. /// [Verb("auth", HelpText = "Authenticate to the server.")] public class AuthOptions { [Option('i', "instance", Required = true, HelpText = "Instance name.")] public string Instance { get; set; } [Value(0, MetaName = "password", Required = true, HelpText = "Password.")] public string Password { get; set; } } [Verb("quit", HelpText = "Close the connection.")] public class QuitOptions { [Option('i', "instance", Required = true, HelpText = "Instance name.")] public string Instance { get; set; } } [Verb("clientlist", HelpText = "Get the list of client connections.")] public class ClientListOptions { [Option('i', "instance", Required = true, HelpText = "Instance name.")] public string Instance { get; set; } } [Verb("clientkill", HelpText = "Kill a client connection.")] public class ClientKillOptions { [Option('i', "instance", Required = true, HelpText = "Instance name.")] public string Instance { get; set; } [Value(0, MetaName = "client_id", Required = true, HelpText = "Client ID.")] public string ClientId { get; set; } } [Verb("clientgetname", HelpText = "Get the current connection name.")] public class ClientGetNameOptions { [Option('i', "instance", Required = true, HelpText = "Instance name.")] public string Instance { get; set; } } [Verb("clientsetname", HelpText = "Set the current connection name.")] public class ClientSetNameOptions { [Option('i', "instance", Required = true, HelpText = "Instance name.")] public string Instance { get; set; } [Value(0, MetaName = "name", Required = true, HelpText = "Connection name.")] public string Name { get; set; } } public static class ConnectionCommands { /// /// Executes the AUTH command to authenticate to the server. /// /// The AuthOptions containing instance and password. /// The RedisManager configuration. /// Exit code (0 for success, non-zero for failure). public static int RunAuth(AuthOptions opts, Config config) { var instance = RedisUtils.GetInstance(config, opts.Instance); using var redis = RedisUtils.ConnectRedis(instance); var db = redis.GetDatabase(); db.Execute("AUTH", opts.Password); Console.WriteLine(Output.Green("OK")); return 0; } /// /// Executes the QUIT command to close the connection. /// /// The QuitOptions containing instance. /// The RedisManager configuration. /// Exit code (0 for success, non-zero for failure). public static int RunQuit(QuitOptions opts, Config config) { var instance = RedisUtils.GetInstance(config, opts.Instance); using var redis = RedisUtils.ConnectRedis(instance); var db = redis.GetDatabase(); db.Execute("QUIT"); Console.WriteLine(Output.Green("OK")); return 0; } /// /// Executes the CLIENT LIST command to get the list of client connections. /// /// The ClientListOptions containing instance. /// The RedisManager configuration. /// Exit code (0 for success, non-zero for failure). public static int RunClientList(ClientListOptions opts, Config config) { var instance = RedisUtils.GetInstance(config, opts.Instance); using var redis = RedisUtils.ConnectRedis(instance); var db = redis.GetDatabase(); var result = db.Execute("CLIENT", "LIST"); Console.WriteLine(Output.Green(result.ToString())); return 0; } /// /// Executes the CLIENT KILL command to kill a client connection. /// /// The ClientKillOptions containing instance and client ID. /// The RedisManager configuration. /// Exit code (0 for success, non-zero for failure). public static int RunClientKill(ClientKillOptions opts, Config config) { var instance = RedisUtils.GetInstance(config, opts.Instance); using var redis = RedisUtils.ConnectRedis(instance); var db = redis.GetDatabase(); db.Execute("CLIENT", "KILL", opts.ClientId); Console.WriteLine(Output.Green("OK")); return 0; } /// /// Executes the CLIENT GETNAME command to get the current connection name. /// /// The ClientGetNameOptions containing instance. /// The RedisManager configuration. /// Exit code (0 for success, non-zero for failure). public static int RunClientGetName(ClientGetNameOptions opts, Config config) { var instance = RedisUtils.GetInstance(config, opts.Instance); using var redis = RedisUtils.ConnectRedis(instance); var db = redis.GetDatabase(); var result = db.Execute("CLIENT", "GETNAME"); Console.WriteLine(Output.Green(result.ToString())); return 0; } /// /// Executes the CLIENT SETNAME command to set the current connection name. /// /// The ClientSetNameOptions containing instance and name. /// The RedisManager configuration. /// Exit code (0 for success, non-zero for failure). public static int RunClientSetName(ClientSetNameOptions opts, Config config) { var instance = RedisUtils.GetInstance(config, opts.Instance); using var redis = RedisUtils.ConnectRedis(instance); var db = redis.GetDatabase(); db.Execute("CLIENT", "SETNAME", opts.Name); Console.WriteLine(Output.Green("OK")); return 0; } } }