public void KeepAlive()
 {
     //IConsumerContext ctx = AppUtility.GetConsumerContext();
     //Guid consumerId = ctx.Id;
     Debug.WriteLine(String.Format("KeepAlive Consumer {0}", run.ConsumerId), this.GetType().Name);
     using (ProducerContext db = new ProducerContext())
     {
         var consumer = db.Consumers.Single <JobConsumer>(s => s.Id == run.ConsumerId);
         if (consumer.status.Equals("up"))
         {
             consumer.keepalive = DateTime.UtcNow;
             try
             {
                 db.SaveChanges();
             }
             catch (System.Data.Entity.Validation.DbEntityValidationException e)
             {
                 foreach (var eve in e.EntityValidationErrors)
                 {
                     Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                       eve.Entry.Entity.GetType().Name, eve.Entry.State);
                     foreach (var ve in eve.ValidationErrors)
                     {
                         Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                           ve.PropertyName, ve.ErrorMessage);
                     }
                 }
                 throw;
             }
         }
     }
 }
        public Guid CreateGenerator(Guid sessionid)
        {
            Guid generator = Guid.NewGuid();

            using (var db = new ProducerContext())
            {
                Debug.WriteLine("Looking for session: " + sessionid.ToString(), "ProducerSessionContract.CreateGenerator");
                //var jobs = db.Jobs.Where<Job>(j => j.SessionId == sessionid);
                Session session = db.Sessions.Single <Session>(s => s.Id == sessionid);
                Debug.WriteLine("Result for session: " + sessionid.ToString(), "ProducerSessionContract.CreateGenerator");
                if (session != null)
                {
                    Debug.WriteLine("Found the session", "ProducerSessionContract.CreateGenerator");
                    db.Generators.Add(new Generator()
                    {
                        Id        = generator,
                        SessionId = sessionid,
                        Page      = 0,
                        Create    = DateTime.UtcNow
                    });
                }
                else
                {
                    Debug.WriteLine(String.Format("InputError: This Session Id doesn't exist"),
                                    this.GetType());
                    return(Guid.Empty);
                }
                db.SaveChanges();
            }
            return(generator);
        }
        /// <summary>
        /// Delete moves all jobs to cancel or terminate, then safely deletes them.
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public int Delete(Guid session)
        {
            int num   = 0;
            int count = 0;

            num += Cancel(session);
            num += Terminate(session);

            using (var db = new ProducerContext())
            {
                Session obj = db.Sessions.Single <Session>(s => s.Id == session);
                foreach (Job j in obj.Jobs)
                {
                    db.Processes.Remove(j.Process);
                    db.Messages.RemoveRange(j.Messages);
                    db.StagedInputFiles.RemoveRange(j.StagedInputFiles);
                    db.StagedOutputFiles.RemoveRange(j.StagedOutputFiles);
                    db.GeneratorJobs.RemoveRange(db.GeneratorJobs.Where(g => g.JobId == j.Id));
                }
                db.Generators.RemoveRange(db.Generators.Where(g => g.SessionId == obj.Id));
                db.Jobs.RemoveRange(obj.Jobs);
                db.Sessions.Remove(obj);
                db.SaveChanges();
            }
            return(count);
        }
