/// <summary> /// Parses the appInfo and experiment ticket, inserts the task into the database and /// creates a dataManager and dataSources defined in the appInfo. /// </summary> /// <param name="appInfo"></param> /// <param name="expCoupon"></param> /// <param name="expTicket"></param> /// <returns></returns> public virtual LabTask CreateLabTask(LabAppInfo appInfo, Coupon expCoupon, Ticket expTicket) { LabTask labTask = CreateLabTask(appInfo, expTicket); if (((labTask.storage != null) && (labTask.storage.Length > 0))) { // Create DataSourceManager to manage dataSources DataSourceManager dsManager = new DataSourceManager(); // set up an experiment storage handler ExperimentStorageProxy ess = new ExperimentStorageProxy(); ess.OperationAuthHeaderValue = new OperationAuthHeader(); ess.OperationAuthHeaderValue.coupon = expCoupon; ess.Url = labTask.storage; dsManager.essProxy = ess; dsManager.ExperimentID = labTask.experimentID; dsManager.AppKey = appInfo.appKey; // Note these dataSources are written to by the application and sent to the ESS if ((appInfo.dataSources != null) && (appInfo.dataSources.Length > 0)) { string[] sources = appInfo.dataSources.Split(','); // Use the experimentID as the storage parameter foreach (string s in sources) { // dsManager.AddDataSource(createDataSource(s)); } } TaskProcessor.Instance.AddDataManager(labTask.taskID, dsManager); } TaskProcessor.Instance.Add(labTask); return labTask; }
public override LabTask CreateLabTask(LabAppInfo appInfo, Coupon expCoupon, Ticket expTicket) { long experimentID = -1; LabTask task = null; //Parse experiment payload string payload = expTicket.payload; XmlQueryDoc expDoc = new XmlQueryDoc(payload); string experimentStr = expDoc.Query("ExecuteExperimentPayload/experimentID"); if ((experimentStr != null) && (experimentStr.Length > 0)) { experimentID = Convert.ToInt64(experimentStr); } string sbStr = expDoc.Query("ExecuteExperimentPayload/sbGuid"); // Check to see if an experiment with this ID is already running LabDB dbManager = new LabDB(); LabTask.eStatus status = dbManager.ExperimentStatus(experimentID, sbStr); if (status == LabTask.eStatus.NotFound) { // Check for an existing experiment using the same resources, if found Close it //Create the new Task if(appInfo.rev.Contains("8.2")){ task = iLabs.LabView.LV82.LabViewTask.CreateLabTask(appInfo,expCoupon,expTicket); } else{ task = iLabs.LabView.LV86.LabViewTask.CreateLabTask(appInfo,expCoupon,expTicket); } } else { task = TaskProcessor.Instance.GetTask(experimentID); } return task; }
public LabTask[] GetTasks(LabAppInfo app) { List<LabTask> active = new List<LabTask>(); lock (tasks) { foreach (LabTask t in tasks) { if (t.labAppID == app.appID) { active.Add(t); } } } return active.ToArray(); }
public override LabTask CreateLabTask(LabAppInfo appInfo, Coupon expCoupon, Ticket expTicket) { long experimentID = -1; LabTask task = null; string revision = null; //Parse experiment payload string payload = expTicket.payload; XmlQueryDoc expDoc = new XmlQueryDoc(payload); string experimentStr = expDoc.Query("ExecuteExperimentPayload/experimentID"); if ((experimentStr != null) && (experimentStr.Length > 0)) { experimentID = Convert.ToInt64(experimentStr); } string sbStr = expDoc.Query("ExecuteExperimentPayload/sbGuid"); // Check to see if an experiment with this ID is already running LabDB dbManager = new LabDB(); LabTask.eStatus status = dbManager.ExperimentStatus(experimentID, sbStr); if (status == LabTask.eStatus.NotFound) { // Check for an existing experiment using the same resources, if found Close it //Create the new Task if (appInfo.rev == null || appInfo.rev.Length < 2) { revision = appInfo.rev; } else { revision = ConfigurationManager.AppSettings["LabViewVersion"]; } if (revision != null && revision.Length > 2) { if (revision.Contains("8.2")) { task = new iLabs.LabView.LV82.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } else if (revision.Contains("8.6")) { task = new iLabs.LabView.LV86.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } else if (revision.Contains("2009")) { task = new iLabs.LabView.LV2009.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } else if (revision.Contains("2010")) { task = new iLabs.LabView.LV2010.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } else if (revision.Contains("2011")) { task = new iLabs.LabView.LV2011.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } else if (revision.Contains("2012")) { task = new iLabs.LabView.LV2012.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } else if (revision.Contains("WS")) { task = new iLabs.LabView.LVWS.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } } else // Default to LV 2009 { task = new iLabs.LabView.LV2009.LabViewInterface().CreateLabTask(appInfo, expCoupon, expTicket); } } else { task = TaskProcessor.Instance.GetTask(experimentID,expCoupon.issuerGuid); } return task; }
public virtual LabTask CreateLabTask(LabAppInfo appInfo, Coupon expCoupon, Ticket expTicket) { return new LabTask(); }
public LabTask CreateLabTask(LabAppInfo appInfo, Coupon expCoupon, Ticket expTicket) { // set defaults DateTime startTime = DateTime.UtcNow; long duration = -1L; long experimentID = 0; int status = -1; string statusViName = null; string statusTemplate = null; string templatePath = null; LabDB dbManager = new LabDB(); string qualName = null; string fullName = null; // set defaults string viName = null; //CHeck that a labVIEW interface revision is set //if (appInfo.rev == null || appInfo.rev.Length < 2) //{ // appInfo.rev = ConfigurationManager.AppSettings["LabViewVersion"]; //} ////Parse experiment payload, only get what is needed string payload = expTicket.payload; XmlQueryDoc expDoc = new XmlQueryDoc(payload); string essService = expDoc.Query("ExecuteExperimentPayload/essWebAddress"); string startStr = expDoc.Query("ExecuteExperimentPayload/startExecution"); string durationStr = expDoc.Query("ExecuteExperimentPayload/duration"); string groupName = expDoc.Query("ExecuteExperimentPayload/groupName"); string userName = expDoc.Query("ExecuteExperimentPayload/userName"); string expIDstr = expDoc.Query("ExecuteExperimentPayload/experimentID"); if ((startStr != null) && (startStr.Length > 0)) { startTime = DateUtil.ParseUtc(startStr); } if ((durationStr != null) && (durationStr.Length > 0) && !(durationStr.CompareTo("-1") == 0)) { duration = Convert.ToInt64(durationStr); } if ((expIDstr != null) && (expIDstr.Length > 0)) { experimentID = Convert.ToInt64(expIDstr); } if (appInfo.extraInfo != null && appInfo.extraInfo.Length > 0) { // Note should have either statusVI or template pair // Add Option for VNCserver access try { XmlQueryDoc viDoc = new XmlQueryDoc(appInfo.extraInfo); statusViName = viDoc.Query("extra/status"); statusTemplate = viDoc.Query("extra/statusTemplate"); templatePath = viDoc.Query("extra/templatePath"); } catch (Exception e) { string err = e.Message; } } // log the experiment for debugging Logger.WriteLine("Experiment: " + experimentID + " Start: " + DateUtil.ToUtcString(startTime) + " \tduration: " + duration); long statusSpan = DateUtil.SecondsRemaining(startTime, duration); if (!IsLoaded(appInfo.application)) { viName = LoadVI(appInfo.path, appInfo.application); if (false) // Check for controls first { string[] names = new string[4]; object[] values = new object[4]; names[0] = "CouponId"; values[0] = expCoupon.couponId; names[1] = "Passcode"; values[1] = expCoupon.passkey; names[2] = "IssuerGuid"; values[2] = expCoupon.issuerGuid; names[3] = "ExperimentId"; values[3] = experimentID; SetControlValues(viName, names, values); } OpenFrontPanel(viName, true, LabViewTypes.eFPState.eVisible); } else { viName = LoadVI(appInfo.path, appInfo.application); } if (viName == null) { status = -1; string err = "Unable to Find: " + appInfo.path + @"\" + appInfo.application; Logger.WriteLine(err); throw new Exception(err); } // Get qualifiedName qualName = qualifiedName(viName); fullName = appInfo.path + @"\" + appInfo.application; status = GetVIStatus(viName); Logger.WriteLine("CreateLabTask - " + qualName + ": VIstatus: " + status); switch (status) { case -10: throw new Exception("Error GetVIStatus: " + status); break; case -1: // VI not in memory throw new Exception("Error GetVIStatus: " + status); break; case 0: // eBad == 0 break; case 1: // eIdle == 1 vi in memory but not running //LabViewTypes.eFPState fpState = GetFPStatus(viName); //if (fpState != LabViewTypes.eFPState.eVisible) //{ OpenFrontPanel(viName, true, LabViewTypes.eFPState.eVisible); //} ResetVI(viName); break; case 2: // eRunTopLevel: this should be the LabVIEW application break; case 3: // eRunning //Unless the Experiment is reentrant it should be stopped and be reset. if (!appInfo.reentrant) { int stopStatus = StopVI(viName); if (stopStatus != 0) { AbortVI(viName); } ResetVI(viName); } break; default: throw new Exception("Error GetVIStatus: unknown status: " + status); break; } try { SetBounds(viName, 0, 0, appInfo.width, appInfo.height); Logger.WriteLine("SetBounds: " + appInfo.application); } catch (Exception sbe) { Logger.WriteLine("SetBounds exception: " + Utilities.DumpException(sbe)); } SubmitAction("unlockvi", qualifiedName(viName)); Logger.WriteLine("unlockvi Called: "); // Create the labTask & store in database; LabViewTask task = new LabViewTask(); task.labAppID = appInfo.appID; task.experimentID = experimentID; task.groupName = groupName; task.startTime = startTime; if (duration > 0) task.endTime = startTime.AddTicks(duration * TimeSpan.TicksPerSecond); else task.endTime = DateTime.MinValue; task.Status = LabTask.eStatus.Scheduled; task.couponID = expTicket.couponId; task.storage = essService; task.data = task.constructTaskXml(appInfo.appID, fullName, appInfo.rev, statusViName, essService); long taskID = dbManager.InsertTaskLong(task); task.taskID = taskID; if ((statusTemplate != null) && (statusTemplate.Length > 0)) { statusViName = CreateFromTemplate(templatePath, statusTemplate, task.taskID.ToString()); } if (((essService != null) && (essService.Length > 0))) { // Create DataSourceManager to manage dataSocket connections DataSourceManager dsManager = new DataSourceManager(); // set up an experiment storage handler ExperimentStorageProxy ess = new ExperimentStorageProxy(); ess.OperationAuthHeaderValue = new OperationAuthHeader(); ess.OperationAuthHeaderValue.coupon = expCoupon; ess.Url = essService; dsManager.essProxy = ess; dsManager.ExperimentID = experimentID; dsManager.AppKey = qualName; // Note these dataSources are written to by the application and sent to the ESS if ((appInfo.dataSources != null) && (appInfo.dataSources.Length > 0)) { string[] sockets = appInfo.dataSources.Split(','); // Use the experimentID as the storage parameter foreach (string s in sockets) { LVDataSocket reader = new LVDataSocket(); dsManager.AddDataSource(reader); if (s.Contains("=")) { string[] nv = s.Split('='); reader.Type = nv[1]; reader.Connect(nv[0], LabDataSource.READ_AUTOUPDATE); } else { reader.Connect(s, LabDataSource.READ_AUTOUPDATE); } } } TaskProcessor.Instance.AddDataManager(task.taskID, dsManager); } TaskProcessor.Instance.Add(task); return task; }
/// <summary> /// Parses the appInfo and experiment ticket, inserts the task into the database, /// but does not create the DataManager. /// </summary> /// <param name="appInfo"></param> /// <param name="expTicket"></param> /// <returns></returns> public virtual LabTask CreateLabTask(LabAppInfo appInfo, Ticket expTicket) { // set defaults DateTime startTime = DateTime.UtcNow; long experimentID = 0; string statusName = null; string statusTemplate = null; string templatePath = null; string qualName = null; string fullName = null; // set defaults long duration = -1L; LabTask labTask = null; LabDB dbManager = new LabDB(); ////Parse experiment payload, only get what is needed string payload = expTicket.payload; XmlQueryDoc expDoc = new XmlQueryDoc(payload); string essService = expDoc.Query("ExecuteExperimentPayload/essWebAddress"); string startStr = expDoc.Query("ExecuteExperimentPayload/startExecution"); string durationStr = expDoc.Query("ExecuteExperimentPayload/duration"); string groupName = expDoc.Query("ExecuteExperimentPayload/groupName"); string userName = expDoc.Query("ExecuteExperimentPayload/userName"); string expIDstr = expDoc.Query("ExecuteExperimentPayload/experimentID"); if ((startStr != null) && (startStr.Length > 0)) { startTime = DateUtil.ParseUtc(startStr); } if ((durationStr != null) && (durationStr.Length > 0) && !(durationStr.CompareTo("-1") == 0)) { duration = Convert.ToInt64(durationStr); } if ((expIDstr != null) && (expIDstr.Length > 0)) { experimentID = Convert.ToInt64(expIDstr); } if (appInfo.extraInfo != null && appInfo.extraInfo.Length > 0) { // Note should have either statusVI or template pair // Add Option for VNCserver access try { XmlQueryDoc viDoc = new XmlQueryDoc(appInfo.extraInfo); statusName = viDoc.Query("extra/status"); statusTemplate = viDoc.Query("extra/statusTemplate"); templatePath = viDoc.Query("extra/templatePath"); } catch (Exception e) { string err = e.Message; } } // log the experiment for debugging Logger.WriteLine("Experiment: " + experimentID + " Start: " + DateUtil.ToUtcString(startTime) + " \tduration: " + duration); long statusSpan = DateUtil.SecondsRemaining(startTime, duration); //launchClient(experimentID, essService, appInfo); //factory constructs the correct LabTask object Type labTask = CreateLabTask(); labTask.labAppID = appInfo.appID; labTask.experimentID = experimentID; labTask.groupName = groupName; labTask.startTime = startTime; if (duration > 0) labTask.endTime = startTime.AddTicks(duration * TimeSpan.TicksPerSecond); else labTask.endTime = DateTime.MinValue; labTask.couponID = expTicket.couponId; labTask.issuerGUID = expTicket.issuerGuid; labTask.storage = essService; labTask.data = labTask.constructTaskXml(appInfo.appID, fullName, appInfo.rev, statusName, essService); // Create & store the labTask in database and return an LabTask object; long taskID = dbManager.InsertTaskLong(labTask); labTask.taskID = taskID; return labTask; }
public LabAppInfo[] GetLabApps(DbConnection connection) { // create sql command DbCommand cmd = FactoryDB.CreateCommand("GetLabApps", connection); cmd.CommandType = CommandType.StoredProcedure; DbDataReader dataReader = null; try { dataReader = cmd.ExecuteReader(); } catch (DbException e) { writeEx(e); throw; } // id of created coupon ArrayList list = new ArrayList(); while (dataReader.Read()) { LabAppInfo viInfo = new LabAppInfo(); viInfo.appID = dataReader.GetInt32(0); viInfo.path = dataReader.GetString(1); viInfo.application = dataReader.GetString(2); viInfo.page = dataReader.GetString(3); if (!dataReader.IsDBNull(4)) viInfo.title = dataReader.GetString(4); if (!dataReader.IsDBNull(5)) viInfo.description = dataReader.GetString(5); if (!dataReader.IsDBNull(6)) viInfo.extraInfo = dataReader.GetString(6); if (!dataReader.IsDBNull(7)) viInfo.contact = dataReader.GetString(7); if (!dataReader.IsDBNull(8)) viInfo.comment = dataReader.GetString(8); viInfo.width = dataReader.GetInt32(9); viInfo.height = dataReader.GetInt32(10); if (!dataReader.IsDBNull(11)) viInfo.dataSources = dataReader.GetString(11); if (!dataReader.IsDBNull(12)) viInfo.server = dataReader.GetString(12); if (!dataReader.IsDBNull(13)) viInfo.port = dataReader.GetInt32(13); if (!dataReader.IsDBNull(14)) viInfo.appURL = dataReader.GetString(14); if (!dataReader.IsDBNull(15)) viInfo.version = dataReader.GetString(15); if (!dataReader.IsDBNull(16)) viInfo.rev = dataReader.GetString(16); if (!dataReader.IsDBNull(17)) viInfo.appKey = dataReader.GetString(17); if (!dataReader.IsDBNull(18)) viInfo.appGuid = dataReader.GetString(18); list.Add(viInfo); } LabAppInfo[] labs = new LabAppInfo[list.Count]; for(int i= 0;i<list.Count;i++){ labs[i] = ( LabAppInfo) list[i]; } return labs; }
public int ModifyLabApp(LabAppInfo app) { return ModifyLabApp(app.appID, app.title, app.appGuid, app.version, app.appKey, app.path, app.application, app.page, app.appURL, app.width, app.height, app.dataSources, app.server, app.port, app.contact, app.description, app.comment, app.extraInfo, app.rev, app.type); }
public LabAppInfo GetLabAppForGroup(string groupName, string serviceGUID) { DbConnection connection = FactoryDB.GetConnection(); // create sql command DbCommand cmd = FactoryDB.CreateCommand("GetLabAppByGroup", connection); cmd.CommandType = CommandType.StoredProcedure; // populate parameters cmd.Parameters.Add(FactoryDB.CreateParameter(cmd, "@groupName", groupName,DbType.String, 256)); cmd.Parameters.Add(FactoryDB.CreateParameter(cmd,"@guid", serviceGUID, DbType.AnsiString,50)); DbDataReader dataReader = null; try { connection.Open(); dataReader = cmd.ExecuteReader(); } catch (DbException e) { writeEx(e); throw e; } LabAppInfo viInfo = new LabAppInfo(); while (dataReader.Read()) { viInfo.appID = dataReader.GetInt32(0); viInfo.path = dataReader.GetString(1); viInfo.application = dataReader.GetString(2); if (!dataReader.IsDBNull(3)) viInfo.page = dataReader.GetString(3); if (!dataReader.IsDBNull(4)) viInfo.title = dataReader.GetString(4); if (!dataReader.IsDBNull(5)) viInfo.description = dataReader.GetString(4); if (!dataReader.IsDBNull(6)) viInfo.extraInfo = dataReader.GetString(6); if (!dataReader.IsDBNull(7)) viInfo.contact = dataReader.GetString(7); if (!dataReader.IsDBNull(8)) viInfo.comment = dataReader.GetString(8); viInfo.width = dataReader.GetInt32(9); viInfo.height = dataReader.GetInt32(10); if (!dataReader.IsDBNull(11)) viInfo.dataSources = dataReader.GetString(11); if (!dataReader.IsDBNull(12)) viInfo.server = dataReader.GetString(12); if (!dataReader.IsDBNull(13)) viInfo.port = dataReader.GetInt32(13); if (!dataReader.IsDBNull(14)) viInfo.appURL = dataReader.GetString(14); if (!dataReader.IsDBNull(15)) viInfo.version = dataReader.GetString(15); if (!dataReader.IsDBNull(16)) viInfo.rev = dataReader.GetString(16); if (!dataReader.IsDBNull(17)) viInfo.appKey = dataReader.GetString(17); if (!dataReader.IsDBNull(18)) viInfo.appGuid = dataReader.GetString(18); } // close the sql connection connection.Close(); return viInfo; }
public LabAppInfo GetLabApp(DbConnection connection, string appKey) { LabAppInfo appInfo = null; // create sql command // command executes the "GetVI" stored procedure DbCommand cmd = FactoryDB.CreateCommand("GetLabAppByKey", connection); cmd.CommandType = CommandType.StoredProcedure; // populate parameters cmd.Parameters.Add(FactoryDB.CreateParameter(cmd, "@appKey", appKey, DbType.String, 100)); DbDataReader dataReader = null; try { dataReader = cmd.ExecuteReader(); } catch (DbException e) { writeEx(e); throw; } // id of created coupon while (dataReader.Read()) { appInfo = new LabAppInfo(); appInfo.appID = dataReader.GetInt32(0); appInfo.path = dataReader.GetString(1); appInfo.application = dataReader.GetString(2); appInfo.page = dataReader.GetString(3); if (!dataReader.IsDBNull(4)) appInfo.title = dataReader.GetString(4); if (!dataReader.IsDBNull(5)) appInfo.description = dataReader.GetString(5); if (!dataReader.IsDBNull(6)) appInfo.extraInfo = dataReader.GetString(6); if (!dataReader.IsDBNull(7)) appInfo.contact = dataReader.GetString(7); if (!dataReader.IsDBNull(8)) appInfo.comment = dataReader.GetString(8); appInfo.width = dataReader.GetInt32(9); appInfo.height = dataReader.GetInt32(10); if (!dataReader.IsDBNull(11)) appInfo.dataSources = dataReader.GetString(11); if (!dataReader.IsDBNull(12)) appInfo.server = dataReader.GetString(12); if (!dataReader.IsDBNull(13)) appInfo.port = dataReader.GetInt32(13); if (!dataReader.IsDBNull(14)) appInfo.appURL = dataReader.GetString(14); if (!dataReader.IsDBNull(15)) appInfo.version = dataReader.GetString(15); if (!dataReader.IsDBNull(16)) appInfo.rev = dataReader.GetString(16); if (!dataReader.IsDBNull(17)) appInfo.appKey = dataReader.GetString(17); if (!dataReader.IsDBNull(18)) appInfo.appGuid = dataReader.GetString(18); } return appInfo; }
public static LabTask CreateLabTask(LabAppInfo appInfo, Coupon expCoupon, Ticket expTicket) { // set defaults DateTime startTime = DateTime.UtcNow; long duration = -1L; long experimentID = 0; int status = -1; string statusViName = null; string statusTemplate = null; string templatePath = null; LabDB dbManager = new LabDB(); string qualName = null; string fullName = null; // set defaults LabTask labTask = null; LabViewTask task = null; VirtualInstrument vi = null; LabViewInterface lvi = null; ////Parse experiment payload, only get what is needed string payload = expTicket.payload; XmlQueryDoc expDoc = new XmlQueryDoc(payload); string essService = expDoc.Query("ExecuteExperimentPayload/essWebAddress"); string startStr = expDoc.Query("ExecuteExperimentPayload/startExecution"); string durationStr = expDoc.Query("ExecuteExperimentPayload/duration"); string groupName = expDoc.Query("ExecuteExperimentPayload/groupName"); string userName = expDoc.Query("ExecuteExperimentPayload/userName"); if ((startStr != null) && (startStr.Length > 0)) { startTime = DateUtil.ParseUtc(startStr); } if ((durationStr != null) && (durationStr.Length > 0) && !(durationStr.CompareTo("-1") == 0)) { duration = Convert.ToInt64(durationStr); } if (appInfo.extraInfo != null && appInfo.extraInfo.Length > 0) { // Note should have either statusVI or template pair // Add Option for VNCserver access try { XmlQueryDoc viDoc = new XmlQueryDoc(appInfo.extraInfo); statusViName = viDoc.Query("extra/status"); statusTemplate = viDoc.Query("extra/statusTemplate"); templatePath = viDoc.Query("extra/templatePath"); } catch (Exception e) { string err = e.Message; } } // log the experiment for debugging Utilities.WriteLog("Experiment: " + experimentID + " Start: " + DateUtil.ToUtcString(startTime) + " \tduration: " + duration); long statusSpan = DateUtil.SecondsRemaining(startTime, duration); if ((appInfo.server != null) && (appInfo.server.Length > 0) && (appInfo.port > 0)) { lvi = new LabViewRemote(appInfo.server, appInfo.port); } else { lvi = new LabViewInterface(); } if (!lvi.IsLoaded(appInfo.application)) { vi = lvi.loadVI(appInfo.path, appInfo.application); vi.OpenFrontPanel(true, FPStateEnum.eVisible); } else { vi = lvi.GetVI(appInfo.path, appInfo.application); } if (vi == null) { status = -1; string err = "Unable to Find: " + appInfo.path + @"\" + appInfo.application; Utilities.WriteLog(err); throw new Exception(err); } // Get qualifiedName qualName = lvi.qualifiedName(vi); fullName = appInfo.path + @"\" + appInfo.application; status = lvi.GetVIStatus(vi); Utilities.WriteLog("CreateLabTask - " + qualName + ": VIstatus: " + status); switch (status) { case -10: throw new Exception("Error GetVIStatus: " + status); break; case -1: // VI not in memory throw new Exception("Error GetVIStatus: " + status); break; case 0: // eBad == 0 break; case 1: // eIdle == 1 vi in memory but not running FPStateEnum fpState = vi.FPState; if (fpState != FPStateEnum.eVisible) { vi.OpenFrontPanel(true, FPStateEnum.eVisible); } vi.ReinitializeAllToDefault(); break; case 2: // eRunTopLevel: this should be the LabVIEW application break; case 3: // eRunning //Unless the Experiment is reentrant it should be stopped and be reset. if(!appInfo.reentrant){ int stopStatus = lvi.StopVI(vi); if (stopStatus != 0) { lvi.AbortVI(vi); } vi.ReinitializeAllToDefault(); } break; default: throw new Exception("Error GetVIStatus: unknown status: " + status); break; } try { lvi.SetBounds(vi, 0, 0, appInfo.width, appInfo.height); Utilities.WriteLog("SetBounds: " + appInfo.application); } catch (Exception sbe) { Utilities.WriteLog("SetBounds exception: " + Utilities.DumpException(sbe)); } lvi.SubmitAction("unlockvi", lvi.qualifiedName(vi)); Utilities.WriteLog("unlockvi Called: "); // Set up in-memory and database task control structures DataSourceManager dsManager = null; // Create the labTask & store in database; labTask = dbManager.InsertTask(appInfo.appID, experimentID, groupName, startTime, duration, LabTask.eStatus.Scheduled, expTicket.couponId, expTicket.issuerGuid, null); if (labTask != null) { //Convert the generic LabTask to a LabViewTask task = new LabViewTask(labTask); } if ((statusTemplate != null) && (statusTemplate.Length > 0)) { statusViName = lvi.CreateFromTemplate(templatePath, statusTemplate, task.taskID.ToString()); } if (((essService != null) && (essService.Length > 0)) && ((appInfo.dataSources != null) && (appInfo.dataSources.Length > 0))) { // Create DataSourceManager to manage dataSocket connections dsManager = new DataSourceManager(); // set up an experiment storage handler ExperimentStorageProxy ess = new ExperimentStorageProxy(); ess.OperationAuthHeaderValue = new OperationAuthHeader(); ess.OperationAuthHeaderValue.coupon = expCoupon; ess.Url = essService; dsManager.essProxy = ess; dsManager.ExperimentID = experimentID; dsManager.AppKey = qualName; string[] sockets = appInfo.dataSources.Split(','); // Use the experimentID as the storage parameter foreach (string s in sockets) { LVDataSocket reader = new LVDataSocket(); dsManager.AddDataSource(reader); if (s.Contains("=")) { string[] nv = s.Split('='); reader.Type = nv[1]; reader.Connect(nv[0], LabDataSource.READ_AUTOUPDATE); } else { reader.Connect(s, LabDataSource.READ_AUTOUPDATE); } } TaskProcessor.Instance.AddDataManager(task.taskID, dsManager); } string taskData = null; taskData = LabTask.constructTaskXml(appInfo.appID, fullName,appInfo.rev, statusViName, essService); dbManager.SetTaskData(task.taskID, taskData); task.data = taskData; TaskProcessor.Instance.Add(task); return task; }
public static string constructSessionPayload(LabAppInfo appInfo, DateTime start, long duration, long taskID, string returnTarget, string user, string statusVI) { return constructSessionPayload(appInfo.appID,appInfo.title,appInfo.application,appInfo.rev,appInfo.appURL,appInfo.width,appInfo.height, start, duration, taskID, returnTarget, user, statusVI); }
///// <summary> ///// Parses the appInfo and experiment ticket, inserts the task into the database and ///// creates a dataManager and dataSources defined in the appInfo. ///// </summary> ///// <param name="appInfo"></param> ///// <param name="expCoupon"></param> ///// <param name="expTicket"></param> ///// <returns></returns> //public LabTask(LabAppInfo appInfo, Coupon expCoupon, Ticket expTicket) //{ // // set defaults // startTime = DateTime.UtcNow; // string statusName = null; // string statusTemplate = null; // string templatePath = null; // string qualName = null; // string fullName = null; // set defaults // long duration = -1L; // LabTask labTask = null; // LabDB dbManager = new LabDB(); // ////Parse experiment payload, only get what is needed // string payload = expTicket.payload; // XmlQueryDoc expDoc = new XmlQueryDoc(payload); // string essService = expDoc.Query("ExecuteExperimentPayload/essWebAddress"); // string startStr = expDoc.Query("ExecuteExperimentPayload/startExecution"); // string durationStr = expDoc.Query("ExecuteExperimentPayload/duration"); // string groupName = expDoc.Query("ExecuteExperimentPayload/groupName"); // string userName = expDoc.Query("ExecuteExperimentPayload/userName"); // string expIDstr = expDoc.Query("ExecuteExperimentPayload/experimentID"); // if ((startStr != null) && (startStr.Length > 0)) // { // startTime = DateUtil.ParseUtc(startStr); // } // if ((durationStr != null) && (durationStr.Length > 0) && !(durationStr.CompareTo("-1") == 0)) // { // duration = Convert.ToInt64(durationStr); // } // if ((expIDstr != null) && (expIDstr.Length > 0)) // { // experimentID = Convert.ToInt64(expIDstr); // } // if (appInfo.extraInfo != null && appInfo.extraInfo.Length > 0) // { // // Note should have either statusVI or template pair // // Add Option for VNCserver access // try // { // XmlQueryDoc viDoc = new XmlQueryDoc(appInfo.extraInfo); // statusName = viDoc.Query("extra/status"); // statusTemplate = viDoc.Query("extra/statusTemplate"); // templatePath = viDoc.Query("extra/templatePath"); // } // catch (Exception e) // { // string err = e.Message; // } // } // // log the experiment for debugging // Logger.WriteLine("Experiment: " + experimentID + " Start: " + DateUtil.ToUtcString(startTime) + " \tduration: " + duration); // long statusSpan = DateUtil.SecondsRemaining(startTime, duration); // //launchClient(experimentID, essService, appInfo); // //TODO: convert to InsertTaskLong() // // Create & store the labTask in database and return an LabTask object; // labTask = dbManager.InsertTask(appInfo.appID, experimentID, // groupName, startTime, duration, LabTask.eStatus.Scheduled, // expTicket.couponId, expTicket.issuerGuid, essService, null); // labTask.data = labTask.constructTaskXml(appInfo.appID, fullName, appInfo.rev, statusName, essService); // dbManager.SetTaskData(labTask.taskID, labTask.data); // if (((labTask.storage != null) && (labTask.storage.Length > 0))) // { // // Create DataSourceManager to manage dataSources // DataSourceManager dsManager = new DataSourceManager(); // // set up an experiment storage handler // ExperimentStorageProxy ess = new ExperimentStorageProxy(); // ess.OperationAuthHeaderValue = new OperationAuthHeader(); // ess.OperationAuthHeaderValue.coupon = expCoupon; // ess.Url = labTask.storage; // dsManager.essProxy = ess; // dsManager.ExperimentID = labTask.experimentID; // dsManager.AppKey = appInfo.appKey; // // Note these dataSources are written to by the application and sent to the ESS // if ((appInfo.dataSources != null) && (appInfo.dataSources.Length > 0)) // { // string[] sources = appInfo.dataSources.Split(','); // // Use the experimentID as the storage parameter // foreach (string s in sources) // { // // dsManager.AddDataSource(createDataSource(s)); // } // } // TaskProcessor.Instance.AddDataManager(labTask.taskID, dsManager); // } // TaskProcessor.Instance.Add(labTask); // return labTask; //} ///// <summary> ///// Parses the appInfo and experiment ticket, inserts the task into the database, ///// but does not create the DataManager. ///// </summary> ///// <param name="appInfo"></param> ///// <param name="expTicket"></param> ///// <returns></returns> //public LabTask(LabAppInfo appInfo, Ticket expTicket) //{ // // set defaults // DateTime startTime = DateTime.UtcNow; // long experimentID = 0; // string statusName = null; // string statusTemplate = null; // string templatePath = null; // string qualName = null; // string fullName = null; // set defaults // long duration = -1L; // LabTask labTask = null; // LabDB dbManager = new LabDB(); // ////Parse experiment payload, only get what is needed // string payload = expTicket.payload; // XmlQueryDoc expDoc = new XmlQueryDoc(payload); // string essService = expDoc.Query("ExecuteExperimentPayload/essWebAddress"); // string startStr = expDoc.Query("ExecuteExperimentPayload/startExecution"); // string durationStr = expDoc.Query("ExecuteExperimentPayload/duration"); // string groupName = expDoc.Query("ExecuteExperimentPayload/groupName"); // string userName = expDoc.Query("ExecuteExperimentPayload/userName"); // string expIDstr = expDoc.Query("ExecuteExperimentPayload/experimentID"); // if ((startStr != null) && (startStr.Length > 0)) // { // startTime = DateUtil.ParseUtc(startStr); // } // if ((durationStr != null) && (durationStr.Length > 0) && !(durationStr.CompareTo("-1") == 0)) // { // duration = Convert.ToInt64(durationStr); // } // if ((expIDstr != null) && (expIDstr.Length > 0)) // { // experimentID = Convert.ToInt64(expIDstr); // } // if (appInfo.extraInfo != null && appInfo.extraInfo.Length > 0) // { // // Note should have either statusVI or template pair // // Add Option for VNCserver access // try // { // XmlQueryDoc viDoc = new XmlQueryDoc(appInfo.extraInfo); // statusName = viDoc.Query("extra/status"); // statusTemplate = viDoc.Query("extra/statusTemplate"); // templatePath = viDoc.Query("extra/templatePath"); // } // catch (Exception e) // { // string err = e.Message; // } // } // // log the experiment for debugging // Logger.WriteLine("Experiment: " + experimentID + " Start: " + DateUtil.ToUtcString(startTime) + " \tduration: " + duration); // long statusSpan = DateUtil.SecondsRemaining(startTime, duration); // //launchClient(experimentID, essService, appInfo); // string taskData = null; // taskData = LabTask.constructTaskXml(appInfo.appID, fullName, appInfo.rev, statusName, essService); // // Create & store the labTask in database and return an LabTask object; // labTask = dbManager.InsertTask(appInfo.appID, experimentID, // groupName, startTime, duration, LabTask.eStatus.Scheduled, // expTicket.couponId, expTicket.issuerGuid, essService, taskData); // return labTask; //} public virtual void launchClient(long experimentID, string essService, LabAppInfo appInfo) { // Dummy method }