コード例 #1
0
        public async Task <IActionResult> IndexAsync([FromQuery] string server)
        {
            try
            {
                _logger.Information("Preparing statistics for server {Server}", server);

                if (!IsValidServer(server))
                {
                    return(View(new HomeViewModel(_dnsServersSettings)));
                }

                var statisticsData = await _statisticsProvider.GetStatisticsForServer(server);

                if (statisticsData == null || !statisticsData.Any())
                {
                    _logger.Warning("Could not find any statistics for server {Server}", server);
                    return(View(new HomeViewModel(_dnsServersSettings)));
                }

                var queryTypes = new Dictionary <string, long>
                {
                    { "A", statisticsData.Sum(s => s.QueryTypeA) },
                    { "SOA", statisticsData.Sum(s => s.QueryTypeSOA) },
                    { "Null", statisticsData.Sum(s => s.QueryTypeNull) },
                    { "TXT", statisticsData.Sum(s => s.QueryTypeTXT) },
                    { "AAA", statisticsData.Sum(s => s.QueryTypeAAA) },
                    { "SRV", statisticsData.Sum(s => s.QueryTypeSRV) },
                    { "DNSKEY", statisticsData.Sum(s => s.QueryTypeDNSKEY) },
                    { "ANY", statisticsData.Sum(s => s.QueryTypeAny) }
                };

                var answerTypes = new Dictionary <string, long>
                {
                    { "NOERROR", statisticsData.Sum(s => s.AnswerNOERROR) },
                    { "FORMERR", statisticsData.Sum(s => s.AnswerFORMERR) },
                    { "SERVFAIL", statisticsData.Sum(s => s.AnswerSERVFAIL) },
                    { "NXDOMAIN", statisticsData.Sum(s => s.AnswerNXDOMAIN) },
                    { "NOTIMPL", statisticsData.Sum(s => s.AnswerNOTIMPL) },
                    { "REFUSED", statisticsData.Sum(s => s.AnswerREFUSED) },
                    { "NODATA", statisticsData.Sum(s => s.AnswerNODATA) }
                };

                // Fill model with statistics
                var homeViewModel = new HomeViewModel(_dnsServersSettings)
                {
                    ServerName       = server,
                    QueriesRequested = statisticsData.Sum(x => x.QueriesRequested).ToString("N0"),
                    QueriesBlocked   = statisticsData.Sum(x => x.QueriesBlocked).ToString("N0"),

                    SerializedXLabels          = Newtonsoft.Json.JsonConvert.SerializeObject(statisticsData.Select(x => x.CreatedDate)),
                    SerializedQueriesRequested = Newtonsoft.Json.JsonConvert.SerializeObject(statisticsData.Select(x => x.QueriesRequested)),
                    SerializedQueriesBlocked   = Newtonsoft.Json.JsonConvert.SerializeObject(statisticsData.Select(x => x.QueriesBlocked)),

                    SerializedQueryTypeDimensions = Newtonsoft.Json.JsonConvert.SerializeObject(queryTypes.Keys.ToList()),
                    SerializedQueryTypeValues     = Newtonsoft.Json.JsonConvert.SerializeObject(queryTypes.Values.ToList()),

                    SerializedAnswerTypeDimensions = Newtonsoft.Json.JsonConvert.SerializeObject(answerTypes.Keys.ToList()),
                    SerializedAnswerTypeValues     = Newtonsoft.Json.JsonConvert.SerializeObject(answerTypes.Values.ToList()),
                };

                _logger.Debug("Created a HomeViewModel from {Count} data points", statisticsData.Count());

                return(View(homeViewModel));
            }
            catch (Exception e)
            {
                _logger.Error(e, "Got an exception while preparing statistics for server {Server}", server);
                throw;
            }
        }