예제 #1
0
        [Route("ReportRows.json", NullStatusCode = (int)HttpStatusCode.Forbidden)]  // V2 route
        public ReportRowsJson ReportRowsV2()
        {
            ReportRowsJson result = null;

            var context = Context;
            var config  = SharedState.SharedConfiguration.Get();

            if (context.IsLocalOrLan || config.InternetClientSettings.CanRunReports)
            {
                var expectedJsonType = ExpectedJsonType();
                var startTime        = SharedState.Clock.UtcNow;

                try {
                    var parameters = ExtractV2Parameters();
                    LimitDatesWhenNoStrongCriteriaPresent(parameters, context.IsInternet);
                    if (parameters?.Date?.UpperValue?.Year < 9999)
                    {
                        parameters.Date.UpperValue = parameters.Date.UpperValue.Value.AddDays(1).AddMilliseconds(-1);
                    }

                    switch (parameters.ReportType)
                    {
                    case "DATE":    result = CreateManyAircraftReport(parameters, config); break;

                    case "ICAO":    result = CreateSingleAircraftReport(parameters, config, findByIcao: true); break;

                    case "REG":     result = CreateSingleAircraftReport(parameters, config, findByIcao: false); break;

                    default:        throw new NotImplementedException();
                    }

                    if (result != null)
                    {
                        result.GroupBy = parameters.SortField1 ?? parameters.SortField2 ?? "";
                    }
                    ;
                } catch (Exception ex) {
                    var log = Factory.ResolveSingleton <ILog>();
                    log.WriteLine($"An exception was encountered during the processing of a report: {ex}");
                    result           = EnsureJsonObjExists(result, expectedJsonType);
                    result.ErrorText = $"An exception was encounted during the processing of the report, see log for full details: {ex.Message}";
                }

                result = EnsureJsonObjExists(result, expectedJsonType);
                result.ProcessingTime         = String.Format("{0:N3}", (SharedState.Clock.UtcNow - startTime).TotalSeconds);
                result.OperatorFlagsAvailable = ImagesFolderAvailable(SharedState.FileSystem, config.BaseStationSettings.OperatorFlagsFolder);
                result.SilhouettesAvailable   = ImagesFolderAvailable(SharedState.FileSystem, config.BaseStationSettings.SilhouettesFolder);
            }

            return(result);
        }
        /// <summary>
        /// See base class.
        /// </summary>
        /// <param name="server"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        protected override bool DoHandleRequest(IWebServer server, RequestReceivedEventArgs args)
        {
            bool result = false;

            if (args.PathAndFile.Equals("/ReportRows.json", StringComparison.OrdinalIgnoreCase) && (_InternetClientCanRunReports || !args.IsInternetRequest))
            {
                result = true;

                ReportRowsJson json      = null;
                var            startTime = Provider.UtcNow;

                Type expectedJsonType = ExpectedJsonType(args);

                try {
                    var parameters = ExtractParameters(args);

                    LimitDatesWhenNoStrongCriteriaPresent(parameters, args.IsInternetRequest);
                    if (parameters.ToDate.Year != 9999)
                    {
                        parameters.ToDate = parameters.ToDate.AddDays(1).AddMilliseconds(-1);
                    }

                    switch (parameters.ReportType)
                    {
                    case "DATE":    json = CreateManyAircraftReport(args, parameters); break;

                    case "ICAO":    json = CreateSingleAircraftReport(args, parameters, true); break;

                    case "REG":     json = CreateSingleAircraftReport(args, parameters, false); break;

                    default:        throw new NotImplementedException();
                    }

                    if (json != null)
                    {
                        json.GroupBy = parameters.SortField1 ?? parameters.SortField2 ?? "";
                    }
                } catch (Exception ex) {
                    Debug.WriteLine(String.Format("ReportRowsJsonPage.DoHandleRequest caught exception {0}", ex.ToString()));
                    ILog log = Factory.Singleton.Resolve <ILog>().Singleton;
                    log.WriteLine("An exception was encountered during the processing of a report: {0}", ex.ToString());
                    if (json == null)
                    {
                        json = (ReportRowsJson)Activator.CreateInstance(expectedJsonType);
                    }
                    json.ErrorText = String.Format("An exception was encounted during the processing of the report, see log for full details: {0}", ex.Message);
                }

                if (json == null)
                {
                    json = (ReportRowsJson)Activator.CreateInstance(expectedJsonType);
                }
                json.ProcessingTime         = String.Format("{0:N3}", (Provider.UtcNow - startTime).TotalSeconds);
                json.OperatorFlagsAvailable = _ShowOperatorFlags;
                json.SilhouettesAvailable   = _ShowSilhouettes;
                Responder.SendJson(args.Response, json, null);
                args.Classification = ContentClassification.Json;
            }

            return(result);
        }
