Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 private void JobThreadStart(JobHolder holder)
 {
     _workerPool.QueueWorkItem(new WorkItemCallback(JobInvoke), holder);
 }