Program.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. var chromes = Process.GetProcesses("chrome.exe");
  39. foreach(var chrome in chromes)
  40. {
  41. chrome.Kill();
  42. }
  43. try
  44. {
  45. ProbeTask.InitDebugFolder();
  46. await using var browser = (Browser)await Puppeteer.LaunchAsync(new LaunchOptions
  47. {
  48. Headless = false,
  49. });
  50. await using var page = await browser.NewPageAsync();
  51. await page.SetViewportAsync(new ViewPortOptions
  52. {
  53. Width = 1920,
  54. Height = 1080
  55. });
  56. var superImageTask = new SuperImageTask(batchTask, 10);
  57. await superImageTask.RunAsync(page);
  58. error = false;
  59. }
  60. catch (Exception ex)
  61. {
  62. Logger.WriteLine($"Run super image task error:{ex}");
  63. error = true;
  64. try
  65. {
  66. await DingTalk.SendMessageAsync($"Run super image task error:{ex.Message}, will restart in 10s.");
  67. }
  68. catch(Exception dx)
  69. {
  70. Logger.WriteLine($"Send dingtalk message error:{dx.Message}");
  71. }
  72. await Task.Delay(10000);
  73. }
  74. }
  75. }
  76. }
  77. else if (command == "list")
  78. {
  79. using (var db = new Database())
  80. {
  81. Console.WriteLine($"Id \t Name \t Pages \t Exams \t Start \t End ");
  82. var batchTasks = db.GetBatchTasks();
  83. foreach (var batchTask in batchTasks)
  84. {
  85. 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}");
  86. }
  87. }
  88. }
  89. else
  90. {
  91. Console.WriteLine("Use one of 'create','run','list' commands to start this application.");
  92. }
  93. }