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);
}
}