/// <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(); } }
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); }
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; }