Esempio n. 1
0
        public void AppWithAttributeHasCorrectDescription()
        {
            var app      = new AppWithAttribute();
            var analyzer = new AppAnalyzer(app);

            Assert.Equal("test-app", analyzer.Name);
            Assert.Equal(new Version(1, 1, 1, 1), analyzer.Version);
            Assert.Equal("tester", analyzer.Author);
            Assert.Equal("test description", analyzer.Description);
            Assert.Equal(2, analyzer.Parameters.Count());
            Assert.NotNull(analyzer.GetParameter("mandatory"));
            Assert.True(analyzer.GetParameter("mandatory").Mandatory);
            Assert.False(analyzer.GetParameter("mandatory").IsSet);
            Assert.NotNull(analyzer.GetParameter("non-mandatory"));
            Assert.False(analyzer.GetParameter("non-mandatory").Mandatory);

            analyzer.GetParameter("mandatory").Set("test value");
            Assert.True(analyzer.GetParameter("mandatory").IsSet);
            Assert.Equal("test value", app.MandatoryParam);
            analyzer.GetParameter("non-mandatory").Set("42");
            Assert.Equal(42, app.NonMandatoryParam);

            Assert.Single(analyzer.Dependencies);
            Assert.NotNull(analyzer.GetDependency("Dep"));
        }
Esempio n. 2
0
        public async Task <IActionResult> Configure(string fullTypeName)
        {
            var app      = (IApp)Activator.CreateInstance(ResolveAppType(fullTypeName));
            var analyzer = new AppAnalyzer(app);
            var model    = new ConfigureAppModel();
            await model.InitializeAsync(analyzer);

            return(View(model));
        }
Esempio n. 3
0
        public void AppWithoutAttributeHasCorrectDescription()
        {
            var analyzer = new AppAnalyzer(new AppWithoutAttribute());

            Assert.Equal("AppWithoutAttribute", analyzer.Name);
            Assert.Equal(new Version(0, 0, 0, 0), analyzer.Version);
            Assert.Null(analyzer.Author);
            Assert.Null(analyzer.Description);
        }
Esempio n. 4
0
 internal static void Select(string name)
 {
     if (_registry.TryGetValue(name, out var app))
     {
         SelectedApp = app;
     }
     else
     {
         throw new InvalidOperationException($"app \"{name}\" not found");
     }
 }
Esempio n. 5
0
        public void ApplyTo(AppAnalyzer app)
        {
            var settable = app.Parameters.ToList();

            for (var i = 0; i < Parameters.Count; i++)
            {
                settable[i].Set(Parameters[i].Value);
            }
            var deps = app.Dependencies.ToList();

            for (var i = 0; i < Dependencies.Count; i++)
            {
                Dependencies[i].ApplyTo(deps[i]);
            }
        }
Esempio n. 6
0
 IEnumerable <(string prefix, Parameter param)> FlattenParameters(AppAnalyzer app, string prefix)
 {
     foreach (var p in app.Parameters)
     {
         yield return(prefix, p);
     }
     foreach (var dep in app.Dependencies)
     {
         prefix = prefix.Length == 0 ? dep.Name + "." : $"{prefix}.{dep.Name}.";
         foreach (var p in FlattenParameters(dep, prefix))
         {
             yield return(p);
         }
     }
 }
Esempio n. 7
0
        public async Task <IActionResult> Deploy(string fullTypeName, ConfigureAppModel model)
        {
            var app      = (IApp)Activator.CreateInstance(ResolveAppType(fullTypeName));
            var analyzer = new AppAnalyzer(app);

            model.ApplyTo(analyzer);

            var appBuilder = new AppBuilder();
            await analyzer.Build(appBuilder);

            var restoredModel = new ConfigureAppModel();
            await restoredModel.InitializeAsync(analyzer);

            restoredModel.RuntimeSettings.Clear();
            restoredModel.RuntimeSettings.AddRange(model.RuntimeSettings);
            // generate parameters
            var parametersYaml      = GenerateParametersYaml(restoredModel);
            var runtimeSettingsYaml = GenerateRuntimeSettingsYaml(restoredModel);


            var svcFile     = Path.GetTempFileName();
            var paramsFile  = Path.GetTempFileName();
            var runtimeFile = Path.GetTempFileName();

            try {
                using (var svcStream = System.IO.File.Create(svcFile)){
                    appBuilder.BuiltApp.WriteTo(svcStream);
                    await svcStream.FlushAsync();
                }
                await System.IO.File.WriteAllTextAsync(paramsFile, parametersYaml, Encoding.UTF8);

                await System.IO.File.WriteAllTextAsync(runtimeFile, runtimeSettingsYaml, Encoding.UTF8);

                await _backend.RunAsync(model.DeploymentName, svcFile, paramsFile, runtimeFile);
            } finally {
                System.IO.File.Delete(svcFile);
                System.IO.File.Delete(paramsFile);
                System.IO.File.Delete(runtimeFile);
            }

            return(RedirectToAction("List", "AppLibs"));
        }
Esempio n. 8
0
 private static void PrintAppParamsYaml(string prefix, AppAnalyzer app)
 {
     foreach (var p in app.Parameters)
     {
         if (!string.IsNullOrEmpty(p.Description))
         {
             Console.Write($"{prefix}# {p.Description}\n");
         }
         Console.Write($"{prefix}{p.Name}: ");
         if (!string.IsNullOrEmpty(p.Get()))
         {
             Console.Write($"# default: {p.Get()}");
         }
         Console.Write("\n");
     }
     foreach (var dep in app.Dependencies)
     {
         Console.Write($"{prefix}{dep.Name}:\n");
         PrintAppParamsYaml(prefix + "  ", dep);
     }
 }
Esempio n. 9
0
        public async Task InitializeAsync(AppAnalyzer app)
        {
            Name    = app.Name;
            AppType = app.App.GetType();
            foreach (var p in app.Parameters)
            {
                Parameters.Add(new Parameter {
                    Description = p.Description,
                    Mandatory   = p.Mandatory,
                    Name        = p.Name,
                    Type        = p.ParameterType,
                    Value       = p.Get()
                });
            }

            foreach (var dep in app.Dependencies)
            {
                var m = new ConfigureAppModel();
                await m.InitializeAsync(dep);

                Dependencies.Add(m);
            }

            var appBuilder = new AppBuilder();
            await app.Build(appBuilder);

            foreach (var svc in appBuilder.BuiltApp.Services)
            {
                RuntimeSettings.Add(
                    new ServiceRuntimeSettings {
                    Name     = svc.Name,
                    Scalable = svc.ScalabilityModel == ScalabilityModel.Scalable,
                    Scale    = 1,
                });
            }
        }