Exemple #4
0
 void SetOutput(string data)
 {
     using (ProducerContext db = new ProducerContext())
     {
         var entity = db.Processes.Single(s => s.Id == id);
         entity.Output = data;
         try
         {
             db.SaveChanges();
         }
         catch (System.Data.Entity.Validation.DbEntityValidationException e)
         {
             foreach (var eve in e.EntityValidationErrors)
             {
                 Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                   eve.Entry.Entity.GetType().Name, eve.Entry.State);
                 foreach (var ve in eve.ValidationErrors)
                 {
                     Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                       ve.PropertyName, ve.ErrorMessage);
                 }
             }
             throw;
         }
     }
 }
        /// <summary>
        /// Assume that state of jobs cannot be changed during this call.  Therefore
        /// if one of them has the behavior is undefined.
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public int Unpause(Guid session)
        {
            int num = 0;

            using (ProducerContext db = new ProducerContext())
            {
                Session obj = db.Sessions.Single <Session>(s => s.Id == session);
                foreach (var job in obj.Jobs.Where(s => s.State == "pause"))
                {
                    try
                    {
                        job.State  = "submit";
                        job.Submit = DateTime.UtcNow;
                        num       += 1;
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(String.Format("Failed to unpause session {0} job {1} ", session, job.Id),
                                        this.GetType());
                    }
                }
                db.SaveChanges();
            }
            return(num);
        }
        public void TestProcess_Empty()
        {
            Guid jobId = Guid.NewGuid();

            using (var db = new ProducerContext())
            {
                var item       = db.Sessions.Single(s => s.Id == sessionId);
                var user       = db.Users.Single(u => u.Name == userName);
                var simulation = db.Simulations.Single(s => s.Name == simulationName);
                var job        = new Turbine.Data.Entities.Job
                {
                    Id         = jobId,
                    Session    = item,
                    Create     = DateTime.UtcNow,
                    State      = "create",
                    User       = user,
                    Simulation = simulation
                };
                db.Jobs.Add(job);
                db.SaveChanges();
            }
            using (var db = new ProducerContext())
            {
                var item = db.Jobs.Single(s => s.Id == jobId);
                item.Process = new Turbine.Data.Entities.Process
                {
                };
                db.SaveChanges();
            }
        }
        internal static int StopConsumer(Guid consumerID)
        {
            // 0 Failed to stop the consumer
            // -1 Consumer is already down
            // 1 Succeeded to stop the consumer

            Debug.WriteLine("Stopping consumer", "DataMarshall.StopConsumer");

            int stopped = 0;

            using (var db = new ProducerContext())
            {
                var entity = db.Consumers.Single(c => c.Id == consumerID);
                if (entity != null)
                {
                    if (entity.status != "down")
                    {
                        Debug.WriteLine("Changing status to down", "DataMarshall.StopConsumer");
                        entity.status = "down";
                        stopped       = 1;
                    }
                    else
                    {
                        Debug.WriteLine("Consumer is already down", "DataMarshall.StopConsumer");
                        stopped = -1;
                    }
                }
                db.SaveChanges();
            }
            return(stopped);
        }
        internal static bool DeleteGenerator(Guid generatorid)
        {
            bool deleted = false;

            using (var db = new ProducerContext())
            {
                db.GeneratorJobs.RemoveRange(db.GeneratorJobs.Where(g => g.GeneratorId == generatorid));
                db.Generators.RemoveRange(db.Generators.Where(g => g.Id == generatorid));

                Debug.WriteLine("Delete Generators: " + db.Generators.Any(g => g.Id == generatorid).ToString()
                                + ", Delete GeneratorJobs: " + db.GeneratorJobs.Any(g => g.GeneratorId == generatorid).ToString(),
                                "DataMarshall.DeleteGenerator");

                deleted = !(db.Generators.Any(g => g.Id == generatorid) ||
                            db.GeneratorJobs.Any(g => g.GeneratorId == generatorid));

                db.SaveChanges();
            }

            using (var db = new ProducerContext())
            {
                Debug.WriteLine("Delete Generators: " + db.Generators.Any(g => g.Id == generatorid).ToString()
                                + ", Delete GeneratorJobs: " + db.GeneratorJobs.Any(g => g.GeneratorId == generatorid).ToString(),
                                "DataMarshall.DeleteGenerator");

                deleted = !(db.Generators.Any(g => g.Id == generatorid) ||
                            db.GeneratorJobs.Any(g => g.GeneratorId == generatorid));
            }
            return(deleted);
        }
        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);
        }
Exemple #10
0
 /*
  * public void AddStderr(string data)
  * {
  *  using (TurbineCompactDatabase container = new TurbineCompactDatabase())
  *  {
  *      SinterProcess entity = container.SinterProcesses.Single<SinterProcess>(s => s.Id == id);
  *      byte[] stdout = entity.Stderr;
  *      if (stdout == null)
  *          entity.Stderr = System.Text.Encoding.ASCII.GetBytes(data);
  *      else
  *      {
  *          List<byte> list = new List<byte>(entity.Stderr);
  *          list.AddRange(System.Text.Encoding.ASCII.GetBytes(data));
  *          entity.Stderr = list.ToArray<byte>();
  *      }
  *      container.SaveChanges();
  *  }
  * }
  */
 private void SetInput(string data)
 {
     using (ProducerContext db = new ProducerContext())
     {
         var entity = db.Processes.Single(s => s.Id == id);
         entity.Input = data;
         db.SaveChanges();
     }
 }