예제 #3
0
        [Route("ReportRows.json")]                      // V2 route
        public HttpResponseMessage ReportRowsV2()
        {
            HttpResponseMessage result = null;

            var config = SharedState.SharedConfiguration.Get();

            if (PipelineRequest.IsLocalOrLan || config.InternetClientSettings.CanRunReports)
            {
                ReportRowsJson jsonObj          = null;
                var            expectedJsonType = ExpectedJsonType();
                var            startTime        = SharedState.Clock.UtcNow;

                try {
                    var parameters = ExtractV2Parameters();
                    LimitDatesWhenNoStrongCriteriaPresent(parameters, PipelineRequest.IsInternet);
                    if (parameters?.Date?.UpperValue?.Year < 9999)
                    {
                        parameters.Date.UpperValue = parameters.Date.UpperValue.Value.AddDays(1).AddMilliseconds(-1);
                    }

                    switch (parameters.ReportType)
                    {
                    case "DATE":    jsonObj = CreateManyAircraftReport(parameters, config); break;

                    case "ICAO":    jsonObj = CreateSingleAircraftReport(parameters, config, findByIcao: true); break;

                    case "REG":     jsonObj = CreateSingleAircraftReport(parameters, config, findByIcao: false); break;

                    default:        throw new NotImplementedException();
                    }

                    if (jsonObj != null)
                    {
                        jsonObj.GroupBy = parameters.SortField1 ?? parameters.SortField2 ?? "";
                    }
                    ;
                } catch (Exception ex) {
                    var log = Factory.ResolveSingleton <ILog>();
                    log.WriteLine($"An exception was encountered during the processing of a report: {ex}");
                    jsonObj           = EnsureJsonObjExists(jsonObj, expectedJsonType);
                    jsonObj.ErrorText = $"An exception was encounted during the processing of the report, see log for full details: {ex.Message}";
                }

                jsonObj = EnsureJsonObjExists(jsonObj, expectedJsonType);
                jsonObj.ProcessingTime         = String.Format("{0:N3}", (SharedState.Clock.UtcNow - startTime).TotalSeconds);
                jsonObj.OperatorFlagsAvailable = ImagesFolderAvailable(SharedState.FileSystem, config.BaseStationSettings.OperatorFlagsFolder);
                jsonObj.SilhouettesAvailable   = ImagesFolderAvailable(SharedState.FileSystem, config.BaseStationSettings.SilhouettesFolder);

                var jsonText = JsonConvert.SerializeObject(jsonObj, Version2JsonSerialiserSettings);
                result = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(jsonText, Encoding.UTF8, MimeType.Json),
                };
                result.Headers.CacheControl = new CacheControlHeaderValue()
                {
                    MaxAge         = TimeSpan.Zero,
                    NoCache        = true,
                    NoStore        = true,
                    MustRevalidate = true,
                };
            }

            return(result ?? new HttpResponseMessage(HttpStatusCode.Forbidden));
        }
예제 #4
0
 /// <summary>
 /// Creates and returns a new instance corresponding to the type passed across if the instance passed in is null.
 /// </summary>
 /// <param name="jsonObj"></param>
 /// <param name="expectedJsonType"></param>
 /// <returns></returns>
 private ReportRowsJson EnsureJsonObjExists(ReportRowsJson jsonObj, Type expectedJsonType)
 {
     return(jsonObj ?? (ReportRowsJson)Activator.CreateInstance(expectedJsonType));
 }