diff --git a/app/controllers/modbus_controller.rb b/app/controllers/modbus_controller.rb index 559e264..380dcda 100644 --- a/app/controllers/modbus_controller.rb +++ b/app/controllers/modbus_controller.rb @@ -1,6 +1,17 @@ class ModbusController < ApplicationController def index @schedule = Schedule.all + @modbus_running = Modbus::PollingService.running? + end + + def start + Modbus::PollingService.start + redirect_to modbus_index_path + end + + def stop + Modbus::PollingService.stop + redirect_to modbus_index_path end def schedule_edit diff --git a/app/services/modbus/polling_service.rb b/app/services/modbus/polling_service.rb index b0f9dae..bc38eb2 100644 --- a/app/services/modbus/polling_service.rb +++ b/app/services/modbus/polling_service.rb @@ -2,9 +2,9 @@ module Modbus class PollingService class << self def start - return if @thread&.alive? + return if $modbus_polling_threads.any?(&:alive?) - @thread = Thread.new do + thread = Thread.new do puts "[#{Time.current}] Modbus polling service 시작됨" last_logged_hour = nil loop do @@ -32,14 +32,17 @@ module Modbus end end end + $modbus_polling_threads << thread end def stop - if @thread - @thread.exit - @thread = nil - puts "[#{Time.now}] Modbus polling service 중지됨" - end + $modbus_polling_threads.each { |t| t.kill if t.alive? } + $modbus_polling_threads.clear + puts "[#{Time.now}] Modbus polling service 중지됨" + end + + def running? + $modbus_polling_threads.any?(&:alive?) end end end diff --git a/app/views/modbus/index.html.erb b/app/views/modbus/index.html.erb index ae77f45..1e8ec6e 100644 --- a/app/views/modbus/index.html.erb +++ b/app/views/modbus/index.html.erb @@ -1,3 +1,5 @@ + + <% if flash[:notice] %>
<%= flash[:notice] %> @@ -15,4 +17,20 @@
<% end %> -<%= link_to "수정", "/modbus/schedule_edit", class: "btn btn-primary" %> +
+ <%= button_to "수정", schedule_edit_modbus_index_path, method: :get, class: "btn bg-primary" %> +
+ +
+ <%= button_to "스케쥴러 시작", start_modbus_index_path, method: :post, class: "btn bg-accept" %> + <%= button_to "스케쥴러 정지", stop_modbus_index_path, method: :post, class: "btn bg-danger" %> +
+ +
+ 스케쥴러 상태: + <% if @modbus_running %> + 실행 중 + <% else %> + 정지됨 + <% end %> +
diff --git a/app/views/modbus/schedule_edit.html.erb b/app/views/modbus/schedule_edit.html.erb index c986172..b2cd467 100644 --- a/app/views/modbus/schedule_edit.html.erb +++ b/app/views/modbus/schedule_edit.html.erb @@ -1,4 +1,4 @@ -<%= form_with url: "/modbus/schedule_edit_update", method: :post do %> +<%= form_with url: schedule_edit_update_modbus_index_path, method: :post do %> <% @schedule.each do |s| %>
<%= s.hour %>시
diff --git a/config/initializers/modbus_service.rb b/config/initializers/modbus_service.rb index 490c40b..c1c0645 100644 --- a/config/initializers/modbus_service.rb +++ b/config/initializers/modbus_service.rb @@ -1,3 +1,5 @@ +$modbus_polling_threads ||= [] + Rails.application.config.after_initialize do Modbus::PollingService.start end diff --git a/config/routes.rb b/config/routes.rb index a64c5f0..788f395 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,9 +14,8 @@ Rails.application.routes.draw do resources :modbus do collection do - get "start" - get "stop" - get "status" + post "start" + post "stop" get "schedule_edit" post "schedule_edit_update" end diff --git a/db/seeds.rb b/db/seeds.rb index 64f6801..b19f220 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -8,6 +8,6 @@ # MovieGenre.find_or_create_by!(name: genre_name) # end -(0..23).each_with_index do |h, index| - Schedule.create!(hour: h, temperature: index) +(0..23).each do | h | + Schedule.create!(hour: h, temperature: 15.0) end