Skip to content

Commit

Permalink
Merge pull request #54 from bananasov/feature/ap-energy-detector
Browse files Browse the repository at this point in the history
Add Advanced Peripherals Energy Detector InputAdapter
  • Loading branch information
cyberbit authored Jun 21, 2024
2 parents cd99739 + ba4964d commit 25249ec
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/telem/lib/input.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ return {
fusionReactor = require 'telem.lib.input.mekanism.FusionReactorInputAdapter',
},

advancedPeripherals = {
energyDetector = require 'telem.lib.input.advancedPeripherals.EnergyDetectorInputAdapter',
},

-- modem
secureModem = require 'telem.lib.input.SecureModemInputAdapter'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
local o = require 'telem.lib.ObjectModel'

local InputAdapter = require 'telem.lib.InputAdapter'
local Metric = require 'telem.lib.Metric'
local MetricCollection = require 'telem.lib.MetricCollection'

local BaseAdvancedPeripheralsAdapter = o.class(InputAdapter)
BaseAdvancedPeripheralsAdapter.type = 'BaseAdvancedPeripheralsAdapter'

function BaseAdvancedPeripheralsAdapter:constructor (peripheralName)
self:super('constructor')

self.prefix = 'ap:'

self.queries = {}

-- boot components
self:setBoot(function ()
self.components = {}

self:addComponentByPeripheralID(peripheralName)
end)()
end

local function queueHelper (results, index, query)
return function ()
results[index] = Metric(query:metricable():result())
end
end

function BaseAdvancedPeripheralsAdapter:read ()
self:boot()

local source, component = next(self.components)

local tempMetrics = {}
local queue = {}

for _, category in ipairs(self.categories) do
for k, v in pairs(self.queries[category]) do
table.insert(queue, queueHelper(
tempMetrics,
#queue + 1,
v:from(component):with('name', self.prefix .. k):with('source', source)
))
end
end

parallel.waitForAll(table.unpack(queue))

return MetricCollection(table.unpack(tempMetrics))
end

return BaseAdvancedPeripheralsAdapter
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
local o = require 'telem.lib.ObjectModel'
local t = require 'telem.lib.util'
local fn = require 'telem.vendor'.fluent.fn

local BaseAdvancedPeripheralsInputAdapter = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter'

local EnergyDetectorInputAdapter = o.class(BaseAdvancedPeripheralsInputAdapter)
EnergyDetectorInputAdapter.type = 'EnergyDetectorInputAdapter'

function EnergyDetectorInputAdapter:constructor (peripheralName, categories)
self:super('constructor', peripheralName)

-- TODO this will be a configurable feature later
self.prefix = 'apenergy:'

-- TODO make these constants
local allCategories = {
'basic',
}

if not categories then
self.categories = { 'basic' }
elseif categories == '*' then
self.categories = allCategories
else
self.categories = categories
end

self.queries = {
basic = {
transfer_rate = fn():call('getTransferRate'):energyRate(),
transfer_rate_limit = fn():call('getTransferRateLimit'):energyRate(),
}
}
end

return EnergyDetectorInputAdapter

0 comments on commit 25249ec

Please # to comment.