示例#1
0
        public async Task CSVExportRequest_Execute_ExceedsLimit()
        {
            DILoggingFixture.SetMaxExportRowsConfig(1);

            AddApplicationGridRouting();
            AddClusterComputeGridRouting();

            var tempFileName = MockS3FileTransfer_UploadToBucket();
            var siteModel    = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();
            var request      = new CSVExportRequest();
            var baseDate     = DateTime.SpecifyKind(new DateTime(2000, 1, 1, 1, 0, 0, 0), DateTimeKind.Utc);

            var cellPasses = new CellPass[SubGridTreeConsts.SubGridTreeDimension, SubGridTreeConsts.SubGridTreeDimension][];

            SubGridUtilities.SubGridDimensionalIterator((x, y) =>
            {
                cellPasses[x, y] = new[] { new CellPass {
                                               Time = baseDate, Height = 1.0f
                                           } };
            });
            DITAGFileAndSubGridRequestsFixture.AddSingleSubGridWithPasses(siteModel,
                                                                          SubGridTreeConsts.DefaultIndexOriginOffset, SubGridTreeConsts.DefaultIndexOriginOffset, cellPasses);

            var response = await request.ExecuteAsync(SimpleCSVExportRequestArgument(siteModel.ID));

            response.Should().NotBeNull();
            response.ResultStatus.Should().Be(RequestErrorStatus.ExportExceededRowLimit);

            CleanupMockedFile(tempFileName, siteModel.ID);
        }
示例#2
0
        public async Task CSVExportRequest_Execute_SingleCellSinglePass_CellProfileAllPasses()
        {
            AddApplicationGridRouting();
            AddClusterComputeGridRouting();

            var tempFileName = MockS3FileTransfer_UploadToBucket();
            var siteModel    = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();
            var request      = new CSVExportRequest();

            var baseDate   = DateTime.SpecifyKind(new DateTime(2000, 1, 1, 1, 0, 0, 0), DateTimeKind.Utc);
            var cellPasses = new[] { new CellPass {
                                         Time = baseDate, Height = 1.0f
                                     } };

            DITAGFileAndSubGridRequestsFixture.AddSingleCellWithPasses(siteModel,
                                                                       SubGridTreeConsts.DefaultIndexOriginOffset, SubGridTreeConsts.DefaultIndexOriginOffset, cellPasses);

            var invalidatedStreams = new List <ISubGridSpatialAffinityKey>();

            siteModel.ExistenceMap.ScanAllSubGrids(leaf =>
            {
                if (leaf is IServerLeafSubGrid serverLeaf)
                {
                    (serverLeaf.Owner as ServerSubGridTree).SaveLeafSubGrid(serverLeaf, siteModel.PrimaryStorageProxy, siteModel.PrimaryStorageProxy, invalidatedStreams);
                }

                return(true);
            });

            siteModel.PrimaryStorageProxy.Commit();

            DITAGFileAndSubGridRequestsFixture.ConvertSiteModelToImmutable(siteModel);

            var response = await request.ExecuteAsync(SimpleCSVExportRequestArgument(siteModel.ID, OutputTypes.PassCountAllPasses));

            response.Should().NotBeNull();
            response.ResultStatus.Should().Be(RequestErrorStatus.OK);

            // Read back the zip file
            using (var archive = ZipFile.Open(tempFileName, ZipArchiveMode.Read))
            {
                var extractedFileName = tempFileName.Remove(tempFileName.Length - 4) + ".csv";
                archive.Entries[0].ExtractToFile(extractedFileName);

                var lines = File.ReadAllLines(extractedFileName);
                lines.Length.Should().Be(2);
                lines[0].Should()
                .Be(
                    "Time,CellN,CellE,Elevation,PassNumber,LastRadioLtncy,DesignName,Machine,Speed,LastGPSMode,GPSAccTol,TargPassCount,ValidPos,Lift,LastCMV,TargCMV,LastMDP,TargMDP,LastRMV,LastFreq,LastAmp,TargThickness,MachineGear,VibeState,LastTemp");
                lines[1].Should()
                .Be(
                    @"2000/Jan/01 01:00:00.000,0.170m,0.170m,1.000m,1,0,?,""Unknown"",0.0km/h,Old Position,?,?,0,1,?,?,0.0,?,?,?,?,?,?,?,0.0°C");
            }

            CleanupMockedFile(tempFileName, siteModel.ID);
        }
