private static void ParseArgs()

in code/Tools/Ops/ManageRedis/Program.cs [194:351]


        private static void ParseArgs(string[] args)
        {
            string order = null;
            int i = 0;

            while (i < args.Length)
            {
                if (args[i].StartsWith("-Action=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-Action=".Length;
                    action = args[i].Substring(prefixLen);
                    i++;
                    continue;
                }
                else if (args[i].StartsWith("-Container=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-Container=".Length;
                    containerName = args[i].Substring(prefixLen);
                    i++;
                    continue;
                }
                else if (args[i].StartsWith("-FK=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-FK=".Length;
                    feedKey = args[i].Substring(prefixLen);
                    i++;
                    continue;
                }
                else if (args[i].StartsWith("-Name=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-Name=".Length;
                    environmentName = args[i].Substring(prefixLen);
                    i++;
                    continue;
                }
                else if (args[i].StartsWith("-OK=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-OK=".Length;
                    objKey = args[i].Substring(prefixLen);
                    i++;
                    continue;
                }
                else if (args[i].StartsWith("-Order=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-Order=".Length;
                    order = args[i].Substring(prefixLen);

                    // if order is specified, make sure it is a valid choice
                    if (!(order.Equals("ascending", StringComparison.CurrentCultureIgnoreCase) ||
                          order.Equals("descending", StringComparison.CurrentCultureIgnoreCase)))
                    {
                        Console.WriteLine("Usage error: order must be ascending or descending");
                        Usage();
                        Environment.Exit(0);
                    }

                    i++;
                    continue;
                }
                else if (args[i].Equals("-Persistent", StringComparison.CurrentCultureIgnoreCase))
                {
                    redisType = RedisType.Persistent;
                    i++;
                    continue;
                }
                else if (args[i].StartsWith("-PK=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-PK=".Length;
                    partitionKey = args[i].Substring(prefixLen);
                    i++;
                    continue;
                }
                else if (args[i].StartsWith("-Table=", StringComparison.CurrentCultureIgnoreCase))
                {
                    int prefixLen = "-Table=".Length;
                    tableName = args[i].Substring(prefixLen);
                    i++;
                    continue;
                }
                else if (args[i].Equals("-Volatile"))
                {
                    redisType = RedisType.Volatile;
                    i++;
                    continue;
                }
                else
                {
                    // default case
                    Console.WriteLine($"Unrecognized parameter: {args[i]}");
                    i++;
                }
            }

            if (string.IsNullOrWhiteSpace(environmentName))
            {
                Console.WriteLine("Usage error: must specify name of environment");
                Usage();
                Environment.Exit(0);
            }

            if (action != "delete" && action != "get" && action != "get-info" && action != "get-rank-feed")
            {
                Console.WriteLine("Usage error: invalid action.");
                Console.WriteLine("             Supported actions are delete, get, get-info, get-rank-feed");
                Usage();
                Environment.Exit(0);
            }

            if (action == "get-rank-feed")
            {
                if (order == null)
                {
                    Console.WriteLine("Usage error: must specify ordering for get-rank-feed");
                    Usage();
                    Environment.Exit(0);
                }

                if (order.Equals("ascending", StringComparison.CurrentCultureIgnoreCase))
                {
                    rankFeedOrder = Order.Ascending;
                }
                else if (order.Equals("descending", StringComparison.CurrentCultureIgnoreCase))
                {
                    rankFeedOrder = Order.Descending;
                }

                if (feedKey == null)
                {
                    Console.WriteLine("Usage error: must specify feed key for get-rank-feed");
                    Usage();
                    Environment.Exit(0);
                }
            }

            if (action == "get" || action == "delete")
            {
                if (objKey == null)
                {
                    Console.WriteLine("Usage error: must specify object key for get or delete");
                    Usage();
                    Environment.Exit(0);
                }
            }

            if (action != "get-info" && (containerName == null || tableName == null || partitionKey == null))
            {
                Console.WriteLine("Usage error: must specify container name, table name, partition key.");
                Usage();
                Environment.Exit(0);
            }

            // avoid accidental modification to a persistent Redis instance in a production environment
            if (action == "delete" && redisType == RedisType.Persistent && ProdConfiguration.IsProduction(environmentName))
            {
                Console.WriteLine("Error! Your configuration modifies a production service. Aborting...");
                Environment.Exit(-1);
            }
        }