craniumkid22

SysMonitor

Jul 19th, 2014
707
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.39 KB | None | 0 0
  1. local refreshInterval = 1
  2.     --# Do not reduce this beyond 0.5, or you may have issues with using the mouse controls.
  3. local peripheralBlacklist = {
  4.   ["tile_thermalexpansion_machine_rockgen_name"] = true;
  5. }
  6.  
  7. local function getLiquids()
  8.   --# get the liquids from anything that has a tank
  9.   local liquids = { }
  10.   --# for all peripherals
  11.   for _,name in pairs(peripheral.getNames()) do
  12.     --# if we accept the peripheral
  13.     if not peripheralBlacklist[ peripheral.getType(name) ] then
  14.       --# wrap the peripheral
  15.       local p = peripheral.wrap(name)
  16.       --# if it has tanks
  17.       if p and p.getTankInfo then
  18.         --# for all the tanks in the block
  19.         for _,tank in pairs(p.getTankInfo("unknown")) do
  20.           --# if the tank is not empty
  21.           if tank.amount then
  22.             --# store all the liquid info, collated
  23.             local rName = tank.rawName or tank.name or "fuck you"
  24.             local nName = tank.name or name
  25.             local tAmount = tank.amount or 0
  26.             local tCapacity = tank.capacity or 0
  27.             liquids[rName] = liquids[rName] or { name = nName; amount = 0; capacity = 0; }
  28.             liquids[rName].amount = liquids[rName].amount + tAmount
  29.             liquids[rName].capacity = liquids[rName].capacity + tCapacity
  30.             liquids[rName].percent = math.ceil((liquids[rName].amount / liquids[rName].capacity) * 100)
  31.           end
  32.         end
  33.       end
  34.     end
  35.   end
  36.   --# convert to indexed table
  37.   local i, indexed = 1, {}
  38.   for rawName,liquid in pairs(liquids) do
  39.     liquid.rawName = rawName
  40.     indexed[i] = liquid
  41.     i = i + 1
  42.   end
  43.   return indexed
  44. end
  45.  
  46. local function getEnergy()
  47.   local energy = {amount = 0; capacity = 0; percent = 0 }
  48.   for _,name in pairs(peripheral.getNames()) do
  49.     if not peripheralBlacklist[ peripheral.getType(name) ] then
  50.       local p = peripheral.wrap(name)
  51.       if p and p.getEnergyStored and p.getMaxEnergyStored then
  52.         energy.amount = energy.amount + (p.getEnergyStored("unknown") or 0)
  53.         energy.capacity = energy.capacity + (p.getMaxEnergyStored("unknown") or 0)
  54.         energy.percent = math.ceil((energy.amount/energy.capacity)*100)
  55.       end
  56.     end
  57.   end
  58.   return energy
  59. end
  60.  
  61. local function getMEStorage()
  62.   local storage = { free = 0; available = 0; capacity = 0; amount = 0; unused = 0; percent = 0 }
  63.   for _,name in pairs(peripheral.getNames()) do
  64.     local p = peripheral.wrap(name)
  65.     if p and p.getFreeBytes and p.getTotalBytes and p.getUnusedBytes then
  66.       storage.free = p.getFreeBytes()
  67.       storage.available = p.getFreeBytes()
  68.       storage.capacity = p.getTotalBytes()
  69.       storage.amount = p.getTotalBytes() - p.getFreeBytes()
  70.       storage.unused = p.getUnusedBytes()
  71.       storage.percent = math.ceil((storage.amount/storage.capacity)*100)
  72.     end
  73.   end
  74.   return storage
  75. end
  76.  
  77. local selected = 1
  78. term.setBackgroundColor(colors.black)
  79. term.clear()
  80. while true do
  81.   local fluidInfo = getLiquids()
  82.   local storage = getMEStorage()
  83.   local energy = getEnergy()
  84.   term.setCursorPos(1,1)
  85.   term.setBackgroundColor(colors.black)
  86.   term.clearLine()
  87.   term.setCursorPos(1,2)
  88.   term.clearLine()
  89.   for i = 0,10 do
  90.     term.setCursorPos(i + 10, 2)
  91.     write(" ")
  92.   end
  93.   term.setCursorPos(1,1)
  94.   if energy.capacity ~= 0 then
  95.     term.setTextColor(colors.white)
  96.     write("Power: "..energy.amount.."/"..energy.capacity.." RF")
  97.     if energy.percent >= 50 then
  98.       term.setBackgroundColor(colors.green)
  99.       for i = 0, energy.percent/10 do
  100.         term.setCursorPos(i + 10, 2)
  101.         write(" ")
  102.       end
  103.       term.setCursorPos(10,2)
  104.       write(energy.percent.."%")
  105.     elseif energy.percent >= 25 and energy.percent < 50 then
  106.       term.setBackgroundColor(colors.yellow)
  107.       for i = 0, energy.percent/10 do
  108.         term.setCursorPos(i + 10, 2)
  109.         write(" ")
  110.       end
  111.       term.setCursorPos(10,2)
  112.       write(energy.percent.."%")
  113.     elseif energy.percent >= 10 and energy.percent < 25 then
  114.       term.setBackgroundColor(colors.orange)
  115.       for i = 0, energy.percent/10 do
  116.         term.setCursorPos(i + 10, 2)
  117.         write(" ")
  118.       end
  119.       term.setCursorPos(10,2)
  120.       write(energy.percent.."%")
  121.     elseif energy.percent >= 0 and energy.percent < 10 then
  122.       term.setBackgroundColor(colors.red)
  123.       for i = 0, energy.percent/10 do
  124.         term.setCursorPos(i + 10, 2)
  125.         write(" ")
  126.       end
  127.       term.setCursorPos(10,2)
  128.       write(energy.percent.."%")
  129.     end
  130.   else
  131.     term.setBackgroundColor(colors.black)
  132.     term.setCursorPos(1,1)
  133.     term.clearLine()
  134.     term.setTextColor(colors.red)
  135.     write("Energy storage not connected!")
  136.   end
  137.   term.setCursorPos(1,4)
  138.   if storage.capacity ~= 0 then
  139.     term.setTextColor(colors.white)
  140.     term.setBackgroundColor(colors.black)
  141.     term.clearLine()
  142.     term.setCursorPos(1,5)
  143.     term.clearLine()
  144.     for i = 0,10 do
  145.       term.setCursorPos(i + 10, 5)
  146.       write(" ")
  147.     end
  148.     term.setCursorPos(1,4)
  149.     write("ME Storage: "..storage.amount.."/"..storage.capacity.." bytes")
  150.     if storage.percent >= 50 then
  151.       term.setBackgroundColor(colors.green)
  152.       for i = 0, storage.percent/10 do
  153.         term.setCursorPos(i + 10, 5)
  154.         write(" ")
  155.       end
  156.       term.setCursorPos(10,5)
  157.       write(storage.percent.."%")
  158.     elseif storage.percent >= 25 and storage.percent < 50 then
  159.       term.setBackgroundColor(colors.yellow)
  160.       for i = 0, storage.percent/10 do
  161.         term.setCursorPos(i + 10, 5)
  162.         write(" ")
  163.       end
  164.       term.setCursorPos(10,5)
  165.       write(storage.percent.."%")
  166.     elseif storage.percent >= 10 and storage.percent < 25 then
  167.       term.setBackgroundColor(colors.orange)
  168.       for i = 0, storage.percent/10 do
  169.         term.setCursorPos(i + 10, 5)
  170.         write(" ")
  171.       end
  172.       term.setCursorPos(10,5)
  173.       write(storage.percent.."%")
  174.     elseif storage.percent >= 0 and storage.percent < 10 then
  175.       term.setBackgroundColor(colors.red)
  176.       for i = 0, storage.percent/10 do
  177.         term.setCursorPos(i + 10, 5)
  178.         write(" ")
  179.       end
  180.       term.setCursorPos(10,5)
  181.       write(storage.percent.."%")
  182.     end
  183.   else
  184.     term.setBackgroundColor(colors.black)
  185.     term.setCursorPos(1,4)
  186.     term.clearLine()
  187.     term.setCursorPos(1,5)
  188.     term.clearLine()
  189.     term.setTextColor(colors.red)
  190.     write("ME storage not connected!")
  191.   end
  192.   term.setCursorPos(49,1)
  193.   term.setBackgroundColor(colors.black)
  194.   term.setTextColor(colors.white)
  195.   term.setCursorPos(1,8)
  196.   term.clearLine()
  197.   if #fluidInfo ~= 0 then
  198.     term.setCursorPos(1,7)
  199.     term.setTextColor(colors.white)
  200.     term.setBackgroundColor(colors.black)
  201.     term.clearLine()
  202.     for i = 0,10 do
  203.       term.setCursorPos(i + 10,8)
  204.       write(" ")
  205.     end
  206.     term.setCursorPos(1,7)
  207.     write(fluidInfo[selected].rawName..": "..fluidInfo[selected].amount.."/"..fluidInfo[selected].capacity.." mB")
  208.     if fluidInfo[selected].percent >= 50 then
  209.       term.setBackgroundColor(colors.black)
  210.       term.setCursorPos(1,8)
  211.       term.clearLine()
  212.       term.setBackgroundColor(colors.green)
  213.       for i = 0, fluidInfo[selected].percent/10 do
  214.         term.setCursorPos(i + 10,8)
  215.         write(" ")
  216.       end
  217.       term.setCursorPos(10,8)
  218.       write(fluidInfo[selected].percent.."%")
  219.     elseif fluidInfo[selected].percent >= 25 and fluidInfo[selected].percent < 50 then
  220.       term.setBackgroundColor(colors.yellow)
  221.       for i = 0, fluidInfo[selected].percent/10 do
  222.         term.setCursorPos(i + 10,8)
  223.         write(" ")
  224.       end
  225.       term.setCursorPos(10,8)
  226.       write(fluidInfo[selected].percent.."%")
  227.     elseif fluidInfo[selected].percent >= 10 and fluidInfo[selected].percent < 25 then
  228.       term.setBackgroundColor(colors.orange)
  229.       for i = 0, fluidInfo[selected].percent/10 do
  230.         term.setCursorPos(i + 10,8)
  231.         write(" ")
  232.       end
  233.       term.setCursorPos(10,8)
  234.       write(fluidInfo[selected].percent.."%")
  235.     elseif fluidInfo[selected].percent >= 0 and fluidInfo[selected].percent < 10 then
  236.       term.setBackgroundColor(colors.red)
  237.       for i = 0, fluidInfo[selected].percent/10 do
  238.         term.setCursorPos(i + 10,8)
  239.         write(" ")
  240.       end
  241.       term.setCursorPos(10,8)
  242.       write(fluidInfo[selected].percent.."%")
  243.     end
  244.   else
  245.     term.setBackgroundColor(colors.black)
  246.     term.setCursorPos(1,7)
  247.     term.clearLine()
  248.     term.setCursorPos(1,8)
  249.     term.clearLine()
  250.     term.setTextColor(colors.red)
  251.     write("No fluids detected!")
  252.   end
  253.   term.setTextColor(colors.white)
  254.   term.setBackgroundColor(colors.black)
  255.   term.setCursorPos(2,8)
  256.   if #fluidInfo ~=0 then
  257.     write("<<-->>")
  258.     local refresh = os.startTimer(refreshInterval)
  259.     local events = {os.pullEvent()}
  260.     if events[1] == "mouse_click" and events[2] == 1 then
  261.       if events[3] >= 2 and events[3] <= 4 and events[4] == 8 then
  262.         selected = selected - 1
  263.         term.setCursorPos(2,8)
  264.         term.setBackgroundColor(colors.white)
  265.         term.setTextColor(colors.black)
  266.         write("<<-")
  267.       elseif events[3] >= 5 and events[3] <= 7 and events[4] == 8 then
  268.         selected = selected + 1
  269.         term.setCursorPos(5,8)
  270.         term.setBackgroundColor(colors.white)
  271.         term.setTextColor(colors.black)
  272.         write("->>")
  273.       end
  274.       if selected < 1 then
  275.         selected = #fluidInfo
  276.       elseif selected > #fluidInfo then
  277.         selected = 1
  278.       end
  279.     end
  280.   else
  281.     sleep(refreshInterval)
  282.   end
  283. end
Advertisement
Add Comment
Please, Sign In to add comment