コード例 #1
0
ファイル: CheckConfiguration.cs プロジェクト: aperwe/Cerberus
 /// <summary>
 /// Updates the <see cref="Checks"/> table with any items from the specified <paramref name="checks"/> collection
 /// that are missing in the <see cref="Checks"/> table.
 /// </summary>
 /// <param name="checks">List of check names to add (if missing) to the <see cref="Checks"/> table.</param>
 public void AddMissingChecks(IEnumerable <CheckInfo> checks)
 {
     foreach (var check in checks)
     {
         if (!Checks.Any(row => row.Name.Equals(check.Name)))
         {
             Checks.AddChecksRow(check.Name, check.Description, check.FilePath);
         }
     }
 }
コード例 #2
0
            internal string GetCreateSql(TableMapping table)
            {
                var constraints = new List <string>();

                if (PrimaryKey != null && table.PrimaryKey.Columns.Length == 1)
                {
                    constraints.Add(string.Format(CultureInfo.InvariantCulture, "{0} PRIMARY KEY {1}",
                                                  string.IsNullOrEmpty(PrimaryKey.Name)
                                                      ? string.Empty
                                                      : string.Format(CultureInfo.InvariantCulture, "CONSTRAINT {0}", PrimaryKey.Name),
                                                  PrimaryKey.Direction));
                    if (table.OnPrimaryKeyConflict != ConflictResolution.Default)
                    {
                        constraints.Add(string.Format(CultureInfo.InvariantCulture, "ON CONFLICT {0}", table.OnPrimaryKeyConflict));
                    }
                    if (table.AutoIncrementColumn == this)
                    {
                        constraints.Add("AUTOINCREMENT");
                    }
                }

                if (Unique != null)
                {
                    constraints.Add(string.Format(CultureInfo.InvariantCulture, "UNIQUE {0}",
                                                  Unique.OnConflict != ConflictResolution.Default
                                                      ? string.Format(CultureInfo.InvariantCulture, "ON CONFLICT {0}", Unique.OnConflict)
                                                      : string.Empty));
                }
                if (!IsNullable)
                {
                    constraints.Add("NOT NULL");
                }
                if (Checks.Any())
                {
                    constraints.Add(string.Join(" ", Checks.Select(c => string.Format(CultureInfo.InvariantCulture, "CHECK ({0})", c)).ToArray()));
                }
                if (!string.IsNullOrEmpty(DefaultValue))
                {
                    constraints.Add(string.Format(CultureInfo.InvariantCulture, "DEFAULT({0})", DefaultValue));
                }
                if (Collation != Collation.Default)
                {
                    constraints.Add(string.Format(CultureInfo.InvariantCulture, "COLLATE {0}", Collation));
                }

                return(string.Format(CultureInfo.InvariantCulture, "[{0}] {1} {2}", Name, OrmHelper.SqlType(this), string.Join(" ", constraints.ToArray())));
            }
        public HealthInfo Health()
        {
            var checkResults = new List <CheckResult>();

            if (Checks.Any())
            {
                checkResults = Checks.Select(c => c.Run()).ToList();
            }

            // assume unhealthy by default
            var health = OpsEndpoints.Health.Unhealthy;

            if (checkResults.Any())
            {
                health = checkResults.Aggregate(OpsEndpoints.Health.Healthy, (prev, cr) => cr.Health > prev ? cr.Health : prev);
            }

            return(new HealthInfo(Name, Description, health, checkResults));
        }
