private void CycleJobTracker() { while (true) { DateTime _nowTime = DateTime.Now; try { lock (_jsLock) { foreach (JobNode _node in _jobNodes) { if (_node.state == 1) { foreach (Job _job in _node.jobs) { if (_job.state == 1) { if (JobTimeCheck(_job, _nowTime)) { if (_job.type != Job.JobType.NULL) { _node.uWorker++; _job.state = 2; JobHolder _holder = new JobHolder(); _holder.node = _node; _holder.job = _job; JobThreadStart(_holder); } } } } } } } } catch (Exception e) { Logger.Log("(Schedule) INTERNAL-EXECPTION: " + e.Message, Logger.MessageType.EMERGENCY); } if (_state == 2) { break; } Thread.Sleep(_cycleTime); } }
private object JobInvoke(object holder) { JobHolder _holder = (JobHolder)holder; JobNode _node = _holder.node; Job _job = _holder.job; try { _job.tStart = DateTime.Now; try { _job.Execute(_node.ip); } catch (Exception e) { Logger.Log("(JOB-THREAD) Job threw a exception: " + e.Message, Logger.MessageType.ERROR); _job.outp.outState = JobOutput.OutState.Exception; } _job.tStop = DateTime.Now; _job.tSpan = _job.tStop.Subtract(_job.tStart); // Global OutDescriptors _job.outp.outputs[0].dataObject = _job.outp.outState.ToString(); _job.outp.outputs[1].dataObject = _job.tSpan.Milliseconds; _db.InsertJob(_node, _job); if (MadConf.conf.NOTI_ENABLE) { if (_job.notiFlag) { List <JobRule> _bRules = GetBrokenRules(_job); if (_bRules.Count != 0) { string _mailSubject = GenMailSubject(_job, "Job (target='" + _holder.node.ip.ToString() + "') finished with a not expected result!"); string _mailContent = ""; _mailContent += "JobNode-GUID: '" + _node.guid + "'\n"; _mailContent += "JobNode-ID: '" + _node.id + "'\n"; _mailContent += "JobNode-IP: '" + _node.ip.ToString() + "'\n"; _mailContent += "JobNode-MAC: '" + _node.mac.ToString() + "'\n\n"; _mailContent += GenJobInfo(_job); _mailContent += GenBrokenRulesText(_job.outp, _bRules); if (_job.settings == null) { NotificationGetParams.SetSendMail(_mailSubject, _mailContent, 3); } else { if (_job.settings.login == null) { NotificationGetParams.SetSendMail(_mailSubject, _mailContent, 3); } else { if (_job.settings.login.smtpAddr == null || _job.settings.login.port == 0) { NotificationGetParams.SetSendMail(_mailSubject, _mailContent, 3); } else { NotificationGetParams.SetSendMail(_job.settings.mailAddr, _mailSubject, _mailContent, 3, _job.settings.login.smtpAddr, _job.settings.login.mail, _job.settings.login.password, _job.settings.login.port); } } } } } } } catch (Exception e) { Logger.Log("(JobSchedule) JOB-THREAD-EXCEPTION: " + e.ToString() + "\n" + e.StackTrace, Logger.MessageType.ERROR); } finally { _job.state = 1; _node.uWorker--; } return(null); }
private void JobThreadStart(JobHolder holder) { _workerPool.QueueWorkItem(new WorkItemCallback(JobInvoke), holder); }