public Guid Create() { Guid session = Guid.NewGuid(); string owner = Container.GetAppContext().UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { User user = container.Users.Single <User>(s => s.Name == owner); container.Sessions.AddObject(new Session() { Id = session, User = user, Create = DateTime.UtcNow }); container.SaveChanges(); } return(session); }
public bool UpdateConfiguration(byte[] data) { string owner = AppUtility.GetAppContext().UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { Simulation obj = container.Simulations.Single <Simulation>(s => s.Name == name); if (obj.User.Name != owner) { throw new ArgumentException("Only owner {0} can update simulation", obj.User.Name); } obj.Configuration = data; container.SaveChanges(); } return(true); }
public void Success() { using (TurbineModelContainer container = new TurbineModelContainer()) { Job obj = container.Jobs.Single <Job>(s => s.Id == id); AuthorizeConsumer(obj); if (obj.State != "running") { throw new InvalidStateChangeException("Violation of state machine"); } obj.State = "success"; obj.Finished = DateTime.UtcNow; container.SaveChanges(); } }
public static Session GetSessionMeta(Guid id) { Session session = null; using (TurbineModelContainer container = new TurbineModelContainer()) { Turbine.Data.Session entity = container.Sessions.Single(s => s.Id == id); session = new Session() { Id = entity.Id, Create = entity.Create, Finished = entity.Finished, Descrption = entity.Descrption }; } return(session); }
/* * public static Jobs GetJobs() * { * bool verbose = false; * Serialize.Job job = null; * Serialize.Jobs col = new Serialize.Jobs(); * using (TurbineModelContainer container = new TurbineModelContainer()) * { * foreach (Turbine.Data.Job entity in container.Jobs) * { * job = GetRepresentation(entity, verbose); * col.Add(job); * } * } * return col; * } */ /* GetJobs * Returns Jobs collection * Arguments * page - starting at 1 * rpp -- results per page, must be > 0 */ public static List <Dictionary <string, Object> > GetJobs(Guid sessionID, string simulation, Guid consumerID, string state, Int32 page, Int32 rpp, bool verbose) { List <Dictionary <string, Object> > jobs = new List <Dictionary <string, Object> >(); using (TurbineModelContainer container = new TurbineModelContainer()) { System.Data.Objects.ObjectQuery <Turbine.Data.Job> jobQuery = container.Jobs; if (!Guid.Empty.Equals(sessionID)) { jobQuery = jobQuery.Where("it.SessionId = @session", new System.Data.Objects.ObjectParameter("session", sessionID)); } if (!Guid.Empty.Equals(consumerID)) { jobQuery = jobQuery.Where("it.ConsumerId = @consumer", new System.Data.Objects.ObjectParameter("consumer", consumerID)); } // NOTE: This option will return all jobs for all versions of Simulation if (!String.IsNullOrEmpty(simulation)) { foreach (Turbine.Data.Simulation entity in container.Simulations.Where(i => i.Name == simulation)) { jobQuery = jobQuery.Where("it.SimulationId = @simulationId", new System.Data.Objects.ObjectParameter("simulationId", entity.Id)); // TODO: ADD A "OR" break; } } if (!String.IsNullOrEmpty(state)) { jobQuery = jobQuery.Where("it.State = @state", new System.Data.Objects.ObjectParameter("state", state)); } jobQuery = jobQuery .Skip("it.Id", "@skip", new System.Data.Objects.ObjectParameter("skip", (page - 1) * rpp)) .Top("@limit", new System.Data.Objects.ObjectParameter("limit", rpp)); foreach (Turbine.Data.Job entity in jobQuery) { var job = GetJobRepresentation(entity, verbose); jobs.Add(job); } } return(jobs); }
public void KeepAlive() { IConsumerContext ctx = AppUtility.GetConsumerContext(); Guid consumerId = ctx.Id; Debug.WriteLine(String.Format("KeepAlive Consumer {0}", consumerId), this.GetType().Name); using (TurbineModelContainer container = new TurbineModelContainer()) { var consumer = (JobConsumer)container.JobConsumers.Single <Turbine.Data.JobConsumer>(s => s.Id == consumerId); if (consumer.status == "up") { consumer.keepalive = DateTime.UtcNow; } container.SaveChanges(); } }
/* UnRegister * If state is "up" move to "down", else leave alone. */ public void UnRegister() { IConsumerContext ctx = AppUtility.GetConsumerContext(); Guid consumerId = ctx.Id; Debug.WriteLine(String.Format("UnRegister Consumer {0}", consumerId), this.GetType().Name); using (TurbineModelContainer container = new TurbineModelContainer()) { var consumer = (JobConsumer)container.JobConsumers.First <Turbine.Data.JobConsumer>(s => s.Id == consumerId); if (consumer.status == "up") { consumer.status = "down"; } container.SaveChanges(); } }
public static IJobProducerContract Create(string simulationName, Guid sessionID, bool initialize, bool reset) { int id = -1; IProducerContext ctx = Container.GetAppContext(); String userName = ctx.UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { Simulation obj = container.Simulations.OrderByDescending(q => q.Create).First <Simulation>(s => s.Name == simulationName); User user = container.Users.Single <User>(u => u.Name == userName); Session session = container.Sessions.SingleOrDefault <Session>(i => i.Id == sessionID); if (session == null) { session = new Session() { Id = sessionID, Create = DateTime.UtcNow, User = user }; container.Sessions.AddObject(session); container.SaveChanges(); } System.Diagnostics.Debug.WriteLine(String.Format("simulation {0}, User {1}, Session {2}", simulationName, user.Name, session.Id), "AspenJobContract"); Job job = new Job() { guid = Guid.NewGuid(), Simulation = obj, State = "create", Create = DateTime.UtcNow, Process = new SinterProcess() { Id = Guid.NewGuid() }, User = user, Session = session, Initialize = initialize, Reset = reset, }; container.SaveChanges(); id = job.Id; } return(new AspenJobProducerContract() { Id = id }); }
/* Setup: Moves job from submit to setup, concurrency issues to be aware of. * Consumer must be registered before calling this method. * * throws OptimisticConcurrencyException if job has already been * grabbed by another consumer. * */ public IProcess Setup() { string baseDir = AppUtility.GetAppContext().BaseWorkingDirectory; IConsumerContext ctx = AppUtility.GetConsumerContext(); Guid consumerId = ctx.Id; Guid pid = Guid.Empty; using (TurbineModelContainer container = new TurbineModelContainer()) { var consumer = container.JobConsumers .SingleOrDefault <Turbine.Data.JobConsumer>(c => c.Id == consumerId); Debug.WriteLine(String.Format("Setup consumer GUID {0}", consumerId), this.GetType().Name); 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)); } Job obj = container.Jobs.Single <Job>(s => s.Id == id); if (obj.State != "locked") { throw new InvalidStateChangeException("Violation of state machine"); } if (obj.Process == null) { throw new InvalidStateChangeException("Process configuration missing"); } obj.State = "setup"; obj.Setup = DateTime.UtcNow; obj.Process.WorkingDir = Path.Combine(baseDir, id.ToString()); obj.Consumer = (JobConsumer)consumer; pid = obj.Process.Id; simulationName = obj.Simulation.Name; container.SaveChanges(); } return(SinterProcessContract.Get(pid)); }
public IJobQueue Register() { IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext(); Guid consumerId = ctx.Id; String hostname = ctx.Hostname; Debug.WriteLine(String.Format("Register as {0}, {1}", consumerId, hostname), this.GetType().Name); Turbine.Consumer.AWS.IAWSContext awsCtx = null; string ami = ""; string instance = ""; try { awsCtx = Turbine.Consumer.AWS.AppUtility.GetContext(); ami = awsCtx.AmiId; instance = awsCtx.InstanceId; } catch (Exception ex) { Debug.WriteLine(String.Format("Ignore AWS Context is not available: {0}", ex.Message), this.GetType().Name); Debug.WriteLine(String.Format("{0}", ex.StackTrace), this.GetType().Name); } // // NOTE: Amazon InstanceID and AMI removed // using (TurbineModelContainer container = new TurbineModelContainer()) { container.JobConsumers.AddObject(new JobConsumer() { Id = consumerId, hostname = hostname, AMI = ami, instance = instance, processId = Process.GetCurrentProcess().Id.ToString(), status = "up" } ); container.SaveChanges(); } queue = new Turbine.Consumer.Data.Contract.DBJobQueue(); return(queue); }
public int Submit(Guid session) { string user = Container.GetAppContext().UserName; int num = 0; using (TurbineModelContainer container = new TurbineModelContainer()) { Session obj = container.Sessions.First <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; } container.SaveChanges(); } return(num); }
public void AddStderr(string data) { using (TurbineModelContainer container = new TurbineModelContainer()) { 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(); } }
public static IProcess New(int jobid) { Guid id = Guid.Empty; using (TurbineModelContainer container = new TurbineModelContainer()) { SinterProcess entity = new SinterProcess() { }; entity.Job = container.Jobs.Single <Job>(s => s.Id == jobid); container.SinterProcesses.AddObject(entity); id = entity.Id; container.SaveChanges(); } return(new SinterProcessContract() { id = id }); }
public static IApplicationProducerContract Get(string applicationName) { string owner = Container.GetAppContext().UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { var user = container.Users.Single <User>(s => s.Name == owner); var obj = container.Applications. SingleOrDefault <Application>(s => s.Name == applicationName); if (obj == null) { return(null); } } var contract = new ApplicationProducerContract(); contract.applicationName = applicationName; return(contract); }
public void Warning(string msg) { var w = new Message(); w.Value = msg; using (TurbineModelContainer container = new TurbineModelContainer()) { Job obj = container.Jobs.Single <Job>(s => s.Id == id); AuthorizeConsumer(obj); if (obj.State != "running") { throw new InvalidStateChangeException("Violation of state machine"); } obj.State = "warning"; obj.Messages.Add(w); obj.Finished = DateTime.UtcNow; container.SaveChanges(); } }
public Dictionary <string, int> Status(Guid session) { var d = new Dictionary <string, int>(); using (TurbineModelContainer container = new TurbineModelContainer()) { Session obj = container.Sessions.First <Session>(s => s.Id == session); d["create"] = obj.Jobs.Count <Job>(j => j.State == "create"); d["running"] = obj.Jobs.Count <Job>(j => j.State == "running"); d["setup"] = obj.Jobs.Count <Job>(j => j.State == "setup"); d["submit"] = obj.Jobs.Count <Job>(j => j.State == "submit"); d["pause"] = obj.Jobs.Count <Job>(j => j.State == "pause"); d["locked"] = obj.Jobs.Count <Job>(j => j.State == "locked"); d["error"] = obj.Jobs.Count <Job>(j => j.State == "error"); d["cancel"] = obj.Jobs.Count <Job>(j => j.State == "cancel"); d["success"] = obj.Jobs.Count <Job>(j => j.State == "success"); d["terminate"] = obj.Jobs.Count <Job>(j => j.State == "terminate"); } return(d); }
public void AddStreamError(Dictionary <string, List <string> > dictionary) { using (TurbineModelContainer container = new TurbineModelContainer()) { SinterProcess entity = container.SinterProcesses.Single <SinterProcess>(s => s.Id == id); ProcessError error; foreach (KeyValuePair <String, List <String> > entry in dictionary) { foreach (String msg in entry.Value) { error = new ProcessError(); error.Type = "stream"; error.Name = entry.Key; error.Error = msg; entity.Errors.Add(error); } } container.SaveChanges(); } }
public void Register() { IConsumerContext ctx = AppUtility.GetConsumerContext(); Guid consumerId = ctx.Id; String hostname = ctx.Hostname; Debug.WriteLine(String.Format("Register as {0}, {1}", consumerId, hostname), this.GetType().Name); using (TurbineModelContainer container = new TurbineModelContainer()) { container.Consumers.AddObject(new JobConsumer() { guid = consumerId, hostname = hostname, status = "up" } ); container.SaveChanges(); } }
public static Serialize.Application GetApplication(string appname) { Serialize.Application con = null; using (TurbineModelContainer container = new TurbineModelContainer()) { var entity = container.Applications.Single <Turbine.Data.Application>(s => s.Name == appname); con = new Serialize.Application(); con.Name = entity.Name; con.Inputs = new Serialize.InputTypeList(); foreach (InputFileType i in entity.InputFileTypes) { con.Inputs.Add(new Serialize.InputType() { Name = i.Name, Type = i.Type, Required = i.Required }); } } return(con); }
public static Serialize.Consumers GetConsumers(String status) { Serialize.Consumer con = null; Serialize.Consumers coll = new Serialize.Consumers(); using (TurbineModelContainer container = new TurbineModelContainer()) { System.Data.Objects.ObjectQuery <Turbine.Data.JobConsumer> query = container.JobConsumers; if (status != null) { query = container.JobConsumers.Where("it.status = @status", new System.Data.Objects.ObjectParameter("status", status)); } foreach (Turbine.Data.JobConsumer entity in query) { con = GetRepresentation(entity); coll.Add(con); } } return(coll); }
public static SimulationStagedInput GetStagedInputFile(string name, string inputName) { SimulationStagedInput ssi = null; using (TurbineModelContainer container = new TurbineModelContainer()) { Turbine.Data.Simulation entity = container.Simulations .OrderByDescending(q => q.Create).First(s => s.Name == name); var si = entity.SimulationStagedInputs. SingleOrDefault <SimulationStagedInput>(f => f.Name == inputName); if (si != null) { ssi = new SimulationStagedInput() { Content = si.Content, Name = si.Name, InputFileType = si.InputFileType }; } } return(ssi); }
public new static void ClassInit(TestContext context) { int ms = -5000; DataTestScenario.ClassInit(context); var msg = new Message(); msg.Value = "Job Sweeper Test"; using (TurbineModelContainer container = new TurbineModelContainer()) { jobCount = container.Jobs.Count(); foreach (Job obj in container.Jobs.OrderBy(s => s.Submit)) { ms -= 500; obj.Messages.Add(msg); obj.State = "submit"; obj.Submit = DateTime.UtcNow.AddMilliseconds(ms); } container.SaveChanges(); } }
public void TestSimulations() { using (TurbineModelContainer container = new TurbineModelContainer()) { StringComparer comparer = StringComparer.OrdinalIgnoreCase; byte[] bArray = null; //String path = null; foreach (Simulation s in container.Simulations) { Debug.WriteLine(String.Format(" {0}", s.Name)); bArray = s.Backup; //path = Path.Combine("test", s.Name); //Directory.CreateDirectory(path); //File.WriteAllBytes(Path.Combine(path, "test.bkp"), // backupArray); Assert.IsTrue(0 == comparer.Compare(GetMd5Hash(bArray), SimulationBackupMD5), "simulation backup array failed hash comparison"); bArray = s.Configuration; Assert.IsTrue(0 == comparer.Compare(GetMd5Hash(bArray), SimulationConfigMD5), "simulation config array failed hash comparison"); } } }
public static Serialize.Simulations GetSimulations() { Serialize.Simulation sim = null; Serialize.Simulations coll = new Serialize.Simulations(); using (TurbineModelContainer container = new TurbineModelContainer()) { var esim = container.Simulations.OrderByDescending(q => q.Create); if (esim != null) { List <string> l = new List <string>(); foreach (Turbine.Data.Simulation entity in esim) { if (l.Contains <string>(entity.Name) == false) { l.Add(entity.Name); sim = GetRepresentation(entity); coll.Add(sim); } } } } return(coll); }
public int Terminate(Guid session) { int num = 0; using (TurbineModelContainer container = new TurbineModelContainer()) { Session obj = container.Sessions.First <Session>(s => s.Id == session); foreach (var job in obj.Jobs.Where(s => s.State == "setup" || s.State == "running")) { IJobProducerContract contract = new AspenJobProducerContract(job.Id); try { contract.Terminate(); num += 1; } catch (InvalidStateChangeException ex) { Debug.WriteLine(String.Format("InvalidStateChange: Failed to terminate session {0} job {1} ", session, job.Id), this.GetType()); Debug.WriteLine(ex.Message); } catch (AuthorizationError ex) { Debug.WriteLine(String.Format("AuthorizationError({0}): Failed to terminate session {1} job {2} ", ex.Message, session, job.Id), this.GetType()); throw; } catch (Exception ex) { Debug.WriteLine(String.Format("Failed to terminate session {0} job {1} ", session, job.Id), this.GetType()); Debug.WriteLine(ex.Message); } } } return(num); }
/* Running: Moves job from running * Only can be performed by declared consumer * */ public void Running() { using (TurbineModelContainer container = new TurbineModelContainer()) { Job obj = container.Jobs.Single <Job>(s => s.Id == id); AuthorizeConsumer(obj); 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"); } if (obj.Process.Configuration == null) { obj.Process.Configuration = obj.Simulation.Configuration; } if (obj.Process.Backup == null) { obj.Process.Backup = obj.Simulation.Backup; } obj.State = "running"; obj.Running = DateTime.UtcNow; container.SaveChanges(); } }
public static IApplicationProducerContract Create(string applicationName, string version) { string owner = Container.GetAppContext().UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { var user = container.Users.Single <User>(s => s.Name == owner); var obj = container.Applications.SingleOrDefault <Application>(s => s.Name == applicationName); if (obj != null) { throw new InvalidStateChangeException(String.Format("Application with Name {0} already exists", applicationName)); } container.Applications.AddObject(new Application() { Name = applicationName, User = user, Version = version }); container.SaveChanges(); } var contract = new ApplicationProducerContract(); contract.applicationName = applicationName; return(contract); }
public static IJobProducerContract Create(string simulationName, Guid sessionID, bool initialize) { int id = -1; IContext ctx = AppUtility.GetAppContext(); String userName = ctx.UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { Simulation obj = container.Simulations.Single <Simulation>(s => s.Name == simulationName); User user = container.Users.Single <User>(u => u.Name == userName); Session session = container.Sessions.SingleOrDefault <Session>(i => i.guid == sessionID); if (session == null) { session = new Session() { guid = sessionID, Create = DateTime.UtcNow, User = user }; container.Sessions.AddObject(session); container.SaveChanges(); } Job job = new Job() { Simulation = obj, State = "create", Create = DateTime.UtcNow, Process = new SinterProcess(), User = user, Session = session, Initialize = initialize }; container.SaveChanges(); id = job.Id; } return(new AspenJobProducerContract(id)); }
public int Submit(Guid session) { int num = 0; using (TurbineModelContainer container = new TurbineModelContainer()) { Session obj = container.Sessions.First <Session>(s => s.guid == session); foreach (var job in obj.Jobs.Where(s => s.State == "create")) { IJobProducerContract contract = new AspenJobProducerContract(job.Id); try { contract.Submit(); num += 1; } catch (Exception ex) { Debug.WriteLine(String.Format("Failed to submit session {0} job {1} ", session, job.Id), this.GetType()); } } } return(num); }
public static ISimulationProducerContract Create(string name) { string owner = AppUtility.GetAppContext().UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { User user = container.Users.Single <User>(s => s.Name == owner); Simulation obj = container.Simulations.SingleOrDefault <Simulation>(s => s.Name == name); if (obj != null) { throw new InvalidStateChangeException("Simulation with Name {0} already exists"); } container.Simulations.AddObject(new Simulation() { Name = name, User = user }); container.SaveChanges(); } AspenSimulationContract sc = new AspenSimulationContract(); sc.name = name; return(sc); }