Пример #1
0
 private bool IsStatusChanged(RPA_STATUS newStatus)
 {
     return(status != newStatus);
 }
Пример #2
0
        public async void Run()
        {
            string filePath = Path.Combine(logFileDir, logFileName);

            traialsCount++;

            // TODO
            // ファイルがなかった場合の処理は後で書く
            if (!File.Exists(filePath))
            {
                return;
            }

            DateTime lastUpdatedTime = File.GetLastWriteTime(filePath);
            DateTime nMinutesAgo     = DateTime.Now.AddMinutes(-this.logUpdateInterval);

            string logs     = GetLastLogs(1);
            bool   hasError = false;

            Match match = Regex.Match(logs, LOG_REGEX);

            if (match.Success && match.Groups.Count > 2)
            {
                for (int i = 2; i < match.Groups.Count; i++)
                {
                    if (match.Groups[i].Value != "0")
                    {
                        hasError = true;
                        break;
                    }
                }
            }
            else
            {
                hasError = true;
            }


            if (hasError)
            {
                form1.AddLogFromAnotherThread("【エラー】書き込まれたログからエラーを検知しました");
                errorsCount++;
                RPA_STATUS newStatus = RPA_STATUS.ERROR;

                if (errorReport && IsStatusChanged(newStatus))
                {
                    MessageBuilder mb = new MessageBuilder(0, GetLastLogs(3));
                    chat.Send(mb.GetMessage(MessageBuilder.ReportLevel.ERROR), !IsFailed);
                }
                status = newStatus;
            }
            else
            {
                if (lastUpdatedTime <= nMinutesAgo)
                {
                    missingsCount++;
                    RPA_STATUS newStatus = RPA_STATUS.MISSING;

                    int diffMinutes = DiffTimesAsMinutes(lastUpdatedTime, nMinutesAgo);

                    form1.AddLogFromAnotherThread($"【警告】{diffMinutes}分間ログが書き込まれていません");
                    if (errorReport && IsStatusChanged(newStatus))
                    {
                        MessageBuilder mb = new MessageBuilder(diffMinutes, GetLastLogs(3));
                        chat.Send(mb.GetMessage(MessageBuilder.ReportLevel.MISSING), !IsFailed);
                    }
                    status = newStatus;
                }
                else
                {
                    if (IsFailed)
                    {
                        form1.AddLogFromAnotherThread("【復旧】復旧を確認しました");
                        if (errorReport)
                        {
                            MessageBuilder mb = new MessageBuilder(0, GetLastLogs(3));
                            chat.Send(mb.GetMessage(MessageBuilder.ReportLevel.RESTORING), false);
                        }
                    }
                    else
                    {
                        form1.AddLogFromAnotherThread("【正常】ログを確認しました");
                        if (normalReport)
                        {
                            MessageBuilder mb = new MessageBuilder(0, GetLastLogs(3));
                            chat.Send(mb.GetMessage(MessageBuilder.ReportLevel.SUCCESS));
                        }
                    }
                    status = RPA_STATUS.SUCCESS;
                }
            }
        }
Пример #3
0
 public void ResetAll()
 {
     status = RPA_STATUS.SUCCESS;
     ResetCount();
 }