1.4.0 - Prometheus metrics added !

This commit is contained in:
Evann Regnault 2023-07-25 15:34:11 +02:00
parent 3a350af86c
commit be9b3d7bf5
9 changed files with 744 additions and 25 deletions

614
Cargo.lock generated
View file

@ -52,6 +52,28 @@ dependencies = [
"libc",
]
[[package]]
name = "async-stream"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
dependencies = [
"async-stream-impl",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-stream-impl"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.27",
]
[[package]]
name = "async-trait"
version = "0.1.68"
@ -79,6 +101,12 @@ dependencies = [
"webpki-roots",
]
[[package]]
name = "atomic"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
[[package]]
name = "autocfg"
version = "1.1.0"
@ -112,6 +140,12 @@ version = "0.21.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
[[package]]
name = "binascii"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72"
[[package]]
name = "bit-set"
version = "0.5.3"
@ -133,6 +167,12 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
[[package]]
name = "bitvec"
version = "1.0.1"
@ -227,6 +267,17 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
name = "cookie"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
dependencies = [
"percent-encoding",
"time 0.3.22",
"version_check",
]
[[package]]
name = "core-foundation"
version = "0.9.3"
@ -385,6 +436,39 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "devise"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6eacefd3f541c66fc61433d65e54e0e46e0a029a819a7dbbc7a7b489e8a85f8"
dependencies = [
"devise_codegen",
"devise_core",
]
[[package]]
name = "devise_codegen"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8cf4b8dd484ede80fd5c547592c46c3745a617c8af278e2b72bea86b2dfed6"
dependencies = [
"devise_core",
"quote",
]
[[package]]
name = "devise_core"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35b50dba0afdca80b187392b24f2499a88c336d5a8493e4b4ccfb608708be56a"
dependencies = [
"bitflags 2.3.3",
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
"syn 2.0.27",
]
[[package]]
name = "digest"
version = "0.10.7"
@ -396,6 +480,18 @@ dependencies = [
"subtle",
]
[[package]]
name = "dtoa"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
[[package]]
name = "either"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "encoding_rs"
version = "0.8.32"
@ -453,6 +549,20 @@ dependencies = [
"instant",
]
[[package]]
name = "figment"
version = "0.10.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4547e226f4c9ab860571e070a9034192b3175580ecea38da34fcdb53a018c9a5"
dependencies = [
"atomic",
"pear",
"serde",
"toml",
"uncased",
"version_check",
]
[[package]]
name = "flate2"
version = "1.0.26"
@ -597,6 +707,19 @@ dependencies = [
"slab",
]
[[package]]
name = "generator"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
dependencies = [
"cc",
"libc",
"log",
"rustversion",
"windows",
]
[[package]]
name = "generic-array"
version = "0.14.7"
@ -624,6 +747,12 @@ version = "0.27.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
[[package]]
name = "glob"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "h2"
version = "0.3.20"
@ -858,6 +987,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown 0.12.3",
"serde",
]
[[package]]
@ -870,6 +1000,12 @@ dependencies = [
"hashbrown 0.14.0",
]
[[package]]
name = "inlinable_string"
version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb"
[[package]]
name = "instant"
version = "0.1.12"
@ -908,6 +1044,17 @@ version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
[[package]]
name = "is-terminal"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi 0.3.1",
"rustix 0.38.4",
"windows-sys 0.48.0",
]
[[package]]
name = "itoa"
version = "1.0.6"
@ -953,6 +1100,12 @@ version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "linux-raw-sys"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
[[package]]
name = "lock_api"
version = "0.4.10"
@ -969,6 +1122,21 @@ version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
[[package]]
name = "loom"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
dependencies = [
"cfg-if",
"generator",
"scoped-tls",
"serde",
"serde_json",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "lru-cache"
version = "0.1.2"
@ -1016,6 +1184,15 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
[[package]]
name = "matchers"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
dependencies = [
"regex-automata 0.1.10",
]
[[package]]
name = "matches"
version = "0.1.10"
@ -1090,7 +1267,7 @@ checksum = "ebcd85ec209a5b84fd9f54b9e381f6fa17462bc74160d018fc94fd8b9f61faa8"
dependencies = [
"async-trait",
"base64 0.13.1",
"bitflags",
"bitflags 1.3.2",
"bson",
"chrono",
"derivative",
@ -1129,6 +1306,26 @@ dependencies = [
"webpki-roots",
]
[[package]]
name = "multer"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2"
dependencies = [
"bytes",
"encoding_rs",
"futures-util",
"http",
"httparse",
"log",
"memchr",
"mime",
"spin 0.9.8",
"tokio",
"tokio-util",
"version_check",
]
[[package]]
name = "native-tls"
version = "0.2.11"
@ -1153,6 +1350,16 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
[[package]]
name = "nu-ansi-term"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
dependencies = [
"overload",
"winapi",
]
[[package]]
name = "num-traits"
version = "0.2.15"
@ -1183,15 +1390,17 @@ dependencies = [
[[package]]
name = "obsessed-yanqing"
version = "1.3.1"
version = "1.4.0"
dependencies = [
"chrono",
"levenshtein",
"mongodb",
"poise",
"prometheus-client",
"rand",
"regex",
"reqwest",
"rocket",
"select",
"serde",
"serde_derive",
@ -1213,7 +1422,7 @@ version = "0.10.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
dependencies = [
"bitflags",
"bitflags 1.3.2",
"cfg-if",
"foreign-types",
"libc",
@ -1260,6 +1469,12 @@ dependencies = [
"num-traits",
]
[[package]]
name = "overload"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
name = "parking_lot"
version = "0.12.1"
@ -1292,6 +1507,29 @@ dependencies = [
"digest",
]
[[package]]
name = "pear"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61a386cd715229d399604b50d1361683fe687066f42d56f54be995bc6868f71c"
dependencies = [
"inlinable_string",
"pear_codegen",
"yansi 1.0.0-rc",
]
[[package]]
name = "pear_codegen"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da9f0f13dac8069c139e8300a6510e3f4143ecf5259c60b116a9b271b4ca0d54"
dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
"syn 2.0.27",
]
[[package]]
name = "percent-encoding"
version = "2.3.0"
@ -1406,6 +1644,42 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "proc-macro2-diagnostics"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.27",
"version_check",
"yansi 1.0.0-rc",
]
[[package]]
name = "prometheus-client"
version = "0.21.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2"
dependencies = [
"dtoa",
"itoa",
"parking_lot",
"prometheus-client-derive-encode",
]
[[package]]
name = "prometheus-client-derive-encode"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b6a5217beb0ad503ee7fa752d451c905113d70721b937126158f3106a48cc1"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "quick-error"
version = "1.2.3"
@ -1463,7 +1737,27 @@ version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
"bitflags",
"bitflags 1.3.2",
]
[[package]]
name = "ref-cast"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85d07b1a5f16b5548f4255a978c94259971aff73f39e8d67e8250e8b2f6667c3"
dependencies = [
"ref-cast-impl",
]
[[package]]
name = "ref-cast-impl"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a930b010d9effee5834317bb7ff406b76af7724348fd572b38705b4bd099fa92"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.27",
]
[[package]]
@ -1474,8 +1768,17 @@ checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
"regex-automata 0.3.3",
"regex-syntax 0.7.4",
]
[[package]]
name = "regex-automata"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
dependencies = [
"regex-syntax 0.6.29",
]
[[package]]
@ -1486,9 +1789,15 @@ checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
"regex-syntax 0.7.4",
]
[[package]]
name = "regex-syntax"
version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
version = "0.7.4"
@ -1559,12 +1868,93 @@ dependencies = [
"cc",
"libc",
"once_cell",
"spin",
"spin 0.5.2",
"untrusted",
"web-sys",
"winapi",
]
[[package]]
name = "rocket"
version = "0.5.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58734f7401ae5cfd129685b48f61182331745b357b96f2367f01aebaf1cc9cc9"
dependencies = [
"async-stream",
"async-trait",
"atomic",
"binascii",
"bytes",
"either",
"figment",
"futures",
"indexmap 1.9.3",
"is-terminal",
"log",
"memchr",
"multer",
"num_cpus",
"parking_lot",
"pin-project-lite",
"rand",
"ref-cast",
"rocket_codegen",
"rocket_http",
"serde",
"state",
"tempfile",
"time 0.3.22",
"tokio",
"tokio-stream",
"tokio-util",
"ubyte",
"version_check",
"yansi 0.5.1",
]
[[package]]
name = "rocket_codegen"
version = "0.5.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7093353f14228c744982e409259fb54878ba9563d08214f2d880d59ff2fc508b"
dependencies = [
"devise",
"glob",
"indexmap 1.9.3",
"proc-macro2",
"quote",
"rocket_http",
"syn 2.0.27",
"unicode-xid",
]
[[package]]
name = "rocket_http"
version = "0.5.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "936012c99162a03a67f37f9836d5f938f662e26f2717809761a9ac46432090f4"
dependencies = [
"cookie",
"either",
"futures",
"http",
"hyper",
"indexmap 1.9.3",
"log",
"memchr",
"pear",
"percent-encoding",
"pin-project-lite",
"ref-cast",
"serde",
"smallvec",
"stable-pattern",
"state",
"time 0.3.22",
"tokio",
"uncased",
]
[[package]]
name = "rustc-demangle"
version = "0.1.23"
@ -1605,11 +1995,24 @@ version = "0.37.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0"
dependencies = [
"bitflags",
"bitflags 1.3.2",
"errno",
"io-lifetimes",
"libc",
"linux-raw-sys",
"linux-raw-sys 0.3.8",
"windows-sys 0.48.0",
]
[[package]]
name = "rustix"
version = "0.38.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
dependencies = [
"bitflags 2.3.3",
"errno",
"libc",
"linux-raw-sys 0.4.3",
"windows-sys 0.48.0",
]
@ -1677,6 +2080,12 @@ dependencies = [
"windows-sys 0.42.0",
]
[[package]]
name = "scoped-tls"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]]
name = "scopeguard"
version = "1.1.0"
@ -1699,7 +2108,7 @@ version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
dependencies = [
"bitflags",
"bitflags 1.3.2",
"core-foundation",
"core-foundation-sys",
"libc",
@ -1808,6 +2217,15 @@ dependencies = [
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
@ -1851,7 +2269,7 @@ dependencies = [
"async-trait",
"async-tungstenite",
"base64 0.13.1",
"bitflags",
"bitflags 1.3.2",
"bytes",
"cfg-if",
"chrono",
@ -1896,6 +2314,15 @@ dependencies = [
"digest",
]
[[package]]
name = "sharded-slab"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
dependencies = [
"lazy_static",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.1"
@ -1952,6 +2379,30 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "spin"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
[[package]]
name = "stable-pattern"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045"
dependencies = [
"memchr",
]
[[package]]
name = "state"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
dependencies = [
"loom",
]
[[package]]
name = "string_cache"
version = "0.8.7"
@ -2044,7 +2495,7 @@ dependencies = [
"cfg-if",
"fastrand",
"redox_syscall",
"rustix",
"rustix 0.37.20",
"windows-sys 0.48.0",
]
@ -2079,6 +2530,16 @@ dependencies = [
"syn 2.0.27",
]
[[package]]
name = "thread_local"
version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
dependencies = [
"cfg-if",
"once_cell",
]
[[package]]
name = "time"
version = "0.1.45"
@ -2193,6 +2654,17 @@ dependencies = [
"tokio",
]
[[package]]
name = "tokio-stream"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
dependencies = [
"futures-core",
"pin-project-lite",
"tokio",
]
[[package]]
name = "tokio-util"
version = "0.7.8"
@ -2208,6 +2680,40 @@ dependencies = [
"tracing",
]
[[package]]
name = "toml"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.19.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
dependencies = [
"indexmap 2.0.0",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]]
name = "tower-service"
version = "0.3.2"
@ -2245,6 +2751,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
dependencies = [
"once_cell",
"valuable",
]
[[package]]
name = "tracing-log"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
dependencies = [
"lazy_static",
"log",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
dependencies = [
"matchers",
"nu-ansi-term",
"once_cell",
"regex",
"sharded-slab",
"smallvec",
"thread_local",
"tracing",
"tracing-core",
"tracing-log",
]
[[package]]
@ -2342,6 +2878,25 @@ version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
[[package]]
name = "ubyte"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c81f0dae7d286ad0d9366d7679a77934cfc3cf3a8d67e82669794412b2368fe6"
dependencies = [
"serde",
]
[[package]]
name = "uncased"
version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68"
dependencies = [
"serde",
"version_check",
]
[[package]]
name = "unicase"
version = "2.6.0"
@ -2372,6 +2927,12 @@ dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-xid"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "untrusted"
version = "0.7.1"
@ -2406,6 +2967,12 @@ dependencies = [
"serde",
]
[[package]]
name = "valuable"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]]
name = "vcpkg"
version = "0.2.15"
@ -2707,6 +3274,15 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "winnow"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25b5872fa2e10bd067ae946f927e726d7d603eaeb6e02fa6a350e0722d2b8c11"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
version = "0.10.1"
@ -2745,3 +3321,15 @@ dependencies = [
"mac",
"markup5ever",
]
[[package]]
name = "yansi"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
[[package]]
name = "yansi"
version = "1.0.0-rc"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ee746ad3851dd3bc40e4a028ab3b00b99278d929e48957bcb2d111874a7e43e"

View file

@ -1,6 +1,6 @@
[package]
name = "obsessed-yanqing"
version = "1.3.1"
version = "1.4.0"
edition = "2021"
authors = ["Evann Regnault"]
license = "MIT"
@ -20,3 +20,5 @@ regex = "1.9.1"
rand = "0.8.5"
mongodb = "2.6.0"
chrono = "0.4.26"
prometheus-client = "0.21.2"
rocket = "0.5.0-rc.3"

View file

@ -1,6 +1,6 @@
# Obsessed Yanqing
This is a bot whose main purpose is to give as much infomrations as possible about Honkai Star Rail.
This is a bot whose main purpose is to give as much information as possible about Honkai Star Rail.
> ⚠️ Disclaimer : All Data is fetched from [Prydwen.gg](https://prydwen.gg)
@ -16,7 +16,7 @@ choice.</br>This message will contain:
> In order to update this message every hour, three information are stored in a database : Guild id, Channel id, Message id.
>
> ❗ Those are the only information stored by the bot !
> ❗ Those are the only sensibles information stored by the bot !
### Character Data
@ -40,8 +40,17 @@ You'll also need a mongoDB server alongside it.
TOKEN : The discord bot's token
MONGO_HOST : The hostname of the mongodb instance
MONGO_PORT : The port of the mongodb instance
METRICS_ENABLED : Put to true to enable metrics
METRICS_PORT : Port on which the metrics server will listen
```
## Metrics
A prometheus compatible server is running in the background of the bot running on the port 8080.<br/>
For the moment, it provides two information:
- `server_count` The number of server the bot is in.
- `character_command_count` The number of time a character has been searched.
## APIs / Libraries
- [Prydwen.gg](https://www.prydwen.gg/star-rail/)

View file

@ -11,6 +11,7 @@ use crate::data::character::{Character, get_character_data};
use crate::data::cones::get_light_cone;
use crate::data::description::get_all_texts;
use crate::data::proscons::{format_proscons};
use crate::metrics::characters::CharacterLabels;
use crate::utils::color_manager::get_element_color;
use crate::utils::emote_manager::{get_element_emote, get_path_emote};
@ -329,6 +330,9 @@ async fn choice_interaction_handler(ctx: Context<'_>, message: &ReplyHandle<'_>)
}
};
let character_string = &interaction.data.values[0];
ctx.data().registries.character_count.get_or_create(&CharacterLabels{
character_name: character_string.clone()
}).inc();
let character = get_character_data(character_string.to_string()).await.unwrap();
menu_handler(ctx, interaction, character, CharacterTab::Home).await;
}

View file

@ -1,4 +1,9 @@
pub struct Data {} // User data, which is stored and accessible in all command invocations
use std::sync::Arc;
use crate::metrics::core::AllRegistries;
pub struct Data {
pub registries: Arc<AllRegistries>
} // User data, which is stored and accessible in all command invocations
pub type Error = Box<dyn std::error::Error + Send + Sync>;
pub type Context<'a> = poise::Context<'a, Data, Error>;

View file

@ -2,24 +2,26 @@ mod commands;
mod data;
mod utils;
mod mongo;
mod metrics;
use std::sync::Arc;
use std::time::Duration;
use poise::serenity_prelude::GatewayIntents;
use serenity::client::Context;
use serenity::http::GuildPagination;
use serenity::model::id::ChannelId;
use serenity::model::prelude::Activity;
use crate::commands::events::create_event_embeds;
use crate::data::{Data};
use crate::metrics::core::{AllRegistries, create_registries, Empty, setup_server};
use crate::mongo::core::get_all_status_messages;
fn update_daily(ctx: Context) {
fn update_daily(ctx: Context, all_registries: Arc<AllRegistries>) {
tokio::task::spawn(async move {
let mut interval = tokio::time::interval(Duration::from_secs(60*60));
loop {
get_total_guilds_count(&ctx, &all_registries).await;
let status_messages = get_all_status_messages().await;
let embeds = create_event_embeds().await;
@ -42,12 +44,21 @@ fn update_daily(ctx: Context) {
}
});
}
interval.tick().await;
}
});
}
async fn get_total_guilds_count(ctx: &Context, all_registries: &Arc<AllRegistries>) {
let mut cnt: i64 = 0;
let mut guilds = ctx.http.get_guilds(None, None).await.expect("Cannot get guilds");
while !guilds.is_empty() {
cnt += guilds.len() as i64;
guilds = ctx.http.get_guilds(Some(&GuildPagination::After(guilds.last().expect("Cannot get last").id)), None).await.expect("Cannot get nexts");
}
all_registries.server_count.get_or_create(&Empty {}).set(cnt);
}
#[tokio::main]
async fn main() {
// Build our client
@ -65,12 +76,23 @@ async fn main() {
Box::pin(async move {
ctx.set_activity(Activity::listening("/character")).await;
poise::builtins::register_globally(ctx, &framework.options().commands).await?;
update_daily(ctx.clone());
let all_registries = Arc::new(create_registries());
let server_registry = Arc::clone(&all_registries);
tokio::task::spawn(async move {
setup_server(server_registry).await
});
let updater_registry = Arc::clone(&all_registries);
update_daily(ctx.clone(), updater_registry);
println!("Bot Started");
Ok(Data {})
Ok(Data {registries: all_registries})
})
});
framework.run().await.unwrap();
framework.run_autosharded().await.unwrap();
}

View file

@ -0,0 +1,6 @@
use prometheus_client::encoding::EncodeLabelSet;
#[derive(Clone, Debug, Hash, PartialEq, Eq, EncodeLabelSet)]
pub struct CharacterLabels {
pub(crate) character_name: String
}

81
src/metrics/core.rs Normal file
View file

@ -0,0 +1,81 @@
use std::net::IpAddr;
use std::sync::Arc;
use prometheus_client::encoding::EncodeLabelSet;
use prometheus_client::encoding::text::encode;
use rocket::{routes, get, State, Config};
use prometheus_client::metrics::counter::Counter;
use prometheus_client::metrics::family::Family;
use prometheus_client::metrics::gauge::Gauge;
use prometheus_client::registry::Registry;
use rocket::config::LogLevel;
use crate::metrics::characters::CharacterLabels;
struct RocketState {
registry: Registry
}
#[derive(Clone, Debug, Hash, PartialEq, Eq, EncodeLabelSet)]
pub struct Empty {}
pub struct AllRegistries {
pub character_count: Family::<CharacterLabels, Counter>,
pub server_count: Family::<Empty, Gauge>
}
pub fn create_registries() -> AllRegistries {
let character_count = Family::<CharacterLabels, Counter>::default();
let server_count = Family::<Empty, Gauge>::default();
AllRegistries {
character_count,
server_count
}
}
#[get("/metrics")]
fn metrics(state: &State<RocketState>) -> String {
let mut buffer = String::new();
encode(&mut buffer, &state.registry).unwrap();
buffer
}
pub async fn setup_server(all_registries: Arc<AllRegistries>) {
if let Ok(enabled) = std::env::var("METRICS_ENABLED") {
let test = match enabled.to_lowercase().as_str() {
"false" => false,
"true" => true,
_ => false
};
if !test {println!("Metrics are not enabled, set METRICS_ENABLED to true to enable them !"); return;}
let mut registry = Registry::default();
registry.register(
"character_command_count",
"Number of character command used",
all_registries.character_count.clone()
);
registry.register(
"server_count",
"Number of servers the bot is in",
all_registries.server_count.clone()
);
let config = Config {
address: IpAddr::V4("0.0.0.0".parse().unwrap()),
port: std::env::var("METRICS_PORT").expect("No metrics found !").as_str().parse::<u16>().expect("METRICS_PORT is not in base 10"),
log_level: LogLevel::Critical,
..Config::default()
};
rocket::custom(config).mount("/", routes![metrics]).manage(RocketState { registry }).launch().await.expect("Cannot launch Metrics Server");
} else {
println!("Metrics are not enabled, set METRICS_ENABLED to true to enable them !");
}
}

2
src/metrics/mod.rs Normal file
View file

@ -0,0 +1,2 @@
pub mod core;
pub mod characters;