public static bool Start(string Email, string InstanceId, string region)
 {
     try
     {
         var item = l.Where(p => p.Email == Email.Trim()).FirstOrDefault();
         LighthouseClient client = new LighthouseClient(new TencentCloud.Common.Credential()
         {
             SecretId = item.SecretId, SecretKey = item.SecretKey
         }, region);
         var rs = client.StartInstancesSync(new StartInstancesRequest()
         {
             InstanceIds = new string[] { InstanceId }
         });
         return(true);
     }
     catch (Exception)
     {
     }
     return(false);
 }
        public static List <TencentCloudServer> GetAll()
        {
            List <TencentCloudServer> list = new List <TencentCloudServer>();

            foreach (var item in l)
            {
                foreach (var region in Regions)
                {
                    try
                    {
                        LighthouseClient client = new LighthouseClient(new TencentCloud.Common.Credential()
                        {
                            SecretId = item.SecretId, SecretKey = item.SecretKey
                        }, region.Key);
                        var instances = client.DescribeInstancesSync(new DescribeInstancesRequest());
                        var rs        = client.DescribeInstancesTrafficPackagesSync(new DescribeInstancesTrafficPackagesRequest()
                        {
                        });
                        foreach (var r in rs.InstanceTrafficPackageSet)
                        {
                            try
                            {
                                double a             = r.TrafficPackageSet[0].TrafficUsed.Value;
                                double b             = r.TrafficPackageSet[0].TrafficPackageTotal.Value;
                                int    百分比           = int.Parse(Math.Round(a / b * 100, 0).ToString());
                                var    model         = instances.InstanceSet.Where(p => p.InstanceId == r.InstanceId).FirstOrDefault();
                                string InstanceState = "";
                                switch (model.InstanceState)
                                {
                                case "PENDING":
                                    InstanceState = "创建中";
                                    break;

                                case "LAUNCH_FAILED":
                                    InstanceState = "创建失败";
                                    break;

                                case "RUNNING":
                                    InstanceState = "运行中";
                                    break;

                                case "STOPPED":
                                    InstanceState = "关机";
                                    break;

                                case "STARTING":
                                    InstanceState = "开机中";
                                    break;

                                case "STOPPING":
                                    InstanceState = "关机中";
                                    break;

                                case "REBOOTING":
                                    InstanceState = "重启中";
                                    break;

                                case "SHUTDOWN":
                                    InstanceState = "停止待销毁";
                                    break;

                                case "TERMINATING":
                                    InstanceState = "销毁中";
                                    break;

                                default:
                                    break;
                                }



                                list.Add(new TencentCloudServer()
                                {
                                    BaiFenBi                = 百分比,
                                    InstanceName            = model.InstanceName,
                                    InstanceId              = model.InstanceId,
                                    IP                      = model.PublicAddresses[0],
                                    TrafficPackageRemaining = int.Parse((r.TrafficPackageSet[0].TrafficPackageRemaining.Value / 1024 / 1024 / 1024).ToString()),
                                    TrafficUsed             = int.Parse((r.TrafficPackageSet[0].TrafficUsed.Value / 1024 / 1024 / 1024).ToString()),
                                    TrafficPackageTotal     = int.Parse((r.TrafficPackageSet[0].TrafficPackageTotal.Value / 1024 / 1024 / 1024).ToString()),
                                    InstanceState           = InstanceState,
                                    Email                   = item.Email,
                                    Region                  = region,
                                    ExpireTime              = DateTime.Parse(model.ExpiredTime)
                                });
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
            }

            return(list);
        }
        public int Run(IEnumerable <string> args)
        {
            LighthouseClient GetClient(Uri target)
            {
                var networkProvider = TypeFactory.Create <INetworkProvider>();
                var client          = new LighthouseClient(target, networkProvider);

                client.AddLogger(ConsoleWrite);
                return(client);
            }

            var result = Parser.Default.ParseArguments <RunOptions, InspectOptions, StopOptions, StoreOptions, RetrieveOptions, ConfigureOptions>(args)
                         .MapResult(
                (RunOptions run) =>
            {
                if (run.IsFileMode)
                {
                    var fileContents = File.ReadAllText(run.File);

                    var config = YamlUtil.ParseYaml <LighthouseRunConfig>(fileContents);

                    // load resources first
                    foreach (var resource in config.Resources)
                    {
                    }

                    // then launch apps
                    foreach (var app in config.Applications)
                    {
                    }
                }
                else
                {
                    if (run.Where != null)
                    {
                        var client = GetClient(run.Where.ToUri());

                        // make a connection to the other server
                        var response = client.MakeRequest <RemoteAppRunRequest, RemoteAppRunHandle>(new RemoteAppRunRequest(run.What)).GetAwaiter().GetResult();
                        ConsoleWrite($"Request {response?.Status ?? "no response"} (ID: {response?.Id ?? "no ID"})");
                    }
                    else
                    {
                        Type appType = LighthouseFetcher.Fetch(run.What);
                        if (appType == null)
                        {
                            throw new ApplicationException($"Can't find app with name: {run.What}");
                        }

                        // start a lighthouse server locally, and have it run the task
                        var server = new LighthouseServer();
                        server.AddLogger(ConsoleWrite);
                        server.Launch(appType).GetAwaiter().GetResult();
                    }
                }

                return(0);
            },
                (InspectOptions inspect) =>
            {
                var client = GetClient(inspect.Where.ToUri());

                if (inspect.Where == null)
                {
                    throw new Exception("Must include Where to inspect.");
                }

                if (inspect.What == null)
                {
                    var response = client.MakeRequest <StatusRequest, StatusResponse>(new StatusRequest()).GetAwaiter().GetResult();
                    ConsoleWrite(response.ToString());
                }
                else
                {
                    var response = client.MakeRequest <InspectRequest, InspectResponse>(
                        new InspectRequest {
                        What = inspect.What
                    }
                        ).GetAwaiter().GetResult();

                    ConsoleWrite(string.Join(Environment.NewLine, response.RawResponse));
                }

                return(0);
            },
                (StopOptions stop) =>
            {
                if (stop.What == null || stop.Where == null)
                {
                    throw new Exception("Stop what and where?");
                }

                var client = GetClient(stop.Where.ToUri());

                var response = client.MakeRequest <StopRequest, bool>(
                    new StopRequest {
                    What = stop.What
                }
                    ).GetAwaiter().GetResult();

                ConsoleWrite(response ? $"{stop.What} stopped on {stop.Where}" : "failed");

                return(0);
            },
                (StoreOptions store) =>
            {
                if (store.What == null || store.Where == null)
                {
                    throw new Exception("Stop what and where?");
                }

                var client      = GetClient(store.Where.ToUri());
                var deserialize = store.What.DeserializeFromJSON <WarehouseStoreRequest>();

                var response = client.MakeRequest <WarehouseStoreRequest, bool>(
                    new WarehouseStoreRequest {
                    Key = deserialize.Key, Value = deserialize.Value
                }
                    ).GetAwaiter().GetResult();

                ConsoleWrite(response ? "stored" : "failed");

                return(0);
            },
                (RetrieveOptions retrieve) =>
            {
                if (retrieve.What == null || retrieve.Where == null)
                {
                    throw new Exception("Stop what and where?");
                }

                var client      = GetClient(retrieve.Where.ToUri());
                var deserialize = retrieve.What.DeserializeFromJSON <WarehouseRetrieveRequest>();

                var response = client.MakeRequest <WarehouseRetrieveRequest, WarehouseRetrieveResponse>(
                    new WarehouseRetrieveRequest {
                    Key = deserialize.Key
                }
                    ).GetAwaiter().GetResult();

                ConsoleWrite(response.Value ?? string.Empty);

                return(0);
            },
                (ConfigureOptions configure) =>
            {
                if (configure.What == null || configure.Where == null || configure.How == null)
                {
                    throw new Exception("Configure what,where, and how?");
                }

                var client = GetClient(configure.Where.ToUri());

                if (configure.What == "resource")
                {
                    var request = configure.How.DeserializeFromJSON <ResourceRequest>();

                    var response = client.MakeRequest <ResourceRequest, ResourceResponse>(request).GetAwaiter().GetResult();

                    foreach (var val in response.ActionsTaken)
                    {
                        ConsoleWrite(val);
                    }

                    // inspect the event stream for bound events ???
                    return(0);
                }

                ConsoleWrite($"unsupported configure target {configure.What}");
                return(-1);
            },

                errs =>
            {
                foreach (var error in errs)
                {
                    ConsoleWrite(error.ToString());
                }

                throw new Exception(string.Join(",", errs));
            });

            return(0);
        }