task_manager.rb 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. module RimeDeploy
  2. class TaskManager
  3. def initialize
  4. @osname = nil
  5. @proxy = nil
  6. @queue = nil
  7. @current_job = nil
  8. check_os
  9. end
  10. def call
  11. require "./lib/os/#{@osname}.job.rb"
  12. job_group_klass = Object.const_get("#{@osname.capitalize}Jobs")
  13. @proxy = job_group_klass.new
  14. @queue = @proxy.queue
  15. while @queue.size > 0
  16. @current_job = proxy.queue.pop
  17. job.result = job.exe
  18. dispatch_job(result)
  19. end
  20. end
  21. def dispatch_job
  22. if result == false
  23. # 任务失败
  24. puts "The job meets errors. What next do you want?"
  25. puts "Enter first character : c(ontinue) /e(xit)/ r(etry) /s(kip)"
  26. next_step = gets
  27. next_step.strip!
  28. case next_step.strip!
  29. when "c"
  30. puts "contine..."
  31. when "e"
  32. puts ""
  33. puts "Bye~"
  34. exit 0
  35. when "r"
  36. result = @current_job.rollback
  37. if result
  38. @queue.push(@current_job)
  39. @current_job = nil
  40. else
  41. puts "#{@current_job.class.to_s} rollback failed."
  42. end
  43. end
  44. end
  45. end
  46. private
  47. def check_os
  48. case RUBY_PLATFORM
  49. when /darwin/
  50. @osname = "mac"
  51. when /linux/
  52. @osname = "linux"
  53. when /unix/
  54. @osname = "unix"
  55. when /mswin|win32|mingw|cygwin/
  56. @osname = "win"
  57. call_exit
  58. else
  59. call_exit
  60. end
  61. end
  62. def call_exit
  63. puts "We don't support this system."
  64. end
  65. end
  66. end