/// <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}")); } }
/// <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}")); } }
/// <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}")); } }