Program.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // See https://aka.ms/new-console-template for more information
  2. using PuppeteerSharp;
  3. using StationProbe;
  4. using System.Diagnostics;
  5. if (args.Length == 0)
  6. {
  7. Console.WriteLine("Use one of 'create','run','list' commands to start this application.");
  8. }
  9. else
  10. {
  11. var command = args[0];
  12. if (command == "create")
  13. {
  14. var name = args[1];
  15. var start = DateTime.Parse(args[2]);
  16. var end = DateTime.Parse(args[3]);
  17. using (var db = new Database())
  18. {
  19. db.AddBatchTask(new BatchTask() { Name = name, Start = start, End = end });
  20. }
  21. }
  22. else if (command == "run")
  23. {
  24. var batchTaskId = int.Parse(args[1]);
  25. var batchTask = new Database().GetBatchTask(batchTaskId);
  26. if (batchTask == null)
  27. {
  28. Console.WriteLine($"No batch task for id:{batchTaskId}, please create batch task before run it.");
  29. }
  30. else
  31. {
  32. Console.WriteLine("Downloading headless browser...");
  33. await new BrowserFetcher().DownloadAsync();
  34. bool error = true;
  35. while (error)
  36. {
  37. //Kill all chrome exes before start.
  38. Logger.WriteLine("Killing existing chromes...");
  39. var chromes = Process.GetProcessesByName("chrome");
  40. foreach(var chrome in chromes)
  41. {
  42. chrome.Kill();
  43. }
  44. Logger.WriteLine($"{chromes.Length} chromes where killed.");
  45. await Task.Delay(DelayConfig.KillChromeDelay);
  46. try
  47. {
  48. ProbeTask.InitDebugFolder();
  49. await using var browser = (Browser)await Puppeteer.LaunchAsync(new LaunchOptions
  50. {
  51. Headless = false,
  52. });
  53. await using var page = await browser.NewPageAsync();
  54. await page.SetViewportAsync(new ViewPortOptions
  55. {
  56. Width = 1920,
  57. Height = 1080
  58. });
  59. var superImageTask = new SuperImageTask(batchTask, 15);
  60. await superImageTask.RunAsync(page);
  61. error = false;
  62. }
  63. catch (Exception ex)
  64. {
  65. Logger.WriteLine($"Run super image task error:{ex}");
  66. error = true;
  67. try
  68. {
  69. await DingTalk.SendMessageAsync($"Run super image task error:{ex.Message}, will restart in 10s.");
  70. }
  71. catch(Exception dx)
  72. {
  73. Logger.WriteLine($"Send dingtalk message error:{dx.Message}");
  74. }
  75. await Task.Delay(DelayConfig.RetryDelay);
  76. }
  77. }
  78. }
  79. }
  80. else if (command == "list")
  81. {
  82. using (var db = new Database())
  83. {
  84. Console.WriteLine($"Id \t Name \t Pages \t Exams \t Start \t End ");
  85. var batchTasks = db.GetBatchTasks();
  86. foreach (var batchTask in batchTasks)
  87. {
  88. Console.WriteLine($"{batchTask.Id} \t {batchTask.Name} \t {batchTask.PageCount} \t {batchTask.ExamCount} \t {batchTask.Start:yyyy-MM-dd} \t {batchTask.End:yyyy-MM-dd}");
  89. }
  90. }
  91. }
  92. else
  93. {
  94. Console.WriteLine("Use one of 'create','run','list' commands to start this application.");
  95. }
  96. }