/// <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;
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
 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;
        }
Beispiel #5
0
 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;
        }
Beispiel #8
0
        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;
        }
Beispiel #9
0
 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);
 }
Beispiel #10
0
        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;
        }
Beispiel #11
0
        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;
        }
Beispiel #12
0
        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;
        }
Beispiel #13
0
 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);
 }
Beispiel #14
0
 ///// <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
 }