public static Continent GetContinent(ContinentCodes code)
        {
            switch (code)
            {
            case ContinentCodes.AM:
                return(Americas);

            case ContinentCodes.AF:
                return(Africa);

            case ContinentCodes.AN:
                return(Antarctica);

            case ContinentCodes.AS:
                return(Asia);

            case ContinentCodes.EU:
                return(Europe);

            case ContinentCodes.NA:
                return(NorthAmerica);

            case ContinentCodes.OC:
                return(Oceania);

            case ContinentCodes.SA:
                return(SouthAmerica);

            default:
                throw new ArgumentException("Could not get continent name by given argument", code.ToString());
            }
        }
示例#2
0
        private void DrawVerboseTable(Dictionary <DnsServer, List <DnsResponse> > results, RunOptions options)
        {
            var resultsByContinent = results.OrderBy(pair => pair.Key.ContinentCode.ToString());

            var parentTable = new Table()
                              .Border(TableBorder.MinimalHeavyHead)
                              .BorderColor(Color.White)
                              .AddColumn(new TableColumn($"[green][u]{i18n.dug.Table_Server_Info}[/][/]").Centered())
                              .AddColumn(new TableColumn($"[green][u]{i18n.dug.Table_Results}[/][/]").Centered());

            ContinentCodes currentContinent = null;

            foreach (var resultPair in resultsByContinent)
            {
                var server = resultPair.Key;

                //Check if we need to render a continent name
                if (server.ContinentCode.Code != currentContinent?.Code)
                {
                    currentContinent = server.ContinentCode;
                    parentTable.AddRow(new Markup($"[bold underline blue] {currentContinent.Name} [/]"));
                    parentTable.AddEmptyRow();
                }

                //Create Server info for left column
                var serverInfoGrid = new Grid();
                serverInfoGrid.AddColumn(new GridColumn().NoWrap());
                serverInfoGrid.AddRow(server.IPAddress.ToString());
                // serverInfoGrid.AddRow(string.IsNullOrEmpty(server.CountryFlag) ? "" : server.CountryFlag); //I would really like to use these flag emojis but it seems like it has very little terminal support, most render them incorrectly...
                serverInfoGrid.AddRow(server.CityCountryName);
                serverInfoGrid.AddRow("DNSSEC: " + (server.DNSSEC == null ? "❓" : ((bool)server.DNSSEC ? "🔒" : "🔓")));
                serverInfoGrid.AddRow($"{i18n.dug.Table_Reliability}: {server.Reliability * 100}%");
                serverInfoGrid.AddEmptyRow();

                var resultTable = new Table().AddColumns("", "", ""); //Currently you must declare the column headers, even when you dont want to render them.
                resultTable.ShowHeaders = false;
                foreach (var result in resultPair.Value.OrderBy(res => res.RecordType.ToString()))
                {
                    var answerString = TemplateHelper.GetAnswersString(result);
                    answerString = MarkupHelper.FormatDnsResponseMarkup(answerString, options.Hostname);
                    resultTable.AddRow(result.RecordType.ToString(), answerString, $"{result.ResponseTime}ms");
                }

                parentTable.AddRow(serverInfoGrid, resultTable);
            }

            AnsiConsole.Render(parentTable);
        }