コード例 #4
0
        public EndResultViewModel(ShellViewModel conductor, SimpleContainer container)
        {
            this.conductor = conductor;
            this.container = container;

            timer.Tick    += Timer_Tick;
            timer.Interval = TimeSpan.FromSeconds(5);

            alleScores = new List <Scores>();

            var gespeeldeOpdrachtenIds = new List <string>();

            aantalPasvragenPerNaam = new Dictionary <string, int>();

            foreach (var dag in container.GetInstance <ShellViewModel>().DagenData.Dagen)
            {
                Checks.Add(new CheckViewModel($"Administratie saved {dag.Naam} :",
                                              Util.DataFileFoundAndValid <AdminData>(dag.Id)));


                var adminadata = Util.SafeReadJson <AdminData>(dag.Id);

                foreach (var gespeeldeOpdrachtData in adminadata.OpdrachtenGespeeld)
                {
                    gespeeldeOpdrachtenIds.Add(gespeeldeOpdrachtData.OpdrachtId);
                }

                foreach (var pasvragenVerdiend in adminadata.Pasvragen)
                {
                    var naam = pasvragenVerdiend.Naam;
                    if (aantalPasvragenPerNaam.ContainsKey(naam))
                    {
                        aantalPasvragenPerNaam[naam] += pasvragenVerdiend.PasVragenVerdiend;
                    }
                    else
                    {
                        aantalPasvragenPerNaam.Add(naam, pasvragenVerdiend.PasVragenVerdiend);
                    }
                }
            }

            gespeeldeOpdrachten = Util.AlleOpdrachtData().Where(od => gespeeldeOpdrachtenIds.Any(i => i == od.Opdracht))
                                  .ToList();

            alleAntwoordenPerOpdrachtId = new Dictionary <string, AntwoordenData>();
            alleJuisteAntwoorden        = new Dictionary <string, string>();
            molPerOpdrachtId            = new Dictionary <string, string>();
            radersPerOpdrachtId         = new Dictionary <string, string>();
            aantalRadersPerOpdrachtId   = new Dictionary <string, int>();

            groepspot      = 0;
            maxTeVerdienen = 0;
            foreach (var opdrachtData in gespeeldeOpdrachten)
            {
                var antwoordengevonden = Util.DataFileFoundAndValid <AntwoordenData>(opdrachtData.Opdracht);

                Checks.Add(new CheckViewModel($"Antwoorden saved {Util.OpdrachtUiNaam(opdrachtData)} :",
                                              antwoordengevonden));

                if (antwoordengevonden)
                {
                    var antwoorden = Util.SafeReadJson <AntwoordenData>(opdrachtData.Opdracht);
                    alleAntwoordenPerOpdrachtId.Add(opdrachtData.Opdracht, antwoorden);

                    Checks.Add(new CheckViewModel(
                                   $"Opdracht {Util.OpdrachtUiNaam(opdrachtData)}: Aantal Antwoorden: {antwoorden.Spelers.Count}",
                                   antwoorden.Spelers.Count == container.GetInstance <ShellViewModel>().AantalSpelers));
                    Checks.Add(new CheckViewModel(
                                   $"Opdracht {Util.OpdrachtUiNaam(opdrachtData)}: Aantal Mollen: {antwoorden.Spelers.Count(s => s.IsDeMol)}",
                                   antwoorden.Spelers.Count(s => s.IsDeMol) == 1));
                    Checks.Add(new CheckViewModel($"Dubbel geantwoord in opdracht {Util.OpdrachtUiNaam(opdrachtData)}:",
                                                  Util.CheckForDoubles(antwoorden.Spelers)));

                    if (Checks.Any(c => !c.IsOk))
                    {
                        continue;
                    }

                    groepspot      += antwoorden.EffectiefVerdiend;
                    maxTeVerdienen += antwoorden.MaxTeVerdienen;

                    var molNaam = antwoorden.Spelers.First(s => s.IsDeMol)?.Naam ?? "?";

                    molPerOpdrachtId.Add(opdrachtData.Opdracht, molNaam);

                    foreach (var juistAntwoord in antwoorden.Spelers.First(s => s.IsDeMol).Antwoorden)
                    {
                        alleJuisteAntwoorden.Add(juistAntwoord.Key, juistAntwoord.Value);
                    }

                    var aantalRaders = antwoorden
                                       .Spelers
                                       .Where(s => !s.IsDeMol)
                                       .Count(s => s.DeMolIs.SafeEqual(molNaam));
                    aantalRadersPerOpdrachtId.Add(opdrachtData.Opdracht, aantalRaders);

                    var radersLijst = string.Join(", ", antwoorden.Spelers
                                                  .Where(s => !s.IsDeMol)
                                                  .Where(s => s.DeMolIs.SafeEqual(molNaam)).Select(s => s.Naam));
                    radersPerOpdrachtId.Add(opdrachtData.Opdracht, radersLijst);
                }
            }

            //finaleantwoordenData = Util.SafeReadJson<FinaleAntwoordenData>();

            // var finaleDoorIedereenGespeeld = finaleantwoordenData.Spelers.Count ==
            //                                  container.GetInstance<ShellViewModel>().AantalSpelers;
            // Checks.Add(new CheckViewModel($"Finale: Aantal Antwoorden: {finaleantwoordenData.Spelers.Count}",
            //     finaleDoorIedereenGespeeld));

            //if (finaleDoorIedereenGespeeld)
            {
                foreach (var speler in container.GetInstance <ShellViewModel>().Spelerdata.Spelers)
                {
                    var scores = new Scores();
                    scores.Naam       = speler.Naam;
                    scores.totaleTijd = TimeSpan.Zero;

                    var pasvragenVerdiend = aantalPasvragenPerNaam.Any(kvp => kvp.Key.SafeEqual(speler.Naam))
                        ? aantalPasvragenPerNaam.Single(kvp => kvp.Key.SafeEqual(speler.Naam)).Value
                        : 0;

                    scores.aantalPasVragenVerdiend = pasvragenVerdiend;

                    foreach (var opdrachtData in gespeeldeOpdrachten)
                    {
                        if (alleAntwoordenPerOpdrachtId.ContainsKey(opdrachtData.Opdracht))
                        {
                            var antwoorden = alleAntwoordenPerOpdrachtId[opdrachtData.Opdracht];

                            var a = antwoorden.Spelers.FirstOrDefault(s => s.Naam.SafeEqual(speler.Naam));

                            if (a != null)
                            {
                                scores.totaleTijd += a.Tijd;

                                if (a.IsDeMol)
                                {
                                    if (aantalRadersPerOpdrachtId.ContainsKey(opdrachtData.Opdracht) &&
                                        aantalRadersPerOpdrachtId[opdrachtData.Opdracht] <
                                        Settings.Default.AantalSpelersDieDeMolMoetenGeradenHebben)
                                    {
                                        scores.verdiendAlsMol +=
                                            antwoorden.MaxTeVerdienen - antwoorden.EffectiefVerdiend;
                                    }

                                    scores.aantalKeerMolGeweest++;
                                    continue;
                                }

                                foreach (var antwoord in a.Antwoorden)
                                {
                                    scores.aantalVragenBeantwoord++;
                                    var juistAntwoord =
                                        alleJuisteAntwoorden.ContainsKey(antwoord.Key) ? alleJuisteAntwoorden[antwoord.Key] : "?";

                                    if (antwoord.Value.SafeEqual(juistAntwoord))
                                    {
                                        scores.aantalVragenJuistBeantwoord++;
                                    }
                                }
                            }
                        }
                    }


                    //var finaleAntwoorden = finaleantwoordenData.Spelers.Single(s => s.Naam.SafeEqual(speler.Naam));

                    //scores.totaleTijd += finaleAntwoorden.Tijd;

                    // foreach (var demolIsPerOpdrachtId in finaleAntwoorden.DeMolIsPerOpdrachtId)
                    // {
                    //     scores.finaleAantalVragenBeantwoord++;
                    //
                    //     if (molPerOpdrachtId.ContainsKey(demolIsPerOpdrachtId.Key)
                    //         && molPerOpdrachtId[demolIsPerOpdrachtId.Key].SafeEqual(demolIsPerOpdrachtId.Value))
                    //     {
                    //         scores.finaleAantalVragenJuistBeantwoord++;
                    //     }
                    // }

                    // foreach (var antwoordenPerVraagId in finaleAntwoorden.AntwoordenPerVraagId)
                    // {
                    //     scores.finaleAantalVragenBeantwoord++;
                    //
                    //     if (alleJuisteAntwoorden.ContainsKey(antwoordenPerVraagId.Key)
                    //         && alleJuisteAntwoorden[antwoordenPerVraagId.Key].SafeEqual(antwoordenPerVraagId.Value))
                    //     {
                    //         scores.finaleAantalVragenJuistBeantwoord++;
                    //     }
                    // }

                    var x = Math.Min(scores.aantalVragenJuistBeantwoord + scores.aantalPasVragenVerdiend,
                                     scores.aantalVragenBeantwoord);
                    scores.percentage = (scores.aantalVragenBeantwoord > 0) ? x / scores.aantalVragenBeantwoord : 0m;
                    //scores.finalePercentage = (scores.finaleAantalVragenBeantwoord > 0) ? scores.finaleAantalVragenJuistBeantwoord / scores.finaleAantalVragenBeantwoord : 0m;

                    scores.totaalPercentage = scores.percentage;

                    alleScores.Add(scores);
                }


                Util.SafeFileWithBackup(new ScoresData
                {
                    MaxTeVerdienen = maxTeVerdienen,
                    GroepsPot      = groepspot,
                    Scores         = alleScores.OrderByDescending(s => s.totaalPercentage).ThenBy(s => s.totaleTijd).ToList()
                });
            }
        }