public IJobQueue Register(IConsumerRun run) { this.run = run; IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext(); //Guid consumerId = ctx.Id; //Guid consumerId = Guid.NewGuid(); String hostname = ctx.Hostname; String appName = run.SupportedApplications.ElementAtOrDefault(0); Debug.WriteLine(String.Format("Register({0}) as {1}, {2}", appName, run.ConsumerId, hostname), this.GetType().Name); using (ProducerContext db = new ProducerContext()) { // TODO: Registering as a single application is dubious. // IF support multiple apps in single consumer need to expose that via the database ( update SCHEMA!! ) var app = db.Applications.Single(a => a.Name == appName); var consumer = new Turbine.Data.Entities.JobConsumer { Application = app, Id = run.ConsumerId, hostname = hostname, processId = System.Diagnostics.Process.GetCurrentProcess().Id, keepalive = DateTime.UtcNow, status = "up" }; db.Consumers.Add(consumer); db.SaveChanges(); } queue = AppUtility.GetJobQueue(run); //((DBJobQueue)queue).consumerId = consumerId; return(queue); }
/* * public static IJobConsumerContract GetJobConsumerContract(int id) * { * var contract = container.Resolve<IJobConsumerContract>(); * contract.Id = id; * return contract; * } * * public static IJobQueue GetJobQueue() * { * return container.Resolve<IJobQueue>(); * } * */ /* * public static IJobQueue GetJobQueue(string[] apps) * { * var contract = container.Resolve<IJobQueue>(); * contract.SetSupportedApplications(apps); * return contract; * } */ public static IJobQueue GetJobQueue(IConsumerRun run) { var contract = container.Resolve <IJobQueue>(); contract.SetSupportedApplications(run); return(contract); }
public void TestACMDynamic() { IDictionary <string, object> output; IConsumerRun run = (IConsumerRun) new InMemorySinterConsumer(); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); // set job before calling Run ((InMemorySinterConsumer)run).job = new InMemoryJobACM_VdV_Dynamic(); Newtonsoft.Json.Linq.JObject inputsD = JObject.Parse("{\"Ca_Feed\": [10.0,11.0,12.0,13.0],\"RunMode\": \"Dynamic\", \"TimeSeries\":[0.01,0.02,0.03,0.04]}"); //Newtonsoft.Json.Linq.JObject inputsD = JObject.Parse("{\"Ca_Feed\": [10.0,10.0,10.0,10.0],\"RunMode\": \"Dynamic\", \"TimeSeries\":[0.01,0.02,0.03,0.04]}"); //Newtonsoft.Json.Linq.JObject inputsD = JObject.Parse("{\"UQ_ADS_db\":1.08}"); //Newtonsoft.Json.Linq.JObject inputsD = JObject.Parse("{\"Ca_Feed\":[10.0,10.0,10.0,10.0,10.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,10.5,10.5,10.5,10.5,10.5,10.5,10.5,10.5,10.5,10.5,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,10.5,10.5,10.5,10.5,10.5,10.5,10.5,10.5,10.5,10.5,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0],\"F_Feed\":[3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3600.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3780.0000000000005,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3240.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3420.0,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005,3960.0000000000005],\"Volume\":[100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0],\"RunMode\":\"Dynamic\",\"TimeSeries\":[0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,0.2,0.21,0.22,0.23,0.24,0.25,0.26,0.27,0.28,0.29,0.3,0.31,0.32,0.33,0.34,0.35000000000000003,0.36,0.37,0.38,0.39,0.4,0.41000000000000003,0.42,0.43,0.44,0.45,0.46,0.47000000000000003,0.48,0.49,0.5,0.51,0.52,0.53,0.54,0.55,0.56,0.57000000000000006,0.58,0.59,0.6,0.61,0.62,0.63,0.64,0.65,0.66,0.67,0.68,0.69000000000000006,0.70000000000000007,0.71,0.72,0.73,0.74,0.75,0.76,0.77,0.78,0.79,0.8,0.81,0.82000000000000006,0.83000000000000007,0.84,0.85,0.86,0.87,0.88,0.89,0.9,0.91,0.92,0.93,0.94000000000000006,0.95000000000000007,0.96,0.97,0.98,0.99,1.0,1.01,1.02,1.03,1.04,1.05,1.06,1.07,1.08,1.09,1.1,1.11,1.12,1.1300000000000001,1.1400000000000001,1.1500000000000001,1.16,1.17,1.18,1.19,1.2,1.21,1.22,1.23,1.24,1.25,1.26,1.27,1.28,1.29,1.3,1.31,1.32,1.33,1.34,1.35,1.36,1.37,1.3800000000000001,1.3900000000000001,1.4000000000000001,1.41,1.42,1.43,1.44,1.45,1.46,1.47,1.48,1.49,1.5,1.51,1.52,1.53,1.54,1.55,1.56,1.57,1.58,1.59,1.6,1.61,1.62,1.6300000000000001,1.6400000000000001,1.6500000000000001,1.6600000000000001,1.67,1.68,1.69,1.7,1.71,1.72,1.73,1.74,1.75,1.76,1.77,1.78,1.79,1.8,1.81,1.82,1.83,1.84,1.85,1.86,1.87,1.8800000000000001,1.8900000000000001,1.9000000000000001,1.9100000000000001,1.92,1.93,1.94,1.95,1.96,1.97,1.98,1.99,2.0,2.0100000000000002,2.02,2.0300000000000002,2.04,2.05,2.06,2.07,2.08,2.09,2.1,2.11,2.12,2.13,2.14,2.15,2.16,2.17,2.18,2.19,2.2,2.21,2.22,2.23,2.24,2.25],\"printlevel\":0,\"homotopy\":0}"); Dictionary <String, Object> dd = new Dictionary <string, object>(); foreach (var v in inputsD) { //Debug.WriteLine("VALUE: " + v); dd[v.Key] = v.Value; } ((InMemorySinterConsumer)run).job.Process.Input = dd; try { Assert.IsTrue(run.Run()); Assert.IsTrue(run.IsSimulationOpened); IJobConsumerContract job = ((InMemorySinterConsumer)run).job; //Assert.IsTrue(job.IsSuccess()); output = job.Process.Output; Assert.IsNotNull(output); foreach (KeyValuePair <string, object> kv in output) { Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value)); } } finally { Debug.WriteLine("Attempt Cleanup"); run.CleanUp(); } Object d; output.TryGetValue("status", out d); JObject statusD = (JObject)d; JToken status = statusD.GetValue("value"); Assert.AreEqual <int>(status.Value <int>(), 0); }
public void SinterGPROMSTest() { IDictionary <string, object> output; IConsumerRun run = (IConsumerRun) new InMemorySinterConsumerGProms(); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); // set job before calling Run ((InMemorySinterConsumerGProms)run).job = new InMemoryJobGProms_BufferTank_FO(); //Newtonsoft.Json.Linq.JObject inputsD = JObject.Parse("{\"inputs\": { \"ProcessName\": \"SimulateTank_sinter\", \"password\": \"BufferTank_FO\", \"AlphaFO\": 0.8,\"SingleReal\": 0.0,\"SingleInt\": 11,\"ArrayInt\": [12,12],\"FlowInFO\": 14.0,\"Mass\": [1.0,2.0,3.0,4.0,5.0],\"HeightFO\": 7.5,\"singleSelector\": \"apple\",\"arraySelector\": [\"red\",\"red\",\"red\"]}}"); Newtonsoft.Json.Linq.JObject inputsD = new JObject(); Dictionary <String, Object> dd = new Dictionary <string, object>(); foreach (var v in inputsD) { //Debug.WriteLine("VALUE: " + v); dd[v.Key] = v.Value; } ((InMemorySinterConsumerGProms)run).job.Process.Input = dd; try { Assert.IsTrue(run.Run()); //Assert.IsTrue(run.IsSimulationOpened); IJobConsumerContract job = ((InMemorySinterConsumerGProms)run).job; Assert.IsTrue(job.IsSuccess()); output = job.Process.Output; Assert.IsNotNull(output); foreach (KeyValuePair <string, object> kv in output) { Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value)); } } finally { Debug.WriteLine("Attempt Cleanup"); run.CleanUp(); } Object d; output.TryGetValue("status", out d); JObject statusD = (JObject)d; JToken status = statusD.GetValue("value"); Assert.AreEqual <int>(status.Value <int>(), 0); }
public void TestACM() { IDictionary <string, object> output; IConsumerRun run = (IConsumerRun) new InMemorySinterConsumer(); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); // set job before calling Run ((InMemorySinterConsumer)run).job = new InMemoryJobACM(); Newtonsoft.Json.Linq.JObject inputsD = JObject.Parse("{\"UQ_ADS_db\":1.08}"); Dictionary <String, Object> dd = new Dictionary <string, object>(); foreach (var v in inputsD) { Debug.WriteLine("VALUE: " + v); dd[v.Key] = v.Value; } ((InMemorySinterConsumer)run).job.Process.Input = dd; try { Assert.IsTrue(run.Run()); Assert.IsTrue(run.IsSimulationOpened); IJobConsumerContract job = ((InMemorySinterConsumer)run).job; Assert.IsTrue(job.IsSuccess()); output = job.Process.Output; Assert.IsNotNull(output); foreach (KeyValuePair <string, object> kv in output) { Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value)); } } finally { Debug.WriteLine("Attempt Cleanup"); run.CleanUp(); } Object d; output.TryGetValue("status", out d); JObject statusD = (JObject)d; JToken status = statusD.GetValue("value"); Assert.AreEqual <int>(status.Value <int>(), 0); }
public void TestACM_BFBv6_3_new_Defaults() { IDictionary <string, object> output; IConsumerRun run = (IConsumerRun) new InMemorySinterConsumer(); IConsumerMonitor monitor = (IConsumerMonitor) new InMemorySinterConsumerAspenPlusMonitor(); monitor.setConsumerRun(run); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); // set job before calling Run ((InMemorySinterConsumer)run).job = new InMemoryJobACM_BFBv6_3(); try { //Assert.IsTrue(run.Run()); var taskRun = new Task <Boolean>(() => run.Run()); var taskMonitor = new Task <int>(() => monitor.Monitor(true)); Debug.WriteLine("Start taskRun", this.GetType().Name); taskRun.Start(); Thread.Sleep(50000); Assert.IsTrue(run.IsSimulationOpened); Debug.WriteLine("Start taskMonitor", this.GetType().Name); taskMonitor.Start(); Thread.Sleep(12000); Assert.IsTrue(run.IsSimulationOpened); IJobConsumerContract job = ((InMemorySinterConsumer)run).job; //Assert.IsTrue(job.IsSuccess()); output = job.Process.Output; //Assert.IsNotNull(output); /*foreach (KeyValuePair<string, object> kv in output) * { * Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value)); * }*/ } finally { Debug.WriteLine("Attempt Cleanup"); run.CleanUp(); } }
public void TestBadJob() { IConsumerRun run = (IConsumerRun) new BadJobSinterConsumer(); IConsumerMonitor monitor = (IConsumerMonitor) new InMemorySinterConsumerAspenPlusMonitor(); CancellationTokenSource tokenSource = new CancellationTokenSource(); monitor.setConsumerRun(run); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); var taskRun = new Task <Boolean>(() => run.Run(), tokenSource.Token); var taskMonitor = new Task <int>(() => monitor.Monitor(false)); taskRun.Start(); taskMonitor.Start(); Assert.IsFalse(run.IsSimulationOpened); System.Threading.Thread.Sleep(500); Assert.IsTrue(taskRun.IsFaulted); }
public void TestACM_SinterTermination() { IDictionary <string, object> output; IConsumerRun run = (IConsumerRun) new InMemorySinterConsumer(); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); // set job before calling Run ((InMemorySinterConsumer)run).job = new InMemoryJobACM(); try { Assert.IsTrue(run.Run()); Assert.IsTrue(run.IsSimulationOpened); IJobConsumerContract job = ((InMemorySinterConsumer)run).job; Assert.IsTrue(job.IsSuccess()); output = job.Process.Output; Assert.IsNotNull(output); foreach (KeyValuePair <string, object> kv in output) { Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value)); } } finally { Debug.WriteLine("Attempt Cleanup"); run.CleanUp(); } Object d; output.TryGetValue("status", out d); JObject statusD = (JObject)d; JToken status = statusD.GetValue("value"); Assert.AreEqual <int>(status.Value <int>(), 0); }
public void TestAspenPlusThreading() { IDictionary <string, object> output; IConsumerRun run = (IConsumerRun) new InMemorySinterConsumerAspenPlus(); IConsumerMonitor monitor = (IConsumerMonitor) new InMemorySinterConsumerAspenPlusMonitor(); CancellationTokenSource tokenSource = new CancellationTokenSource(); monitor.setConsumerRun(run); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); try { var taskRun = new Task <Boolean>(() => run.Run(), tokenSource.Token); var taskMonitor = new Task <int>(() => monitor.Monitor(false)); Debug.WriteLine("Start taskRun", this.GetType().Name); taskRun.Start(); //System.Threading.Thread.Sleep(2000); Debug.WriteLine("Start taskMonitor", this.GetType().Name); taskMonitor.Start(); Debug.WriteLine("run.IsSimulationOpened", this.GetType().Name); while (run.IsSimulationOpened == false) { Debug.WriteLine("Waiting to Open", this.GetType().Name); if (taskRun.IsFaulted) { Debug.WriteLine("Message: " + taskRun.Exception.Message); foreach (Exception e in taskRun.Exception.InnerExceptions) { Debug.WriteLine("Inner: " + e.Message); } throw new Exception(String.Format("{0}", taskRun.Exception.Message)); } System.Threading.Thread.Sleep(500); } Debug.WriteLine("Simulation Opened!!!!!", this.GetType().Name); Assert.IsTrue(run.IsSimulationOpened); int sleepInterval = 1000; //Assert.IsTrue(run.Run()); bool finish = false; //finish = taskRun.Wait(sleepInterval); //while (taskMonitor.Wait(sleepInterval) == false) { } if (taskMonitor.IsCompleted) { Debug.WriteLine("TASK MONITOR IS COMPLETED!!!!!!", this.GetType().Name); try { tokenSource.Cancel(); while (taskRun.IsCanceled == false && tokenSource.Token.IsCancellationRequested == false) { Debug.WriteLine("Task is not cancelled yet!!!!!"); } Debug.WriteLine(tokenSource.Token.IsCancellationRequested, "Task is cancelled"); //*/ } catch (Exception e) { Debug.WriteLine("Task is not cancelled!!!!"); Debug.WriteLine(e.Message); Debug.WriteLine(e.StackTrace); } } //Assert.IsTrue(finish); if (finish) { Debug.WriteLine("TASK IS FINISHED!!!!!"); } else { Debug.WriteLine("TASK IS NOT FINISHED!!!!!"); } System.Threading.Thread.Sleep(6000); IJobConsumerContract job = ((InMemorySinterConsumerAspenPlus)run).job; //Assert.IsFalse(taskRun.IsCompleted); //Assert.IsTrue(job.IsSuccess()); //output = job.Process.Output; //Assert.IsNotNull(output); //foreach (KeyValuePair<string, object> kv in output) //{ // Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value)); //} } finally { Debug.WriteLine("Attempt Cleanup"); run.CleanUp(); } //Object d; //output.TryGetValue("status", out d); //JObject statusD = (JObject)d; //JToken status = statusD.GetValue("value"); //Assert.AreEqual<int>(status.Value<int>(), 0); }
public void TestACM_BFBCap_Inputs() { IDictionary <string, object> output; IConsumerRun run = (IConsumerRun) new InMemorySinterConsumer(); Assert.IsFalse(run.IsEngineRunning); Assert.IsFalse(run.IsSimulationInitializing); Assert.IsFalse(run.IsSimulationOpened); ((InMemorySinterConsumer)run).job = new InMemoryJobACM_BFBCap(); ((InMemorySinterConsumer)run).job.Process.Input["UQ_nv"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["rgndx"] = 0.0225; ((InMemorySinterConsumer)run).job.Process.Input["BFBadsT.Lb"] = 4.2; ((InMemorySinterConsumer)run).job.Process.Input["UQ_A3"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_A2"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_A1"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["GHXfg.A_exch"] = 5749.66; ((InMemorySinterConsumer)run).job.Process.Input["BFBrgnB.Lb"] = 4.2; ((InMemorySinterConsumer)run).job.Process.Input["UQ_E3"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_E2"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_E1"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_fg_flow"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["rgnDt"] = 12.0; ((InMemorySinterConsumer)run).job.Process.Input["CW_SHXlean.A_exch"] = 400.0; ((InMemorySinterConsumer)run).job.Process.Input["BFBadsM.Lb"] = 4.2; ((InMemorySinterConsumer)run).job.Process.Input["adsN"] = 15.0; ((InMemorySinterConsumer)run).job.Process.Input["rgnN"] = 15.0; ((InMemorySinterConsumer)run).job.Process.Input["adsdx"] = 0.0275; ((InMemorySinterConsumer)run).job.Process.Input["LR_SHXlean.A_exch"] = 7000.0; ((InMemorySinterConsumer)run).job.Process.Input["BFBrgnT.Lb"] = 4.2; ((InMemorySinterConsumer)run).job.Process.Input["adsDt"] = 15.0; ((InMemorySinterConsumer)run).job.Process.Input["rgnlhx"] = 0.08; ((InMemorySinterConsumer)run).job.Process.Input["adslhx"] = 0.4; ((InMemorySinterConsumer)run).job.Process.Input["UQ_dS1"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_dS2"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_dS3"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["BFBadsB.Lb"] = 4.2; ((InMemorySinterConsumer)run).job.Process.Input["LR_SHXrich.A_exch"] = 5000.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_dH1"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_dH3"] = 1.0; ((InMemorySinterConsumer)run).job.Process.Input["UQ_dH2"] = 1.0; try { Assert.IsTrue(run.Run()); Assert.IsTrue(run.IsSimulationOpened); IJobConsumerContract job = ((InMemorySinterConsumer)run).job; Assert.IsTrue(job.IsSuccess()); output = job.Process.Output; Assert.IsNotNull(output); foreach (KeyValuePair <string, object> kv in output) { Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value)); } } finally { Debug.WriteLine("Attempt Cleanup"); run.CleanUp(); } Object d; output.TryGetValue("status", out d); JObject statusD = (JObject)d; JToken status = statusD.GetValue("value"); Assert.AreEqual <int>(status.Value <int>(), 0); }
static void Run() { IConsumerRegistrationContract cc = Turbine.Consumer.AppUtility.GetConsumerRegistrationContract(); IConsumerRun run = Turbine.Consumer.AppUtility.GetConsumerRunContract(); IJobQueue queue = cc.Register(run); IJobConsumerContract contract = queue.GetNext(run); jobs_available = (contract != null); if (jobs_available == false) { return; } try { contract.Setup(); } catch (System.Data.Entity.Core.OptimisticConcurrencyException ex) { var msg = String.Format( "Setup Failed({0}): OptimisticConcurrencyException, {1}", contract.Id, ex.Message); Debug.WriteLine(msg, label); throw; } catch (Turbine.Lite.Web.Resources.Contracts.InvalidStateChangeException ex) { var msg = String.Format( "Setup Failed({0}): InvalidStateChangeException, {1}", contract.Id, ex.Message); Debug.WriteLine(msg, label); throw; } Debug.WriteLine(String.Format("{0} Working Directory: {1}", DateTime.Now.ToString(), contract.Process.WorkingDirectory), label); // Execute Job try { contract.Running(); } catch (Exception ex) { contract.Error(String.Format( "threadid:{0}, machine:{1}, exception:{2}", Thread.CurrentThread.ManagedThreadId, System.Environment.MachineName, ex.Message) ); throw; } IProcess process = contract.Process; var inputDict = process.Input; var outputDict = new Dictionary <string, Object>(); foreach (var key in inputDict.Keys.ToArray <string>()) { if (inputDict[key] == null) { continue; } outputDict[key] = String.Format("{0} OUTPUT", inputDict[key]); process.AddStdout(String.Format("Add Output {0}\n", key)); } process.AddStdout("Fake Job Completed"); process.Output = outputDict; contract.Success(); }
/// <summary> /// MonitorTerminate: KIlls the underlying process and children /// </summary> /// <returns></returns> public void setConsumerRun(IConsumerRun iconsumerRun) { consumerRun = iconsumerRun; }
public void SetSupportedApplications(IConsumerRun run) { apps = run.SupportedApplications; }
public IJobConsumerContract GetNext(IConsumerRun run) { apps = run.SupportedApplications; IJobConsumerContract contract = null; if (apps.Length == 0) { throw new JobQueueException("Invalid JobQueue configuration: no applications specified"); } IConsumerContext appContext = AppUtility.GetConsumerContext(); string simulationName = appContext.BindSimulationName; using (ProducerContext db = new ProducerContext()) { Job job = null; foreach (var appName in apps) { Debug.WriteLine("Get Job for Application: " + appName, "DBJobQueue.GetNext"); if (String.IsNullOrEmpty(simulationName)) { job = db.Jobs.OrderByDescending(j => j.Submit). Where(j => j.State == "submit" && j.ConsumerId == run.ConsumerId && j.Simulation.ApplicationName == appName).FirstOrDefault(); if (job == null) { job = db.Jobs.OrderByDescending(j => j.Submit). Where(j => j.State == "submit" && j.ConsumerId == null && j.Simulation.ApplicationName == appName).FirstOrDefault(); } } else { job = db.Jobs.OrderByDescending(j => j.Submit). Where(j => j.State == "submit" && j.ConsumerId == run.ConsumerId && j.Simulation.Name == simulationName && j.Simulation.ApplicationName == appName).FirstOrDefault(); if (job == null) { job = db.Jobs.OrderByDescending(j => j.Submit). Where(j => j.State == "submit" && j.ConsumerId == null && j.Simulation.Name == simulationName && j.Simulation.ApplicationName == appName).FirstOrDefault(); } } var consumer = db.Consumers.Single(c => c.Id == run.ConsumerId); if (job != null) { job.State = "locked"; job.Consumer = consumer; db.SaveChanges(); contract = new ConsumerJobContract(job.Count, run.ConsumerId); Debug.WriteLine(String.Format("Found Job({0}): {1},{2}", job.Id, job.Simulation.Name, job.Simulation.ApplicationName), "DBJobQueue.GetNext"); break; } } } return(contract); }
public static void Run() { Debug.WriteLine("SinterCosnumerConsole : Running"); int timeSleepInterval = 1000; //int iterations = 60 * 30; //int setupIterations = 60 * 10; //int postInitIterations = 60 + setupIterations; bool finish = false; String dir = AppUtility.GetAppContext().BaseWorkingDirectory; IConsumerContext consumerCtx = AppUtility.GetConsumerContext(); // Register as a consumer, else can't use JobContract cc = AppUtility.GetConsumerRegistrationContract(); consumerRun = AppUtility.GetConsumerRunContract(); consumerMonitor = AppUtility.GetConsumerMonitorContract(); consumerMonitor.setConsumerRun(consumerRun); cc.Register(consumerRun); //consumer = AppUtility.GetConsumerRunContract(); // Run KeepAlive task var ktask = new Task <bool>(() => KeepAlive()); ktask.Start(); bool stop = false; bool cancelKeyPressed = false; var obj = new Object(); System.Console.CancelKeyPress += delegate { lock (obj) { stop = true; cancelKeyPressed = true; //consumer.CleanUp(); Debug.WriteLine("Exit Unregister Consumer ", "SinterConsumerConsole"); try { cc.UnRegister(); } catch (Exception ex) { Debug.WriteLine("Exception caught from UnRegister: " + ex.Message, "SinterConsumerConsole"); Debug.WriteLine(ex.StackTrace, "SinterConsumerConsole"); } // lock will block if "SinterConsumer.DoConfigure --> sim.openSim()" is being called Debug.WriteLine("lock consumer", "SinterConsumerConsole"); int wait_seconds = 30; if (Monitor.TryEnter(consumerRun, new TimeSpan(0, 0, wait_seconds))) { consumerMonitor.Monitor(cancelKeyPressed); Debug.WriteLine("Obtained ConsumerRun Lock: Monitor Terminate", "SinterConsumerConsole"); } else { consumerMonitor.Monitor(cancelKeyPressed); Debug.WriteLine("Failed to Obtain ConsumerRun Lock: Monitor Terminate", "SinterConsumerConsole"); } Debug.WriteLine("Consumer Exit", "SinterConsumerConsole"); } }; Task <int> taskMonitor = null; bool taskMonitorFinished = true; while (stop == false) { if (!Directory.Exists(dir)) { Debug.WriteLine(String.Format("Base Directory does not exist: {0}", dir), "SinterConsumerConsole"); OnExit(ERROR_PATH_NOT_FOUND); } try { var acl = Directory.GetAccessControl(dir); } catch (UnauthorizedAccessException) { Debug.WriteLine(String.Format("Base Directory is not writable: {0}", dir), "SinterConsumerConsole"); OnExit(ERROR_ACCESS_DENIED); } Debug.WriteLine("> New Task", "SinterConsumerConsole"); var taskRun = new Task <Boolean>(() => consumerRun.Run()); if (taskMonitorFinished) { Debug.WriteLine("> New Monitor Task", "SinterConsumerConsole.Run"); taskMonitorFinished = false; taskMonitor = new Task <int>(() => consumerMonitor.Monitor(false)); taskMonitor.Start(); } finish = false; int i = 0; bool hasInitialized = false; bool hasRun = false; taskRun.Start(); while (stop == false) { if (taskMonitor.IsCompleted) { Debug.WriteLine("taskMonitor.IsCompleted", "SinterConsumerConsole.Run"); taskMonitorFinished = true; System.Threading.Thread.Sleep(2000); break; } if (cc.GetStatus() == "down") { Debug.WriteLine("ConsumerContract: Consumer is Down", "SinterConsumerConsole.Run"); stop = true; Debug.WriteLine("Exit Unregister Consumer ", "SinterConsumerConsole.Run"); try { cc.UnRegister(); } catch (Exception ex) { Debug.WriteLine("Exception caught from UnRegister: " + ex.Message, "SinterConsumerConsole.Run"); Debug.WriteLine(ex.StackTrace, "SinterConsumerConsole.Run"); } // lock will block if "SinterConsumer.DoConfigure --> sim.openSim()" is being called Debug.WriteLine("lock consumer", "SinterConsumerConsole.Run"); int wait_seconds = 30; if (Monitor.TryEnter(consumerRun, new TimeSpan(0, 0, wait_seconds))) { consumerMonitor.Monitor(true); Debug.WriteLine("Obtained ConsumerRun Lock: Monitor Terminate", "SinterConsumerConsole.Run"); } else { consumerMonitor.Monitor(true); Debug.WriteLine("Failed to Obtain ConsumerRun Lock: Monitor Terminate", "SinterConsumerConsole.Run"); } break; } i++; Debug.WriteLine("top"); try { finish = taskRun.Wait(timeSleepInterval); } catch (Exception ex) { Debug.WriteLine("Exception caught from Run: " + ex.Message, "SinterConsumerConsole"); Debug.WriteLine(ex.StackTrace, "SinterConsumerConsole"); Debug.WriteLine("InnerException: " + ex.InnerException, "SinterConsumerConsole"); System.Threading.Thread.Sleep(2000); /*// check if job was terminated, InnerException would be InvalidStateChangeException * if (ex.InnerException is InvalidStateChangeException) * { * consumer.CheckTerminate(); * } */ break; } //Debug.WriteLine(">> Waiting!!!! " + i + " " + iterations + " " + setupIterations + " " + postInitIterations, "SinterConsumerConsole"); Debug.WriteLine(">> Waiting " + i, "SinterConsumerConsole"); if (finish) { if (taskRun.IsFaulted) { Debug.WriteLine("Faulted: " + taskRun.Exception, "SinterConsumerConsole"); } else if (taskRun.IsCompleted) { Debug.WriteLine("Completed", "SinterConsumerConsole"); } else { throw new Exception("Task Unexpected status?"); } if (!taskRun.Result) { // Nothing on Job Queue System.Threading.Thread.Sleep(4000); } break; } // DETECT HANGS if (consumerMonitor.IsSimulationInitializing) { hasInitialized = true; Debug.WriteLine("> Simulation Initializing: " + setupIterations); if (i >= setupIterations) { // Allows SinterConsumer to attempt to reopen the simulation // IF attempts max out in SinterConsumer, throw Exception // and task.IsFaulted and job will move to error Debug.WriteLine("HANG SETUP, TRY AGAIN", "SinterConsumerConsole"); consumerMonitor.MonitorTerminate(); Debug.WriteLine("Killed Aspen Process", "SinterConsumerConsole"); i = 0; continue; } } else if (consumerMonitor.IsEngineRunning) { hasRun = true; Debug.WriteLine("> Engine Running: " + iterations); if (i >= iterations) { // Assume Simulation is done Initializing Debug.WriteLine("HANG RUNNING EXIT", "SinterConsumerConsole"); //consumer.MonitorTerminateAPWN(); try { //consumer.MonitorTerminateAspenEngine(); //consumer.MonitorTerminateRunning(); consumerMonitor.MonitorTerminate(); } catch (TerminateException ex) { Debug.WriteLine(ex.Message, "SinterConsumerConsole"); } } } else if (hasInitialized && !hasRun) { // Stuck if (i >= postInitIterations) { // Assume Simulation is done Initializing Debug.WriteLine("HANG POST INIT, TRY AGAIN", "SinterConsumerConsole"); consumerMonitor.MonitorTerminate(); Debug.WriteLine("Killed Aspen instances", "SinterConsumerConsole"); i = 0; continue; } } else if (i % 60 == 0) { Debug.WriteLine(String.Format("Waiting {0}", i), "SinterConsumerConsole"); } } // end of while Debug.WriteLine("Stop called", "SinterConsumerConsole"); } // end of while lock (obj) { Debug.WriteLine("Stop and cleanup", "SinterConsumerConsole"); consumerMonitor.MonitorTerminate(); } //consumer.CleanUp(); //OnExit(ERROR_SUCCESS); }