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)); } } }
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)); } }
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; } } }