コード例 #1
0
        public async Task <IEnumerable <SpeedEntry> > FilterAsync(ClosedPeriod period, Func <SpeedEntry, bool> predicate) // todo: being killed when period.from --> dateTime.min and period.to --> dateTime.max
        {
            await Task.CompletedTask;
            var timer     = Stopwatch.StartNew();
            var fileNames = GetOverrlappedClusterFileNames(period);
            var filePaths = fileNames.Select(n => Path.Combine(Directory, n));
            // var existingPaths = filePaths.Where(p => File.Exists(p));
            var entries     = new ConcurrentBag <SpeedEntry>();
            var partitioner = Partitioner.Create(filePaths);

            Parallel.ForEach(partitioner, p =>
                             //foreach (var p in filePaths)
            {
                if (File.Exists(p))
                {
                    using (var file = new FileStream(p, FileMode.Open, FileAccess.Read))
                    {
                        var bytes = new byte[file.Length];
                        file.Read(bytes, 0, bytes.Length);
                        var json        = Encoding.GetString(bytes);
                        var jsonEntries = JsonConvert.DeserializeObject <IEnumerable <SpeedEntry> >(json);
                        foreach (var entry in jsonEntries)
                        {
                            entries.Add(entry);
                        }
                    }
                }
            }
                             );

            var result = entries.Where(predicate);

            StopTimer(timer);
            return(result);
        }
        public HttpResponseMessage ClosePeriod(HttpRequestMessage request, [FromBody] ClosedPeriod closedPeriodModel)
        {
            return(GetHttpResponse(request, () =>
            {
                var closedPeriod = _ExtractionProcessService.ClosePeriod(closedPeriodModel);

                return request.CreateResponse <ClosedPeriod>(HttpStatusCode.OK, closedPeriod);
            }));
        }
コード例 #3
0
        private IEnumerable <string> GetOverrlappedClusterFileNames(ClosedPeriod period)
        {
            var result   = new List <string>();
            var nowTicks = period.From.Ticks - period.From.Ticks % ClusterSize;

            while (nowTicks < period.To.Ticks)
            {
                result.Add(nowTicks + JsonExtension);
                nowTicks += ClusterSize;
            }

            return(result);
        }
        public HttpResponseMessage GetClosedPeriod(HttpRequestMessage request, int closedPeriodId)
        {
            return(GetHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;

                ClosedPeriod closedPeriod = _ExtractionProcessService.GetClosedPeriod(closedPeriodId);

                // notice no need to create a seperate model object since ClosedPeriod entity will do just fine
                response = request.CreateResponse <ClosedPeriod>(HttpStatusCode.OK, closedPeriod);

                return response;
            }));
        }
コード例 #5
0
        public async Task <MinMaxSpeedEntryDto> GetMinMaxSpeedEntriesAsync(ClosedPeriod period)
        {
            using (var uow = UnitOfWorkFactory.Build())
            {
                var now     = DateTime.UtcNow;
                var entries = await uow.SpeedEntryRepository
                              .FilterAsync(
                    period,
                    se => true);

                var result = new MinMaxSpeedEntryDto()
                {
                    Min = Mapper.Map <SpeedEntryDto>(entries.Aggregate((min, e) => e.Speed < min.Speed ? e : min)),
                    Max = Mapper.Map <SpeedEntryDto>(entries.Aggregate((max, e) => e.Speed > max.Speed ? e : max))
                };

                return(result);
            }
        }
        public HttpResponseMessage DeleteClosedPeriod(HttpRequestMessage request, [FromBody] int closedPeriodId)
        {
            return(GetHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;

                // not that calling the WCF service here will authenticate access to the data
                ClosedPeriod closedPeriod = _ExtractionProcessService.GetClosedPeriod(closedPeriodId);

                if (closedPeriod != null)
                {
                    _ExtractionProcessService.DeleteClosedPeriod(closedPeriodId);

                    response = request.CreateResponse(HttpStatusCode.OK);
                }
                else
                {
                    response = request.CreateErrorResponse(HttpStatusCode.NotFound, "No closedPeriod found under that ID.");
                }

                return response;
            }));
        }
 public ClosedPeriod ClosePeriod(ClosedPeriod closedPeriod)
 {
     return(Channel.ClosePeriod(closedPeriod));
 }
 public ClosedPeriod UpdateClosedPeriod(ClosedPeriod closedPeriod)
 {
     return(Channel.UpdateClosedPeriod(closedPeriod));
 }
コード例 #9
0
        public async Task <ActionResult <MinMaxSpeedEntryDto> > GetMinMaxSpeedEntriesAsync([FromQuery] ClosedPeriod period)
        {
            var result = await _speedControllerService.GetMinMaxSpeedEntriesAsync(period);

            return(Ok(result));
        }