From 143a45077875e5a9441963394a10b7e8bffa6208 Mon Sep 17 00:00:00 2001 From: Francesco Cogno Date: Tue, 23 Apr 2019 23:06:35 +0200 Subject: [PATCH] Initial commit --- .gitignore | 3 + Cargo.lock | 1105 +++++++++++++++++++++++++++++++++++ Cargo.toml | 28 + LICENSE | 21 + README.md | 67 +++ example.json | 4 + extra/00.png | Bin 0 -> 136985 bytes src/exporter_error.rs | 69 +++ src/main.rs | 134 +++++ src/options.rs | 12 + src/render_to_prometheus.rs | 3 + src/wireguard.rs | 211 +++++++ 12 files changed, 1657 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 example.json create mode 100644 extra/00.png create mode 100644 src/exporter_error.rs create mode 100644 src/main.rs create mode 100644 src/options.rs create mode 100644 src/render_to_prometheus.rs create mode 100644 src/wireguard.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38b709b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +**/*.rs.bk +*.vim diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..caf8713 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1105 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "atty" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "backtrace" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "clap" +version = "2.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "env_logger" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.28 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-cpupool" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "h2" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "string 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "http" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "httparse" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "humantime" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hyper" +version = "0.12.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "indexmap" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lazycell" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.51" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lock_api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mio" +version = "0.6.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nodrop" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "numtoa" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "owning_ref" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "prometheus_wireguard_exporter" +version = "0.1.0" +dependencies = [ + "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.28 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "redox_syscall" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "redox_termios" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde_derive" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.28 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "string" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.15.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.28 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synstructure" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.28 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "termcolor" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "termion" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-trace-core 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-sync" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-trace-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "try-lock" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-width" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vec_map" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "want" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "wincolor" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" +"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" +"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799" +"checksum backtrace 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f106c02a3604afcdc0df5d36cc47b44b55917dbaf3d808f71c163a0ddba64637" +"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" +"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +"checksum cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)" = "5e5f3fee5eeb60324c2781f1e41286bdee933850fff9b3c672587fed5ec58c83" +"checksum cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "11d43355396e872eefb45ce6342e4374ed7bc2b3a502d1b28e36d6e23c05d1f4" +"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" +"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" +"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" +"checksum env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b61fa891024a945da30a9581546e8cfaf5602c7b3f4c137a2805cf388f92075a" +"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" +"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "62941eff9507c8177d448bd83a44d9b9760856e184081d8cd79ba9f03dd24981" +"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" +"checksum h2 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "85ab6286db06040ddefb71641b50017c06874614001a134b423783e2db2920bd" +"checksum http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "eed324f0f0daf6ec10c474f150505af2c143f251722bf9dbd1261bd1f2ee2c1a" +"checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" +"checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" +"checksum hyper 0.12.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4f2777434f26af6e4ce4fdcdccd3bed9d861d11e87bcbe72c0f51ddaca8ff848" +"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" +"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" +"checksum libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)" = "bedcc7a809076656486ffe045abeeac163da1b558e963a31e29fbfbeba916917" +"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" +"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" +"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +"checksum proc-macro2 0.4.28 (registry+https://github.com/rust-lang/crates.io-index)" = "ba92c84f814b3f9a44c5cfca7d2ad77fa10710867d2bbb1b3d175ab5f47daa12" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9ea758282efe12823e0d952ddb269d2e1897227e464919a554f2a03ef1b832" +"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252" +"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" +"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" +"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" +"checksum rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "ccc78bfd5acd7bf3e89cffcf899e5cb1a52d6fafa8dec2739ad70c9577a57288" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "aa5f7c20820475babd2c077c3ab5f8c77a31c15e16ea38687b4c02d3e48680f4" +"checksum serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "58fc82bec244f168b23d1963b45c8bf5726e9a15a9d146a067f9081aeed2de79" +"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum string 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b639411d0b9c738748b5397d5ceba08e648f4f1992231aa859af1a017f31f60b" +"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +"checksum syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)" = "846620ec526c1599c070eff393bfeeeb88a93afa2513fc3b49f1fea84cf7b0ed" +"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" +"checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f" +"checksum termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dde0593aeb8d47accea5392b39350015b5eccb12c0d98044d856983d89548dea" +"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" +"checksum tokio 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)" = "cec6c34409089be085de9403ba2010b80e36938c9ca992c4f67f407bb13db0b1" +"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" +"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" +"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" +"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" +"checksum tokio-timer 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2910970404ba6fa78c5539126a9ae2045d62e3713041e447f695f41405a120c6" +"checksum tokio-trace-core 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "350c9edade9830dc185ae48ba45667a445ab59f6167ef6d0254ec9d2430d9dd3" +"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..eb0b3ce --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "prometheus_wireguard_exporter" +version = "0.1.0" +authors = ["Francesco Cogno "] +description = "Prometheus WireGuard Exporter" +edition = "2018" + +readme = "README.md" +license = "MIT" +repository = "https://github.com/MindFlavor/prometheus_wireguard_exporter" +documentation = "https://github.com/MindFlavor/prometheus_wireguard_exporter" +homepage = "https://github.com/MindFlavor/prometheus_wireguard_exporter" + +keywords = ["prometheus", "exporter", "wireguard"] +categories = ["database"] + + +[dependencies] +log = "0.4.6" +env_logger = "0.6.1" +futures = "0.1.26" +clap = "2.33.0" +serde_json = "1.0.39" +serde = "1.0.90" +serde_derive = "1.0.90" +failure = "0.1.5" +hyper = "0.12.27" +http = "0.1.17" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..36bb17b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Francesco Cogno + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..710f24d --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# Prometheus WireGuard Exporter + +[![legal](https://img.shields.io/github/license/mindflavor/prometheus_wireguard_exporter.svg)](LICENSE) + +[![Crate](https://img.shields.io/crates/v/prometheus_wireguard_exporter.svg)](https://crates.io/crates/prometheus_wireguard_exporter) [![cratedown](https://img.shields.io/crates/d/prometheus_wireguard_exporter.svg)](https://crates.io/crates/prometheus_wireguard_exporter) [![cratelastdown](https://img.shields.io/crates/dv/prometheus_wireguard_exporter.svg)](https://crates.io/crates/prometheus_wireguard_exporter) + +[![tag](https://img.shields.io/github/tag/mindflavor/prometheus_wireguard_exporter.svg)](https://github.com/MindFlavor/prometheus_wireguard_exporter/tree/0.1.0) +[![release](https://img.shields.io/github/release/MindFlavor/prometheus_wireguard_exporter.svg)](https://github.com/MindFlavor/prometheus_wireguard_exporter/tree/0.1.0) +[![commitssince](https://img.shields.io/github/commits-since/mindflavor/prometheus_wireguard_exporter/0.1.0.svg)](https://img.shields.io/github/commits-since/mindflavor/prometheus_wireguard_exporter/0.1.0.svg) + +## Intro + +A Prometheus exporter for [WireGuard](https://www.wireguard.com), written in Rust. This tool exports the `wg show all dump` results in a format that [Prometheus](https://prometheus.io/) can understand. The exporter is very light on your server resources, both in terms of memory and CPU usage. + +![](extra/00.png) + +## Prerequisites + +* You need [Rust](https://www.rust-lang.org/) to compile this code. Simply follow the instructions on Rust's website to install the toolchain. If you get weird errors while compiling please try and update your Rust version first (I have developed it on `rustc 1.35.0-nightly (8159f389f 2019-04-06)`). +* You need [WireGuard](https://www.wireguard.com) *and* the `wg` CLI in the path. The tool will call `wg show all dump` and of course will fail if the `wg` executable is not found. If you want I can add the option of specifying the `wg` path in the command line, just open an issue for it. + +## Compilation + +To compile the latest master version: + +```bash +git clone https://github.com/MindFlavor/prometheus_wireguard_exporter.git +cd prometheus_wireguard_exporter +cargo install --path . +``` + +If you want the latest release you can simply use: + +```bash +cargo install prometheus_wireguard_exporter +``` + +## Usage + +Start the binary with `-h` to get the complete syntax. The parameters are: + +| Parameter | Mandatory | Valid values | Default | Description | +| -- | -- | -- | -- | -- | +| `-v` | no | | | Enable verbose mode. +| `-p` | no | any valid port number | 9576 | Specify the service port. This is the port your Prometheus instance should point to. + +Once started, the tool will listen on the specified port (or the default one, 9576, if not specified) and return a Prometheus valid response at the url `/metrics`. So to check if the tool is working properly simply browse the `http://localhost:9576` (or whichever port you choose). + +### Systemd service file + +Now add the exporter to the Prometheus exporters as usual. I recommend to start it as a service. It's necessary to run it as root (if there is a non-root way to call `wg show all dump` please let me know). My systemd service file is like this one: + +``` +[Unit] +Description=Prometheus WireGuard Exporter +Wants=network-online.target +After=network-online.target + +[Service] +User=root +Group=root +Type=simple +ExecStart=/usr/local/bin/prometheus_wireguard_exporter + +[Install] +WantedBy=multi-user.target +``` diff --git a/example.json b/example.json new file mode 100644 index 0000000..66bd6ba --- /dev/null +++ b/example.json @@ -0,0 +1,4 @@ +[ + { "path": "/home/mindflavor", "recursive": true }, + { "path": "/home/mindflavor/.cargo", "recursive": false } +] diff --git a/extra/00.png b/extra/00.png new file mode 100644 index 0000000000000000000000000000000000000000..42f4b1a1f0c10fbe2ee625f6ca4740b6e79f4e75 GIT binary patch literal 136985 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

pi_7WN>xZ6%=9t-8(X4EN6KBpu0?7j> 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%0A*w`uPMm)*% zTD9xPYl#y;ezqE5!R)i?U(-aWSy`0=@#xJ)ongFiO)bw>L{HyLmRgxnPI~&G4DIj9 z@RT1vLN=$Xsv0j&h?3kv$P`AtJzG{Kx5OBEyGBfYqEHKgM8BYq&J(!D%b{?JEc3{J zdwwP_ue@GoIeq?{$g>%Bb7;xVeXl#~WTTU;0vN!nHHArqRa#$a-$2J2juAvNpRTla zKTL3#+6YVk_3M{NaI2y+tRJL_w;l47^4|IQ`i>u=_F->)A+MoUACEBZPnd2Cq};6C zDjY$FdnQNgc+_-w__gkv!o#RlRArM!-wIegK!{o9Cz63EMHwcQ%D3CO3D)#zVy33y z;$-U%2Er4u#;Q;x2mCW0ojSRSkA&zRPrvkLc&ua>I6NnK3<&xzY!edG3sqiVGtE-~ zYz8W{Zas1-)8L96H!o@&Peu(1&muSf*(PK;Q!OULkFaa7_3UhK2kQO9m~`*8H`>PU zI{0|Aca6(>GrH23B%L*b^o)X$oyBJde*9;0^KSbE$oTE)&h@i>n2MTO44dWL%m-s) zVgPo*CiTGceR=xy>A_B)U&9Ddx!v>SD$}J*btH&NvccY@h%sNxsXnAu!u4JEs;7oN z&t($xKjToEO_sv!7}-_AMst;Dv|J_)!_pC3;}hJ6x_SauAc=c&aY`coh9J4EO^8md zw9WVohe0|b9S45&YVD4$Q#xo`lQ&Y`+r<6ilzOg*&WXFxA5kUc0g&Cl#k`}3!M1p~7} z+5kz0+*-({tJd+dieU1-Hvj?L?-oAHIh|ulo$o919xvmZSWFt*L~*m4jlKYa zYzo$RTfM?eDZKvqb4H3P75t{uN!!)+6QV+u%WKB#r*Ov?!1Jvox+eZys-t^Ck>a1ipyr%UwV5=X{pmS^FXay_p2s-G;$ZDyZ#Qt z(RKcXhENWyBN;?65Ujk22_yS+6u9Ixz7i}DmMd3TWr;&}-EK%2f6Qg3Frlv8pcBh} zdt3=hnu5C7H}z0!+;MRze^y_w2_y#O^bj8UDHbR_a|7)lnjCnfrU$fI_XX z=gkmq;|gy;g3?Sn&4ry$SQfcN7zlpk<>kxYH47*yDzfaT#la$G9DdJaoWkp5CbS$I zL_&x&zCPo%{saQ_jWWX|)7_sc>Z1%BAG@T&fa}(oRGW-Fs1u8I+jt8<1P&8aCupY1 zyOARc|B(fRzB!GLvl+@Ex}j26=>+^Ep5h)mhVo$LD6hgB`ycvTc6Jhpm$xlSyZ1Y7 zX(r$1)gy@0ao8KDbFGjbT82&2D>2NIi~ffsuOd%xDC1xcsjsXIJl81aqV7on353Y# zXc`)tI$;K1_m`~pRwmlZ#+jJ|P=YUk+fi9n^;>D#Jy6`K79+)PjOD5VrOa#t3sLA( z+%$1s7vwoK>~*t+(g|F7Aoa@S!Xo2$kE{@S__3l2Yrd<(9!6%H;4YwdBJRUHPM2+x zXBU=Gr2?Mx?K4v5dS3D1eluZQgJ~fm{XeqL-)&-Rnar%iz^>K*yfFS3($k?GP>Ji$ z>qD~W|8_R~fBJO-H+cWPO7Jh83^2v<125qdSfZn1yksi>B{i@4AIq3LiAm;B37gQU z^01YMb>jZt^Ys7kSLTD}@*mgY1ziid>CsNv4W0-0{<9De8$Y6kxBlcvms;!J<6r;R z?=cSC7#yM#12G-jLhZ$_t`@ zPX)kmK){`42Z_TknQA2ElZ6BY79VP73s<=){ypf1vul8qQ?MbkbjH>rU{J;O6CV8Y z*AMS|dc;AcL}R3aISw8mSEm&wMIS9eK><0)FVovrg(H6#2T@Rp8G(rhUuexRRQAgl z`h=0doNwvmii1kmO0KM_>HD%o!hcWA$%C)WmSAKVG-bgyX^|498K!Y^tn<&`Q66_c zpNu^e9}@3(ZC{63lu8^v*QCPz_wSp77Uuu)SYIU%{{N`P{MXh0pNjh>S&Z*gekp== Q7rI_CVQHa40bQ^E11Km>WB>pF literal 0 HcmV?d00001 diff --git a/src/exporter_error.rs b/src/exporter_error.rs new file mode 100644 index 0000000..dbb726c --- /dev/null +++ b/src/exporter_error.rs @@ -0,0 +1,69 @@ +#[derive(Debug, Fail)] +pub(crate) enum ExporterError { + #[allow(dead_code)] + #[fail(display = "Generic error")] + Generic {}, + + #[fail(display = "Hyper error: {}", e)] + Hyper { e: hyper::error::Error }, + + #[fail(display = "http error: {}", e)] + Http { e: http::Error }, + + #[fail(display = "UTF-8 error: {}", e)] + UTF8 { e: std::string::FromUtf8Error }, + + #[fail(display = "JSON format error: {}", e)] + JSON { e: serde_json::error::Error }, + + #[fail(display = "IO Error: {}", e)] + IO { e: std::io::Error }, + + #[fail(display = "UTF8 conversion error: {}", e)] + Utf8 { e: std::str::Utf8Error }, + + #[fail(display = "int conversion error: {}", e)] + ParseInt { e: std::num::ParseIntError }, +} + +impl From for ExporterError { + fn from(e: std::io::Error) -> Self { + ExporterError::IO { e } + } +} + +impl From for ExporterError { + fn from(e: hyper::error::Error) -> Self { + ExporterError::Hyper { e } + } +} + +impl From for ExporterError { + fn from(e: http::Error) -> Self { + ExporterError::Http { e } + } +} + +impl From for ExporterError { + fn from(e: std::string::FromUtf8Error) -> Self { + ExporterError::UTF8 { e } + } +} + +impl From for ExporterError { + fn from(e: serde_json::error::Error) -> Self { + ExporterError::JSON { e } + } +} + +impl From for ExporterError { + fn from(e: std::str::Utf8Error) -> Self { + ExporterError::Utf8 { e } + } +} + +impl From for ExporterError { + fn from(e: std::num::ParseIntError) -> Self { + ExporterError::ParseInt { e } + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..1b810f3 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,134 @@ +extern crate serde_json; +#[macro_use] +extern crate failure; +use clap; +use clap::Arg; +use futures::future::{done, ok, Either, Future}; +use http::StatusCode; +use hyper::service::service_fn; +use hyper::{Body, Request, Response, Server}; +use log::{error, info, trace}; +use std::env; +mod options; +use options::Options; +mod exporter_error; +use exporter_error::ExporterError; +mod render_to_prometheus; +use render_to_prometheus::RenderToPrometheus; +mod wireguard; +use std::convert::TryFrom; +use std::process::Command; +use std::string::String; +use wireguard::WireGuard; + +fn check_compliance(req: &Request) -> Result<(), Response> { + if req.uri() != "/metrics" { + trace!("uri not allowed {}", req.uri()); + Err(Response::builder() + .status(StatusCode::NOT_FOUND) + .body(hyper::Body::empty()) + .unwrap()) + } else if req.method() != "GET" { + trace!("method not allowed {}", req.method()); + Err(Response::builder() + .status(StatusCode::METHOD_NOT_ALLOWED) + .body(hyper::Body::empty()) + .unwrap()) + } else { + Ok(()) + } +} + +fn handle_request( + req: Request, + options: Options, +) -> impl Future, Error = failure::Error> { + trace!("{:?}", req); + + done(check_compliance(&req)).then(move |res| match res { + Ok(_) => Either::A(perform_request(req, &options).then(|res| match res { + Ok(body) => ok(body), + Err(err) => { + error!("internal server error: {:?}", err); + ok(Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(hyper::Body::empty()) + .unwrap()) + } + })), + Err(err) => Either::B(ok(err)), + }) +} + +fn perform_request( + _req: Request, + _options: &Options, +) -> impl Future, Error = ExporterError> { + trace!("perform_request"); + + done( + Command::new("wg") + .arg("show") + .arg("all") + .arg("dump") + .output(), + ) + .from_err() + .and_then(|output| { + done(String::from_utf8(output.stdout)) + .from_err() + .and_then(|output_str| { + trace!("{}", output_str); + done(WireGuard::try_from(&output_str as &str)) + .from_err() + .and_then(|wg| ok(Response::new(Body::from(wg.render())))) + }) + }) +} + +fn main() { + let matches = clap::App::new("prometheus_wireguard_exporter") + .version("0.1") + .author("Francesco Cogno ") + .arg( + Arg::with_name("port") + .short("p") + .help("exporter port (default 9576)") + .default_value("9576") + .takes_value(true), + ) + .arg( + Arg::with_name("verbose") + .short("v") + .help("verbose logging") + .takes_value(false), + ) + .get_matches(); + + let options = Options::from_claps(&matches); + + if options.verbose { + env::set_var("RUST_LOG", "prometheus_wireguard_exporter=trace"); + } else { + env::set_var("RUST_LOG", "prometheus_wireguard_exporter=info"); + } + env_logger::init(); + + info!("using options: {:?}", options); + + let bind = matches.value_of("port").unwrap(); + let bind = u16::from_str_radix(&bind, 10).expect("port must be a valid number"); + let addr = ([0, 0, 0, 0], bind).into(); + + info!("starting exporter on {}", addr); + + let new_svc = move || { + let options = options.clone(); + service_fn(move |req| handle_request(req, options.clone())) + }; + + let server = Server::bind(&addr) + .serve(new_svc) + .map_err(|e| eprintln!("server error: {}", e)); + hyper::rt::run(server); +} diff --git a/src/options.rs b/src/options.rs new file mode 100644 index 0000000..b24488e --- /dev/null +++ b/src/options.rs @@ -0,0 +1,12 @@ +#[derive(Debug, Clone)] +pub(crate) struct Options { + pub verbose: bool, +} + +impl Options { + pub fn from_claps(matches: &clap::ArgMatches<'_>) -> Options { + Options { + verbose: matches.is_present("verbose"), + } + } +} diff --git a/src/render_to_prometheus.rs b/src/render_to_prometheus.rs new file mode 100644 index 0000000..95132d7 --- /dev/null +++ b/src/render_to_prometheus.rs @@ -0,0 +1,3 @@ +pub trait RenderToPrometheus { + fn render(&self) -> String; +} diff --git a/src/wireguard.rs b/src/wireguard.rs new file mode 100644 index 0000000..25505f1 --- /dev/null +++ b/src/wireguard.rs @@ -0,0 +1,211 @@ +use crate::exporter_error::ExporterError; +use crate::render_to_prometheus::RenderToPrometheus; +use log::{debug, trace}; +use std::collections::HashMap; +use std::convert::TryFrom; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; + +const EMPTY: &str = "(none)"; + +#[derive(Default, Debug, Clone)] +pub(crate) struct LocalEndpoint { + pub public_key: String, + pub private_key: String, + pub local_port: u32, + pub persistent_keepalive: bool, +} + +#[derive(Debug, Clone)] +pub(crate) struct RemoteEndpoint { + pub public_key: String, + pub remote_ip: Option, + pub remote_port: Option, + pub local_ip: String, + pub local_subnet: String, + pub latest_handshake: SystemTime, + pub sent_bytes: u128, + pub received_bytes: u128, + pub persistent_keepalive: bool, +} + +#[derive(Debug, Clone)] +pub(crate) enum Endpoint { + Local(LocalEndpoint), + Remote(RemoteEndpoint), +} + +fn to_option_string(s: &str) -> Option { + if s == EMPTY { + None + } else { + Some(s.to_owned()) + } +} + +fn to_bool(s: &str) -> bool { + s != "off" +} + +#[derive(Debug, Clone)] +pub(crate) struct WireGuard { + pub interfaces: HashMap>, +} + +impl TryFrom<&str> for WireGuard { + type Error = ExporterError; + + fn try_from(input: &str) -> Result { + debug!("wireguard::try_from({}) called", input); + let mut wg = WireGuard { + interfaces: HashMap::new(), + }; + + for line in input.lines() { + let v: Vec<&str> = line.split('\t').filter(|s| !s.is_empty()).collect(); + debug!("v == {:?}", v); + + let endpoint = if v.len() == 5 { + // this is the local interface + Endpoint::Local(LocalEndpoint { + public_key: v[1].to_owned(), + private_key: v[2].to_owned(), + local_port: v[3].parse::().unwrap(), + persistent_keepalive: to_bool(v[4]), + }) + } else { + // remote endpoint + let public_key = v[1].to_owned(); + + let (remote_ip, remote_port) = if let Some(ip_and_port) = to_option_string(v[3]) { + let toks: Vec<&str> = ip_and_port.split(':').collect(); + ( + Some(toks[0].to_owned()), + Some(toks[1].parse::().unwrap()), + ) + } else { + (None, None) + }; + + let tok: Vec<&str> = v[4].split('/').collect(); + let (local_ip, local_subnet) = (tok[0].to_owned(), tok[1].to_owned()); + + // the latest_handhshake is based on Linux representation: a tick is a second. So + // the hack here is: add N seconds to the UNIX_EPOCH constant. This wil not work + // on other platforms if the returned ticks are *not* seconds. Sadly I did not find + // an alternative way to initialize a SystemTime from a tick number. + Endpoint::Remote(RemoteEndpoint { + public_key, + remote_ip, + remote_port, + local_ip, + local_subnet, + latest_handshake: UNIX_EPOCH + .checked_add(Duration::from_secs(v[5].parse::()?)) + .unwrap(), + sent_bytes: v[6].parse::().unwrap(), + received_bytes: v[7].parse::().unwrap(), + persistent_keepalive: to_bool(v[8]), + }) + }; + + trace!("{:?}", endpoint); + + if let Some(endpoints) = wg.interfaces.get_mut(v[0]) { + endpoints.push(endpoint); + } else { + let mut new_vec = Vec::new(); + new_vec.push(endpoint); + wg.interfaces.insert(v[0].to_owned(), new_vec); + } + } + + trace!("{:?}", wg); + Ok(wg) + } +} + +impl RenderToPrometheus for WireGuard { + fn render(&self) -> String { + let mut latest_handshakes = Vec::new(); + let mut sent_bytes = Vec::new(); + let mut received_bytes = Vec::new(); + + for (interface, endpoints) in self.interfaces.iter() { + for endpoint in endpoints { + // only show remote endpoints + if let Endpoint::Remote(ep) = endpoint { + debug!("{:?}", ep); + sent_bytes.push(format!("wireguard_sent_bytes{{inteface=\"{}\", public_key=\"{}\", local_ip=\"{}\", local_subnet=\"{}\"}} {}\n", interface, ep.public_key, ep.local_ip, ep.local_subnet, ep.sent_bytes)); + received_bytes.push(format!("wireguard_received_bytes{{inteface=\"{}\", public_key=\"{}\", local_ip=\"{}\", local_subnet=\"{}\"}} {}\n", interface, ep.public_key, ep.local_ip, ep.local_subnet, ep.received_bytes)); + latest_handshakes.push(format!("wireguard_latest_handshake_seconds{{inteface=\"{}\", public_key=\"{}\", local_ip=\"{}\", local_subnet=\"{}\"}} {}\n", interface, ep.public_key, ep.local_ip, ep.local_subnet, ::std::time::SystemTime::now().duration_since(ep.latest_handshake).unwrap().as_secs())); + } + } + } + + let mut s = String::new(); + + s.push_str( + "# HELP wireguard_sent_bytes Bytes sent to the peer +# TYPE wireguard_sent_bytes counter\n", + ); + for peer in sent_bytes { + s.push_str(&peer); + } + + s.push_str( + "# HELP wireguard_received_bytes Bytes received from the peer +# TYPE wireguard_received_bytes counter\n", + ); + for peer in received_bytes { + s.push_str(&peer); + } + + s.push_str( + "# HELP wireguard_latest_handshake_seconds Seconds from the last handshake +# TYPE wireguard_latest_handshake_seconds gauge\n", + ); + for peer in latest_handshakes { + s.push_str(&peer); + } + + debug!("{}", s); + s + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const TEXT : &'static str = "wg0\t000q4qAC0ExW/BuGSmVR1nxH9JAXT6g9Wd3oEGy5lA=\t0000u8LWR682knVm350lnuqlCJzw5SNLW9Nf96P+m8=\t51820\toff +wg0\t2S7mA0vEMethCNQrJpJKE81/JmhgtB+tHHLYQhgM6kk=\t(none)\t37.159.76.245:29159\t10.70.0.2/32\t1555771458\t10288508\t139524160\toff +wg0\tqnoxQoQI8KKMupLnSSureORV0wMmH7JryZNsmGVISzU=\t(none)\t(none)\t10.70.0.3/32\t0\t0\t0\toff +wg0\tL2UoJZN7RmEKsMmqaJgKG0m1S2Zs2wd2ptAf+kb3008=\t(none)\t(none)\t10.70.0.4/32\t0\t0\t0\toff +wg0\tMdVOIPKt9K2MPj/sO2NlWQbOnFJ6L/qX80mmhQwsUlA=\t(none)\t(none)\t10.70.0.50/32\t0\t0\t0\toff +wg2\tMdVOIPKt9K2MPj/sO2NlWQbOnFJcL/qX80mmhQwsUlA=\t(none)\t(none)\t10.70.5.50/32\t0\t0\t0\toff +pollo\tYdVOIPKt9K2MPsO2NlWQbOnFJcL/qX80mmhQwsUlA=\t(none)\t(none)\t10.70.70.50/32\t0\t0\t0\toff +wg0\t928vO9Lf4+Mo84cWu4k1oRyzf0AR7FTGoPKHGoTMSHk=\t(none)\t5.90.62.106:21741\t10.70.0.80/32\t1555344925\t283012\t6604620\toff +"; + + #[test] + fn test_parse() { + let a = WireGuard::try_from(TEXT).unwrap(); + println!("{:?}", a); + assert!(a.interfaces.len() == 3); + assert!(a.interfaces["wg0"].len() == 6); + + let e1 = match &a.interfaces["wg0"][1] { + Endpoint::Local(_) => panic!(), + Endpoint::Remote(re) => re, + }; + + assert!(e1.public_key == "2S7mA0vEMethCNQrJpJKE81/JmhgtB+tHHLYQhgM6kk="); + } + + #[test] + fn test_parse_and_serialize() { + let a = WireGuard::try_from(TEXT).unwrap(); + let s = a.render(); + println!("{}", s); + } +}