mirror of
https://github.com/usetrmnl/terminus.git
synced 2026-08-13 14:29:27 -07:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user