[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); }
[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)); }
/// <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)); }