예제 #1
0
        public async Task <IActionResult> PostUpdateData(IFormFile file)
        {
            if (HttpContext.Connection.LocalIpAddress.Equals(HttpContext.Connection.RemoteIpAddress) == false &&
                IPAddress.IsLoopback(HttpContext.Connection.RemoteIpAddress) == false &&
                HttpContext.Connection.RemoteIpAddress.Equals(IPAddress.Parse("10.10.10.10")) == false)
            {
                return(BadRequest($"This operation can't be done from a remote client, please run this from the server: \n {HttpContext.Connection.LocalIpAddress}, {HttpContext.Connection.RemoteIpAddress}, {IPAddress.Parse("10.10.10.10")}"));
            }
            if (file == null)
            {
                return(BadRequest("No file was provided"));
            }
            _logger.LogInformation("Updating Elastic Search and graphhopper OSM data");
            var memoryStream = new MemoryStream();

            file.OpenReadStream().CopyTo(memoryStream);
            _logger.LogInformation("Copy uploaded data completed.");
            var elasticSearchTask = Task.Run(async() =>
            {
                var osmHighways     = await _osmRepository.GetAllHighways(memoryStream);
                var geoJsonHighways = _osmGeoJsonPreprocessorExecutor.Preprocess(osmHighways);

                var fetchTask = _adapters.Select(a => a.GetPointsForIndexing(memoryStream)).ToArray();
                var features  = await Task.WhenAll(fetchTask);
                await _elasticSearchGateway.UpdateDataZeroDownTime(features.SelectMany(v => v).ToList(), geoJsonHighways);
            });
            var graphHopperTask = _graphHopperGateway.Rebuild(memoryStream, file.FileName);
            await Task.WhenAll(elasticSearchTask, graphHopperTask);

            return(Ok());
        }
        private async Task RebuildHighways()
        {
            _logger.LogInformation("Starting rebuilding highways database.");
            using (var stream = _latestFileFetcherExecutor.Get())
            {
                var osmHighways = await _osmRepository.GetAllHighways(stream);

                var geoJsonHighways = _osmGeoJsonPreprocessorExecutor.Preprocess(osmHighways);
                await _elasticSearchGateway.UpdateHighwaysZeroDownTime(geoJsonHighways);
            }

            _logger.LogInformation("Finished rebuilding highways database.");
        }
        /// <inheritdoc />
        public async Task Rebuild(UpdateRequest request, Stream stream)
        {
            if (request.Highways)
            {
                _logger.LogInformation("Starting rebuilding highways database.");
                var osmHighways = await _osmRepository.GetAllHighways(stream);

                var geoJsonHighways = _osmGeoJsonPreprocessorExecutor.Preprocess(osmHighways);
                await _elasticSearchGateway.UpdateHighwaysZeroDownTime(geoJsonHighways);

                _logger.LogInformation("Finished rebuilding highways database.");
            }
            if (request.PointsOfInterest)
            {
                _logger.LogInformation("Starting rebuilding POIs database.");
                var fetchTask = _adapters.Select(a => a.GetPointsForIndexing(stream)).ToArray();
                var features  = await Task.WhenAll(fetchTask);

                await _elasticSearchGateway.UpdatePointsOfInterestZeroDownTime(features.SelectMany(v => v).ToList());

                _logger.LogInformation("Finished rebuilding POIs database.");
            }
        }