示例#3
0
        public async Task CSVExportRequest_Execute_EmptySiteModel()
        {
            AddApplicationGridRouting();
            AddClusterComputeGridRouting();

            var siteModel = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();
            var request   = new CSVExportRequest();
            var response  = await request.ExecuteAsync(SimpleCSVExportRequestArgument(siteModel.ID));

            response.Should().NotBeNull();
            response.ResultStatus.Should().Be(RequestErrorStatus.FailedToRequestDatamodelStatistics);
        }
示例#4
0
        public async Task CSVExportRequest_Execute_SingleSubGridSinglePass()
        {
            AddApplicationGridRouting();
            AddClusterComputeGridRouting();

            var tempFileName = MockS3FileTransfer_UploadToBucket();
            var siteModel    = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();
            var request      = new CSVExportRequest();
            var baseDate     = DateTime.SpecifyKind(new DateTime(2000, 1, 1, 1, 0, 0, 0), DateTimeKind.Utc);

            var cellPasses = new CellPass[SubGridTreeConsts.SubGridTreeDimension, SubGridTreeConsts.SubGridTreeDimension][];

            SubGridUtilities.SubGridDimensionalIterator((x, y) =>
            {
                cellPasses[x, y] = new[] { new CellPass {
                                               Time = baseDate, Height = 1.0f
                                           } };
            });

            DITAGFileAndSubGridRequestsFixture.AddSingleSubGridWithPasses(siteModel,
                                                                          SubGridTreeConsts.DefaultIndexOriginOffset, SubGridTreeConsts.DefaultIndexOriginOffset, cellPasses);

            var response = await request.ExecuteAsync(SimpleCSVExportRequestArgument(siteModel.ID));

            response.Should().NotBeNull();
            response.ResultStatus.Should().Be(RequestErrorStatus.OK);

            // Read back the zip file
            using (var archive = ZipFile.Open(tempFileName, ZipArchiveMode.Read))
            {
                var extractedFileName = tempFileName.Remove(tempFileName.Length - 4) + ".csv";
                archive.Entries[0].ExtractToFile(extractedFileName);

                var lines = File.ReadAllLines(extractedFileName);
                lines.Length.Should().Be(SubGridTreeConsts.SubGridTreeCellsPerSubGrid + 1);
                lines[0].Should().BeEquivalentTo(
                    "Time,CellN,CellE,Elevation,PassCount,LastRadioLtncy,DesignName,Machine,Speed,LastGPSMode,GPSAccTol,TargPassCount,TotalPasses,Lift,LastCMV,TargCMV,LastMDP,TargMDP,LastRMV,LastFreq,LastAmp,TargThickness,MachineGear,VibeState,LastTemp");
                lines[1].Should()
                .BeEquivalentTo(
                    "2000/Jan/01 01:00:00.000,0.170m,0.170m,1.000m,1,0,?,\"Unknown\",0.0km/h,Old Position,?,?,1,1,?,?,0.0,?,?,?,?,?,?,?,0.0°C");
                lines[10].Length.Should().Be(118);
                lines[10].Should()
                .BeEquivalentTo(
                    "2000/Jan/01 01:00:00.000,3.230m,0.170m,1.000m,1,0,?,\"Unknown\",0.0km/h,Old Position,?,?,1,1,?,?,0.0,?,?,?,?,?,?,?,0.0°C");
            }

            CleanupMockedFile(tempFileName, siteModel.ID);
        }
示例#5
0
        public async Task CSVExportRequest_Execute_NoProductionData()
        {
            AddApplicationGridRouting();
            AddClusterComputeGridRouting();

            var tempFileName = MockS3FileTransfer_UploadToBucket();
            var siteModel    = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();
            var request      = new CSVExportRequest();

            var response = await request.ExecuteAsync(SimpleCSVExportRequestArgument(siteModel.ID));

            response.Should().NotBeNull();
            response.ResultStatus.Should().Be(RequestErrorStatus.FailedToRequestDatamodelStatistics);

            CleanupMockedFile(tempFileName, siteModel.ID);
        }