Exemple #11
0
 public void SetStatus(int status)
 {
     using (ProducerContext db = new ProducerContext())
     {
         var entity = db.Processes.Single(s => s.Id == id);
         entity.Status = status;
         db.SaveChanges();
     }
 }
 /// <summary>
 /// If state is "up" move to "down", else leave alone.
 /// </summary>
 public void UnRegister()
 {
     //IConsumerContext ctx = AppUtility.GetConsumerContext();
     //Guid consumerId = ctx.Id;
     Debug.WriteLine(String.Format("UnRegister Consumer {0}", run.ConsumerId), this.GetType().Name);
     using (ProducerContext db = new ProducerContext())
     {
         var consumer = db.Consumers.Single <JobConsumer>(s => s.Id == run.ConsumerId);
         if (consumer.status.Equals("up"))
         {
             consumer.status = "down";
             try
             {
                 db.SaveChanges();
             }
             catch (System.Data.Entity.Validation.DbEntityValidationException e)
             {
                 foreach (var eve in e.EntityValidationErrors)
                 {
                     Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                       eve.Entry.Entity.GetType().Name, eve.Entry.State);
                     foreach (var ve in eve.ValidationErrors)
                     {
                         Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                           ve.PropertyName, ve.ErrorMessage);
                     }
                 }
                 throw;
             }
         }
         foreach (var job in consumer.Jobs.Where(j => j.State == "locked" || j.State == "setup" || j.State == "running"))
         {
             Debug.WriteLine(String.Format("Moving job {0},{1} to state submit", job.Count, job.State));
             job.Messages.Add(new Message {
                 Create = DateTime.UtcNow, Id = Guid.NewGuid(),
                 Value  = String.Format("Resubmit (Id={0},State={1}):  UnRegister Consumer {2}", job.Id, job.State, consumer.Id)
             });
             job.State = "submit";
             //job.Consumer = null;
             db.SaveChanges();
         }
     }
 }
        public Turbine.Data.Contract.Behaviors.IProcess Setup()
        {
            string baseDir = AppUtility.GetAppContext().BaseWorkingDirectory;
            Guid   pid     = Guid.Empty;

            using (ProducerContext db = new ProducerContext())
            {
                var job      = db.Jobs.Single(j => j.Count == id);
                var consumer = job.Consumer;

                if (consumer == null)
                {
                    throw new IllegalAccessException("Setup failed, Consumer is not registered");
                }
                if (consumer.status != "up")
                {
                    throw new IllegalAccessException(String.Format(
                                                         "Setup failed, Consumer status {0} != up", consumer.status));
                }
                if (job.ConsumerId != ConsumerId)
                {
                    throw new IllegalAccessException(String.Format(
                                                         "job({0}) consumer access denied {1} != {2}", job.Id, job.ConsumerId, ConsumerId)
                                                     );
                }
                Debug.WriteLine(String.Format("Setup consumer GUID {0}", consumer.Id), this.GetType().Name);

                if (job.State != "locked")
                {
                    throw new InvalidStateChangeException("Violation of state machine");
                }

                if (job.Process == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing");
                }

                processId = job.Process.Id;
                job.State = "setup";
                job.Setup = DateTime.UtcNow;
                job.Process.WorkingDir = System.IO.Path.Combine(baseDir, id.ToString());
                job.Consumer           = (JobConsumer)consumer;
                job.Messages.Add(new Turbine.Data.Entities.Message {
                    Id     = Guid.NewGuid(),
                    Create = DateTime.UtcNow,
                    Value  = String.Format("event=setup,consumer={0}", consumer.Id)
                });
                pid            = job.Process.Id;
                simulationName = job.Simulation.Name;
                db.SaveChanges();
            }
            state = States.SETUP;
            return(Turbine.DataEF6.Contract.ProcessContract.Get(pid));
        }
Exemple #14
0
 static bool AddUser(string username, string token)
 {
     using (ProducerContext container = new ProducerContext())
     {
         Turbine.Data.Entities.User entity = new Turbine.Data.Entities.User();
         entity.Name  = username;
         entity.Token = token;
         container.Users.Add(entity);
         container.SaveChanges();
     }
     return(true);
 }
