scraping the xerox printers
This commit is contained in:
commit
2ec4ac33b2
|
@ -0,0 +1,5 @@
|
|||
source "https://rubygems.org"
|
||||
|
||||
gem "mechanize", "~> 2.7"
|
||||
gem "open4"
|
||||
gem "influxdb", "~> 0.8"
|
|
@ -0,0 +1,44 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
connection_pool (2.2.2)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
influxdb (0.8.0)
|
||||
mechanize (2.7.6)
|
||||
domain_name (~> 0.5, >= 0.5.1)
|
||||
http-cookie (~> 1.0)
|
||||
mime-types (>= 1.17.2)
|
||||
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
||||
net-http-persistent (>= 2.5.2)
|
||||
nokogiri (~> 1.6)
|
||||
ntlm-http (~> 0.1, >= 0.1.1)
|
||||
webrobots (>= 0.0.9, < 0.2)
|
||||
mime-types (3.3.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2019.1009)
|
||||
mini_portile2 (2.4.0)
|
||||
net-http-digest_auth (1.4.1)
|
||||
net-http-persistent (3.1.0)
|
||||
connection_pool (~> 2.2)
|
||||
nokogiri (1.10.9)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
ntlm-http (0.1.1)
|
||||
open4 (1.3.4)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.7)
|
||||
webrobots (0.1.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
influxdb (~> 0.8)
|
||||
mechanize (~> 2.7)
|
||||
open4
|
||||
|
||||
BUNDLED WITH
|
||||
1.17.3
|
|
@ -0,0 +1,27 @@
|
|||
{ pkgs ? import <nixpkgs> {} }:
|
||||
|
||||
with pkgs;
|
||||
|
||||
let
|
||||
gems = bundlerEnv rec {
|
||||
name = "scrapers";
|
||||
|
||||
inherit ruby;
|
||||
# expects Gemfile, Gemfile.lock and gemset.nix in the same directory
|
||||
# > nix-shell -p bundler --run 'bundle lock --update'
|
||||
# > nix-shell -p bundix --run bundix
|
||||
gemdir = ./.;
|
||||
};
|
||||
wrapScript = name: script:
|
||||
stdenv.mkDerivation {
|
||||
inherit name script;
|
||||
buildInputs = [ gems.wrappedRuby ];
|
||||
|
||||
buildCommand = ''
|
||||
install -D -m755 $script $out/bin/${name}
|
||||
patchShebangs $out/bin/${name}
|
||||
'';
|
||||
};
|
||||
in {
|
||||
xerox = wrapScript "xerox" ./xerox/scrape.rb;
|
||||
}
|
|
@ -0,0 +1,169 @@
|
|||
{
|
||||
connection_pool = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.2.2";
|
||||
};
|
||||
domain_name = {
|
||||
dependencies = ["unf"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.20190701";
|
||||
};
|
||||
http-cookie = {
|
||||
dependencies = ["domain_name"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.3";
|
||||
};
|
||||
influxdb = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "11q5pys13cp9rxhg1gihblqi597b6nfsfz3ghdij0zdf713pwwc3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.8.0";
|
||||
};
|
||||
mechanize = {
|
||||
dependencies = ["domain_name" "http-cookie" "mime-types" "net-http-digest_auth" "net-http-persistent" "nokogiri" "ntlm-http" "webrobots"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "00834zv6s68g3x00s4kcgdry51s88qj0kjygnwhpg8k67kdihcrx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.6";
|
||||
};
|
||||
mime-types = {
|
||||
dependencies = ["mime-types-data"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.3.1";
|
||||
};
|
||||
mime-types-data = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "18x61fc36951vw7f74gq8cyybdpxvyg5d0azvqhrs82ddw3v16xh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2019.1009";
|
||||
};
|
||||
mini_portile2 = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.4.0";
|
||||
};
|
||||
net-http-digest_auth = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1nq859b0gh2vjhvl1qh1zrk09pc7p54r9i6nnn6sb06iv07db2jb";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.4.1";
|
||||
};
|
||||
net-http-persistent = {
|
||||
dependencies = ["connection_pool"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1bink2g0a94zh9kmb96rrh48rkbkdpimljy2370z5liixvy3gdpa";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.0";
|
||||
};
|
||||
nokogiri = {
|
||||
dependencies = ["mini_portile2"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "12j76d0bp608932xkzmfi638c7aqah57l437q8494znzbj610qnm";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.10.9";
|
||||
};
|
||||
ntlm-http = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0yx01ffrw87wya1syivqzf8hz02axk7jdpw6aw221xwvib767d36";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.1.1";
|
||||
};
|
||||
open4 = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1cgls3f9dlrpil846q0w7h66vsc33jqn84nql4gcqkk221rh7px1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.3.4";
|
||||
};
|
||||
unf = {
|
||||
dependencies = ["unf_ext"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.1.4";
|
||||
};
|
||||
unf_ext = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.0.7.7";
|
||||
};
|
||||
webrobots = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "19ndcbba8s8m62hhxxfwn83nax34rg2k5x066awa23wknhnamg7b";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.1.2";
|
||||
};
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
#!/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.hq.c3d2.de: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'
|
Loading…
Reference in New Issue