示例#6
0
        public async Task CSVExportRequest_Execute_UnableToWriteResultToS3()
        {
            AddApplicationGridRouting();
            AddClusterComputeGridRouting();

            var tempFileName = MockS3FileTransfer_UploadToBucket("InvalidFilename*@");
            var siteModel    = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();
            var request      = new CSVExportRequest();
            var baseDate     = DateTime.SpecifyKind(new DateTime(2000, 1, 1, 1, 0, 0, 0), DateTimeKind.Utc);

            var cellPasses = new CellPass[SubGridTreeConsts.SubGridTreeDimension, SubGridTreeConsts.SubGridTreeDimension][];

            SubGridUtilities.SubGridDimensionalIterator((x, y) =>
            {
                cellPasses[x, y] = new[] { new CellPass {
                                               Time = baseDate, Height = 1.0f
                                           } };
            });

            DITAGFileAndSubGridRequestsFixture.AddSingleSubGridWithPasses(siteModel,
                                                                          SubGridTreeConsts.DefaultIndexOriginOffset, SubGridTreeConsts.DefaultIndexOriginOffset, cellPasses);

            var mockTransferProxy = new Mock <ITransferProxy>();

            mockTransferProxy.Setup(t => t.UploadToBucket(It.IsAny <Stream>(), It.IsAny <string>(), It.IsAny <string>())).Callback(() => throw new IOException("S3 not available"));
            var mockTransferProxyFactory = new Mock <ITransferProxyFactory>();

            mockTransferProxyFactory.Setup(x => x.NewProxy(It.IsAny <TransferProxyType>())).Returns(mockTransferProxy.Object);

            DIBuilder
            .Continue()
            .Add(x => x.AddSingleton(mockTransferProxyFactory.Object))
            .Complete();

            var response = await request.ExecuteAsync(SimpleCSVExportRequestArgument(siteModel.ID));

            response.Should().NotBeNull();
            response.ResultStatus.Should().Be(RequestErrorStatus.ExportUnableToLoadFileToS3);

            CleanupMockedFile(tempFileName, siteModel.ID);
        }
示例#7
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            var request = CastRequestObjectTo <CompactionCSVExportRequest>(item);

            var siteModel = GetSiteModel(request.ProjectUid);

            if (request.CoordType == CoordType.LatLon && siteModel.CSIBLoaded == false)
            {
                log.LogError($"#Out# CSVExportExecutor. CoordinateType of LatLong requested, but CSIB not found : Project: {request.ProjectUid} Filename: {request.FileName}");
                throw CreateServiceException <CSVExportExecutor>
                          (HttpStatusCode.InternalServerError, ContractExecutionStatesEnum.InternalProcessingError,
                          RequestErrorStatus.ExportInvalidCSIB);
            }

            var filter       = ConvertFilter(request.Filter, siteModel);
            var startEndDate = CSVExportHelper.GetDateRange(siteModel, request.Filter);

            filter.AttributeFilter.StartTime = startEndDate.Item1;
            filter.AttributeFilter.EndTime   = startEndDate.Item2;

            var tRexRequest = new CSVExportRequest();
            var csvExportRequestArgument = AutoMapperUtility.Automapper.Map <CSVExportRequestArgument>(request);

            csvExportRequestArgument.MappedMachines = CSVExportHelper.MapRequestedMachines(siteModel, request.MachineNames);
            csvExportRequestArgument.Filters        = new FilterSet(filter);
            var response = await tRexRequest.ExecuteAsync(csvExportRequestArgument);

            if (response == null || response.ResultStatus != RequestErrorStatus.OK)
            {
                log.LogError($"CSVExportExecutor unable to process request. Project: {request.ProjectUid} Filename: {request.FileName} Response: {response?.ResultStatus.ToString()}");
                throw CreateServiceException <CSVExportExecutor>
                          (HttpStatusCode.InternalServerError, ContractExecutionStatesEnum.InternalProcessingError,
                          response?.ResultStatus ?? RequestErrorStatus.FailedToConfigureInternalPipeline);
            }
            var s3FileTransfer = new S3FileTransfer(TransferProxyType.Temporary);

            return(new CompactionExportResult(s3FileTransfer.GeneratePreSignedUrl(response.fileName)));
        }
示例#8
0
        public void CSVExportRequest_Creation()
        {
            var request = new CSVExportRequest();

            request.Should().NotBeNull();
        }