Exemple #15
0
        public static void ClassInit(TestContext context)
        {
            BaseDatabaseTest.CleanUpDatabase();

            using (var db = new ProducerContext())
            {
                var app = new Turbine.Data.Entities.Application {
                    Name = "ACM", Version = "7.3"
                };
                db.Applications.Add(app);
                var user = new Turbine.Data.Entities.User {
                    Name = username
                };
                db.Users.Add(user);
                db.SaveChanges();
            }
            using (var db = new ProducerContext())
            {
                var item = db.Applications.Single(s => s.Name == "ACM");
                item.InputFileTypes.Add(new Turbine.Data.Entities.InputFileType
                {
                    Id       = Guid.NewGuid(),
                    Name     = "configuration",
                    Required = true,
                    Type     = "plain/text"
                });
                item.InputFileTypes.Add(new Turbine.Data.Entities.InputFileType
                {
                    Id       = Guid.NewGuid(),
                    Name     = "aspenfile",
                    Required = true,
                    Type     = "plain/text"
                });
                db.SaveChanges();
            }
            using (var db = new ProducerContext())
            {
                var app  = db.Applications.Single(s => s.Name == "ACM");
                var user = db.Users.Single(u => u.Name == username);
                var sim  = new Turbine.Data.Entities.Simulation
                {
                    Id          = Guid.NewGuid(),
                    Application = app,
                    Create      = DateTime.UtcNow,
                    Name        = "Test",
                    Update      = DateTime.UtcNow,
                    User        = user
                };
                db.Simulations.Add(sim);
                db.SaveChanges();
            }
        }
Exemple #16
0
 public void TestSession_No_Create()
 {
     // Session
     using (var db = new ProducerContext())
     {
         var item = new Turbine.Data.Entities.Session
         {
             Id          = Guid.NewGuid(),
             Description = "testing simulation"
         };
         db.Sessions.Add(item);
         db.SaveChanges();
     }
 }
Exemple #17
0
 static bool UpdateUser(string username, string token)
 {
     using (ProducerContext container = new ProducerContext())
     {
         Turbine.Data.Entities.User user = container.Users.SingleOrDefault <Turbine.Data.Entities.User>(s => s.Name == username);
         if (user == null)
         {
             return(false);
         }
         user.Token = token;
         container.SaveChanges();
     }
     return(true);
 }
        public void Message(string msg)
        {
            Message w = new Message()
            {
                Id = Guid.NewGuid(), Value = msg, Create = DateTime.UtcNow
            };

            using (ProducerContext db = new ProducerContext())
            {
                Job obj = db.Jobs.Single <Job>(s => s.Count == id);
                obj.Messages.Add(w);
                db.SaveChanges();
            }
        }
 public void Error()
 {
     //IConsumerContext ctx = AppUtility.GetConsumerContext();
     //Guid consumerId = ctx.Id;
     Debug.WriteLine(String.Format("Error as {0}, {1}", run.ConsumerId), this.GetType().Name);
     using (ProducerContext db = new ProducerContext())
     {
         var consumer = db.Consumers.Single <JobConsumer>(s => s.Id == run.ConsumerId);
         if (!consumer.status.Equals("error"))
         {
             consumer.status = "error";
             db.SaveChanges();
         }
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public Guid Create()
        {
            Guid   session = Guid.NewGuid();
            string owner   = Container.GetAppContext().UserName;

            using (var db = new ProducerContext())
            {
                User user = db.Users.Single <User>(s => s.Name == owner);
                db.Sessions.Add(new Session()
                {
                    Id = session, User = user, Create = DateTime.UtcNow
                });
                db.SaveChanges();
            }
            return(session);
        }
Exemple #21
0
 public void TestJob_NoUser()
 {
     using (var db = new ProducerContext())
     {
         var item     = db.Sessions.Single(s => s.Id == sessionId);
         var app      = db.Applications.Single(a => a.Name == "ACM");
         var consumer = new Turbine.Data.Entities.JobConsumer
         {
             Id          = Guid.NewGuid(),
             keepalive   = DateTime.UtcNow,
             status      = "up",
             Application = app
         };
         var user       = db.Users.Single(u => u.Name == userName);
         var simulation = db.Simulations.Single(s => s.Name == simulationName);
         var job        = new Turbine.Data.Entities.Job
         {
             Id      = Guid.NewGuid(),
             Session = item,
             Create  = DateTime.UtcNow,
             State   = "create",
             //User = user,
             Consumer   = consumer,
             Simulation = simulation
         };
         db.Jobs.Add(job);
         try
         {
             db.SaveChanges();
         }
         catch (System.Data.Entity.Validation.DbEntityValidationException e)
         {
             foreach (var eve in e.EntityValidationErrors)
             {
                 Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                   eve.Entry.Entity.GetType().Name, eve.Entry.State);
                 foreach (var ve in eve.ValidationErrors)
                 {
                     Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                       ve.PropertyName, ve.ErrorMessage);
                 }
             }
             throw;
         }
     }
 }
        public static IProcess New(int jobid)
        {
            Guid id = Guid.Empty;

            using (ProducerContext db = new ProducerContext())
            {
                var entity = new Turbine.Data.Entities.Process()
                {
                };
                entity.Job = db.Jobs.Single <Turbine.Data.Entities.Job>(s => s.Count == jobid);
                db.Processes.Add(entity);
                id = entity.Id;
                db.SaveChanges();
            }
            return(new ProcessContract()
            {
                id = id
            });
        }
