示例#1
0
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Program.args = new ArgumentMap();
            Program.args.Init(args);

            try
            {
                Application.Run(new Form1());
            }
            catch (Exception ex)
            {
                int count = int.Parse(Program.args.GetOption("-r", "0"));
                if (count < 3)
                {
                    Notificator.HangoutsChat chat = new Notificator.HangoutsChat(GetConfigValue("WebhookUrl"));
                    MessageBuilder           mb   = new MessageBuilder(0, ex.ToString());
                    chat.Send(mb.GetMessage(MessageBuilder.ReportLevel.APPLICATION_ERROR));
                    System.Threading.Thread.Sleep(3000);
                    Restart(++count);
                }
                else
                {
                    Notificator.HangoutsChat chat = new Notificator.HangoutsChat(GetConfigValue("WebhookUrl"));
                    MessageBuilder           mb   = new MessageBuilder(0, ex.ToString());
                    chat.Send(mb.GetMessage(MessageBuilder.ReportLevel.APPLICATION_RESTARTING_MISSED));
                }
            }
        }
示例#2
0
 private void Form1_Load(object sender, EventArgs e)
 {
     this.ActiveControl = this.buttonRun;
     if (Program.args.HasSwitch("-a") || Program.args.HasSwitch("--autostart"))
     {
         if (!isRunning)
         {
             this.buttonRun.PerformClick();
         }
     }
     if (Program.args.HasSwitch("-r") || Program.args.HasSwitch("--restarted"))
     {
         Notificator.HangoutsChat chat = new Notificator.HangoutsChat(this.textBoxWebhook.Text);
         MessageBuilder           mb   = new MessageBuilder();
         chat.Send(mb.GetMessage(MessageBuilder.ReportLevel.APPLICATION_RESTARTED));
     }
 }
示例#3
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;
                }
            }
        }