/// <summary> /// Displays the feed results. /// </summary> /// <param name="results">The results.</param> public async Task DisplayFeedResultsAsync(FeedResultData results) { // Output to console // new FeedToConsole(results.GpsRecords, results.StatusData, results.FaultData).Run(); // Optionally we can output to csv or google doc: new FeedToCsv(path, results.GpsRecords, results.StatusData, results.FaultData, results.Trips, results.ExceptionEvents).Run(); // new FeedToBigquery(path).Run(); await Task.Delay(1000); }
/// <summary> /// Displays the feed results. /// </summary> /// <param name="results">The results.</param> public void DisplayFeedResults(FeedResultData results) { // Output to console // new FeedToConsole(results.GpsRecords, results.StatusData, results.FaultData).Run(); // Optionally we can output to csv or google doc: new FeedToCsv(path, results.GpsRecords, results.StatusData, results.FaultData, results.Trips, results.ExceptionEvents).Run(); // new FeedToBigquery(path).Run(); Thread.Sleep(1000); }
/// <summary> /// Requests the feed data, populates feedParams data collections /// </summary> /// <param name="feedParams">Contains latest data token and collections to populate during this call.</param> /// <returns><see cref="FeedResultData"/></returns> public async Task <FeedResultData> GetAsync(FeedParameters feedParams) { FeedResultData feedResults = new FeedResultData(new List <LogRecord>(), new List <StatusData>(), new List <FaultData>(), new List <Trip>(), new List <ExceptionEvent>()); try { if (DateTime.UtcNow > repopulateCaches) { await PopulateCachesAsync(); repopulateCaches = DateTime.UtcNow.AddHours(RepopulatePeroid); } FeedResult <LogRecord> feedLogRecordData = await MakeFeedCallAsync <LogRecord>(feedParams.LastGpsDataToken); FeedResult <StatusData> feedStatusData = await MakeFeedCallAsync <StatusData>(feedParams.LastStatusDataToken); FeedResult <FaultData> feedFaultData = await MakeFeedCallAsync <FaultData>(feedParams.LastFaultDataToken); FeedResult <Trip> feedTripData = await MakeFeedCallAsync <Trip>(feedParams.LastTripToken); FeedResult <ExceptionEvent> feedExceptionData = await MakeFeedCallAsync <ExceptionEvent>(feedParams.LastExceptionToken); feedParams.LastGpsDataToken = feedLogRecordData.ToVersion; foreach (LogRecord log in feedLogRecordData.Data) { // Populate relevant LogRecord fields. log.Device = await GetDeviceAsync(log.Device); feedResults.GpsRecords.Add(log); } feedParams.LastStatusDataToken = feedStatusData.ToVersion; foreach (StatusData log in feedStatusData.Data) { // Populate relevant StatusData fields. log.Device = await GetDeviceAsync(log.Device); log.Diagnostic = await GetDiagnosticAsync(log.Diagnostic); feedResults.StatusData.Add(log); } feedParams.LastFaultDataToken = feedFaultData.ToVersion; foreach (FaultData log in feedFaultData.Data) { // Populate relevant FaultData fields. log.Device = await GetDeviceAsync(log.Device); log.Diagnostic = await GetDiagnosticAsync(log.Diagnostic); log.Controller = await GetControllerAsync(log.Controller); log.FailureMode = await GetFailureModeAsync(log.FailureMode); feedResults.FaultData.Add(log); } feedParams.LastTripToken = feedTripData.ToVersion; foreach (Trip trip in feedTripData.Data) { trip.Device = await GetDeviceAsync(trip.Device); trip.Driver = await GetDriver(trip.Driver); feedResults.Trips.Add(trip); } feedParams.LastExceptionToken = feedExceptionData.ToVersion; foreach (ExceptionEvent exceptionEvent in feedExceptionData.Data) { exceptionEvent.Device = await GetDeviceAsync(exceptionEvent.Device); exceptionEvent.Driver = await GetDriver(exceptionEvent.Driver); exceptionEvent.Diagnostic = await GetDiagnosticAsync(exceptionEvent.Diagnostic); exceptionEvent.Rule = await GetRuleAsync(exceptionEvent.Rule); feedResults.ExceptionEvents.Add(exceptionEvent); } } catch (Exception e) { Console.WriteLine(e.Message); if (e is HttpRequestException) { await Task.Delay(5000); } if (e is DbUnavailableException) { await Task.Delay(TimeSpan.FromMinutes(5)); } } return(feedResults); }