scrapers/xerox/scrape.rb

66 lines
1.4 KiB
Ruby

#!/usr/bin/env ruby
require 'open-uri'
require 'influxdb'
HOST = ARGV[0]
USER = ARGV[1]
PASSWORD = ARGV[2]
def scrape_paper_supply
results = {}
open("http://#{HOST}/sttray.htm", :http_basic_authentication => [USER, PASSWORD])
.read()
.scan(/\['Tray (.+?)',\d+,(\d+),/) do |m|
results[m[0]] = m[1].to_i
end
results
end
def scrape_consumables
results = {}
doc = open("http://#{HOST}/stsply.htm", :http_basic_authentication => [USER, PASSWORD])
.read()
.force_encoding("ISO-8859-1")
.encode("utf-8", replace: nil)
doc.scan(/info.concat\(\[\[(.+?)\);/) do |m|
m[0].scan(/\['(.+?)',(\d+),(\d+)\]/) do |m|
results[m[0]] = {
:status => m[1].to_i,
:life => m[2].to_i,
}
end
end
results
end
paper_supply = scrape_paper_supply
consumables = scrape_consumables
db = InfluxDB::Client.new(url: "http://grafana.serv.zentralwerk.dn42:8086/drucker")
db.write_points [ {
series: "paper_supply",
tags: { host: HOST },
values: paper_supply,
}, {
series: "consumables_status",
tags: { host: HOST },
values: consumables.inject({}) do |status, consumable|
status[consumable[0]] = consumable[1][:status]
status
end,
}, {
series: "consumables_life",
tags: { host: HOST },
values: consumables.inject({}) do |life, consumable|
life[consumable[0]] = consumable[1][:life]
life
end,
} ], 'm'