示例#1
0
        private List <Language> Parse()
        {
            var file = $"{_appOptions.ConfigDir}/langs.yaml";

            var(data, _) = YamlRead.ReadFromFile <List <Language> >(file);
            return(data);
        }
示例#2
0
        private SettingsConfig ParseSettingConfigOrDefault(string settingsConfig)
        {
            // parse settings.yaml
            if (!File.Exists(settingsConfig))
            {
                return(null);
            }

            var(data, _) = YamlRead.ReadFromFile <SettingsConfig>(settingsConfig);
            return(data);
        }
示例#3
0
        private CourseYearConfig ParseCourseYear(Course course, string yearDir)
        {
            try
            {
                var yearConfig     = Path.Combine(yearDir, "config.yaml");
                var settingsConfig = Path.Combine(yearDir, "settings.yaml");
                var groupsConfig   = Path.Combine(yearDir, "groups.yaml");
                var year           = new CourseYearConfig {
                    Year = Path.GetFileName(yearDir)
                };

                // 1) required config.yaml
                if (!File.Exists(yearConfig))
                {
                    return(null);
                }
                (year.Problems, year.Yaml) = YamlRead.ReadFromFile <List <CourseProblem> >(yearConfig);

                // 2) optional settings.yaml
                if (File.Exists(settingsConfig))
                {
                    var settConf = YamlRead.ReadFromFile <SettingsConfig>(settingsConfig);
                    year.SettingsConfig = settConf.data;
                }
                else
                {
                    year.SettingsConfig = new SettingsConfig();
                }

                // 3) optional groups.yaml
                if (File.Exists(groupsConfig))
                {
                    var groupConf = YamlRead.ReadFromFile <CourseGroup>(groupsConfig);
                    year.CourseGroup = groupConf.data;
                }
                else
                {
                    year.CourseGroup = new CourseGroup();
                }

                return(year);
            }
            catch (DetailedException e)
            {
                var msg = $"Error while parsing file {e.File}: ";
                course.Errors.Add(msg);
                course.Errors.AddRange(e.Messages);
                Console.Error.WriteLine(msg);
                return(null);
            }
        }
示例#4
0
        public void SetupProjects()
        {
            foreach (var project in _appOptions.Projects)
            {
                _logger.LogInformation("Processing project {project} ({url})", project.Name, project.Url);
                var location = new DirectoryInfo(Path.Combine(".", "..", ".tmp", $".{project.Name.ToLower()}.gitinfo")).FullName;

                if (!Repository.IsValid(location))
                {
                    _logger.LogInformation("Cloning repository {project} to {url}", project.Name, project.Url);
                    Repository.Clone(project.Url, location);
                }

                _logger.LogInformation("Reading repo {location}", location);

                if (project.Name == "bench_data")
                {
                    var configYaml = Path.Combine(location, "cihpc", "frontend-config.yaml");
                    if (File.Exists(configYaml))
                    {
                        FrontendConfig = YamlRead.Read <FrontendConfig>(configYaml);
                    }

                    var benchmarksYaml = Path.Combine(location, "cihpc", "benchmarks.yaml");
                    if (File.Exists(benchmarksYaml))
                    {
                        var data       = YamlRead.Read <BenchmarksConfig>(benchmarksYaml);
                        var benchmarks = new List <IndexInfo>();
                        foreach (var matrix in data)
                        {
                            var vals    = matrix.Matrix.Select(i => i.Items).ToList();
                            var product = vals.CrossProduct().ToList();
                            benchmarks.AddRange(product.Select(i => new IndexInfo
                            {
                                Test      = i[0],
                                Mesh      = i[1],
                                Cpus      = i[2],
                                Benchmark = i[3],
                            }));
                        }
                        BenchmarkList = benchmarks
                                        .OrderBy(i => i.Test)
                                        .ThenBy(i => i.Benchmark)
                                        .ThenBy(i => i.Mesh)
                                        .ToList();
                    }
                }
            }
        }
示例#5
0
        private Course ParseCourse(string dir)
        {
            var config = Path.Combine(dir, "config.yaml");

            if (!File.Exists(config))
            {
                return(null);
            }

            var course = new Course {
                CourseDir = dir
            };

            (course.CourseConfig, course.Yaml) = YamlRead.ReadFromFile <CourseConfig>(config);

            try
            {
                course.CourseYears = ParseCourseYears(dir);
            }
            catch (DetailedException e)
            {
                var msg = $"Error while parsing course {course.CourseConfig.Name} year config {dir}: ";
                course.Errors.AddRange(e.Messages);
                _logger.LogError(msg);
            }
            catch (Exception e)
            {
                var msg = $"Error while parsing course {course.CourseConfig.Name} year config {dir}: ";
                course.Errors.AddRange(new[] { msg, e.Message });
                _logger.LogError(msg);
            }
            finally
            {
                course.CourseYears ??= new List <CourseYearConfig>();
            }

            if (!course.CourseConfig.Disabled)
            {
                return(course);
            }

            _logger.LogInformation("Ignoring course {Course}", course.Name);

            return(null);
        }
示例#6
0
        private void ParseCourseYear(string yearDir, List <CourseYearConfig> result)
        {
            var yearConfig     = Path.Combine(yearDir, "config.yaml");
            var settingsConfig = Path.Combine(yearDir, "settings.yaml");

            if (File.Exists(yearConfig))
            {
                // parse config.yaml
                var cfg = new CourseYearConfig {
                    Year = Path.GetFileName(yearDir)
                };

                (cfg.Problems, cfg.Yaml) = YamlRead.ReadFromFile <List <CourseProblem> >(yearConfig);
                cfg.SettingsConfig       = ParseSettingConfigOrDefault(settingsConfig);

                result.Add(cfg);
            }
        }
示例#7
0
        private Course ParseCourse(string dir)
        {
            var config = Path.Combine(dir, "config.yaml");

            if (!File.Exists(config))
            {
                return(null);
            }

            var course = new Course {
                CourseDir = dir
            };

            try
            {
                (course.CourseConfig, course.Yaml) = YamlRead.ReadFromFile <CourseConfig>(config);
                return(course);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine($"Failed to parse config.yaml {e}");
                return(null);
            }
        }