Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DatabaseWorker" /> class.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <param name="password">The password.</param>
 /// <param name="database">The database.</param>
 /// <param name="server">The server.</param>
 /// <param name="gpsToken">The GPS token.</param>
 /// <param name="statusToken">The status token.</param>
 /// <param name="faultToken">The fault token.</param>
 /// <param name="tripToken">The trip token.</param>
 /// <param name="exceptionToken">The exception token.</param>
 /// <param name="path">The path.</param>
 public DatabaseWorker(string user, string password, string database, string server, long?gpsToken, long?statusToken, long?faultToken, long?tripToken, long?exceptionToken, string path)
     : base(path)
 {
     feedParameters = new FeedParameters(gpsToken, statusToken, faultToken, tripToken, exceptionToken);
     feedService    = new FeedProcessor(server, database, user, password);
 }