Exemple #23
0
 public void AddStdout(string data)
 {
     using (ProducerContext db = new ProducerContext())
     {
         Turbine.Data.Entities.Process entity = db.Processes.Single(s => s.Id == id);
         if (entity.Stdout == null)
         {
             entity.Stdout = data;
         }
         else
         {
             StringBuilder sb = new StringBuilder();
             sb.Append(entity.Stdout);
             sb.Append(data);
             entity.Stdout = sb.ToString();
         }
         db.SaveChanges();
     }
 }
        public int Submit(Guid session)
        {
            string user = Container.GetAppContext().UserName;
            int    num  = 0;

            using (ProducerContext db = new ProducerContext())
            {
                Session obj = db.Sessions.Single <Session>(s => s.Id == session);
                Debug.WriteLine(String.Format("start session {0}, jobs {1}", session, obj.Jobs.Count()), this.GetType().Name);
                foreach (var job in obj.Jobs.Where(s => s.State == "create" & s.User.Name == user))
                {
                    num       += 1;
                    job.State  = "submit";
                    job.Submit = DateTime.UtcNow;
                }
                db.SaveChanges();
            }
            return(num);
        }
        public void Running()
        {
            using (ProducerContext db = new ProducerContext())
            {
                Job obj = db.Jobs.Single <Job>(s => s.Count == id);

                if (obj.ConsumerId != ConsumerId)
                {
                    throw new IllegalAccessException(String.Format(
                                                         "job({0}) consumer access denied {1} != {2}", obj.Id, obj.ConsumerId, ConsumerId)
                                                     );
                }

                Debug.WriteLine("obj.State : " + obj.State, "ConsumerJobContract.Running");
                if (obj.State != "setup")
                {
                    throw new InvalidStateChangeException("Violation of state machine");
                }
                if (obj.Process == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing");
                }
                if (obj.Process.WorkingDir == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing working directory");
                }
                if (obj.Process.Input == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing Input BLOB");
                }

                obj.State   = "running";
                obj.Running = DateTime.UtcNow;
                obj.Messages.Add(new Turbine.Data.Entities.Message {
                    Id     = Guid.NewGuid(),
                    Create = DateTime.UtcNow,
                    Value  = String.Format("event=running,consumer={0}", obj.ConsumerId)
                });
                db.SaveChanges();
            }
            state = States.RUNNING;
        }
 public void Kill()
 {
     using (var db = new ProducerContext())
     {
         var entity = db.Jobs.Single <Turbine.Data.Entities.Job>(j => j.Count == Id);
         if (new List <string>()
         {
             "create", "submit", "locked", "setup", "running", "terminate"
         }.Contains <string>(entity.State))
         {
             entity.State    = "down";
             entity.Finished = DateTime.UtcNow;
             db.SaveChanges();
         }
         else
         {
             throw new InvalidStateChangeException(String.Format("Cannot kill a job in state {0}", entity.State));
         }
     }
 }
        /// <summary>
        /// Ignore concurrency exception
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public int Cancel(Guid session)
        {
            int num = 0;

            using (ProducerContext db = new ProducerContext())
            {
                Session obj = db.Sessions.First <Session>(s => s.Id == session);

                /*
                 * foreach (var job in obj.Jobs.Where(s => s.State == "create" || s.State == "submit"))
                 * {
                 *  IJobProducerContract contract = new ProducerAspenJobContract(job.Id);
                 *  try
                 *  {
                 *      contract.Cancel();
                 *      num += 1;
                 *  }
                 *  catch (AuthorizationError ex)
                 *  {
                 *      Debug.WriteLine(String.Format("AuthorizationError({0}): Failed to cancel session {1} job {2} ", ex.Message, session, job.Id),
                 *          this.GetType());
                 *      throw;
                 *  }
                 *  catch (Exception ex)
                 *  {
                 *      Debug.WriteLine(String.Format("Failed to cancel session {0} job {1} ", session, job.Id),
                 *          this.GetType());
                 *  }
                 * }
                 */
                foreach (Job job in obj.Jobs.OrderByDescending(s => s.Submit).Where(s => s.State == "create" || s.State == "submit"))
                {
                    job.State    = "cancel";
                    job.Finished = DateTime.UtcNow;
                }
                db.SaveChanges();
            }
            return(num);
        }
        public void TestProcess_Full()
        {
            Guid jobId = Guid.NewGuid();

            using (var db = new ProducerContext())
            {
                var item       = db.Sessions.Single(s => s.Id == sessionId);
                var user       = db.Users.Single(u => u.Name == userName);
                var simulation = db.Simulations.Single(s => s.Name == simulationName);
                var job        = new Turbine.Data.Entities.Job
                {
                    Id         = jobId,
                    Session    = item,
                    Create     = DateTime.UtcNow,
                    State      = "create",
                    User       = user,
                    Simulation = simulation
                };
                db.Jobs.Add(job);
                db.SaveChanges();
            }
            using (var db = new ProducerContext())
            {
                var item = db.Jobs.Single(s => s.Id == jobId);
                item.Process = new Turbine.Data.Entities.Process
                {
                    Input      = "Input string",
                    Output     = "Output string",
                    WorkingDir = "MYDIR",
                    Status     = -1,
                    Stdin      = "",
                    Stderr     = "",
                    Stdout     = ""
                };
                db.SaveChanges();
            }
        }
        public void Error(string msg)
        {
            using (ProducerContext db = new ProducerContext())
            {
                Job obj = db.Jobs.Single <Job>(s => s.Count == id);

                if (obj.ConsumerId != ConsumerId)
                {
                    throw new IllegalAccessException(String.Format(
                                                         "job({0}) consumer access denied {1} != {2}", obj.Id, obj.ConsumerId, ConsumerId)
                                                     );
                }

                //Debug.WriteLine("Error: " + msg, "ConsumerJobContract.Error");
                if (!obj.State.Equals("running") && !obj.State.Equals("setup") && !obj.State.Equals("error"))
                {
                    throw new InvalidStateChangeException(String.Format("Violation of state machine: job id={0},state={1} cannot be moved to error", obj.Id, obj.State));
                }

                if (!obj.State.Equals("error"))
                {
                    obj.State    = "error";
                    state        = States.ERROR;
                    obj.Finished = DateTime.UtcNow;
                }
                if (msg.Length > 3800)
                {
                    msg = msg.Substring(0, 3800);
                }
                obj.Messages.Add(new Turbine.Data.Entities.Message {
                    Id     = Guid.NewGuid(),
                    Create = DateTime.UtcNow,
                    Value  = String.Format("event=error,consumer={0},msg=\"{1}\"", obj.ConsumerId, msg)
                });
                db.SaveChanges();
            }
        }
        public bool Delete()
        {
            Debug.WriteLine(String.Format(
                                "Deleting Simulation '{0}' Id '{1}'", name, simId.ToString()),
                            "ProducerSimulationContract.Delete()");
            using (var db = new ProducerContext())
            {
                foreach (var entity in db.Simulations.Where <Simulation>(s => s.Id == simId))
                {
                    foreach (var jobEntity in db.Jobs.Where(s => s.SimulationId == entity.Id))
                    {
                        db.Processes.Remove(jobEntity.Process);
                        db.Messages.RemoveRange(jobEntity.Messages);
                        db.StagedInputFiles.RemoveRange(jobEntity.StagedInputFiles);
                        db.StagedOutputFiles.RemoveRange(jobEntity.StagedOutputFiles);
                        db.GeneratorJobs.RemoveRange(db.GeneratorJobs.Where(g => g.JobId == jobEntity.Id));
                        db.Generators.RemoveRange(db.Generators.Where(g => g.SessionId == jobEntity.SessionId));

                        Session session = db.Sessions.Single <Session>(s => s.Id == jobEntity.SessionId);

                        db.Jobs.Remove(jobEntity);

                        if (session.Jobs.Count == 0)
                        {
                            db.Sessions.Remove(session);
                        }
                    }
                    Debug.WriteLine(String.Format(
                                        "Simulation '{0}' Id '{1}' removed", name, simId.ToString()),
                                    "ProducerSimulationContract.Delete()");
                    db.Simulations.Remove(entity);
                }
                db.SaveChanges();
            }
            return(true);
        }