Exemple #1
0
        private void DoMonitor()
        {
            DateTime lastCheck = DateTime.Now;
            bool     firstBeat = false;

            while (!token.IsCancellationRequested)
            {
                //If task is faulted
                CheckTaskFault(longRunTask, ref longRunFault);

                if (longRunFault != null && !longRunFault.Recovered && DateTime.Now > longRunFault.FaultTime + new TimeSpan(0, 0, Convert.ToInt16(Math.Pow(2, longRunFault.FaultCount)) * 10))
                {
                    longRunTask            = Task.Run(() => DoLongRun(), token);
                    longRunFault.Recovered = true;
                }

                DateTime newCheck = DateTime.Now;
                if (!firstBeat || newCheck - lastCheck > heartBeatPeriod)
                {
                    firstBeat = true;
                    lastCheck = newCheck;
                    string        basepaths;
                    List <QMSite> sites = GetSites(out basepaths);
                    if (sites != null)
                    {
                        foreach (QMSite site in sites)
                        {
                            string sXML = BuildProductInfoString(site);
                            try
                            {
                                using (var qm = new QueueManager(sXML))
                                {
                                    qm.AddHeartBeat();
                                }
                            }
                            catch (Exception ex)
                            {
                                ExceptionHandler("MonitorThread, Site: " + site.basePath, ex);
                            }
                        }
                    }
                }
                Thread.Sleep(doMonitorPeriod);
            }
        }