Гайды

[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).

image.png.d9f496c40f0b166a5d0e832560df34ee.png

Планы развития и обратная связь

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

Похожие гайды