Exemple #1
0
        static int Run <TOption>(TOption option, string[] args, Func <TaskCtx <TOption>, Task <ExitCode> > task) where TOption : CommonOption
        {
            var cfg = Setup.LoadCfg().Result;

            if (option.Parallel.HasValue)
            {
                cfg.App.DefaultParallel = cfg.App.ParallelChannels = option.Parallel.Value;
            }

            using var log = Setup.CreateLogger(cfg.App);
            var envLog = log.ForContext("Env", cfg.Root.Env);

            try {
                if (option.LaunchContainer)
                {
                    YtContainerRunner.Start(envLog, cfg, args.Where(a => a != "-z").ToArray()).Wait();
                    return((int)ExitCode.Success);
                }
                return((int)task(new TaskCtx <TOption> {
                    Cfg = cfg, Log = envLog, Option = option, OriginalArgs = args
                }).Result);
            }
            catch (Exception ex) {
                var flatEx = ex switch { AggregateException a => a.Flatten(), _ => ex };
                envLog.Error(flatEx, "Unhandled error: {Error}", flatEx.Message);
                return((int)ExitCode.UnknownError);
            }
        }
        static async Task <string> YtCli(IMSLogger funcLogger, string[] args)
        {
            var s = await Init(funcLogger);

            s.Log.Information("Function Update started");

            IContainerGroup g;

            try {
                g = await YtContainerRunner.Start(s.Log, s.Cfg, args);
            }
            catch (Exception ex) {
                s.Log.Error("Error starting container to update data {Error}", ex.Message, ex);
                throw;
            }

            var started = DateTime.Now;

            g.Refresh();
            var log = await g.GetLogContentAsync(g.Name);

            s.Log.Information("Started container '{ProvisionState}' '{State}': {LogContent}", g.ProvisioningState, g.State, log);

            return($"Started container, last in state '{g.State}'");
        }
Exemple #3
0
        static int Collect(CollectOption c, string[] args)
        {
            var cfg = Setup.LoadCfg().Result;

            UpdateCfgFromOptions(cfg, c);
            using (var log = Setup.CreateCliLogger(cfg.App)) {
                if (c.LaunchContainer)
                {
                    YtContainerRunner.Start(log, cfg, new[] { "collect" }.Concat(args.Where(a => a != "-z")).ToArray()).Wait();
                }
                else
                {
                    var ytCollect = new YtCollect(cfg.YtStore(log), cfg.DataStore(cfg.App.Storage.AnalysisPath), cfg.App, log);
                    ytCollect.SaveChannelRelationData().Wait();
                }
            }

            return((int)ExitCode.Success);
        }
        static async Task <string> YtCli(IMSLogger funcLogger)
        {
            var s = await Init(funcLogger);

            s.Log.Information("Function Update started");


            try {
                var g = await YtContainerRunner.StartFleet(s.Log, s.Cfg, UpdateType.All);

                return($"Started containers: {g.Join(", ", c => c.Name)}");
            }
            catch (Exception ex) {
                s.Log.Error("Error starting container to update data {Error}", ex.Message, ex);
                throw;
            }

/*      g.Refresh();
 *    var log = await g.GetLogContentAsync(g.Name);
 *    s.Log.Information("Started container '{ProvisionState}' '{State}': {LogContent}", g.ProvisioningState, g.State, log);
 *    return $"Started container, last in state '{g.State}'";*/
        }
Exemple #5
0
        static async Task <ExitCode> Fleet(TaskCtx <UpdateFleetOption> ctx)
        {
            await YtContainerRunner.StartFleet(ctx.Log, ctx.Cfg, ctx.Option.UpdateType);

            return(ExitCode.Success);
        }