コード例 #1
0
        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);
        }
コード例 #2
0
        /*
         * 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);
        }
コード例 #3
0
        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);
        }
コード例 #4
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);
        }
コード例 #5
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);
        }
コード例 #6
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();
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
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);
        }
コード例 #10
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);
        }
コード例 #11
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();
        }
コード例 #12
0
 /// <summary>
 /// MonitorTerminate:  KIlls the underlying process and children
 /// </summary>
 /// <returns></returns>
 public void setConsumerRun(IConsumerRun iconsumerRun)
 {
     consumerRun = iconsumerRun;
 }
コード例 #13
0
 public void SetSupportedApplications(IConsumerRun run)
 {
     apps = run.SupportedApplications;
 }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }