Added poller disablement via settings

Necessary to disable pollers, if desired. Can be handy for deployment purposes should you not want these pollers to run and only have access to the environment variables.

Issue: 187
Milestone: minor
This commit is contained in:
Brooke Kuhlmann
2025-07-31 09:33:13 -06:00
parent f364347624
commit ea23e24172
6 changed files with 76 additions and 8 deletions
+6 -2
View File
@@ -8,7 +8,7 @@ module Terminus
module Firmware
# Polls the Core Firmware API on a scheduled interval for new firmware versions.
class Poller
include Deps["aspects.firmware.synchronizer"]
include Deps[:settings, "aspects.firmware.synchronizer"]
include Initable[kernel: Kernel]
include Dry::Monads[:result]
@@ -29,10 +29,14 @@ module Terminus
def keep_alive seconds
kernel.loop do
synchronizer.call
sync_or_skip
kernel.sleep seconds
end
end
def sync_or_skip
settings.firmware_poller ? synchronizer.call : kernel.puts("Firmware polling disabled.")
end
end
end
end
+6 -2
View File
@@ -8,7 +8,7 @@ module Terminus
module Models
# Polls the Core Models API on a scheduled interval for new (or updated) models.
class Poller
include Deps["aspects.models.synchronizer"]
include Deps[:settings, "aspects.models.synchronizer"]
include Initable[kernel: Kernel]
include Dry::Monads[:result]
@@ -29,10 +29,14 @@ module Terminus
def keep_alive seconds
kernel.loop do
synchronizer.call
sync_or_skip
kernel.sleep seconds
end
end
def sync_or_skip
settings.model_poller ? synchronizer.call : kernel.puts("Model polling disabled.")
end
end
end
end
+13 -4
View File
@@ -7,7 +7,12 @@ module Terminus
module Screens
# Polls the Core Display API on a scheduled interval for new images to display locally.
class Poller
include Deps[:trmnl_api, "aspects.screens.synchronizer", repository: "repositories.device"]
include Deps[
:settings,
:trmnl_api,
"aspects.screens.synchronizer",
repository: "repositories.device"
]
include Initable[kernel: Kernel]
include Dry::Monads[:result]
@@ -28,14 +33,18 @@ module Terminus
def keep_alive seconds
kernel.loop do
process_devices
sync_or_skip
kernel.sleep seconds
end
end
def process_devices = repository.all.select(&:proxy).each { |device| process device }
def sync_or_skip
settings.screen_poller ? process_devices : kernel.puts("Screen polling disabled.")
end
def process device
def process_devices = repository.all.select(&:proxy).each { |device| sync device }
def sync device
trmnl_api.display(token: device.api_key).bind { |record| synchronizer.call record }
end
end
+17
View File
@@ -8,6 +8,8 @@ RSpec.describe Terminus::Aspects::Firmware::Poller do
let(:synchronizer) { instance_spy Terminus::Aspects::Firmware::Synchronizer }
let(:kernel) { class_spy Kernel, sleep: 0 }
include_context "with main application"
describe "#call" do
before { allow(kernel).to receive(:loop).and_yield }
@@ -29,5 +31,20 @@ RSpec.describe Terminus::Aspects::Firmware::Poller do
poller.call
expect(synchronizer).to have_received(:call)
end
context "when disabled" do
before do
allow(settings).to receive(:firmware_poller).and_return false
poller.call
end
it "prints message" do
expect(kernel).to have_received(:puts).with("Firmware polling disabled.")
end
it "doesn't synchronize" do
expect(synchronizer).not_to have_received(:call)
end
end
end
end
+17
View File
@@ -8,6 +8,8 @@ RSpec.describe Terminus::Aspects::Models::Poller do
let(:synchronizer) { instance_spy Terminus::Aspects::Models::Synchronizer }
let(:kernel) { class_spy Kernel, sleep: 0 }
include_context "with main application"
describe "#call" do
before { allow(kernel).to receive(:loop).and_yield }
@@ -29,5 +31,20 @@ RSpec.describe Terminus::Aspects::Models::Poller do
poller.call
expect(synchronizer).to have_received(:call)
end
context "when disabled" do
before do
allow(settings).to receive(:model_poller).and_return false
poller.call
end
it "prints message" do
expect(kernel).to have_received(:puts).with("Model polling disabled.")
end
it "doesn't synchronize" do
expect(synchronizer).not_to have_received(:call)
end
end
end
end
+17
View File
@@ -15,6 +15,8 @@ RSpec.describe Terminus::Aspects::Screens::Poller, :db do
let(:synchronizer) { instance_spy Terminus::Aspects::Screens::Synchronizer }
include_context "with main application"
describe "#call" do
let(:devices) { [Factory[:device, proxy: true]] }
@@ -73,5 +75,20 @@ RSpec.describe Terminus::Aspects::Screens::Poller, :db do
expect(synchronizer).not_to have_received(:call)
end
end
context "when disabled" do
before do
allow(settings).to receive(:screen_poller).and_return false
poller.call
end
it "prints message" do
expect(kernel).to have_received(:puts).with("Screen polling disabled.")
end
it "doesn't synchronize" do
expect(synchronizer).not_to have_received(:call)
end
end
end
end