Esempio n. 1
0
        static void OnExit(int retCode)
        {
            Debug.WriteLine("Unregister Consumer", tag);
            IConsumerRegistrationContract cc = new ConsumerRegistrationContract();

            cc.UnRegister();
            System.Console.Write("[return]");
            System.Console.ReadLine();
            Environment.Exit(retCode);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            int  timeSleepInterval = 1000;
            int  iterations        = 60 * 15;
            int  setupIterations   = 20;
            bool finish            = false;

            System.Console.CancelKeyPress += delegate
            {
                OnExit(0);
            };

            string dir = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
                "TurbineDevelopment");

            // Register as a consumer, else can't use JobContract
            IConsumerRegistrationContract cc = new ConsumerRegistrationContract();

            cc.Register();

            while (true)
            {
                if (!Directory.Exists(dir))
                {
                    Debug.WriteLine(String.Format("Base Directory does not exist: {0}", dir), tag);
                    OnExit(1);
                }
                try
                {
                    var acl = Directory.GetAccessControl(dir);
                }
                catch (UnauthorizedAccessException)
                {
                    Debug.WriteLine(String.Format("Base Directory is not writable: {0}", dir), tag);
                    OnExit(1);
                }

                Debug.WriteLine("> New Task", tag);
                baseWorkDir = dir;
                consumer    = new AspenSinterConsumer();
                var task = new Task <Boolean>(() => consumer.Run());
                finish = false;
                int i = 0;
                task.Start();

                while (true)
                {
                    i++;
                    Debug.WriteLine("top");
                    try
                    {
                        finish = task.Wait(timeSleepInterval);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Exception caught from Run: " + ex.Message, tag);
                        Debug.WriteLine(ex.StackTrace, tag);
                        System.Threading.Thread.Sleep(4000);
                        break;
                    }
                    Debug.WriteLine(">> Waiting " + i, tag);
                    if (finish)
                    {
                        if (task.IsFaulted)
                        {
                            Debug.WriteLine("Faulted: " + task.Exception, tag);
                        }
                        else if (task.IsCompleted)
                        {
                            Debug.WriteLine("Completed", tag);
                        }
                        else
                        {
                            throw new Exception("Task Unexpected status?");
                        }

                        if (!task.Result)
                        {
                            // Nothing on Job Queue
                            System.Threading.Thread.Sleep(4000);
                        }
                        break;
                    }
                    // DETECT HANGS
                    if (consumer.IsSimulationInitializing)
                    {
                        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", tag);
                            int num = consumer.MonitorTerminateAPWNByName();
                            Debug.WriteLine("Killed apwn instances: " + num, tag);
                            i = 0;
                            continue;
                        }
                    }
                    else if (consumer.IsEngineRunning)
                    {
                        Debug.WriteLine("> Engine Running: " + iterations);
                        if (i >= iterations)
                        {
                            // Assume Simulation is done Initializing
                            Debug.WriteLine("HANG RUNNING EXIT", tag);
                            consumer.MonitorTerminateAPWN();
                            try
                            {
                                consumer.MonitorTerminateAspenEngine();
                            }
                            catch (TerminateException ex)
                            {
                                Debug.WriteLine(ex.Message, tag);
                            }
                        }
                    }
                }
            }
        }
        //[ClassInitialize()]
        public static void ClassInit(TestContext context)
        {
            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                foreach (User obj in container.Users)
                {
                    container.Users.DeleteObject(obj);
                }
                foreach (Simulation obj in container.Simulations)
                {
                    container.Simulations.DeleteObject(obj);
                }
                foreach (Job obj in container.Jobs)
                {
                    container.Jobs.DeleteObject(obj);
                }
                foreach (AspenProcessError obj in container.AspenProcessErrors)
                {
                    container.AspenProcessErrors.DeleteObject(obj);
                }
                foreach (SinterProcess obj in container.SinterProcesses)
                {
                    container.SinterProcesses.DeleteObject(obj);
                }
                foreach (Consumer obj in container.Consumers)
                {
                    container.Consumers.DeleteObject(obj);
                }
                foreach (Session obj in container.Sessions)
                {
                    container.Sessions.DeleteObject(obj);
                }
                foreach (Message obj in container.Messages)
                {
                    container.Messages.DeleteObject(obj);
                }
                container.SaveChanges();

                byte[] bt = System.Text.Encoding.ASCII.GetBytes(
                    File.ReadAllText(simulationBackupFile)
                    );
                byte[] cb = System.Text.Encoding.ASCII.GetBytes(
                    File.ReadAllText(simulationConfigFile)
                    );

                simulationBackupMD5 = GetMd5Hash(bt);
                simulationConfigMD5 = GetMd5Hash(cb);

                var jsonDefaults = @"{""P_abs_top"":15.0,""abs_ht_wash"":5.0,""abs_ht_mid"":10.7,""abs_ic_dT"":-11.3,""P_sol_pump"":30.0,""lean_load"":0.178,""P_regen_top"":21.2,""cond_T_regen"":121.0,""ht_regen"":13.0,""slv_cool_01"":130.0,""lr_rich_T"":207.0,""input_s[0,0]"":134.4,""input_s[0,1]"":16.0,""input_s[0,2]"":959553.0,""input_s[0,3]"":0.071,""input_s[0,4]"":0.0,""input_s[0,5]"":0.0,""input_s[0,6]"":0.211,""input_s[0,7]"":0.0,""input_s[0,8]"":0.0,""input_s[0,9]"":0.0,""input_s[0,10]"":0.0,""input_s[0,11]"":0.0,""input_s[0,12]"":0.0,""input_s[0,13]"":0.0,""input_s[0,14]"":0.0,""input_s[0,15]"":0.718,""input_s[1,0]"":126.0,""input_s[1,1]"":30.0,""input_s[1,2]"":4319500.4116,""input_s[1,3]"":0.66207726067,""input_s[1,4]"":0.28374739743,""input_s[1,5]"":0.0,""input_s[1,6]"":0.0541753419,""input_s[1,7]"":0.0,""input_s[1,8]"":0.0,""input_s[1,9]"":0.0,""input_s[1,10]"":0.0,""input_s[1,11]"":0.0,""input_s[1,12]"":0.0,""input_s[1,13]"":0.0,""input_s[1,14]"":0.0,""input_s[1,15]"":0.0,""input_s[2,0]"":120.0,""input_s[2,1]"":30.0,""input_s[2,2]"":10000.0,""input_s[2,3]"":1.0,""input_s[2,4]"":0.0,""input_s[2,5]"":0.0,""input_s[2,6]"":0.0,""input_s[2,7]"":0.0,""input_s[2,8]"":0.0,""input_s[2,9]"":0.0,""input_s[2,10]"":0.0,""input_s[2,11]"":0.0,""input_s[2,12]"":0.0,""input_s[2,13]"":0.0,""input_s[2,14]"":0.0,""input_s[2,15]"":0.0,""eq_par[0,0]"":0.7996,""eq_par[0,1]"":-8094.81,""eq_par[0,2]"":0.0,""eq_par[0,3]"":-0.007484,""eq_par[1,0]"":98.566,""eq_par[1,1]"":1353.8,""eq_par[1,2]"":-14.3043,""eq_par[1,3]"":0.0,""eq_par[2,0]"":216.049,""eq_par[2,1]"":-12431.7,""eq_par[2,2]"":-35.4819,""eq_par[2,3]"":0.0,""eq_par[3,0]"":1.282562,""eq_par[3,1]"":-3456.179,""eq_par[3,2]"":0.0,""eq_par[3,3]"":0.0,""eq_par[4,0]"":132.899,""eq_par[4,1]"":-13445.9,""eq_par[4,2]"":-22.4773,""eq_par[4,3]"":0.0}";
                System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
                Byte[] defaultBytes = encoding.GetBytes(jsonDefaults);

                User          u       = null;
                Simulation    s       = null;
                Job           job     = null;
                SinterProcess p       = null;
                Session       session = null;

                //var consumer = new JobConsumer();
                //consumer.guid = Guid.NewGuid();
                //consumer.hostname = "test.host";
                //container.Consumers.AddObject(consumer);
                //container.SaveChanges();

                IConsumerRegistrationContract reg = new ConsumerRegistrationContract();
                reg.Register();

                IConsumerContext ctx = AppUtility.GetConsumerContext();

                JobConsumer consumer = (JobConsumer)container.Consumers.First <Consumer>(r => r.guid == ctx.Id);

                for (int i = 1; i < 11; i++)
                {
                    Debug.WriteLine("{0}", i);
                    u = new User()
                    {
                        Name = "test" + i, Token = "qwerty"
                    };
                    container.Users.AddObject(u);
                    s = new Simulation()
                    {
                        Name          = "testSim" + i,
                        Backup        = bt,
                        Configuration = cb,
                        Defaults      = defaultBytes,
                        User          = u
                    };
                    session = new Session();
                    var guid = Guid.NewGuid();
                    Debug.WriteLine("GUID: " + guid);
                    session.guid   = guid;
                    session.Create = DateTime.UtcNow;
                    session.User   = u;
                    container.Sessions.AddObject(session);

                    p   = new SinterProcess();
                    job = new Job()
                    {
                        State       = "create",
                        Create      = DateTime.UtcNow,
                        Simulation  = s,
                        User        = u,
                        Process     = p,
                        Session     = session,
                        JobConsumer = consumer
                    };
                    var msg = new Message();
                    msg.Value = "test harness";
                    job.Messages.Add(msg);

                    for (int j = 1; j < 4; j++)
                    {
                        p.Errors.Add(new AspenProcessError()
                        {
                            Name  = String.Format("Block{0}{1}", i, j),
                            Type  = "block",
                            Error = "TEST" + i
                        });
                    }
                }
                container.SaveChanges();
            }
        }