Esempio n. 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 RebuildRouting()
 {
     _logger.LogInformation("Starting rebuilding routing database.");
     using (var stream = _latestFileFetcherExecutor.Get())
         using (var memoryStream = new MemoryStream())
         {
             stream.CopyTo(memoryStream);
             await _graphHopperGateway.Rebuild(memoryStream);
         }
     _logger.LogInformation("Finished rebuilding routing database.");
 }
Esempio n. 3
0
        public async Task <IActionResult> PostUpdateData(UpdateRequest request)
        {
            if (!RebuildSemaphore.WaitOne(0))
            {
                return(BadRequest("Can't run two full updates in parallel"));
            }
            try
            {
                if (!IsRequestLocal())
                {
                    return(BadRequest("This operation can't be done from a remote client, please run this from the server"));
                }
                if (request == null ||
                    request.Routing == false &&
                    request.Highways == false &&
                    request.PointsOfInterest == false &&
                    request.OsmFile == false)
                {
                    request = new UpdateRequest
                    {
                        Routing          = true,
                        Highways         = true,
                        PointsOfInterest = true,
                        OsmFile          = true
                    };
                    _logger.LogInformation("No specific filters were applied, updating all databases.");
                }
                _logger.LogInformation("Updating site's databases according to request: " +
                                       JsonConvert.SerializeObject(request));
                var memoryStream = new MemoryStream();
                using (var stream = await _osmLatestFileFetcher.Get(request.OsmFile))
                {
                    stream.CopyTo(memoryStream);
                }
                _logger.LogInformation("Copy osm data completed.");

                var elasticSearchTask = _osmElasticSearchUpdaterService.Rebuild(request, memoryStream);

                var graphHopperTask = request.Routing
                    ? _graphHopperGateway.Rebuild(memoryStream, Sources.OSM_FILE_NAME)
                    : Task.CompletedTask;

                await Task.WhenAll(elasticSearchTask, graphHopperTask);

                return(Ok());
            }
            finally
            {
                RebuildSemaphore.Release();
            }
        }