[OC] Мониторинг флакс сети и процессоров 2.0
Автор: GooodGame · Обновлён:
Это обновлённая версия мониторинга с отрисовкой графиков. За основу взят базовый гайд по мониторингу HiTech 1.12.2.
Подготовка и установка
Подготовьте компьютер с установленной OpenOS. Подключите один адаптер к МЭ-контроллеру, а второй — к Флакс-контроллеру. Подробная схема подключения есть в базовом гайде по ссылке выше.
- Интернет-карта
- Адаптер, подключенный к МЭ-контроллеру
- Адаптер, подключенный к Флакс-контроллеру
Исходный код программы находится в спойлере ниже. Скопируйте его и сохраните в файл monitoring.lua. Загрузите файл на любой удобный сервис, который выдаёт прямую ссылку на содержимое, затем выполните в терминале компьютера команду:
wget <прямая_ссылка_на_файл> monitoring.lua
Если загружать файл в интернет не хочется, выполните команду edit monitoring.lua, вставьте код из спойлера, сохраните его сочетанием Ctrl+S и закройте редактор сочетанием Ctrl+W.
Исходный код monitoring.lua
local component = require('component')
local gpu = component.gpu
local term = require('term')
local event = require('event')
local fs = require('filesystem')
local unicode = require('unicode')
local flux = component.flux_controller
local me = component.me_controller
local shell = require('shell')
local fluxName = flux.getNetworkInfo().name
local libraries = {
{"GUI", "https://www.dropbox.com/scl/fi/qpqzdhfv2uhn695do6na9/GUI.lua?rlkey=ck1ont998xckqv3h7wjol56r2&st=yjver3wp&dl=1"},
{"doubleBuffering", "https://www.dropbox.com/scl/fi/xha9bt6cz5s1qo94soxx1/DoubleBuffering.lua?rlkey=o359xgxn0woy7lctw0q6jlnwl&st=opnno0x0&dl=1"},
{"color", "https://www.dropbox.com/scl/fi/v7bzdntjfh8g3mq5fd4qe/color.lua?rlkey=xafblurbei1piyjp6dafmxozq&st=8ipdrwkz&dl=1"},
{"advancedLua", "https://www.dropbox.com/scl/fi/pgr60yzvuzofluhmvpnqc/AdvancedLua.lua?rlkey=bw612rbv78nwqbvwsshd8ffkh&st=qd9ytjqj&dl=1"},
}
--Закачка нужны либок
local function downloadLibraries()
for i = 1, #libraries do
local libName = libraries[i][1]
local libUrl = libraries[i][2]
local libPath = "/lib/" .. libName .. ".lua"
if not fs.exists(libPath) then
print("Загрузка библиотеку " .. libName .. "...")
shell.execute("wget " .. libUrl .. " " .. libPath)
print("Библиотека " .. libName .. " успешно загружена.")
end
end
end
downloadLibraries()
local GUI = require('GUI')
local buffer = require('doubleBuffering')
--config
local w, h = gpu.getResolution()
local update_interval = 1
local colors = {
background = 0x323332, -- цвет фона
text = 0x000000, -- цвет текста
textBackground = 0x2D2D2D, -- цвет фона текста
cpuActive = 0x00e000, -- цвет блока активного процессора
cpuInactive = 0x979997, -- цвет блока неактивного процессора
fluxChart = 0xa540ff, -- цвет графика флакс сети
meChart = 0xff4080, -- цвет графика МЭ
}
--Отрисовка UI
local application = GUI.application()
local background = application:addChild(GUI.panel(1, 1, application.width, application.height, colors.background))
local fluxChart = application:addChild(GUI.chart(4, 4, 100, 25, 0x000000, 0x000000, colors.text, colors.fluxChart, 1, 0.5, "s", " RF", true, {}))
local meChart = application:addChild(GUI.chart(4, 33, 100, 13, 0x000000, 0x000000, colors.text, colors.meChart, 1, 0.5, "s", " RF", true, {}))
local fluxMonitor = application:addChild(GUI.textBox(46, 2, 22, 1, colors.background, colors.textBackground, {}, 1, 1, 0))
local meMonitor = application:addChild(GUI.textBox(50, 31, 15, 1, colors.background, colors.textBackground, {}, 1, 1, 0))
local cpuMonitor = application:addChild(GUI.textBox(127, 2, 12, 1, colors.background, colors.textBackground, {}, 1, 1, 0))
fluxMonitor.lines = {{text = fluxName .. " Network RF input", color = colors.text}}
meMonitor.lines = {{text = "ME RF usage", color = colors.text}}
cpuMonitor.lines = {{text = "CPU usage:", color = colors.text}}
for i = 1, 60 do
table.insert(fluxChart.values, {i, flux.getEnergyInfo().energyInput})
table.insert(meChart.values, {i, me.getAvgPowerUsage()})
end
--Обновление, буферизация и отрисовка данных
local previousCpuPositions = {}
local function updateChartData()
buffer.clear()
background:draw()
local newFluxData = flux.getEnergyInfo().energyInput
table.remove(fluxChart.values, 1)
table.insert(fluxChart.values, {60, newFluxData})
local newMeData = me.getAvgPowerUsage()
table.remove(meChart.values, 1)
table.insert(meChart.values, {60, newMeData})
for i = 1, 60 do
fluxChart.values[i][1] = i
meChart.values[i][1] = i
end
local cpus = me.getCpus()
local xStart, yStart = w - 50, 4
local currentCpuPositions = {}
local row, col = 1, 1
for i, cpu in ipairs(cpus) do
local color = cpu.busy and colors.cpuActive or colors.cpuInactive
local x, y = xStart + (col - 1) * 12, yStart + (row - 1) * 7
buffer.drawRectangle(x, y, 9, 5, color, 0x0, " ")
buffer.drawText(x + 2, y + 2, colors.text, "CPU " .. i)
currentCpuPositions[i] = {x = x, y = y}
col = col + 1
if col > 4 then
col = 1
row = row + 1
end
end
if previousCpuPositions then
for i, pos in pairs(previousCpuPositions) do
if not currentCpuPositions[i] then
buffer.drawRectangle(pos.x, pos.y, 9, 5, colors.background, 0x0, " ")
end
end
end
previousCpuPositions = currentCpuPositions
local elements = {
fluxMonitor,
fluxChart,
cpuMonitor,
meMonitor,
meChart
}
for _, element in ipairs(elements) do
element:draw()
end
buffer.drawChanges(true)
end
while true do
updateChartData()
os.sleep(update_interval)
end
При первом запуске программа автоматически скачает необходимые библиотеки ECS. Для этого в компьютере должна быть установлена интернет-карта.
Запуск и настройка цветовой схемы
Запустите скрипт: monitoring.lua


Настроить цветовую схему можно в конфиг-блоке (строчки 39–47).

Планы развития и обратная связь
В планах прикрутить сюда мониторинг и контроль работы реакторов (спасибо @lLuffy, добавил нужные методы). По любым вопросам, пожеланиям по добавлению вывода информации или идеям пишите в дискорд: @gooodgame.


