From df205f8752b32f9db0dcd10737ccada981504c7a Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Sat, 7 Sep 2019 12:48:45 -0700 Subject: [PATCH] Use ureq instead of influx_db_client (#5839) --- Cargo.lock | 192 --------------- core/src/blocktree.rs | 18 +- metrics/Cargo.toml | 2 - metrics/src/counter.rs | 20 +- metrics/src/datapoint.rs | 176 ++++++++++++++ metrics/src/lib.rs | 5 +- metrics/src/metrics.rs | 413 +++++++++------------------------ upload-perf/src/upload-perf.rs | 29 ++- 8 files changed, 322 insertions(+), 533 deletions(-) create mode 100644 metrics/src/datapoint.rs diff --git a/Cargo.lock b/Cargo.lock index 9e3b07aa3..88afa3159 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,11 +24,6 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "antidote" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "approx" version = "0.1.1" @@ -138,15 +133,6 @@ dependencies = [ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "base64" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "base64" version = "0.10.1" @@ -589,20 +575,6 @@ dependencies = [ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "core-foundation" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "core-foundation-sys" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "core_affinity" version = "0.5.9" @@ -1038,19 +1010,6 @@ name = "fnv" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "fs_extra" version = "1.1.0" @@ -1328,24 +1287,6 @@ dependencies = [ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "hyper" -version = "0.10.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "hyper" version = "0.12.33" @@ -1375,16 +1316,6 @@ dependencies = [ "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "hyper-native-tls" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "idna" version = "0.1.5" @@ -1422,18 +1353,6 @@ dependencies = [ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "influx_db_client" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-native-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "iovec" version = "0.1.2" @@ -1800,23 +1719,6 @@ name = "mirai-annotations" version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "native-tls" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.24 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.48 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "net2" version = "0.2.33" @@ -1931,36 +1833,6 @@ name = "opaque-debug" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "openssl" -version = "0.10.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.48 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "openssl-probe" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "openssl-sys" -version = "0.9.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "ordermap" version = "0.3.5" @@ -2669,11 +2541,6 @@ name = "ryu" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "safemem" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "same-file" version = "1.0.5" @@ -2682,15 +2549,6 @@ dependencies = [ "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "schannel" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "scoped_threadpool" version = "0.1.9" @@ -2715,25 +2573,6 @@ dependencies = [ "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "security-framework" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "security-framework-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "semver" version = "0.9.0" @@ -3555,11 +3394,9 @@ name = "solana-metrics" version = "0.19.0-pre0" dependencies = [ "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "influx_db_client 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "solana-sdk 0.19.0-pre0", @@ -4844,11 +4681,6 @@ name = "traitobject" version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "traitobject" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "treeline" version = "0.1.0" @@ -4999,11 +4831,6 @@ name = "utf8-ranges" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "vcpkg" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "vec_map" version = "0.8.1" @@ -5203,7 +5030,6 @@ dependencies = [ "checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" "checksum aho-corasick 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "36b7aa1ccb7d7ea3f437cf025a2ab1c47cc6c1bc9fc84918ff449def12f5e282" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -"checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" "checksum approx 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08abcc3b4e9339e33a3d0a5ed15d84a687350c05689d825e0f6655eef9e76a94" "checksum ar 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "579681b3fecd1e9d6b5ce6969e05f9feb913f296eddaf595be1166a5ca597bc4" "checksum arc-swap 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "bc4662175ead9cd84451d5c35070517777949a2ed84551764129cedb88384841" @@ -5220,7 +5046,6 @@ dependencies = [ "checksum backtrace 0.3.33 (registry+https://github.com/rust-lang/crates.io-index)" = "88fb679bc9af8fa639198790a77f52d345fe13656c08b43afa9424c206b731c6" "checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" "checksum bech32 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "58946044516aa9dc922182e0d6e9d124a31aafe6b421614654eb27cf90cec09c" "checksum bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9f04a5e50dc80b3d5d35320889053637d15011aed5e66b66b37ae798c65da6f7" "checksum bindgen 0.47.3 (registry+https://github.com/rust-lang/crates.io-index)" = "df683a55b54b41d5ea8ebfaebb5aa7e6b84e3f3006a78f010dadc9ca88469260" @@ -5271,8 +5096,6 @@ dependencies = [ "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" "checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" "checksum cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0e3d6405328b6edb412158b3b7710e2634e23f3614b9bb1c412df7952489a626" -"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" -"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" "checksum core_affinity 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6d162c6e463c31dbf78fefa99d042156c1c74d404e299cfe3df2923cb857595b" "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" "checksum criterion-stats 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "387df94cb74ada1b33e10ce034bb0d9360cc73edb5063e7d7d4120a40ee1c9d2" @@ -5321,8 +5144,6 @@ dependencies = [ "checksum filetime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "450537dc346f0c4d738dda31e790da1da5d4bd12145aad4da0d03d713cb3794f" "checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" "checksum fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" "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" @@ -5354,15 +5175,12 @@ dependencies = [ "checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" "checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" "checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" -"checksum hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" "checksum hyper 0.12.33 (registry+https://github.com/rust-lang/crates.io-index)" = "7cb44cbce9d8ee4fb36e4c0ad7b794ac44ebaad924b9c8291a63215bb44c2c8f" "checksum hyper 0.9.18 (registry+https://github.com/rust-lang/crates.io-index)" = "1b9bf64f730d6ee4b0528a5f0a316363da9d8104318731509d4ccc86248f82b3" -"checksum hyper-native-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d375598f442742b0e66208ee12501391f1c7ac0bafb90b4fe53018f81f06068" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" "checksum indexmap 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4d6d89e0948bf10c08b9ecc8ac5b83f07f857ebe2c0cbe38de15b4e4f510356" "checksum indicatif 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2c60da1c9abea75996b70a931bba6c750730399005b61ccd853cee50ef3d0d0c" -"checksum influx_db_client 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1af8df5705f0b30bcb504bafc9396d995a555c4d6bd6f9097729ad47b8a49a38" "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" "checksum itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d" "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" @@ -5404,7 +5222,6 @@ dependencies = [ "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum mirai-annotations 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d15444fc4fbe11acaf6683f49e1d4be94bfd6d96799673e9b8417dd7ba9b6ea9" -"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f40f005c60db6e03bae699e414c58bf9aa7ea02a2d0b9bfbcf19286cc4c82b30" "checksum nibble_vec 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c8d77f3db4bce033f4d04db08079b2ef1c3d02b44e86f25d08886fafa7756ffa" @@ -5419,9 +5236,6 @@ dependencies = [ "checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273" "checksum number_prefix 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dbf9993e59c894e3c08aa1c2712914e9e6bf1fcbfc6bef283e2183df345a4fee" "checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" -"checksum openssl 0.10.24 (registry+https://github.com/rust-lang/crates.io-index)" = "8152bb5a9b5b721538462336e3bef9a539f892715e5037fda0f984577311af15" -"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" -"checksum openssl-sys 0.9.48 (registry+https://github.com/rust-lang/crates.io-index)" = "b5ba300217253bcc5dc68bed23d782affa45000193866e025329aa8a7a9f05b8" "checksum ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" @@ -5502,15 +5316,11 @@ dependencies = [ "checksum rustls 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f271e3552cd835fa28c541c34a7e8fdd8cdff09d77fe4eb8f6c42e87a11b096e" "checksum rusty-fork 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3dd93264e10c577503e926bd1430193eeb5d21b059148910082245309b424fae" "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" -"checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" -"checksum schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f2f6abf258d99c3c1c5c2131d99d064e94b7b3dd5f416483057f308fea253339" "checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" "checksum sct 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2f5adf8fbd58e1b1b52699dc8bed2630faecb6d8c7bee77d009d6bbe4af569b9" -"checksum security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eee63d0f4a9ec776eeb30e220f0bc1e092c3ad744b2a379e3993070364d3adc2" -"checksum security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9636f8989cbf61385ae4824b98c1aaa54c994d7d8b41f11c601ed799f0549a56" "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.99 (registry+https://github.com/rust-lang/crates.io-index)" = "fec2851eb56d010dc9a21b89ca53ee75e6528bab60c11e89d38390904982da9f" @@ -5616,7 +5426,6 @@ dependencies = [ "checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" "checksum toml 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b8c96d7873fa7ef8bdeb3a9cda3ac48389b4154f32b9803b4bc26220b677b039" "checksum traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "07eaeb7689bb7fca7ce15628319635758eda769fed481ecfe6686ddef2600616" -"checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" "checksum treeline 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" @@ -5640,7 +5449,6 @@ dependencies = [ "checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61" "checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" "checksum utf8-ranges 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9d50aa7650df78abf942826607c62468ce18d9019673d4a2ebe1865dbb96ffde" -"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" diff --git a/core/src/blocktree.rs b/core/src/blocktree.rs index ae2093d6e..a943701e3 100644 --- a/core/src/blocktree.rs +++ b/core/src/blocktree.rs @@ -1332,17 +1332,13 @@ fn send_signals( for (signal, slots) in completed_slots_senders.iter().zip(slots.into_iter()) { let res = signal.try_send(slots); if let Err(TrySendError::Full(_)) = res { - solana_metrics::submit( - solana_metrics::influxdb::Point::new("blocktree_error") - .add_field( - "error", - solana_metrics::influxdb::Value::String( - "Unable to send newly completed slot because channel is full" - .to_string(), - ), - ) - .to_owned(), - log::Level::Error, + datapoint_error!( + "blocktree_error", + ( + "error", + "Unable to send newly completed slot because channel is full".to_string(), + String + ), ); } } diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index d09a945bd..9906c8915 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -10,7 +10,6 @@ edition = "2018" [dependencies] env_logger = "0.6.2" -influx_db_client = "0.3.6" lazy_static = "1.4.0" log = "0.4.8" solana-sdk = { path = "../sdk", version = "0.19.0-pre0" } @@ -19,7 +18,6 @@ ureq = "0.11.0" [dev-dependencies] rand = "0.6.5" -serde_json = "1.0" serial_test = "0.2.0" serial_test_derive = "0.2.0" diff --git a/metrics/src/counter.rs b/metrics/src/counter.rs index dc9479366..661d00be4 100644 --- a/metrics/src/counter.rs +++ b/metrics/src/counter.rs @@ -1,4 +1,4 @@ -use crate::metrics::{submit_counter, CounterPoint}; +use crate::metrics::submit_counter; use log::*; use solana_sdk::timing; use std::env; @@ -19,6 +19,24 @@ pub struct Counter { pub metricsrate: AtomicU64, } +#[derive(Clone, Debug)] +pub struct CounterPoint { + pub name: &'static str, + pub count: i64, + pub timestamp: u64, +} + +impl CounterPoint { + #[cfg(test)] + pub fn new(name: &'static str) -> Self { + CounterPoint { + name, + count: 0, + timestamp: 0, + } + } +} + #[macro_export] macro_rules! create_counter { ($name:expr, $lograte:expr, $metricsrate:expr) => { diff --git a/metrics/src/datapoint.rs b/metrics/src/datapoint.rs new file mode 100644 index 000000000..f03d51b52 --- /dev/null +++ b/metrics/src/datapoint.rs @@ -0,0 +1,176 @@ +#[derive(Clone, Debug)] +pub struct DataPoint { + pub name: &'static str, + pub timestamp: u64, + pub fields: Vec<(&'static str, String)>, +} + +impl DataPoint { + pub fn new(name: &'static str) -> Self { + DataPoint { + name, + timestamp: solana_sdk::timing::timestamp(), + fields: vec![], + } + } + + pub fn add_field_str(&mut self, name: &'static str, value: &str) -> &mut Self { + self.fields + .push((name, format!("\"{}\"", value.replace("\"", "\\\"")))); + self + } + + pub fn add_field_bool(&mut self, name: &'static str, value: bool) -> &mut Self { + self.fields.push((name, value.to_string())); + self + } + + pub fn add_field_i64(&mut self, name: &'static str, value: i64) -> &mut Self { + self.fields.push((name, value.to_string() + "i")); + self + } + + pub fn add_field_f64(&mut self, name: &'static str, value: f64) -> &mut Self { + self.fields.push((name, value.to_string())); + self + } +} + +#[macro_export] +macro_rules! datapoint { + (@field $point:ident $name:expr, $string:expr, String) => { + $point.add_field_str($name, &$string); + }; + (@field $point:ident $name:expr, $value:expr, i64) => { + $point.add_field_i64($name, $value as i64); + }; + (@field $point:ident $name:expr, $value:expr, f64) => { + $point.add_field_f64($name, $value as f64); + }; + (@field $point:ident $name:expr, $value:expr, bool) => { + $point.add_field_bool($name, $value as bool); + }; + + (@fields $point:ident) => {}; + (@fields $point:ident ($name:expr, $value:expr, $type:ident) , $($rest:tt)*) => { + $crate::datapoint!(@field $point $name, $value, $type); + $crate::datapoint!(@fields $point $($rest)*); + }; + (@fields $point:ident ($name:expr, $value:expr, $type:ident)) => { + $crate::datapoint!(@field $point $name, $value, $type); + }; + + (@point $name:expr, $($fields:tt)+) => { + { + let mut point = $crate::datapoint::DataPoint::new(&$name); + $crate::datapoint!(@fields point $($fields)+); + point + } + }; + (@point $name:expr) => { + $crate::datapoint::DataPoint::new(&$name) + }; + ($name:expr, $($fields:tt)+) => { + if log::log_enabled!(log::Level::Debug) { + $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Debug); + } + }; +} + +#[macro_export] +macro_rules! datapoint_error { + ($name:expr) => { + if log::log_enabled!(log::Level::Error) { + $crate::submit($crate::datapoint!(@point $name), log::Level::Error); + } + }; + ($name:expr, $($fields:tt)+) => { + if log::log_enabled!(log::Level::Error) { + $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Error); + } + }; +} + +#[macro_export] +macro_rules! datapoint_warn { + ($name:expr) => { + if log::log_enabled!(log::Level::Warn) { + $crate::submit($crate::datapoint!(@point $name), log::Level::Warn); + } + }; + ($name:expr, $($fields:tt)+) => { + if log::log_enabled!(log::Level::Warn) { + $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Warn); + } + }; +} + +#[macro_export] +macro_rules! datapoint_info { + ($name:expr) => { + if log::log_enabled!(log::Level::Info) { + $crate::submit($crate::datapoint!(@point $name), log::Level::Info); + } + }; + ($name:expr, $($fields:tt)+) => { + if log::log_enabled!(log::Level::Info) { + $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Info); + } + }; +} + +#[macro_export] +macro_rules! datapoint_debug { + ($name:expr) => { + if log::log_enabled!(log::Level::Debug) { + $crate::submit($crate::datapoint!(@point $name), log::Level::Debug); + } + }; + ($name:expr, $($fields:tt)+) => { + if log::log_enabled!(log::Level::Debug) { + $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Debug); + } + }; +} + +#[cfg(test)] +mod test { + #[test] + fn test_datapoint() { + datapoint!("name", ("field name", "test".to_string(), String)); + datapoint!("name", ("field name", 12.34_f64, f64)); + datapoint!("name", ("field name", true, bool)); + datapoint!("name", ("field name", 1, i64)); + datapoint!("name", ("field name", 1, i64),); + datapoint!("name", ("field1 name", 2, i64), ("field2 name", 2, i64)); + datapoint!("name", ("field1 name", 2, i64), ("field2 name", 2, i64),); + datapoint!( + "name", + ("field1 name", 2, i64), + ("field2 name", 2, i64), + ("field3 name", 3, i64) + ); + datapoint!( + "name", + ("field1 name", 2, i64), + ("field2 name", 2, i64), + ("field3 name", 3, i64), + ); + + let point = datapoint!( + @point "name", + ("i64", 1, i64), + ("String", "string space string".to_string(), String), + ("f64", 12.34_f64, f64), + ("bool", true, bool) + ); + assert_eq!(point.name, "name"); + assert_eq!(point.fields[0], ("i64", "1i".to_string()));; + assert_eq!( + point.fields[1], + ("String", "\"string space string\"".to_string()) + ); + assert_eq!(point.fields[2], ("f64", "12.34".to_string())); + assert_eq!(point.fields[3], ("bool", "true".to_string())); + } +} diff --git a/metrics/src/lib.rs b/metrics/src/lib.rs index a46e3124d..622cef3db 100644 --- a/metrics/src/lib.rs +++ b/metrics/src/lib.rs @@ -1,7 +1,4 @@ -#[macro_use] pub mod counter; - +pub mod datapoint; mod metrics; - pub use crate::metrics::{flush, query, set_host_id, set_panic_hook, submit}; -pub use influx_db_client as influxdb; diff --git a/metrics/src/metrics.rs b/metrics/src/metrics.rs index 6abeb507a..db3bea96e 100644 --- a/metrics/src/metrics.rs +++ b/metrics/src/metrics.rs @@ -1,11 +1,9 @@ //! The `metrics` module enables sending measurements to an `InfluxDB` instance -use influx_db_client as influxdb; -use influx_db_client::Point; +use crate::{counter::CounterPoint, datapoint::DataPoint}; use lazy_static::lazy_static; use log::*; use solana_sdk::hash::hash; -use solana_sdk::timing; use std::collections::HashMap; use std::convert::Into; use std::sync::mpsc::{channel, Receiver, RecvTimeoutError, Sender}; @@ -15,136 +13,13 @@ use std::time::{Duration, Instant}; use std::{cmp, env}; use sys_info::hostname; -#[macro_export] -macro_rules! datapoint { - (@field $point:ident $name:expr, $string:expr, String) => { - $point.add_field( - $name, - $crate::influxdb::Value::String($string)); - }; - (@field $point:ident $name:expr, $value:expr, i64) => { - $point.add_field( - $name, - $crate::influxdb::Value::Integer($value as i64)); - }; - (@field $point:ident $name:expr, $value:expr, f64) => { - $point.add_field( - $name, - $crate::influxdb::Value::Float($value as f64)); - }; - (@field $point:ident $name:expr, $value:expr, bool) => { - $point.add_field( - $name, - $crate::influxdb::Value::Boolean($value as bool)); - }; - - (@fields $point:ident) => {}; - (@fields $point:ident ($name:expr, $value:expr, $type:ident) , $($rest:tt)*) => { - $crate::datapoint!(@field $point $name, $value, $type); - $crate::datapoint!(@fields $point $($rest)*); - }; - (@fields $point:ident ($name:expr, $value:expr, $type:ident)) => { - $crate::datapoint!(@field $point $name, $value, $type); - }; - - (@point $name:expr, $($fields:tt)+) => { - { - let mut point = $crate::influxdb::Point::new(&$name); - $crate::datapoint!(@fields point $($fields)+); - point - } - }; - (@point $name:expr) => { - $crate::influxdb::Point::new(&$name) - }; - ($name:expr, $($fields:tt)+) => { - if log_enabled!(log::Level::Debug) { - $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Debug); - } - }; -} - -#[macro_export] -macro_rules! datapoint_error { - ($name:expr) => { - if log_enabled!(log::Level::Error) { - $crate::submit($crate::datapoint!(@point $name), log::Level::Error); - } - }; - ($name:expr, $($fields:tt)+) => { - if log_enabled!(log::Level::Error) { - $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Error); - } - }; -} - -#[macro_export] -macro_rules! datapoint_warn { - ($name:expr) => { - if log_enabled!(log::Level::Warn) { - $crate::submit($crate::datapoint!(@point $name), log::Level::Warn); - } - }; - ($name:expr, $($fields:tt)+) => { - if log_enabled!(log::Level::Warn) { - $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Warn); - } - }; -} - -#[macro_export] -macro_rules! datapoint_info { - ($name:expr) => { - if log_enabled!(log::Level::Info) { - $crate::submit($crate::datapoint!(@point $name), log::Level::Info); - } - }; - ($name:expr, $($fields:tt)+) => { - if log_enabled!(log::Level::Info) { - $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Info); - } - }; -} - -#[macro_export] -macro_rules! datapoint_debug { - ($name:expr) => { - if log_enabled!(log::Level::Debug) { - $crate::submit($crate::datapoint!(@point $name), log::Level::Debug); - } - }; - ($name:expr, $($fields:tt)+) => { - if log_enabled!(log::Level::Debug) { - $crate::submit($crate::datapoint!(@point $name, $($fields)+), log::Level::Debug); - } - }; -} - type CounterMap = HashMap<(&'static str, u64), CounterPoint>; -#[derive(Clone, Debug)] -pub struct CounterPoint { - pub name: &'static str, - pub count: i64, - pub timestamp: u64, -} - -impl CounterPoint { - #[cfg(test)] - fn new(name: &'static str) -> Self { - CounterPoint { - name, - count: 0, - timestamp: 0, - } - } -} - -impl Into for CounterPoint { - fn into(self) -> influxdb::Point { - let mut point = influxdb::Point::new(self.name); - point.add_field("count", influxdb::Value::Integer(self.count)); - point.add_timestamp(self.timestamp as i64); +impl Into for CounterPoint { + fn into(self) -> DataPoint { + let mut point = DataPoint::new(self.name); + point.timestamp = self.timestamp; + point.add_field_i64("count", self.count); point } } @@ -152,7 +27,7 @@ impl Into for CounterPoint { #[derive(Debug)] enum MetricsCommand { Flush(Arc), - Submit(influxdb::Point, log::Level), + Submit(DataPoint, log::Level), SubmitCounter(CounterPoint, log::Level, u64), } @@ -163,21 +38,21 @@ struct MetricsAgent { trait MetricsWriter { // Write the points and empty the vector. Called on the internal // MetricsAgent worker thread. - fn write(&self, points: Vec); + fn write(&self, points: Vec); } struct InfluxDbMetricsWriter { - client: Option, + write_url: Option, } impl InfluxDbMetricsWriter { fn new() -> Self { Self { - client: Self::build_client().ok(), + write_url: Self::build_write_url().ok(), } } - fn build_client() -> Result { + fn build_write_url() -> Result { let config = get_metrics_config().map_err(|err| { info!("metrics disabled: {}", err); err @@ -187,28 +62,51 @@ impl InfluxDbMetricsWriter { "metrics configuration: host={} db={} username={}", config.host, config.db, config.username ); - let mut client = influxdb::Client::new_with_option(config.host, config.db, None) - .set_authentication(config.username, config.password); - client.set_read_timeout(1 /*second*/); - client.set_write_timeout(1 /*second*/); + let write_url = format!( + "{}/write?db={}&u={}&p={}&precision=ms", + &config.host, &config.db, &config.username, &config.password + ); - debug!("InfluxDB version: {:?}", client.get_version()); - Ok(client) + Ok(write_url) } } impl MetricsWriter for InfluxDbMetricsWriter { - fn write(&self, points: Vec) { - if let Some(ref client) = self.client { - debug!("submitting {} points", points.len()); - if let Err(err) = client.write_points( - influxdb::Points { point: points }, - Some(influxdb::Precision::Milliseconds), - None, - ) { - debug!("InfluxDbMetricsWriter write error: {:?}", err); + fn write(&self, points: Vec) { + if let Some(ref write_url) = self.write_url { + info!("submitting {} points", points.len()); + + let host_id = HOST_ID.read().unwrap(); + + let mut line = String::new(); + for point in points { + line.push_str(&format!("{},host_id={}", &point.name, &host_id)); + + let mut first = true; + for (name, value) in point.fields { + line.push_str(&format!( + "{}{}={}", + if first { ' ' } else { ',' }, + name, + value + )); + first = false; + } + + line.push_str(&format!(" {}\n", &point.timestamp)); } + + let response = ureq::post(write_url.as_str()) + .timeout_connect(2_000) + .timeout_read(2_000) + .timeout_write(4_000) + .send_string(&line); + info!( + "submit response: {} {}", + response.status(), + response.status_text() + ); } } } @@ -245,8 +143,7 @@ impl MetricsAgent { } fn write( - host_id: &influxdb::Value, - mut points: Vec, + mut points: Vec, last_write_time: Instant, max_points: usize, writer: &Arc, @@ -268,33 +165,19 @@ impl MetricsAgent { } let points_written = cmp::min(num_points, max_points - 1); points.truncate(points_written); - - let extra = influxdb::Point::new("metrics") - .add_timestamp(timing::timestamp() as i64) - .add_tag("host_id", host_id.clone()) - .add_field( - "points_written", - influxdb::Value::Integer(points_written as i64), - ) - .add_field("num_points", influxdb::Value::Integer(num_points as i64)) - .add_field( - "points_lost", - influxdb::Value::Integer((num_points - points_written) as i64), - ) - .add_field( - "secs_since_last_write", - influxdb::Value::Integer(now.duration_since(last_write_time).as_secs() as i64), - ) - .to_owned(); - - for point in &mut points { - // TODO: rework influx_db_client crate API to avoid this unnecessary cloning - point.add_tag("host_id", host_id.clone()); - } + points.push( + DataPoint::new("metrics") + .add_field_i64("points_written", points_written as i64) + .add_field_i64("num_points", num_points as i64) + .add_field_i64("points_lost", (num_points - points_written) as i64) + .add_field_i64( + "secs_since_last_write", + now.duration_since(last_write_time).as_secs() as i64, + ) + .to_owned(), + ); writer.write(points); - writer.write([extra].to_vec()); - points_written } @@ -306,7 +189,7 @@ impl MetricsAgent { ) { trace!("run: enter"); let mut last_write_time = Instant::now(); - let mut points_map = HashMap::)>::new(); + let mut points_map = HashMap::)>::new(); let max_points = write_frequency_secs.as_secs() as usize * max_points_per_sec; loop { @@ -359,7 +242,6 @@ impl MetricsAgent { let mut num_max_writes = max_points; let now = Instant::now(); - let host_id = HOST_ID.read().unwrap(); if now.duration_since(last_write_time) >= write_frequency_secs { vec![ Level::Error, @@ -374,7 +256,6 @@ impl MetricsAgent { let counter_points = counters.into_iter().map(|(_, v)| v.into()); let points: Vec<_> = points.into_iter().chain(counter_points).collect(); let num_written = Self::write( - &host_id, points, last_time, num_max_writes, @@ -394,11 +275,8 @@ impl MetricsAgent { trace!("run: exit"); } - pub fn submit(&self, mut point: influxdb::Point, level: log::Level) { - if point.timestamp.is_none() { - point.add_timestamp(timing::timestamp() as i64); - } - debug!("Submitting point: {:?}", point); + pub fn submit(&self, point: DataPoint, level: log::Level) { + debug!("Submitting data point: {:?}", point); self.sender .send(MetricsCommand::Submit(point, level)) .unwrap(); @@ -441,23 +319,23 @@ fn get_singleton_agent() -> Arc> { } lazy_static! { - static ref HOST_ID: Arc> = { - Arc::new(RwLock::new(influx_db_client::Value::String({ + static ref HOST_ID: Arc> = { + Arc::new(RwLock::new({ let hostname: String = hostname().unwrap_or_else(|_| "".to_string()); format!("{}", hash(hostname.as_bytes())).to_string() - }))) + })) }; } pub fn set_host_id(host_id: String) { let mut rw = HOST_ID.write().unwrap(); info!("host id: {}", host_id); - std::mem::replace(&mut *rw, influx_db_client::Value::String(host_id)); + std::mem::replace(&mut *rw, host_id); } /// Submits a new point from any thread. Note that points are internally queued /// and transmitted periodically in batches. -pub fn submit(point: influxdb::Point, level: log::Level) { +pub fn submit(point: DataPoint, level: log::Level) { let agent_mutex = get_singleton_agent(); let agent = agent_mutex.lock().unwrap(); agent.submit(point, level); @@ -465,7 +343,7 @@ pub fn submit(point: influxdb::Point, level: log::Level) { /// Submits a new counter or updates an existing counter from any thread. Note that points are /// internally queued and transmitted periodically in batches. -pub fn submit_counter(point: CounterPoint, level: log::Level, bucket: u64) { +pub(crate) fn submit_counter(point: CounterPoint, level: log::Level, bucket: u64) { let agent_mutex = get_singleton_agent(); let agent = agent_mutex.lock().unwrap(); agent.submit_counter(point, level, bucket); @@ -518,12 +396,12 @@ fn get_metrics_config() -> Result { pub fn query(q: &str) -> Result { let config = get_metrics_config().map_err(|err| err.to_string())?; - let query = format!( + let query_url = format!( "{}/query?u={}&p={}&q={}", &config.host, &config.username, &config.password, &q ); - let response = ureq::get(query.as_str()) + let response = ureq::get(query_url.as_str()) .call() .into_string() .map_err(|err| err.to_string())?; @@ -547,32 +425,23 @@ pub fn set_panic_hook(program: &'static str) { let default_hook = panic::take_hook(); panic::set_hook(Box::new(move |ono| { default_hook(ono); + let location = match ono.location() { + Some(location) => location.to_string(), + None => "?".to_string(), + }; submit( - influxdb::Point::new("panic") - .add_tag("program", influxdb::Value::String(program.to_string())) - .add_tag( - "thread", - influxdb::Value::String( - thread::current().name().unwrap_or("?").to_string(), - ), - ) + DataPoint::new("panic") + .add_field_str("program", program) + .add_field_str("thread", thread::current().name().unwrap_or("?")) // The 'one' field exists to give Kapacitor Alerts a numerical value // to filter on - .add_field("one", influxdb::Value::Integer(1)) - .add_field( + .add_field_i64("one", 1) + .add_field_str( "message", - influxdb::Value::String( - // TODO: use ono.message() when it becomes stable - ono.to_string(), - ), - ) - .add_field( - "location", - influxdb::Value::String(match ono.location() { - Some(location) => location.to_string(), - None => "?".to_string(), - }), + // TODO: use ono.message() when it becomes stable + &ono.to_string(), ) + .add_field_str("location", &location) .to_owned(), Level::Error, ); @@ -586,10 +455,9 @@ pub fn set_panic_hook(program: &'static str) { #[cfg(test)] mod test { use super::*; - use serde_json; struct MockMetricsWriter { - points_written: Arc>>, + points_written: Arc>>, } impl MockMetricsWriter { fn new() -> Self { @@ -604,7 +472,7 @@ mod test { } impl MetricsWriter for MockMetricsWriter { - fn write(&self, points: Vec) { + fn write(&self, points: Vec) { assert!(!points.is_empty()); let new_points = points.len(); @@ -616,7 +484,7 @@ mod test { info!( "Writing {} points ({} total)", new_points, - self.points_written() + self.points_written(), ); } } @@ -628,7 +496,9 @@ mod test { for i in 0..42 { agent.submit( - influxdb::Point::new(&format!("measurement {}", i)), + DataPoint::new("measurement") + .add_field_i64("i", i) + .to_owned(), Level::Info, ); } @@ -643,8 +513,8 @@ mod test { let agent = MetricsAgent::new(writer.clone(), Duration::from_secs(10), 1000); for i in 0..10 { - agent.submit_counter(CounterPoint::new("counter - 1"), Level::Info, i); - agent.submit_counter(CounterPoint::new("counter - 2"), Level::Info, i); + agent.submit_counter(CounterPoint::new("counter 1"), Level::Info, i); + agent.submit_counter(CounterPoint::new("counter 2"), Level::Info, i); } agent.flush(); @@ -672,12 +542,7 @@ mod test { assert_eq!(writer.points_written(), 1); let submitted_point = writer.points_written.lock().unwrap()[0].clone(); - let submitted_count = submitted_point.fields.get("count").unwrap(); - let expected_count = &influxdb::Value::Integer(100); - assert_eq!( - serde_json::to_string(submitted_count).unwrap(), - serde_json::to_string(expected_count).unwrap() - ); + assert_eq!(submitted_point.fields[0], ("count", "100i".to_string())); } #[test] @@ -686,8 +551,8 @@ mod test { let agent = MetricsAgent::new(writer.clone(), Duration::from_secs(10), 1000); for i in 0..50 { - agent.submit_counter(CounterPoint::new("counter - 1"), Level::Info, i / 10); - agent.submit_counter(CounterPoint::new("counter - 2"), Level::Info, i / 10); + agent.submit_counter(CounterPoint::new("counter 1"), Level::Info, i / 10); + agent.submit_counter(CounterPoint::new("counter 2"), Level::Info, i / 10); } agent.flush(); @@ -699,7 +564,7 @@ mod test { let writer = Arc::new(MockMetricsWriter::new()); let agent = MetricsAgent::new(writer.clone(), Duration::from_secs(1), 1000); - agent.submit(influxdb::Point::new("point 1"), Level::Info); + agent.submit(DataPoint::new("point 1"), Level::Info); thread::sleep(Duration::from_secs(2)); assert_eq!(writer.points_written(), 2); } @@ -711,7 +576,9 @@ mod test { for i in 0..102 { agent.submit( - influxdb::Point::new(&format!("measurement {}", i)), + DataPoint::new("measurement") + .add_field_i64("i", i) + .to_owned(), Level::Info, ); } @@ -736,7 +603,8 @@ mod test { // let mut threads = Vec::new(); for i in 0..42 { - let point = influxdb::Point::new(&format!("measurement {}", i)); + let mut point = DataPoint::new("measurement"); + point.add_field_i64("i", i); let agent = Arc::clone(&agent); threads.push(thread::spawn(move || { agent.lock().unwrap().submit(point, Level::Info); @@ -756,7 +624,7 @@ mod test { let writer = Arc::new(MockMetricsWriter::new()); { let agent = MetricsAgent::new(writer.clone(), Duration::from_secs(9999999), 1000); - agent.submit(influxdb::Point::new("point 1"), Level::Info); + agent.submit(DataPoint::new("point 1"), Level::Info); } assert_eq!(writer.points_written(), 1); @@ -766,80 +634,11 @@ mod test { fn test_live_submit() { let agent = MetricsAgent::default(); - let point = influxdb::Point::new("live_submit_test") - .add_tag("test", influxdb::Value::Boolean(true)) - .add_field( - "random_bool", - influxdb::Value::Boolean(rand::random::() < 128), - ) - .add_field( - "random_int", - influxdb::Value::Integer(rand::random::() as i64), - ) + let point = DataPoint::new("live_submit_test") + .add_field_bool("true", true) + .add_field_bool("random_bool", rand::random::() < 128) + .add_field_i64("random_int", rand::random::() as i64) .to_owned(); agent.submit(point, Level::Info); } - - #[test] - fn test_datapoint() { - macro_rules! matches { - ($e:expr, $p:pat) => { - match $e { - $p => true, - _ => false, - } - }; - } - datapoint!("name", ("field name", "test".to_string(), String)); - datapoint!("name", ("field name", 12.34_f64, f64)); - datapoint!("name", ("field name", true, bool)); - datapoint!("name", ("field name", 1, i64)); - datapoint!("name", ("field name", 1, i64),); - datapoint!("name", ("field1 name", 2, i64), ("field2 name", 2, i64)); - datapoint!("name", ("field1 name", 2, i64), ("field2 name", 2, i64),); - datapoint!( - "name", - ("field1 name", 2, i64), - ("field2 name", 2, i64), - ("field3 name", 3, i64) - ); - datapoint!( - "name", - ("field1 name", 2, i64), - ("field2 name", 2, i64), - ("field3 name", 3, i64), - ); - - let point = datapoint!(@point "name", ("i64", 1, i64), ("String", "string".to_string(), String), ("f64", 12.34_f64, f64), ("bool", true, bool)); - assert_eq!(point.measurement, "name"); - assert!(matches!( - point.fields.get("i64").unwrap(), - influxdb::Value::Integer(1) - )); - assert!(match point.fields.get("String").unwrap() { - influxdb::Value::String(ref s) => { - if s == "string" { - true - } else { - false - } - } - _ => false, - }); - assert!(match point.fields.get("f64").unwrap() { - influxdb::Value::Float(f) => { - if *f == 12.34_f64 { - true - } else { - false - } - } - _ => false, - }); - assert!(matches!( - point.fields.get("bool").unwrap(), - influxdb::Value::Boolean(true) - )); - } - } diff --git a/upload-perf/src/upload-perf.rs b/upload-perf/src/upload-perf.rs index 2501a4ad5..755fe2373 100644 --- a/upload-perf/src/upload-perf.rs +++ b/upload-perf/src/upload-perf.rs @@ -1,7 +1,5 @@ use serde_json; use serde_json::Value; -use solana_metrics; -use solana_metrics::influxdb; use std::collections::HashMap; use std::env; use std::fs::File; @@ -63,22 +61,21 @@ fn main() { last_commit = get_last_metrics(&"commit".to_string(), &db, &name, &branch).ok(); } - let median = v["median"].to_string().parse().unwrap(); - let deviation = v["deviation"].to_string().parse().unwrap(); + let median: i64 = v["median"].to_string().parse().unwrap(); + let deviation: i64 = v["deviation"].to_string().parse().unwrap(); if upload_metrics { - solana_metrics::submit( - influxdb::Point::new(&v["name"].as_str().unwrap().trim_matches('\"')) - .add_tag("test", influxdb::Value::String("bench".to_string())) - .add_tag("branch", influxdb::Value::String(branch.to_string())) - .add_field("median", influxdb::Value::Integer(median)) - .add_field("deviation", influxdb::Value::Integer(deviation)) - .add_field( - "commit", - influxdb::Value::String(git_commit_hash.trim().to_string()), - ) - .to_owned(), - log::Level::Info, + panic!("TODO..."); + /* + solana_metrics::datapoint_info!( + &v["name"].as_str().unwrap().trim_matches('\"'), + ("test", "bench", String), + ("branch", branch.to_string(), String), + ("median", median, i64), + ("deviation", deviation, i64), + ("commit", git_commit_hash.trim().to_string(), String) ); + */ + } let last_median = get_last_metrics(&"median".to_string(), &db, &name, &branch) .unwrap_or_default();