コード例 #1
0
ファイル: DataMonitorManager.cs プロジェクト: BrianGoff/BITS
        /// <summary>
        /// Ask the manager to add a new Data Monitor to the collection.
        /// [NOTE:  The parms are BITS-oriented but can be any app-specific wrapper
        /// used to pass in the details required to instantiate the Data Monitor(s)]
        /// </summary>
        /// <param name="job"></param>
        /// <param name="dmDetails"></param>
        public void AddDataMonitor(IJob job, DataMonitorDetails dmDetails)
        {
            #region early return

            if (_dmDictionary.ContainsKey(dmDetails.JobKeyCode))
            {
                log.WarnFormat("Attempting to re-add existing Data Monitor.");
                return;
            }

            // test connection to database            
            if (!DatabaseUtils.Connect(dmDetails.ConnectionString))
                throw new ApplicationException("Database connection not established.");
            
            #endregion

            //keep a list of server connection strings
            AddServerConnection(dmDetails.ConnectionString);

            // here's the juice
            DataMonitor dm = new DataMonitor(dmDetails.ConnectionString, dmDetails.QueryString, dmDetails.CommandType);
            lock (s_lock)
            {
                dm.Id = dmDetails.JobKeyCode;  //[Note:  This is BITS-specific but any name can be provided.]
                dm.OnError += OnDataError;
                dm.OnData += OnData;

                _dmDictionary[dmDetails.JobKeyCode] = dm;
                _dmDetailsDictionary[dmDetails.JobKeyCode] = dmDetails;
                _dmDictionary[dmDetails.JobKeyCode].Start();
            }
        }
コード例 #2
0
ファイル: ExecutionEngine.cs プロジェクト: BrianGoff/BITS
        public void DataMonitorTrigger(DataMonitorDetails dmDetails, DataTable dt)
        {
            if (dt == null)
                log.WarnFormat("Received notification from DataMonitor event trigger but datatable is null.");

            log.InfoFormat("Received notification from DataMonitor event trigger.  Datatable as {0} records.", dt.Rows.Count);

            if (jobWrappers.ContainsKey(dmDetails.JobName))
            {
                int numSecs = 1;
                while (jobWrappers[dmDetails.JobName].IsInititalized == false)
                {
                    log.WarnFormat("Waiting for job {0} to initialize before allowing it to execute...Wait time={1} secs", dmDetails.JobName, numSecs++);
                    Thread.Sleep(1000);
                }

                ((State)jobWrappers[dmDetails.JobName].JobGlobalState).StartupBusData.Add(dmDetails.NotificationModuleName, dt);
                log.InfoFormat("Launching job {0} from DataMonitor (Sql Notification).", dmDetails.JobName);
                LaunchJob(dmDetails.JobName, String.Empty, StateEnums.ExecutionMode.Execution);
            }
            else
                log.ErrorFormat("Job wrapper collection does not contain job {0}", dmDetails.JobName);
        }
コード例 #3
0
ファイル: DataMonitor.cs プロジェクト: BrianGoff/BITS
        public override StateEnums.Status Initialize(IJob _job)
        {
            job = _job;

            if (String.IsNullOrEmpty(Connection) ||
                !ConfigUtils.GlobalConfig.ConnectionSettings.Connections.ContainsKey(Connection))
                throw new ApplicationException(String.Format("Connection {0} is not defined.  Please add to config file and restart the service.", Connection));

            DataMonitorDetails details = new DataMonitorDetails();
            details.JobName = jobName;
            details.JobKeyCode = job.KeyHash.ToString();
            details.NotificationModuleName = Name;
            details.ConnectionString = ((DbConnectionDetail)ConfigUtils.GlobalConfig.ConnectionSettings.Connections[connection]).SyncConnectString;
            details.QueryString = queryStr;
            details.CommandType = (System.Data.CommandType) Enum.Parse(typeof (System.Data.CommandType), commandType);

            dmManager.AddDataMonitor(job,details);

            log.Info(_job.KeyHash, "DataMonitor initialized.");
            log.InfoFormat(_job.KeyHash, " connStr={0}", details.ConnectionString);
            log.InfoFormat(_job.KeyHash, " queryStr={0}", details.QueryString);
            return StateEnums.Status.WaitingForSqlNotification;
        }