Пример #1
0
        /// <summary>
        /// Creates/starts a rollup segmentation
        /// </summary>
        /// <param name="model">SimulationModel</param>
        /// <returns>string task</returns>
        public Task <string> RunRollup(SimulationModel model)
        {
            try
            {
                var connectionString = ConfigurationManager.ConnectionStrings["BridgeCareContext"].ConnectionString;
                DBMgr.NativeConnectionParameters = new ConnectionParameters(connectionString, false, "MSSQL");

                var mongoConnection = "";
#if DEBUG
                mongoConnection = Settings.Default.MongoDBDevConnectionString;
#else
                mongoConnection = Settings.Default.MongoDBProdConnectionString;
#endif
                var rollupSegmentation = new RollupSegmentation.RollupSegmentation(model.NetworkName,
                                                                                   model.NetworkId.ToString(), true, mongoConnection)
                {
                    strNetwork = model.NetworkName
                };

                var rollupAndSimulation = new Thread(rollupSegmentation.DoRollup);
                rollupAndSimulation.Start();

                return(Task.FromResult("Rolling up..."));
            }
            catch (Exception ex)
            {
                DBMgr.CloseConnection();
                return(Task.FromResult($"Rollup failed::{ex.Message}"));
            }
        }
Пример #2
0
        /// <summary>
        /// Creates/starts a rollup/simulation
        /// </summary>
        /// <param name="model">SimulationModel</param>
        /// <returns>string Task</returns>
        public Task <string> RunSimulation(SimulationModel model)
        {
            try
            {
                var connectionString = ConfigurationManager.ConnectionStrings["BridgeCareContext"].ConnectionString;
                DBMgr.NativeConnectionParameters = new ConnectionParameters(connectionString, false, "MSSQL");
#if DEBUG
                var mongoConnection = Settings.Default.MongoDBDevConnectionString;
#else
                var mongoConnection = Settings.Default.MongoDBProdConnectionString;
#endif
                var simulation = new Simulation.Simulation(model.SimulationName, model.NetworkName, model.SimulationId, model.NetworkId, mongoConnection);

                Thread simulationThread = new Thread(new ParameterizedThreadStart(simulation.CompileSimulation));

                simulationThread.Start(true);

                return(Task.FromResult("Simulation running..."));
            }
            catch (Exception ex)
            {
                DBMgr.CloseConnection();
                return(Task.FromResult($"Simulation run failed::{ex.Message}"));
            }
        }
Пример #3
0
        /// <summary>
        /// Creates/starts a rollup/simulation
        /// </summary>
        /// <param name="model">SimulationModel</param>
        /// <returns>string Task</returns>
        public Task <string> RunSimulation(SimulationModel model, BridgeCareContext db)
        {
            if (model is null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            try
            {
                if (!db.Simulations.Any(s => s.SIMULATIONID == model.simulationId))
                {
                    throw new RowNotInTableException($"No scenario was found with id {model.simulationId}");
                }

                var connectionString = ConfigurationManager.ConnectionStrings["BridgeCareContext"].ConnectionString;
                DBMgr.NativeConnectionParameters = new ConnectionParameters(connectionString, false, "MSSQL");

#if DEBUG
                var mongoConnection = Settings.Default.MongoDBDevConnectionString;
#else
                var mongoConnection = Settings.Default.MongoDBProdConnectionString;
#endif

                var simulation = db.Simulations
                                 .Include(s => s.COMMITTEDPROJECTS)
                                 .Single(s => s.SIMULATIONID == model.simulationId);

                if (simulation.COMMITTEDPROJECTS.Any())
                {
                    var earliestCommittedProjectStartYear = simulation.COMMITTEDPROJECTS
                                                            .OrderBy(cp => cp.YEARS).First().YEARS;
                    if (earliestCommittedProjectStartYear < simulation.COMMITTED_START)
                    {
                        var mongoClient  = new MongoClient(mongoConnection);
                        var mongoDB      = mongoClient.GetDatabase("BridgeCare");
                        var simulations  = mongoDB.GetCollection <SimulationModel>("scenarios");
                        var updateStatus = Builders <SimulationModel> .Update.Set("status", "Error: Projects committed before analysis start");

                        simulations.UpdateOne(s => s.simulationId == model.simulationId, updateStatus);
                        throw new ConstraintException("Analysis error: Projects committed before analysis start");
                    }
                }

                var simulationParameters = new SimulationParameters(
                    model.simulationName,
                    model.networkName,
                    model.simulationId,
                    model.networkId,
                    mongoConnection,
                    true);

                var simulationTask = SimulationQueue.Enqueue(simulationParameters);

                return(Task.FromResult("Simulation running..."));
            }
            catch (Exception ex)
            {
                DBMgr.CloseConnection();
                return(Task.FromResult($"Simulation run failed::{ex.Message}"));
            }
        }