├── .cargo └── config.toml ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── Makefile ├── README.md ├── Trunk.toml ├── docs ├── hello_world │ ├── basic_setup.md │ └── practical_example │ │ └── setup.md └── index.md ├── examples ├── 0_hello_world │ ├── Dockerfile │ ├── README.md │ ├── run-demo.sh │ ├── sample-query.sql │ └── setup-prometheus-fdw.sql └── 1_practical_example │ ├── Dockerfile │ ├── README.md │ ├── custom.conf │ ├── run-demo.sh │ ├── sample-query.sql │ ├── setup-cache.sql │ ├── setup-metrics-sync.sql │ └── setup-prometheus-fdw.sql ├── mkdocs.yml ├── prometheus_fdw.control ├── sql ├── prometheus_fdw--0.1.1--0.1.2.sql ├── prometheus_fdw--0.1.2--0.1.3.sql ├── prometheus_fdw--0.1.3--0.1.4.sql ├── prometheus_fdw--0.1.4--0.1.5.sql ├── prometheus_fdw--0.1.5--0.2.0.sql └── prometheus_fdw--0.2.0--0.2.1.sql └── src ├── bin └── pgrx_embed.rs ├── init.rs └── lib.rs /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [target.'cfg(target_os="macos")'] 2 | # Postgres symbols won't be available until runtime 3 | rustflags = ["-Clink-arg=-Wl,-undefined,dynamic_lookup"] 4 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "1.1.1" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "android-tzdata" 31 | version = "0.1.1" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 34 | 35 | [[package]] 36 | name = "android_system_properties" 37 | version = "0.1.5" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 40 | dependencies = [ 41 | "libc", 42 | ] 43 | 44 | [[package]] 45 | name = "annotate-snippets" 46 | version = "0.9.2" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "ccaf7e9dfbb6ab22c82e473cd1a8a7bd313c19a5b7e40970f3d89ef5a5c9e81e" 49 | dependencies = [ 50 | "unicode-width", 51 | "yansi-term", 52 | ] 53 | 54 | [[package]] 55 | name = "anstyle" 56 | version = "1.0.4" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" 59 | 60 | [[package]] 61 | name = "anyhow" 62 | version = "1.0.94" 63 | source = "registry+https://github.com/rust-lang/crates.io-index" 64 | checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" 65 | 66 | [[package]] 67 | name = "async-trait" 68 | version = "0.1.83" 69 | source = "registry+https://github.com/rust-lang/crates.io-index" 70 | checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" 71 | dependencies = [ 72 | "proc-macro2", 73 | "quote", 74 | "syn 2.0.90", 75 | ] 76 | 77 | [[package]] 78 | name = "atomic-traits" 79 | version = "0.3.0" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "b29ec3788e96fb4fdb275ccb9d62811f2fa903d76c5eb4dd6fe7d09a7ed5871f" 82 | dependencies = [ 83 | "cfg-if", 84 | "rustc_version", 85 | ] 86 | 87 | [[package]] 88 | name = "autocfg" 89 | version = "1.4.0" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 92 | 93 | [[package]] 94 | name = "backtrace" 95 | version = "0.3.74" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 98 | dependencies = [ 99 | "addr2line", 100 | "cfg-if", 101 | "libc", 102 | "miniz_oxide", 103 | "object", 104 | "rustc-demangle", 105 | "windows-targets 0.52.6", 106 | ] 107 | 108 | [[package]] 109 | name = "base64" 110 | version = "0.21.7" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 113 | 114 | [[package]] 115 | name = "bindgen" 116 | version = "0.70.1" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" 119 | dependencies = [ 120 | "annotate-snippets", 121 | "bitflags 2.6.0", 122 | "cexpr", 123 | "clang-sys", 124 | "itertools", 125 | "proc-macro2", 126 | "quote", 127 | "regex", 128 | "rustc-hash", 129 | "shlex", 130 | "syn 2.0.90", 131 | ] 132 | 133 | [[package]] 134 | name = "bit-set" 135 | version = "0.5.3" 136 | source = "registry+https://github.com/rust-lang/crates.io-index" 137 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 138 | dependencies = [ 139 | "bit-vec", 140 | ] 141 | 142 | [[package]] 143 | name = "bit-vec" 144 | version = "0.6.3" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 147 | 148 | [[package]] 149 | name = "bitflags" 150 | version = "1.3.2" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 153 | 154 | [[package]] 155 | name = "bitflags" 156 | version = "2.6.0" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 159 | 160 | [[package]] 161 | name = "bitvec" 162 | version = "1.0.1" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 165 | dependencies = [ 166 | "funty", 167 | "radium", 168 | "tap", 169 | "wyz", 170 | ] 171 | 172 | [[package]] 173 | name = "block-buffer" 174 | version = "0.10.4" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 177 | dependencies = [ 178 | "generic-array", 179 | ] 180 | 181 | [[package]] 182 | name = "bumpalo" 183 | version = "3.16.0" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 186 | 187 | [[package]] 188 | name = "byteorder" 189 | version = "1.4.3" 190 | source = "registry+https://github.com/rust-lang/crates.io-index" 191 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 192 | 193 | [[package]] 194 | name = "bytes" 195 | version = "1.9.0" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 198 | 199 | [[package]] 200 | name = "camino" 201 | version = "1.1.9" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" 204 | dependencies = [ 205 | "serde", 206 | ] 207 | 208 | [[package]] 209 | name = "cargo-platform" 210 | version = "0.1.9" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" 213 | dependencies = [ 214 | "serde", 215 | ] 216 | 217 | [[package]] 218 | name = "cargo_metadata" 219 | version = "0.18.1" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" 222 | dependencies = [ 223 | "camino", 224 | "cargo-platform", 225 | "semver 1.0.19", 226 | "serde", 227 | "serde_json", 228 | "thiserror", 229 | ] 230 | 231 | [[package]] 232 | name = "cargo_toml" 233 | version = "0.19.2" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be" 236 | dependencies = [ 237 | "serde", 238 | "toml", 239 | ] 240 | 241 | [[package]] 242 | name = "cc" 243 | version = "1.2.4" 244 | source = "registry+https://github.com/rust-lang/crates.io-index" 245 | checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" 246 | dependencies = [ 247 | "shlex", 248 | ] 249 | 250 | [[package]] 251 | name = "cee-scape" 252 | version = "0.2.0" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | checksum = "4d67dfb052149f779f77e9ce089cea126e00657e8f0d11dafc7901fde4291101" 255 | dependencies = [ 256 | "cc", 257 | "libc", 258 | ] 259 | 260 | [[package]] 261 | name = "cexpr" 262 | version = "0.6.0" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 265 | dependencies = [ 266 | "nom", 267 | ] 268 | 269 | [[package]] 270 | name = "cfg-if" 271 | version = "1.0.0" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 274 | 275 | [[package]] 276 | name = "chrono" 277 | version = "0.4.39" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" 280 | dependencies = [ 281 | "android-tzdata", 282 | "iana-time-zone", 283 | "js-sys", 284 | "num-traits", 285 | "wasm-bindgen", 286 | "windows-targets 0.52.6", 287 | ] 288 | 289 | [[package]] 290 | name = "clang-sys" 291 | version = "1.6.1" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" 294 | dependencies = [ 295 | "glob", 296 | "libc", 297 | "libloading", 298 | ] 299 | 300 | [[package]] 301 | name = "clap" 302 | version = "4.4.6" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" 305 | dependencies = [ 306 | "clap_builder", 307 | "clap_derive", 308 | ] 309 | 310 | [[package]] 311 | name = "clap-cargo" 312 | version = "0.14.1" 313 | source = "registry+https://github.com/rust-lang/crates.io-index" 314 | checksum = "23b2ea69cefa96b848b73ad516ad1d59a195cdf9263087d977f648a818c8b43e" 315 | dependencies = [ 316 | "anstyle", 317 | "cargo_metadata", 318 | "clap", 319 | ] 320 | 321 | [[package]] 322 | name = "clap_builder" 323 | version = "4.4.6" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" 326 | dependencies = [ 327 | "anstyle", 328 | "clap_lex", 329 | ] 330 | 331 | [[package]] 332 | name = "clap_derive" 333 | version = "4.4.2" 334 | source = "registry+https://github.com/rust-lang/crates.io-index" 335 | checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" 336 | dependencies = [ 337 | "heck", 338 | "proc-macro2", 339 | "quote", 340 | "syn 2.0.90", 341 | ] 342 | 343 | [[package]] 344 | name = "clap_lex" 345 | version = "0.5.1" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" 348 | 349 | [[package]] 350 | name = "convert_case" 351 | version = "0.6.0" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" 354 | dependencies = [ 355 | "unicode-segmentation", 356 | ] 357 | 358 | [[package]] 359 | name = "core-foundation" 360 | version = "0.9.4" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 363 | dependencies = [ 364 | "core-foundation-sys", 365 | "libc", 366 | ] 367 | 368 | [[package]] 369 | name = "core-foundation-sys" 370 | version = "0.8.7" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 373 | 374 | [[package]] 375 | name = "cpufeatures" 376 | version = "0.2.9" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" 379 | dependencies = [ 380 | "libc", 381 | ] 382 | 383 | [[package]] 384 | name = "crossbeam-deque" 385 | version = "0.8.3" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" 388 | dependencies = [ 389 | "cfg-if", 390 | "crossbeam-epoch", 391 | "crossbeam-utils", 392 | ] 393 | 394 | [[package]] 395 | name = "crossbeam-epoch" 396 | version = "0.9.15" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" 399 | dependencies = [ 400 | "autocfg", 401 | "cfg-if", 402 | "crossbeam-utils", 403 | "memoffset", 404 | "scopeguard", 405 | ] 406 | 407 | [[package]] 408 | name = "crossbeam-utils" 409 | version = "0.8.16" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" 412 | dependencies = [ 413 | "cfg-if", 414 | ] 415 | 416 | [[package]] 417 | name = "crypto-common" 418 | version = "0.1.6" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 421 | dependencies = [ 422 | "generic-array", 423 | "typenum", 424 | ] 425 | 426 | [[package]] 427 | name = "digest" 428 | version = "0.10.7" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 431 | dependencies = [ 432 | "block-buffer", 433 | "crypto-common", 434 | "subtle", 435 | ] 436 | 437 | [[package]] 438 | name = "displaydoc" 439 | version = "0.2.5" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 442 | dependencies = [ 443 | "proc-macro2", 444 | "quote", 445 | "syn 2.0.90", 446 | ] 447 | 448 | [[package]] 449 | name = "either" 450 | version = "1.9.0" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" 453 | 454 | [[package]] 455 | name = "encoding_rs" 456 | version = "0.8.35" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 459 | dependencies = [ 460 | "cfg-if", 461 | ] 462 | 463 | [[package]] 464 | name = "enum-map" 465 | version = "2.6.3" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "c188012f8542dee7b3996e44dd89461d64aa471b0a7c71a1ae2f595d259e96e5" 468 | dependencies = [ 469 | "enum-map-derive", 470 | ] 471 | 472 | [[package]] 473 | name = "enum-map-derive" 474 | version = "0.14.0" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25" 477 | dependencies = [ 478 | "proc-macro2", 479 | "quote", 480 | "syn 2.0.90", 481 | ] 482 | 483 | [[package]] 484 | name = "equivalent" 485 | version = "1.0.1" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 488 | 489 | [[package]] 490 | name = "errno" 491 | version = "0.3.10" 492 | source = "registry+https://github.com/rust-lang/crates.io-index" 493 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 494 | dependencies = [ 495 | "libc", 496 | "windows-sys 0.59.0", 497 | ] 498 | 499 | [[package]] 500 | name = "eyre" 501 | version = "0.6.12" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" 504 | dependencies = [ 505 | "indenter", 506 | "once_cell", 507 | ] 508 | 509 | [[package]] 510 | name = "fallible-iterator" 511 | version = "0.2.0" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" 514 | 515 | [[package]] 516 | name = "fastrand" 517 | version = "2.3.0" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 520 | 521 | [[package]] 522 | name = "finl_unicode" 523 | version = "1.2.0" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" 526 | 527 | [[package]] 528 | name = "fixedbitset" 529 | version = "0.4.2" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 532 | 533 | [[package]] 534 | name = "fnv" 535 | version = "1.0.7" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 538 | 539 | [[package]] 540 | name = "foreign-types" 541 | version = "0.3.2" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 544 | dependencies = [ 545 | "foreign-types-shared", 546 | ] 547 | 548 | [[package]] 549 | name = "foreign-types-shared" 550 | version = "0.1.1" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 553 | 554 | [[package]] 555 | name = "form_urlencoded" 556 | version = "1.2.1" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 559 | dependencies = [ 560 | "percent-encoding", 561 | ] 562 | 563 | [[package]] 564 | name = "funty" 565 | version = "2.0.0" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 568 | 569 | [[package]] 570 | name = "futures-channel" 571 | version = "0.3.31" 572 | source = "registry+https://github.com/rust-lang/crates.io-index" 573 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 574 | dependencies = [ 575 | "futures-core", 576 | "futures-sink", 577 | ] 578 | 579 | [[package]] 580 | name = "futures-core" 581 | version = "0.3.31" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 584 | 585 | [[package]] 586 | name = "futures-macro" 587 | version = "0.3.31" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 590 | dependencies = [ 591 | "proc-macro2", 592 | "quote", 593 | "syn 2.0.90", 594 | ] 595 | 596 | [[package]] 597 | name = "futures-sink" 598 | version = "0.3.31" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 601 | 602 | [[package]] 603 | name = "futures-task" 604 | version = "0.3.31" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 607 | 608 | [[package]] 609 | name = "futures-util" 610 | version = "0.3.31" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 613 | dependencies = [ 614 | "futures-core", 615 | "futures-macro", 616 | "futures-sink", 617 | "futures-task", 618 | "pin-project-lite", 619 | "pin-utils", 620 | "slab", 621 | ] 622 | 623 | [[package]] 624 | name = "generic-array" 625 | version = "0.14.7" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 628 | dependencies = [ 629 | "typenum", 630 | "version_check", 631 | ] 632 | 633 | [[package]] 634 | name = "getrandom" 635 | version = "0.2.10" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" 638 | dependencies = [ 639 | "cfg-if", 640 | "libc", 641 | "wasi", 642 | ] 643 | 644 | [[package]] 645 | name = "gimli" 646 | version = "0.31.1" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 649 | 650 | [[package]] 651 | name = "glob" 652 | version = "0.3.1" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 655 | 656 | [[package]] 657 | name = "h2" 658 | version = "0.3.26" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 661 | dependencies = [ 662 | "bytes", 663 | "fnv", 664 | "futures-core", 665 | "futures-sink", 666 | "futures-util", 667 | "http", 668 | "indexmap", 669 | "slab", 670 | "tokio", 671 | "tokio-util", 672 | "tracing", 673 | ] 674 | 675 | [[package]] 676 | name = "half" 677 | version = "1.8.2" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" 680 | 681 | [[package]] 682 | name = "hash32" 683 | version = "0.3.1" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" 686 | dependencies = [ 687 | "byteorder", 688 | ] 689 | 690 | [[package]] 691 | name = "hashbrown" 692 | version = "0.15.2" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 695 | 696 | [[package]] 697 | name = "heapless" 698 | version = "0.8.0" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" 701 | dependencies = [ 702 | "hash32", 703 | "stable_deref_trait", 704 | ] 705 | 706 | [[package]] 707 | name = "heck" 708 | version = "0.4.1" 709 | source = "registry+https://github.com/rust-lang/crates.io-index" 710 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 711 | 712 | [[package]] 713 | name = "hermit-abi" 714 | version = "0.4.0" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" 717 | 718 | [[package]] 719 | name = "hmac" 720 | version = "0.12.1" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 723 | dependencies = [ 724 | "digest", 725 | ] 726 | 727 | [[package]] 728 | name = "home" 729 | version = "0.5.11" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 732 | dependencies = [ 733 | "windows-sys 0.59.0", 734 | ] 735 | 736 | [[package]] 737 | name = "http" 738 | version = "0.2.12" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 741 | dependencies = [ 742 | "bytes", 743 | "fnv", 744 | "itoa", 745 | ] 746 | 747 | [[package]] 748 | name = "http-body" 749 | version = "0.4.6" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 752 | dependencies = [ 753 | "bytes", 754 | "http", 755 | "pin-project-lite", 756 | ] 757 | 758 | [[package]] 759 | name = "httparse" 760 | version = "1.9.5" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" 763 | 764 | [[package]] 765 | name = "httpdate" 766 | version = "1.0.3" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 769 | 770 | [[package]] 771 | name = "hyper" 772 | version = "0.14.32" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" 775 | dependencies = [ 776 | "bytes", 777 | "futures-channel", 778 | "futures-core", 779 | "futures-util", 780 | "h2", 781 | "http", 782 | "http-body", 783 | "httparse", 784 | "httpdate", 785 | "itoa", 786 | "pin-project-lite", 787 | "socket2", 788 | "tokio", 789 | "tower-service", 790 | "tracing", 791 | "want", 792 | ] 793 | 794 | [[package]] 795 | name = "hyper-tls" 796 | version = "0.5.0" 797 | source = "registry+https://github.com/rust-lang/crates.io-index" 798 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 799 | dependencies = [ 800 | "bytes", 801 | "hyper", 802 | "native-tls", 803 | "tokio", 804 | "tokio-native-tls", 805 | ] 806 | 807 | [[package]] 808 | name = "iana-time-zone" 809 | version = "0.1.61" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 812 | dependencies = [ 813 | "android_system_properties", 814 | "core-foundation-sys", 815 | "iana-time-zone-haiku", 816 | "js-sys", 817 | "wasm-bindgen", 818 | "windows-core", 819 | ] 820 | 821 | [[package]] 822 | name = "iana-time-zone-haiku" 823 | version = "0.1.2" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 826 | dependencies = [ 827 | "cc", 828 | ] 829 | 830 | [[package]] 831 | name = "icu_collections" 832 | version = "1.5.0" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 835 | dependencies = [ 836 | "displaydoc", 837 | "yoke", 838 | "zerofrom", 839 | "zerovec", 840 | ] 841 | 842 | [[package]] 843 | name = "icu_locid" 844 | version = "1.5.0" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 847 | dependencies = [ 848 | "displaydoc", 849 | "litemap", 850 | "tinystr", 851 | "writeable", 852 | "zerovec", 853 | ] 854 | 855 | [[package]] 856 | name = "icu_locid_transform" 857 | version = "1.5.0" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 860 | dependencies = [ 861 | "displaydoc", 862 | "icu_locid", 863 | "icu_locid_transform_data", 864 | "icu_provider", 865 | "tinystr", 866 | "zerovec", 867 | ] 868 | 869 | [[package]] 870 | name = "icu_locid_transform_data" 871 | version = "1.5.0" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 874 | 875 | [[package]] 876 | name = "icu_normalizer" 877 | version = "1.5.0" 878 | source = "registry+https://github.com/rust-lang/crates.io-index" 879 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 880 | dependencies = [ 881 | "displaydoc", 882 | "icu_collections", 883 | "icu_normalizer_data", 884 | "icu_properties", 885 | "icu_provider", 886 | "smallvec", 887 | "utf16_iter", 888 | "utf8_iter", 889 | "write16", 890 | "zerovec", 891 | ] 892 | 893 | [[package]] 894 | name = "icu_normalizer_data" 895 | version = "1.5.0" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 898 | 899 | [[package]] 900 | name = "icu_properties" 901 | version = "1.5.1" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 904 | dependencies = [ 905 | "displaydoc", 906 | "icu_collections", 907 | "icu_locid_transform", 908 | "icu_properties_data", 909 | "icu_provider", 910 | "tinystr", 911 | "zerovec", 912 | ] 913 | 914 | [[package]] 915 | name = "icu_properties_data" 916 | version = "1.5.0" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 919 | 920 | [[package]] 921 | name = "icu_provider" 922 | version = "1.5.0" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 925 | dependencies = [ 926 | "displaydoc", 927 | "icu_locid", 928 | "icu_provider_macros", 929 | "stable_deref_trait", 930 | "tinystr", 931 | "writeable", 932 | "yoke", 933 | "zerofrom", 934 | "zerovec", 935 | ] 936 | 937 | [[package]] 938 | name = "icu_provider_macros" 939 | version = "1.5.0" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 942 | dependencies = [ 943 | "proc-macro2", 944 | "quote", 945 | "syn 2.0.90", 946 | ] 947 | 948 | [[package]] 949 | name = "idna" 950 | version = "1.0.3" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 953 | dependencies = [ 954 | "idna_adapter", 955 | "smallvec", 956 | "utf8_iter", 957 | ] 958 | 959 | [[package]] 960 | name = "idna_adapter" 961 | version = "1.2.0" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 964 | dependencies = [ 965 | "icu_normalizer", 966 | "icu_properties", 967 | ] 968 | 969 | [[package]] 970 | name = "indenter" 971 | version = "0.3.3" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" 974 | 975 | [[package]] 976 | name = "indexmap" 977 | version = "2.7.0" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" 980 | dependencies = [ 981 | "equivalent", 982 | "hashbrown", 983 | ] 984 | 985 | [[package]] 986 | name = "ipnet" 987 | version = "2.10.1" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" 990 | 991 | [[package]] 992 | name = "is-terminal" 993 | version = "0.4.13" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" 996 | dependencies = [ 997 | "hermit-abi", 998 | "libc", 999 | "windows-sys 0.52.0", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "is_ci" 1004 | version = "1.2.0" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" 1007 | 1008 | [[package]] 1009 | name = "itertools" 1010 | version = "0.12.1" 1011 | source = "registry+https://github.com/rust-lang/crates.io-index" 1012 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 1013 | dependencies = [ 1014 | "either", 1015 | ] 1016 | 1017 | [[package]] 1018 | name = "itoa" 1019 | version = "1.0.14" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 1022 | 1023 | [[package]] 1024 | name = "js-sys" 1025 | version = "0.3.76" 1026 | source = "registry+https://github.com/rust-lang/crates.io-index" 1027 | checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" 1028 | dependencies = [ 1029 | "once_cell", 1030 | "wasm-bindgen", 1031 | ] 1032 | 1033 | [[package]] 1034 | name = "lazy_static" 1035 | version = "1.5.0" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1038 | 1039 | [[package]] 1040 | name = "libc" 1041 | version = "0.2.168" 1042 | source = "registry+https://github.com/rust-lang/crates.io-index" 1043 | checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" 1044 | 1045 | [[package]] 1046 | name = "libloading" 1047 | version = "0.7.4" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 1050 | dependencies = [ 1051 | "cfg-if", 1052 | "winapi", 1053 | ] 1054 | 1055 | [[package]] 1056 | name = "libm" 1057 | version = "0.2.11" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" 1060 | 1061 | [[package]] 1062 | name = "linux-raw-sys" 1063 | version = "0.4.14" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1066 | 1067 | [[package]] 1068 | name = "litemap" 1069 | version = "0.7.4" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1072 | 1073 | [[package]] 1074 | name = "lock_api" 1075 | version = "0.4.12" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1078 | dependencies = [ 1079 | "autocfg", 1080 | "scopeguard", 1081 | ] 1082 | 1083 | [[package]] 1084 | name = "log" 1085 | version = "0.4.22" 1086 | source = "registry+https://github.com/rust-lang/crates.io-index" 1087 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 1088 | 1089 | [[package]] 1090 | name = "md-5" 1091 | version = "0.10.6" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 1094 | dependencies = [ 1095 | "cfg-if", 1096 | "digest", 1097 | ] 1098 | 1099 | [[package]] 1100 | name = "memchr" 1101 | version = "2.7.4" 1102 | source = "registry+https://github.com/rust-lang/crates.io-index" 1103 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1104 | 1105 | [[package]] 1106 | name = "memoffset" 1107 | version = "0.9.0" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" 1110 | dependencies = [ 1111 | "autocfg", 1112 | ] 1113 | 1114 | [[package]] 1115 | name = "mime" 1116 | version = "0.3.17" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1119 | 1120 | [[package]] 1121 | name = "mime_guess" 1122 | version = "2.0.5" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1125 | dependencies = [ 1126 | "mime", 1127 | "unicase", 1128 | ] 1129 | 1130 | [[package]] 1131 | name = "minimal-lexical" 1132 | version = "0.2.1" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1135 | 1136 | [[package]] 1137 | name = "miniz_oxide" 1138 | version = "0.8.2" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" 1141 | dependencies = [ 1142 | "adler2", 1143 | ] 1144 | 1145 | [[package]] 1146 | name = "mio" 1147 | version = "1.0.3" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1150 | dependencies = [ 1151 | "libc", 1152 | "wasi", 1153 | "windows-sys 0.52.0", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "native-tls" 1158 | version = "0.2.12" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 1161 | dependencies = [ 1162 | "libc", 1163 | "log", 1164 | "openssl", 1165 | "openssl-probe", 1166 | "openssl-sys", 1167 | "schannel", 1168 | "security-framework", 1169 | "security-framework-sys", 1170 | "tempfile", 1171 | ] 1172 | 1173 | [[package]] 1174 | name = "nom" 1175 | version = "7.1.3" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1178 | dependencies = [ 1179 | "memchr", 1180 | "minimal-lexical", 1181 | ] 1182 | 1183 | [[package]] 1184 | name = "ntapi" 1185 | version = "0.4.1" 1186 | source = "registry+https://github.com/rust-lang/crates.io-index" 1187 | checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 1188 | dependencies = [ 1189 | "winapi", 1190 | ] 1191 | 1192 | [[package]] 1193 | name = "num-traits" 1194 | version = "0.2.19" 1195 | source = "registry+https://github.com/rust-lang/crates.io-index" 1196 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1197 | dependencies = [ 1198 | "autocfg", 1199 | "libm", 1200 | ] 1201 | 1202 | [[package]] 1203 | name = "object" 1204 | version = "0.36.5" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 1207 | dependencies = [ 1208 | "memchr", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "once_cell" 1213 | version = "1.20.2" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1216 | 1217 | [[package]] 1218 | name = "openssl" 1219 | version = "0.10.68" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" 1222 | dependencies = [ 1223 | "bitflags 2.6.0", 1224 | "cfg-if", 1225 | "foreign-types", 1226 | "libc", 1227 | "once_cell", 1228 | "openssl-macros", 1229 | "openssl-sys", 1230 | ] 1231 | 1232 | [[package]] 1233 | name = "openssl-macros" 1234 | version = "0.1.1" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1237 | dependencies = [ 1238 | "proc-macro2", 1239 | "quote", 1240 | "syn 2.0.90", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "openssl-probe" 1245 | version = "0.1.5" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1248 | 1249 | [[package]] 1250 | name = "openssl-sys" 1251 | version = "0.9.104" 1252 | source = "registry+https://github.com/rust-lang/crates.io-index" 1253 | checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" 1254 | dependencies = [ 1255 | "cc", 1256 | "libc", 1257 | "pkg-config", 1258 | "vcpkg", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "owo-colors" 1263 | version = "4.1.0" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" 1266 | dependencies = [ 1267 | "supports-color 2.1.0", 1268 | "supports-color 3.0.2", 1269 | ] 1270 | 1271 | [[package]] 1272 | name = "parking_lot" 1273 | version = "0.12.3" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1276 | dependencies = [ 1277 | "lock_api", 1278 | "parking_lot_core", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "parking_lot_core" 1283 | version = "0.9.10" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1286 | dependencies = [ 1287 | "cfg-if", 1288 | "libc", 1289 | "redox_syscall 0.5.8", 1290 | "smallvec", 1291 | "windows-targets 0.52.6", 1292 | ] 1293 | 1294 | [[package]] 1295 | name = "paste" 1296 | version = "1.0.15" 1297 | source = "registry+https://github.com/rust-lang/crates.io-index" 1298 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1299 | 1300 | [[package]] 1301 | name = "pathsearch" 1302 | version = "0.2.0" 1303 | source = "registry+https://github.com/rust-lang/crates.io-index" 1304 | checksum = "da983bc5e582ab17179c190b4b66c7d76c5943a69c6d34df2a2b6bf8a2977b05" 1305 | dependencies = [ 1306 | "anyhow", 1307 | "libc", 1308 | ] 1309 | 1310 | [[package]] 1311 | name = "percent-encoding" 1312 | version = "2.3.1" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1315 | 1316 | [[package]] 1317 | name = "pest" 1318 | version = "2.7.4" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4" 1321 | dependencies = [ 1322 | "memchr", 1323 | "thiserror", 1324 | "ucd-trie", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "petgraph" 1329 | version = "0.6.4" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" 1332 | dependencies = [ 1333 | "fixedbitset", 1334 | "indexmap", 1335 | ] 1336 | 1337 | [[package]] 1338 | name = "pgrx" 1339 | version = "0.12.6" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "29fd8bef6f9f963a224b6d92033aa75581ecf01c8a815eb6dea0ad7260ac4541" 1342 | dependencies = [ 1343 | "atomic-traits", 1344 | "bitflags 2.6.0", 1345 | "bitvec", 1346 | "enum-map", 1347 | "heapless", 1348 | "libc", 1349 | "once_cell", 1350 | "pgrx-macros", 1351 | "pgrx-pg-sys", 1352 | "pgrx-sql-entity-graph", 1353 | "seahash", 1354 | "serde", 1355 | "serde_cbor", 1356 | "serde_json", 1357 | "thiserror", 1358 | "uuid", 1359 | ] 1360 | 1361 | [[package]] 1362 | name = "pgrx-bindgen" 1363 | version = "0.12.6" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "bb9cd617058bad2d78e31c55b58d2b003dcf039cba125b8e018c0f72562fb951" 1366 | dependencies = [ 1367 | "bindgen", 1368 | "cc", 1369 | "clang-sys", 1370 | "eyre", 1371 | "pgrx-pg-config", 1372 | "proc-macro2", 1373 | "quote", 1374 | "shlex", 1375 | "syn 2.0.90", 1376 | "walkdir", 1377 | ] 1378 | 1379 | [[package]] 1380 | name = "pgrx-macros" 1381 | version = "0.12.6" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "cbf074a98b59d1811b29c97e58d7ec5cab00445c7a5d7ed4153d746eb8572d55" 1384 | dependencies = [ 1385 | "pgrx-sql-entity-graph", 1386 | "proc-macro2", 1387 | "quote", 1388 | "syn 2.0.90", 1389 | ] 1390 | 1391 | [[package]] 1392 | name = "pgrx-pg-config" 1393 | version = "0.12.6" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | checksum = "a82140784390a8f7f8a4f36acc6c04d177f59666012fa419eb03ab90201945ef" 1396 | dependencies = [ 1397 | "cargo_toml", 1398 | "eyre", 1399 | "home", 1400 | "owo-colors", 1401 | "pathsearch", 1402 | "serde", 1403 | "serde_json", 1404 | "thiserror", 1405 | "toml", 1406 | "url", 1407 | ] 1408 | 1409 | [[package]] 1410 | name = "pgrx-pg-sys" 1411 | version = "0.12.6" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | checksum = "6a0b49de7e28fdf7eb9ace7b736c2527330441efd35e55768fa26c637366d1c3" 1414 | dependencies = [ 1415 | "cee-scape", 1416 | "libc", 1417 | "pgrx-bindgen", 1418 | "pgrx-macros", 1419 | "pgrx-sql-entity-graph", 1420 | "serde", 1421 | "sptr", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "pgrx-sql-entity-graph" 1426 | version = "0.12.6" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "dbf0cb2b4c8204678cf3dfc71bd0febe11dd4a6636b1971c3ee595d58d2db5f6" 1429 | dependencies = [ 1430 | "convert_case", 1431 | "eyre", 1432 | "petgraph", 1433 | "proc-macro2", 1434 | "quote", 1435 | "syn 2.0.90", 1436 | "thiserror", 1437 | "unescape", 1438 | ] 1439 | 1440 | [[package]] 1441 | name = "pgrx-tests" 1442 | version = "0.12.6" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "207fa953e4634371ff00e20584e80b1faf0c381fb7bec14648ce9076494582de" 1445 | dependencies = [ 1446 | "clap-cargo", 1447 | "eyre", 1448 | "libc", 1449 | "owo-colors", 1450 | "paste", 1451 | "pgrx", 1452 | "pgrx-macros", 1453 | "pgrx-pg-config", 1454 | "postgres", 1455 | "proptest", 1456 | "rand", 1457 | "regex", 1458 | "serde", 1459 | "serde_json", 1460 | "sysinfo", 1461 | "thiserror", 1462 | ] 1463 | 1464 | [[package]] 1465 | name = "phf" 1466 | version = "0.11.2" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" 1469 | dependencies = [ 1470 | "phf_shared", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "phf_shared" 1475 | version = "0.11.2" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 1478 | dependencies = [ 1479 | "siphasher", 1480 | ] 1481 | 1482 | [[package]] 1483 | name = "pin-project-lite" 1484 | version = "0.2.15" 1485 | source = "registry+https://github.com/rust-lang/crates.io-index" 1486 | checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" 1487 | 1488 | [[package]] 1489 | name = "pin-utils" 1490 | version = "0.1.0" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1493 | 1494 | [[package]] 1495 | name = "pkg-config" 1496 | version = "0.3.31" 1497 | source = "registry+https://github.com/rust-lang/crates.io-index" 1498 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1499 | 1500 | [[package]] 1501 | name = "postgres" 1502 | version = "0.19.7" 1503 | source = "registry+https://github.com/rust-lang/crates.io-index" 1504 | checksum = "7915b33ed60abc46040cbcaa25ffa1c7ec240668e0477c4f3070786f5916d451" 1505 | dependencies = [ 1506 | "bytes", 1507 | "fallible-iterator", 1508 | "futures-util", 1509 | "log", 1510 | "tokio", 1511 | "tokio-postgres", 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "postgres-protocol" 1516 | version = "0.6.6" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520" 1519 | dependencies = [ 1520 | "base64", 1521 | "byteorder", 1522 | "bytes", 1523 | "fallible-iterator", 1524 | "hmac", 1525 | "md-5", 1526 | "memchr", 1527 | "rand", 1528 | "sha2", 1529 | "stringprep", 1530 | ] 1531 | 1532 | [[package]] 1533 | name = "postgres-types" 1534 | version = "0.2.6" 1535 | source = "registry+https://github.com/rust-lang/crates.io-index" 1536 | checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c" 1537 | dependencies = [ 1538 | "bytes", 1539 | "fallible-iterator", 1540 | "postgres-protocol", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "ppv-lite86" 1545 | version = "0.2.17" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1548 | 1549 | [[package]] 1550 | name = "proc-macro2" 1551 | version = "1.0.92" 1552 | source = "registry+https://github.com/rust-lang/crates.io-index" 1553 | checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" 1554 | dependencies = [ 1555 | "unicode-ident", 1556 | ] 1557 | 1558 | [[package]] 1559 | name = "prometheus_fdw" 1560 | version = "0.2.1" 1561 | dependencies = [ 1562 | "chrono", 1563 | "pgrx", 1564 | "pgrx-tests", 1565 | "reqwest", 1566 | "reqwest-middleware", 1567 | "serde", 1568 | "serde_json", 1569 | "supabase-wrappers", 1570 | "tokio", 1571 | "urlencoding", 1572 | ] 1573 | 1574 | [[package]] 1575 | name = "proptest" 1576 | version = "1.5.0" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" 1579 | dependencies = [ 1580 | "bit-set", 1581 | "bit-vec", 1582 | "bitflags 2.6.0", 1583 | "lazy_static", 1584 | "num-traits", 1585 | "rand", 1586 | "rand_chacha", 1587 | "rand_xorshift", 1588 | "regex-syntax", 1589 | "rusty-fork", 1590 | "tempfile", 1591 | "unarray", 1592 | ] 1593 | 1594 | [[package]] 1595 | name = "quick-error" 1596 | version = "1.2.3" 1597 | source = "registry+https://github.com/rust-lang/crates.io-index" 1598 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 1599 | 1600 | [[package]] 1601 | name = "quote" 1602 | version = "1.0.37" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 1605 | dependencies = [ 1606 | "proc-macro2", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "radium" 1611 | version = "0.7.0" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 1614 | 1615 | [[package]] 1616 | name = "rand" 1617 | version = "0.8.5" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1620 | dependencies = [ 1621 | "libc", 1622 | "rand_chacha", 1623 | "rand_core", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "rand_chacha" 1628 | version = "0.3.1" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1631 | dependencies = [ 1632 | "ppv-lite86", 1633 | "rand_core", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "rand_core" 1638 | version = "0.6.4" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1641 | dependencies = [ 1642 | "getrandom", 1643 | ] 1644 | 1645 | [[package]] 1646 | name = "rand_xorshift" 1647 | version = "0.3.0" 1648 | source = "registry+https://github.com/rust-lang/crates.io-index" 1649 | checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" 1650 | dependencies = [ 1651 | "rand_core", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "rayon" 1656 | version = "1.8.0" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" 1659 | dependencies = [ 1660 | "either", 1661 | "rayon-core", 1662 | ] 1663 | 1664 | [[package]] 1665 | name = "rayon-core" 1666 | version = "1.12.0" 1667 | source = "registry+https://github.com/rust-lang/crates.io-index" 1668 | checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" 1669 | dependencies = [ 1670 | "crossbeam-deque", 1671 | "crossbeam-utils", 1672 | ] 1673 | 1674 | [[package]] 1675 | name = "redox_syscall" 1676 | version = "0.4.1" 1677 | source = "registry+https://github.com/rust-lang/crates.io-index" 1678 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 1679 | dependencies = [ 1680 | "bitflags 1.3.2", 1681 | ] 1682 | 1683 | [[package]] 1684 | name = "redox_syscall" 1685 | version = "0.5.8" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 1688 | dependencies = [ 1689 | "bitflags 2.6.0", 1690 | ] 1691 | 1692 | [[package]] 1693 | name = "regex" 1694 | version = "1.10.5" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" 1697 | dependencies = [ 1698 | "aho-corasick", 1699 | "memchr", 1700 | "regex-automata", 1701 | "regex-syntax", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "regex-automata" 1706 | version = "0.4.7" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 1709 | dependencies = [ 1710 | "aho-corasick", 1711 | "memchr", 1712 | "regex-syntax", 1713 | ] 1714 | 1715 | [[package]] 1716 | name = "regex-syntax" 1717 | version = "0.8.4" 1718 | source = "registry+https://github.com/rust-lang/crates.io-index" 1719 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 1720 | 1721 | [[package]] 1722 | name = "reqwest" 1723 | version = "0.11.27" 1724 | source = "registry+https://github.com/rust-lang/crates.io-index" 1725 | checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" 1726 | dependencies = [ 1727 | "base64", 1728 | "bytes", 1729 | "encoding_rs", 1730 | "futures-core", 1731 | "futures-util", 1732 | "h2", 1733 | "http", 1734 | "http-body", 1735 | "hyper", 1736 | "hyper-tls", 1737 | "ipnet", 1738 | "js-sys", 1739 | "log", 1740 | "mime", 1741 | "mime_guess", 1742 | "native-tls", 1743 | "once_cell", 1744 | "percent-encoding", 1745 | "pin-project-lite", 1746 | "rustls-pemfile", 1747 | "serde", 1748 | "serde_json", 1749 | "serde_urlencoded", 1750 | "sync_wrapper", 1751 | "system-configuration", 1752 | "tokio", 1753 | "tokio-native-tls", 1754 | "tower-service", 1755 | "url", 1756 | "wasm-bindgen", 1757 | "wasm-bindgen-futures", 1758 | "web-sys", 1759 | "winreg", 1760 | ] 1761 | 1762 | [[package]] 1763 | name = "reqwest-middleware" 1764 | version = "0.2.5" 1765 | source = "registry+https://github.com/rust-lang/crates.io-index" 1766 | checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" 1767 | dependencies = [ 1768 | "anyhow", 1769 | "async-trait", 1770 | "http", 1771 | "reqwest", 1772 | "serde", 1773 | "task-local-extensions", 1774 | "thiserror", 1775 | ] 1776 | 1777 | [[package]] 1778 | name = "rustc-demangle" 1779 | version = "0.1.24" 1780 | source = "registry+https://github.com/rust-lang/crates.io-index" 1781 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1782 | 1783 | [[package]] 1784 | name = "rustc-hash" 1785 | version = "1.1.0" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1788 | 1789 | [[package]] 1790 | name = "rustc_version" 1791 | version = "0.3.3" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" 1794 | dependencies = [ 1795 | "semver 0.11.0", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "rustix" 1800 | version = "0.38.42" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" 1803 | dependencies = [ 1804 | "bitflags 2.6.0", 1805 | "errno", 1806 | "libc", 1807 | "linux-raw-sys", 1808 | "windows-sys 0.59.0", 1809 | ] 1810 | 1811 | [[package]] 1812 | name = "rustls-pemfile" 1813 | version = "1.0.4" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 1816 | dependencies = [ 1817 | "base64", 1818 | ] 1819 | 1820 | [[package]] 1821 | name = "rusty-fork" 1822 | version = "0.3.0" 1823 | source = "registry+https://github.com/rust-lang/crates.io-index" 1824 | checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" 1825 | dependencies = [ 1826 | "fnv", 1827 | "quick-error", 1828 | "tempfile", 1829 | "wait-timeout", 1830 | ] 1831 | 1832 | [[package]] 1833 | name = "ryu" 1834 | version = "1.0.18" 1835 | source = "registry+https://github.com/rust-lang/crates.io-index" 1836 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1837 | 1838 | [[package]] 1839 | name = "same-file" 1840 | version = "1.0.6" 1841 | source = "registry+https://github.com/rust-lang/crates.io-index" 1842 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1843 | dependencies = [ 1844 | "winapi-util", 1845 | ] 1846 | 1847 | [[package]] 1848 | name = "schannel" 1849 | version = "0.1.27" 1850 | source = "registry+https://github.com/rust-lang/crates.io-index" 1851 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 1852 | dependencies = [ 1853 | "windows-sys 0.59.0", 1854 | ] 1855 | 1856 | [[package]] 1857 | name = "scopeguard" 1858 | version = "1.2.0" 1859 | source = "registry+https://github.com/rust-lang/crates.io-index" 1860 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1861 | 1862 | [[package]] 1863 | name = "seahash" 1864 | version = "4.1.0" 1865 | source = "registry+https://github.com/rust-lang/crates.io-index" 1866 | checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" 1867 | 1868 | [[package]] 1869 | name = "security-framework" 1870 | version = "2.11.1" 1871 | source = "registry+https://github.com/rust-lang/crates.io-index" 1872 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 1873 | dependencies = [ 1874 | "bitflags 2.6.0", 1875 | "core-foundation", 1876 | "core-foundation-sys", 1877 | "libc", 1878 | "security-framework-sys", 1879 | ] 1880 | 1881 | [[package]] 1882 | name = "security-framework-sys" 1883 | version = "2.12.1" 1884 | source = "registry+https://github.com/rust-lang/crates.io-index" 1885 | checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" 1886 | dependencies = [ 1887 | "core-foundation-sys", 1888 | "libc", 1889 | ] 1890 | 1891 | [[package]] 1892 | name = "semver" 1893 | version = "0.11.0" 1894 | source = "registry+https://github.com/rust-lang/crates.io-index" 1895 | checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" 1896 | dependencies = [ 1897 | "semver-parser", 1898 | ] 1899 | 1900 | [[package]] 1901 | name = "semver" 1902 | version = "1.0.19" 1903 | source = "registry+https://github.com/rust-lang/crates.io-index" 1904 | checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" 1905 | dependencies = [ 1906 | "serde", 1907 | ] 1908 | 1909 | [[package]] 1910 | name = "semver-parser" 1911 | version = "0.10.2" 1912 | source = "registry+https://github.com/rust-lang/crates.io-index" 1913 | checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" 1914 | dependencies = [ 1915 | "pest", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "serde" 1920 | version = "1.0.216" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" 1923 | dependencies = [ 1924 | "serde_derive", 1925 | ] 1926 | 1927 | [[package]] 1928 | name = "serde_cbor" 1929 | version = "0.11.2" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" 1932 | dependencies = [ 1933 | "half", 1934 | "serde", 1935 | ] 1936 | 1937 | [[package]] 1938 | name = "serde_derive" 1939 | version = "1.0.216" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" 1942 | dependencies = [ 1943 | "proc-macro2", 1944 | "quote", 1945 | "syn 2.0.90", 1946 | ] 1947 | 1948 | [[package]] 1949 | name = "serde_json" 1950 | version = "1.0.133" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" 1953 | dependencies = [ 1954 | "itoa", 1955 | "memchr", 1956 | "ryu", 1957 | "serde", 1958 | ] 1959 | 1960 | [[package]] 1961 | name = "serde_spanned" 1962 | version = "0.6.6" 1963 | source = "registry+https://github.com/rust-lang/crates.io-index" 1964 | checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" 1965 | dependencies = [ 1966 | "serde", 1967 | ] 1968 | 1969 | [[package]] 1970 | name = "serde_urlencoded" 1971 | version = "0.7.1" 1972 | source = "registry+https://github.com/rust-lang/crates.io-index" 1973 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1974 | dependencies = [ 1975 | "form_urlencoded", 1976 | "itoa", 1977 | "ryu", 1978 | "serde", 1979 | ] 1980 | 1981 | [[package]] 1982 | name = "sha2" 1983 | version = "0.10.8" 1984 | source = "registry+https://github.com/rust-lang/crates.io-index" 1985 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1986 | dependencies = [ 1987 | "cfg-if", 1988 | "cpufeatures", 1989 | "digest", 1990 | ] 1991 | 1992 | [[package]] 1993 | name = "shlex" 1994 | version = "1.3.0" 1995 | source = "registry+https://github.com/rust-lang/crates.io-index" 1996 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1997 | 1998 | [[package]] 1999 | name = "signal-hook-registry" 2000 | version = "1.4.2" 2001 | source = "registry+https://github.com/rust-lang/crates.io-index" 2002 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2003 | dependencies = [ 2004 | "libc", 2005 | ] 2006 | 2007 | [[package]] 2008 | name = "siphasher" 2009 | version = "0.3.11" 2010 | source = "registry+https://github.com/rust-lang/crates.io-index" 2011 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 2012 | 2013 | [[package]] 2014 | name = "slab" 2015 | version = "0.4.9" 2016 | source = "registry+https://github.com/rust-lang/crates.io-index" 2017 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2018 | dependencies = [ 2019 | "autocfg", 2020 | ] 2021 | 2022 | [[package]] 2023 | name = "smallvec" 2024 | version = "1.13.2" 2025 | source = "registry+https://github.com/rust-lang/crates.io-index" 2026 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 2027 | 2028 | [[package]] 2029 | name = "socket2" 2030 | version = "0.5.8" 2031 | source = "registry+https://github.com/rust-lang/crates.io-index" 2032 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 2033 | dependencies = [ 2034 | "libc", 2035 | "windows-sys 0.52.0", 2036 | ] 2037 | 2038 | [[package]] 2039 | name = "sptr" 2040 | version = "0.3.2" 2041 | source = "registry+https://github.com/rust-lang/crates.io-index" 2042 | checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" 2043 | 2044 | [[package]] 2045 | name = "stable_deref_trait" 2046 | version = "1.2.0" 2047 | source = "registry+https://github.com/rust-lang/crates.io-index" 2048 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2049 | 2050 | [[package]] 2051 | name = "stringprep" 2052 | version = "0.1.4" 2053 | source = "registry+https://github.com/rust-lang/crates.io-index" 2054 | checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" 2055 | dependencies = [ 2056 | "finl_unicode", 2057 | "unicode-bidi", 2058 | "unicode-normalization", 2059 | ] 2060 | 2061 | [[package]] 2062 | name = "subtle" 2063 | version = "2.5.0" 2064 | source = "registry+https://github.com/rust-lang/crates.io-index" 2065 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 2066 | 2067 | [[package]] 2068 | name = "supabase-wrappers" 2069 | version = "0.1.20" 2070 | source = "registry+https://github.com/rust-lang/crates.io-index" 2071 | checksum = "7b718b243deeebcf521381b6fe55a6beeb272bb4eded1c6f1c6a2c2c15aa8395" 2072 | dependencies = [ 2073 | "pgrx", 2074 | "supabase-wrappers-macros", 2075 | "thiserror", 2076 | "tokio", 2077 | "uuid", 2078 | ] 2079 | 2080 | [[package]] 2081 | name = "supabase-wrappers-macros" 2082 | version = "0.1.17" 2083 | source = "registry+https://github.com/rust-lang/crates.io-index" 2084 | checksum = "caabfb150798269f51e42af5ad118bb6573a9874a7fedeb519ad2edb41cd49e3" 2085 | dependencies = [ 2086 | "proc-macro2", 2087 | "quote", 2088 | "syn 1.0.109", 2089 | ] 2090 | 2091 | [[package]] 2092 | name = "supports-color" 2093 | version = "2.1.0" 2094 | source = "registry+https://github.com/rust-lang/crates.io-index" 2095 | checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89" 2096 | dependencies = [ 2097 | "is-terminal", 2098 | "is_ci", 2099 | ] 2100 | 2101 | [[package]] 2102 | name = "supports-color" 2103 | version = "3.0.2" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" 2106 | dependencies = [ 2107 | "is_ci", 2108 | ] 2109 | 2110 | [[package]] 2111 | name = "syn" 2112 | version = "1.0.109" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2115 | dependencies = [ 2116 | "proc-macro2", 2117 | "quote", 2118 | "unicode-ident", 2119 | ] 2120 | 2121 | [[package]] 2122 | name = "syn" 2123 | version = "2.0.90" 2124 | source = "registry+https://github.com/rust-lang/crates.io-index" 2125 | checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" 2126 | dependencies = [ 2127 | "proc-macro2", 2128 | "quote", 2129 | "unicode-ident", 2130 | ] 2131 | 2132 | [[package]] 2133 | name = "sync_wrapper" 2134 | version = "0.1.2" 2135 | source = "registry+https://github.com/rust-lang/crates.io-index" 2136 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 2137 | 2138 | [[package]] 2139 | name = "synstructure" 2140 | version = "0.13.1" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2143 | dependencies = [ 2144 | "proc-macro2", 2145 | "quote", 2146 | "syn 2.0.90", 2147 | ] 2148 | 2149 | [[package]] 2150 | name = "sysinfo" 2151 | version = "0.30.13" 2152 | source = "registry+https://github.com/rust-lang/crates.io-index" 2153 | checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" 2154 | dependencies = [ 2155 | "cfg-if", 2156 | "core-foundation-sys", 2157 | "libc", 2158 | "ntapi", 2159 | "once_cell", 2160 | "rayon", 2161 | "windows", 2162 | ] 2163 | 2164 | [[package]] 2165 | name = "system-configuration" 2166 | version = "0.5.1" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 2169 | dependencies = [ 2170 | "bitflags 1.3.2", 2171 | "core-foundation", 2172 | "system-configuration-sys", 2173 | ] 2174 | 2175 | [[package]] 2176 | name = "system-configuration-sys" 2177 | version = "0.5.0" 2178 | source = "registry+https://github.com/rust-lang/crates.io-index" 2179 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 2180 | dependencies = [ 2181 | "core-foundation-sys", 2182 | "libc", 2183 | ] 2184 | 2185 | [[package]] 2186 | name = "tap" 2187 | version = "1.0.1" 2188 | source = "registry+https://github.com/rust-lang/crates.io-index" 2189 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 2190 | 2191 | [[package]] 2192 | name = "task-local-extensions" 2193 | version = "0.1.4" 2194 | source = "registry+https://github.com/rust-lang/crates.io-index" 2195 | checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" 2196 | dependencies = [ 2197 | "pin-utils", 2198 | ] 2199 | 2200 | [[package]] 2201 | name = "tempfile" 2202 | version = "3.14.0" 2203 | source = "registry+https://github.com/rust-lang/crates.io-index" 2204 | checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" 2205 | dependencies = [ 2206 | "cfg-if", 2207 | "fastrand", 2208 | "once_cell", 2209 | "rustix", 2210 | "windows-sys 0.59.0", 2211 | ] 2212 | 2213 | [[package]] 2214 | name = "thiserror" 2215 | version = "1.0.69" 2216 | source = "registry+https://github.com/rust-lang/crates.io-index" 2217 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2218 | dependencies = [ 2219 | "thiserror-impl", 2220 | ] 2221 | 2222 | [[package]] 2223 | name = "thiserror-impl" 2224 | version = "1.0.69" 2225 | source = "registry+https://github.com/rust-lang/crates.io-index" 2226 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2227 | dependencies = [ 2228 | "proc-macro2", 2229 | "quote", 2230 | "syn 2.0.90", 2231 | ] 2232 | 2233 | [[package]] 2234 | name = "tinystr" 2235 | version = "0.7.6" 2236 | source = "registry+https://github.com/rust-lang/crates.io-index" 2237 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 2238 | dependencies = [ 2239 | "displaydoc", 2240 | "zerovec", 2241 | ] 2242 | 2243 | [[package]] 2244 | name = "tinyvec" 2245 | version = "1.8.0" 2246 | source = "registry+https://github.com/rust-lang/crates.io-index" 2247 | checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 2248 | dependencies = [ 2249 | "tinyvec_macros", 2250 | ] 2251 | 2252 | [[package]] 2253 | name = "tinyvec_macros" 2254 | version = "0.1.1" 2255 | source = "registry+https://github.com/rust-lang/crates.io-index" 2256 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2257 | 2258 | [[package]] 2259 | name = "tokio" 2260 | version = "1.42.0" 2261 | source = "registry+https://github.com/rust-lang/crates.io-index" 2262 | checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" 2263 | dependencies = [ 2264 | "backtrace", 2265 | "bytes", 2266 | "libc", 2267 | "mio", 2268 | "parking_lot", 2269 | "pin-project-lite", 2270 | "signal-hook-registry", 2271 | "socket2", 2272 | "tokio-macros", 2273 | "windows-sys 0.52.0", 2274 | ] 2275 | 2276 | [[package]] 2277 | name = "tokio-macros" 2278 | version = "2.4.0" 2279 | source = "registry+https://github.com/rust-lang/crates.io-index" 2280 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 2281 | dependencies = [ 2282 | "proc-macro2", 2283 | "quote", 2284 | "syn 2.0.90", 2285 | ] 2286 | 2287 | [[package]] 2288 | name = "tokio-native-tls" 2289 | version = "0.3.1" 2290 | source = "registry+https://github.com/rust-lang/crates.io-index" 2291 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 2292 | dependencies = [ 2293 | "native-tls", 2294 | "tokio", 2295 | ] 2296 | 2297 | [[package]] 2298 | name = "tokio-postgres" 2299 | version = "0.7.10" 2300 | source = "registry+https://github.com/rust-lang/crates.io-index" 2301 | checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8" 2302 | dependencies = [ 2303 | "async-trait", 2304 | "byteorder", 2305 | "bytes", 2306 | "fallible-iterator", 2307 | "futures-channel", 2308 | "futures-util", 2309 | "log", 2310 | "parking_lot", 2311 | "percent-encoding", 2312 | "phf", 2313 | "pin-project-lite", 2314 | "postgres-protocol", 2315 | "postgres-types", 2316 | "rand", 2317 | "socket2", 2318 | "tokio", 2319 | "tokio-util", 2320 | "whoami", 2321 | ] 2322 | 2323 | [[package]] 2324 | name = "tokio-util" 2325 | version = "0.7.13" 2326 | source = "registry+https://github.com/rust-lang/crates.io-index" 2327 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 2328 | dependencies = [ 2329 | "bytes", 2330 | "futures-core", 2331 | "futures-sink", 2332 | "pin-project-lite", 2333 | "tokio", 2334 | ] 2335 | 2336 | [[package]] 2337 | name = "toml" 2338 | version = "0.8.14" 2339 | source = "registry+https://github.com/rust-lang/crates.io-index" 2340 | checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" 2341 | dependencies = [ 2342 | "serde", 2343 | "serde_spanned", 2344 | "toml_datetime", 2345 | "toml_edit", 2346 | ] 2347 | 2348 | [[package]] 2349 | name = "toml_datetime" 2350 | version = "0.6.6" 2351 | source = "registry+https://github.com/rust-lang/crates.io-index" 2352 | checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" 2353 | dependencies = [ 2354 | "serde", 2355 | ] 2356 | 2357 | [[package]] 2358 | name = "toml_edit" 2359 | version = "0.22.14" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" 2362 | dependencies = [ 2363 | "indexmap", 2364 | "serde", 2365 | "serde_spanned", 2366 | "toml_datetime", 2367 | "winnow", 2368 | ] 2369 | 2370 | [[package]] 2371 | name = "tower-service" 2372 | version = "0.3.3" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2375 | 2376 | [[package]] 2377 | name = "tracing" 2378 | version = "0.1.41" 2379 | source = "registry+https://github.com/rust-lang/crates.io-index" 2380 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2381 | dependencies = [ 2382 | "pin-project-lite", 2383 | "tracing-core", 2384 | ] 2385 | 2386 | [[package]] 2387 | name = "tracing-core" 2388 | version = "0.1.33" 2389 | source = "registry+https://github.com/rust-lang/crates.io-index" 2390 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 2391 | dependencies = [ 2392 | "once_cell", 2393 | ] 2394 | 2395 | [[package]] 2396 | name = "try-lock" 2397 | version = "0.2.5" 2398 | source = "registry+https://github.com/rust-lang/crates.io-index" 2399 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2400 | 2401 | [[package]] 2402 | name = "typenum" 2403 | version = "1.17.0" 2404 | source = "registry+https://github.com/rust-lang/crates.io-index" 2405 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2406 | 2407 | [[package]] 2408 | name = "ucd-trie" 2409 | version = "0.1.6" 2410 | source = "registry+https://github.com/rust-lang/crates.io-index" 2411 | checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" 2412 | 2413 | [[package]] 2414 | name = "unarray" 2415 | version = "0.1.4" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" 2418 | 2419 | [[package]] 2420 | name = "unescape" 2421 | version = "0.1.0" 2422 | source = "registry+https://github.com/rust-lang/crates.io-index" 2423 | checksum = "ccb97dac3243214f8d8507998906ca3e2e0b900bf9bf4870477f125b82e68f6e" 2424 | 2425 | [[package]] 2426 | name = "unicase" 2427 | version = "2.8.0" 2428 | source = "registry+https://github.com/rust-lang/crates.io-index" 2429 | checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" 2430 | 2431 | [[package]] 2432 | name = "unicode-bidi" 2433 | version = "0.3.18" 2434 | source = "registry+https://github.com/rust-lang/crates.io-index" 2435 | checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" 2436 | 2437 | [[package]] 2438 | name = "unicode-ident" 2439 | version = "1.0.14" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 2442 | 2443 | [[package]] 2444 | name = "unicode-normalization" 2445 | version = "0.1.24" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 2448 | dependencies = [ 2449 | "tinyvec", 2450 | ] 2451 | 2452 | [[package]] 2453 | name = "unicode-segmentation" 2454 | version = "1.10.1" 2455 | source = "registry+https://github.com/rust-lang/crates.io-index" 2456 | checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" 2457 | 2458 | [[package]] 2459 | name = "unicode-width" 2460 | version = "0.1.14" 2461 | source = "registry+https://github.com/rust-lang/crates.io-index" 2462 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 2463 | 2464 | [[package]] 2465 | name = "url" 2466 | version = "2.5.4" 2467 | source = "registry+https://github.com/rust-lang/crates.io-index" 2468 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2469 | dependencies = [ 2470 | "form_urlencoded", 2471 | "idna", 2472 | "percent-encoding", 2473 | ] 2474 | 2475 | [[package]] 2476 | name = "urlencoding" 2477 | version = "2.1.3" 2478 | source = "registry+https://github.com/rust-lang/crates.io-index" 2479 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 2480 | 2481 | [[package]] 2482 | name = "utf16_iter" 2483 | version = "1.0.5" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2486 | 2487 | [[package]] 2488 | name = "utf8_iter" 2489 | version = "1.0.4" 2490 | source = "registry+https://github.com/rust-lang/crates.io-index" 2491 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2492 | 2493 | [[package]] 2494 | name = "uuid" 2495 | version = "1.4.1" 2496 | source = "registry+https://github.com/rust-lang/crates.io-index" 2497 | checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" 2498 | dependencies = [ 2499 | "getrandom", 2500 | ] 2501 | 2502 | [[package]] 2503 | name = "vcpkg" 2504 | version = "0.2.15" 2505 | source = "registry+https://github.com/rust-lang/crates.io-index" 2506 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2507 | 2508 | [[package]] 2509 | name = "version_check" 2510 | version = "0.9.5" 2511 | source = "registry+https://github.com/rust-lang/crates.io-index" 2512 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2513 | 2514 | [[package]] 2515 | name = "wait-timeout" 2516 | version = "0.2.0" 2517 | source = "registry+https://github.com/rust-lang/crates.io-index" 2518 | checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" 2519 | dependencies = [ 2520 | "libc", 2521 | ] 2522 | 2523 | [[package]] 2524 | name = "walkdir" 2525 | version = "2.5.0" 2526 | source = "registry+https://github.com/rust-lang/crates.io-index" 2527 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 2528 | dependencies = [ 2529 | "same-file", 2530 | "winapi-util", 2531 | ] 2532 | 2533 | [[package]] 2534 | name = "want" 2535 | version = "0.3.1" 2536 | source = "registry+https://github.com/rust-lang/crates.io-index" 2537 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2538 | dependencies = [ 2539 | "try-lock", 2540 | ] 2541 | 2542 | [[package]] 2543 | name = "wasi" 2544 | version = "0.11.0+wasi-snapshot-preview1" 2545 | source = "registry+https://github.com/rust-lang/crates.io-index" 2546 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2547 | 2548 | [[package]] 2549 | name = "wasite" 2550 | version = "0.1.0" 2551 | source = "registry+https://github.com/rust-lang/crates.io-index" 2552 | checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" 2553 | 2554 | [[package]] 2555 | name = "wasm-bindgen" 2556 | version = "0.2.99" 2557 | source = "registry+https://github.com/rust-lang/crates.io-index" 2558 | checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" 2559 | dependencies = [ 2560 | "cfg-if", 2561 | "once_cell", 2562 | "wasm-bindgen-macro", 2563 | ] 2564 | 2565 | [[package]] 2566 | name = "wasm-bindgen-backend" 2567 | version = "0.2.99" 2568 | source = "registry+https://github.com/rust-lang/crates.io-index" 2569 | checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" 2570 | dependencies = [ 2571 | "bumpalo", 2572 | "log", 2573 | "proc-macro2", 2574 | "quote", 2575 | "syn 2.0.90", 2576 | "wasm-bindgen-shared", 2577 | ] 2578 | 2579 | [[package]] 2580 | name = "wasm-bindgen-futures" 2581 | version = "0.4.49" 2582 | source = "registry+https://github.com/rust-lang/crates.io-index" 2583 | checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" 2584 | dependencies = [ 2585 | "cfg-if", 2586 | "js-sys", 2587 | "once_cell", 2588 | "wasm-bindgen", 2589 | "web-sys", 2590 | ] 2591 | 2592 | [[package]] 2593 | name = "wasm-bindgen-macro" 2594 | version = "0.2.99" 2595 | source = "registry+https://github.com/rust-lang/crates.io-index" 2596 | checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" 2597 | dependencies = [ 2598 | "quote", 2599 | "wasm-bindgen-macro-support", 2600 | ] 2601 | 2602 | [[package]] 2603 | name = "wasm-bindgen-macro-support" 2604 | version = "0.2.99" 2605 | source = "registry+https://github.com/rust-lang/crates.io-index" 2606 | checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" 2607 | dependencies = [ 2608 | "proc-macro2", 2609 | "quote", 2610 | "syn 2.0.90", 2611 | "wasm-bindgen-backend", 2612 | "wasm-bindgen-shared", 2613 | ] 2614 | 2615 | [[package]] 2616 | name = "wasm-bindgen-shared" 2617 | version = "0.2.99" 2618 | source = "registry+https://github.com/rust-lang/crates.io-index" 2619 | checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" 2620 | 2621 | [[package]] 2622 | name = "web-sys" 2623 | version = "0.3.76" 2624 | source = "registry+https://github.com/rust-lang/crates.io-index" 2625 | checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" 2626 | dependencies = [ 2627 | "js-sys", 2628 | "wasm-bindgen", 2629 | ] 2630 | 2631 | [[package]] 2632 | name = "whoami" 2633 | version = "1.5.1" 2634 | source = "registry+https://github.com/rust-lang/crates.io-index" 2635 | checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" 2636 | dependencies = [ 2637 | "redox_syscall 0.4.1", 2638 | "wasite", 2639 | "web-sys", 2640 | ] 2641 | 2642 | [[package]] 2643 | name = "winapi" 2644 | version = "0.3.9" 2645 | source = "registry+https://github.com/rust-lang/crates.io-index" 2646 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2647 | dependencies = [ 2648 | "winapi-i686-pc-windows-gnu", 2649 | "winapi-x86_64-pc-windows-gnu", 2650 | ] 2651 | 2652 | [[package]] 2653 | name = "winapi-i686-pc-windows-gnu" 2654 | version = "0.4.0" 2655 | source = "registry+https://github.com/rust-lang/crates.io-index" 2656 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2657 | 2658 | [[package]] 2659 | name = "winapi-util" 2660 | version = "0.1.8" 2661 | source = "registry+https://github.com/rust-lang/crates.io-index" 2662 | checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" 2663 | dependencies = [ 2664 | "windows-sys 0.52.0", 2665 | ] 2666 | 2667 | [[package]] 2668 | name = "winapi-x86_64-pc-windows-gnu" 2669 | version = "0.4.0" 2670 | source = "registry+https://github.com/rust-lang/crates.io-index" 2671 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2672 | 2673 | [[package]] 2674 | name = "windows" 2675 | version = "0.52.0" 2676 | source = "registry+https://github.com/rust-lang/crates.io-index" 2677 | checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" 2678 | dependencies = [ 2679 | "windows-core", 2680 | "windows-targets 0.52.6", 2681 | ] 2682 | 2683 | [[package]] 2684 | name = "windows-core" 2685 | version = "0.52.0" 2686 | source = "registry+https://github.com/rust-lang/crates.io-index" 2687 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 2688 | dependencies = [ 2689 | "windows-targets 0.52.6", 2690 | ] 2691 | 2692 | [[package]] 2693 | name = "windows-sys" 2694 | version = "0.48.0" 2695 | source = "registry+https://github.com/rust-lang/crates.io-index" 2696 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 2697 | dependencies = [ 2698 | "windows-targets 0.48.5", 2699 | ] 2700 | 2701 | [[package]] 2702 | name = "windows-sys" 2703 | version = "0.52.0" 2704 | source = "registry+https://github.com/rust-lang/crates.io-index" 2705 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2706 | dependencies = [ 2707 | "windows-targets 0.52.6", 2708 | ] 2709 | 2710 | [[package]] 2711 | name = "windows-sys" 2712 | version = "0.59.0" 2713 | source = "registry+https://github.com/rust-lang/crates.io-index" 2714 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2715 | dependencies = [ 2716 | "windows-targets 0.52.6", 2717 | ] 2718 | 2719 | [[package]] 2720 | name = "windows-targets" 2721 | version = "0.48.5" 2722 | source = "registry+https://github.com/rust-lang/crates.io-index" 2723 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2724 | dependencies = [ 2725 | "windows_aarch64_gnullvm 0.48.5", 2726 | "windows_aarch64_msvc 0.48.5", 2727 | "windows_i686_gnu 0.48.5", 2728 | "windows_i686_msvc 0.48.5", 2729 | "windows_x86_64_gnu 0.48.5", 2730 | "windows_x86_64_gnullvm 0.48.5", 2731 | "windows_x86_64_msvc 0.48.5", 2732 | ] 2733 | 2734 | [[package]] 2735 | name = "windows-targets" 2736 | version = "0.52.6" 2737 | source = "registry+https://github.com/rust-lang/crates.io-index" 2738 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2739 | dependencies = [ 2740 | "windows_aarch64_gnullvm 0.52.6", 2741 | "windows_aarch64_msvc 0.52.6", 2742 | "windows_i686_gnu 0.52.6", 2743 | "windows_i686_gnullvm", 2744 | "windows_i686_msvc 0.52.6", 2745 | "windows_x86_64_gnu 0.52.6", 2746 | "windows_x86_64_gnullvm 0.52.6", 2747 | "windows_x86_64_msvc 0.52.6", 2748 | ] 2749 | 2750 | [[package]] 2751 | name = "windows_aarch64_gnullvm" 2752 | version = "0.48.5" 2753 | source = "registry+https://github.com/rust-lang/crates.io-index" 2754 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2755 | 2756 | [[package]] 2757 | name = "windows_aarch64_gnullvm" 2758 | version = "0.52.6" 2759 | source = "registry+https://github.com/rust-lang/crates.io-index" 2760 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2761 | 2762 | [[package]] 2763 | name = "windows_aarch64_msvc" 2764 | version = "0.48.5" 2765 | source = "registry+https://github.com/rust-lang/crates.io-index" 2766 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2767 | 2768 | [[package]] 2769 | name = "windows_aarch64_msvc" 2770 | version = "0.52.6" 2771 | source = "registry+https://github.com/rust-lang/crates.io-index" 2772 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2773 | 2774 | [[package]] 2775 | name = "windows_i686_gnu" 2776 | version = "0.48.5" 2777 | source = "registry+https://github.com/rust-lang/crates.io-index" 2778 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 2779 | 2780 | [[package]] 2781 | name = "windows_i686_gnu" 2782 | version = "0.52.6" 2783 | source = "registry+https://github.com/rust-lang/crates.io-index" 2784 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2785 | 2786 | [[package]] 2787 | name = "windows_i686_gnullvm" 2788 | version = "0.52.6" 2789 | source = "registry+https://github.com/rust-lang/crates.io-index" 2790 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2791 | 2792 | [[package]] 2793 | name = "windows_i686_msvc" 2794 | version = "0.48.5" 2795 | source = "registry+https://github.com/rust-lang/crates.io-index" 2796 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2797 | 2798 | [[package]] 2799 | name = "windows_i686_msvc" 2800 | version = "0.52.6" 2801 | source = "registry+https://github.com/rust-lang/crates.io-index" 2802 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2803 | 2804 | [[package]] 2805 | name = "windows_x86_64_gnu" 2806 | version = "0.48.5" 2807 | source = "registry+https://github.com/rust-lang/crates.io-index" 2808 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2809 | 2810 | [[package]] 2811 | name = "windows_x86_64_gnu" 2812 | version = "0.52.6" 2813 | source = "registry+https://github.com/rust-lang/crates.io-index" 2814 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2815 | 2816 | [[package]] 2817 | name = "windows_x86_64_gnullvm" 2818 | version = "0.48.5" 2819 | source = "registry+https://github.com/rust-lang/crates.io-index" 2820 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2821 | 2822 | [[package]] 2823 | name = "windows_x86_64_gnullvm" 2824 | version = "0.52.6" 2825 | source = "registry+https://github.com/rust-lang/crates.io-index" 2826 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2827 | 2828 | [[package]] 2829 | name = "windows_x86_64_msvc" 2830 | version = "0.48.5" 2831 | source = "registry+https://github.com/rust-lang/crates.io-index" 2832 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 2833 | 2834 | [[package]] 2835 | name = "windows_x86_64_msvc" 2836 | version = "0.52.6" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2839 | 2840 | [[package]] 2841 | name = "winnow" 2842 | version = "0.6.13" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" 2845 | dependencies = [ 2846 | "memchr", 2847 | ] 2848 | 2849 | [[package]] 2850 | name = "winreg" 2851 | version = "0.50.0" 2852 | source = "registry+https://github.com/rust-lang/crates.io-index" 2853 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 2854 | dependencies = [ 2855 | "cfg-if", 2856 | "windows-sys 0.48.0", 2857 | ] 2858 | 2859 | [[package]] 2860 | name = "write16" 2861 | version = "1.0.0" 2862 | source = "registry+https://github.com/rust-lang/crates.io-index" 2863 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2864 | 2865 | [[package]] 2866 | name = "writeable" 2867 | version = "0.5.5" 2868 | source = "registry+https://github.com/rust-lang/crates.io-index" 2869 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2870 | 2871 | [[package]] 2872 | name = "wyz" 2873 | version = "0.5.1" 2874 | source = "registry+https://github.com/rust-lang/crates.io-index" 2875 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 2876 | dependencies = [ 2877 | "tap", 2878 | ] 2879 | 2880 | [[package]] 2881 | name = "yansi-term" 2882 | version = "0.1.2" 2883 | source = "registry+https://github.com/rust-lang/crates.io-index" 2884 | checksum = "fe5c30ade05e61656247b2e334a031dfd0cc466fadef865bdcdea8d537951bf1" 2885 | dependencies = [ 2886 | "winapi", 2887 | ] 2888 | 2889 | [[package]] 2890 | name = "yoke" 2891 | version = "0.7.5" 2892 | source = "registry+https://github.com/rust-lang/crates.io-index" 2893 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 2894 | dependencies = [ 2895 | "serde", 2896 | "stable_deref_trait", 2897 | "yoke-derive", 2898 | "zerofrom", 2899 | ] 2900 | 2901 | [[package]] 2902 | name = "yoke-derive" 2903 | version = "0.7.5" 2904 | source = "registry+https://github.com/rust-lang/crates.io-index" 2905 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 2906 | dependencies = [ 2907 | "proc-macro2", 2908 | "quote", 2909 | "syn 2.0.90", 2910 | "synstructure", 2911 | ] 2912 | 2913 | [[package]] 2914 | name = "zerofrom" 2915 | version = "0.1.5" 2916 | source = "registry+https://github.com/rust-lang/crates.io-index" 2917 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 2918 | dependencies = [ 2919 | "zerofrom-derive", 2920 | ] 2921 | 2922 | [[package]] 2923 | name = "zerofrom-derive" 2924 | version = "0.1.5" 2925 | source = "registry+https://github.com/rust-lang/crates.io-index" 2926 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 2927 | dependencies = [ 2928 | "proc-macro2", 2929 | "quote", 2930 | "syn 2.0.90", 2931 | "synstructure", 2932 | ] 2933 | 2934 | [[package]] 2935 | name = "zerovec" 2936 | version = "0.10.4" 2937 | source = "registry+https://github.com/rust-lang/crates.io-index" 2938 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2939 | dependencies = [ 2940 | "yoke", 2941 | "zerofrom", 2942 | "zerovec-derive", 2943 | ] 2944 | 2945 | [[package]] 2946 | name = "zerovec-derive" 2947 | version = "0.10.3" 2948 | source = "registry+https://github.com/rust-lang/crates.io-index" 2949 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2950 | dependencies = [ 2951 | "proc-macro2", 2952 | "quote", 2953 | "syn 2.0.90", 2954 | ] 2955 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "prometheus_fdw" 3 | version = "0.2.1" 4 | edition = "2021" 5 | 6 | [lib] 7 | crate-type = ["cdylib", "lib"] 8 | 9 | [[bin]] 10 | name = "pgrx_embed_prometheus_fdw" 11 | path = "./src/bin/pgrx_embed.rs" 12 | 13 | [features] 14 | default = ["pg17"] 15 | pg14 = ["pgrx/pg14", "pgrx-tests/pg14", "supabase-wrappers/pg14"] 16 | pg15 = ["pgrx/pg15", "pgrx-tests/pg15", "supabase-wrappers/pg15"] 17 | pg16 = ["pgrx/pg16", "pgrx-tests/pg16", "supabase-wrappers/pg16"] 18 | pg17 = ["pgrx/pg17", "pgrx-tests/pg17", "supabase-wrappers/pg17"] 19 | pg_test = [] 20 | 21 | [dependencies] 22 | chrono = "0.4.39" 23 | pgrx = "0.12.6" 24 | reqwest = "0.11.27" 25 | reqwest-middleware = "0.2.5" 26 | serde = { version = "1.0", features = ["derive"] } 27 | serde_json = "1.0" 28 | supabase-wrappers = { version = "0.1.20", default-features = false } 29 | tokio = { version = "1", features = ["full"] } 30 | urlencoding = "2.1.3" 31 | 32 | [dev-dependencies] 33 | pgrx-tests = "0.12.6" 34 | 35 | [profile.dev] 36 | panic = "unwind" 37 | 38 | [profile.release] 39 | panic = "unwind" 40 | opt-level = 3 41 | lto = "fat" 42 | codegen-units = 1 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The PostgreSQL License 2 | 3 | Copyright (c) 2023, Tembo 4 | 5 | Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. 6 | 7 | IN NO EVENT SHALL TEMBO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF TEMBO HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 8 | 9 | TEMBO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND TEMBO HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 10 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | PGRX_POSTGRES ?= pg16 2 | DISTNAME = $(shell grep -m 1 '^name' Trunk.toml | sed -e 's/[^"]*"\([^"]*\)",\{0,1\}/\1/') 3 | DISTVERSION = $(shell grep -m 1 '^version' Trunk.toml | sed -e 's/[^"]*"\([^"]*\)",\{0,1\}/\1/') 4 | 5 | META.json: META.json.in Cargo.toml 6 | @sed "s/@CARGO_VERSION@/$(DISTVERSION)/g" $< > $@ 7 | 8 | $(DISTNAME)-$(DISTVERSION).zip: META.json 9 | git archive --format zip --prefix $(DISTNAME)-$(DISTVERSION)/ --add-file $< -o $(DISTNAME)-$(DISTVERSION).zip HEAD 10 | 11 | pgxn-zip: $(DISTNAME)-$(DISTVERSION).zip 12 | 13 | clean: 14 | @rm -rf META.json $(DISTNAME)-$(DISTVERSION).zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Prometheus_fdw 2 | 3 | Prometheus_fdw is an integration of Prometheus monitoring data into Postgres. It enables querying for Prometheus metrics directly within Postgres, bridging the gap between Prometheus monitoring and Postgres's robust database capabilities. 4 | 5 | Learn more about it in this [blog post](https://tembo.io/blog/monitoring-with-prometheus-fdw). 6 | Watch it in action in this [demo video](https://youtu.be/LVuH4RtNQss) 7 | 8 | [![Tembo Cloud Try Free](https://tembo.io/tryFreeButton.svg)](https://cloud.tembo.io/sign-up) 9 | 10 | [![Static Badge](https://img.shields.io/badge/%40tembo-community?logo=slack&label=slack)](https://join.slack.com/t/tembocommunity/shared_invite/zt-20dtnhcmo-pLNV7_Aobi50TdTLpfQ~EQ) 11 | [![PGXN version](https://badge.fury.io/pg/prometheus_fdw.svg)](https://pgxn.org/dist/prometheus_fdw/) 12 | 13 | ### Pre-requisistes 14 | 15 | - Install `prometheus_fdw` 16 | - (Optional) install `pg_partman` and `pg_cron` 17 | 18 | ### Quick start 19 | 20 | `create extension prometheus_fdw;` 21 | 22 | Create the foreign data wrapper: 23 | 24 | ```sql 25 | create foreign data wrapper prometheus_wrapper 26 | handler prometheus_fdw_handler 27 | validator prometheus_fdw_validator; 28 | ``` 29 | 30 | Create the server: 31 | 32 | ```sql 33 | create server my_prometheus_server 34 | foreign data wrapper prometheus_wrapper 35 | options ( 36 | base_url ''); 37 | ``` 38 | 39 | Create Foreign Table: 40 | 41 | ```sql 42 | CREATE FOREIGN TABLE IF NOT EXISTS metrics ( 43 | metric_name TEXT, 44 | metric_labels JSONB, 45 | metric_time BIGINT, 46 | metric_value FLOAT8 47 | ) 48 | server my_prometheus_server 49 | options ( 50 | object 'metrics', 51 | step '10m' 52 | ); 53 | ``` 54 | 55 | ## Queries 56 | 57 | To simply run the fdw and look at values 58 | 59 | ```sql 60 | SELECT 61 | * 62 | FROM metrics 63 | WHERE 64 | metric_name='container_cpu_usage_seconds_total' 65 | AND metric_time > 1696046800 AND metric_time < 1696133000; 66 | ``` 67 | 68 | ## Examples 69 | 70 | Please see the `examples/` directory to find a basic example and a practical example. In the practical example, metrics are automatically synced into the database using `pg_cron`, and automatically expired using `pg_partman`. Performance is optimized using indexes and partitioning. 71 | -------------------------------------------------------------------------------- /Trunk.toml: -------------------------------------------------------------------------------- 1 | [extension] 2 | name = "prometheus_fdw" 3 | repository = "https://github.com/tembo-io/prometheus_fdw" 4 | license = "PostgreSQL" 5 | description = "Postgres Foreign Data Wrapper for Prometheus Data" 6 | homepage = "https://github.com/tembo-io/prometheus_fdw" 7 | documentation = "https://github.com/tembo-io/prometheus_fdw" 8 | categories = ["connectors"] 9 | version = "0.2.1" 10 | 11 | [build] 12 | postgres_version = "17" 13 | platform = "linux/amd64" 14 | -------------------------------------------------------------------------------- /docs/hello_world/basic_setup.md: -------------------------------------------------------------------------------- 1 | # Prometheus FDW basic demo 2 | 3 | - **Dockerfile**: A Postgres database with prometheus_fdw installed 4 | - **setup-prometheus-fdw.sql**: A script to show how to configure 5 | - **sample-query.sql**: A sample query against Prometheus 6 | - **run-demo.sh**: A script showing the whole process of running the demo 7 | -------------------------------------------------------------------------------- /docs/hello_world/practical_example/setup.md: -------------------------------------------------------------------------------- 1 | # Practical example 2 | 3 | - **Dockerfile**: A Postgres database with prometheus_fdw installed 4 | - **setup-prometheus-fdw.sql**: A script to show how to configure 5 | - **setup-cache.sql**: Setup tables for local storage of metrics data 6 | - **setup-metrics-sync.sql**: Automatically sync data from Prometheus to Postgres 7 | - **run-demo.sh**: A script showing the whole process of running the demo 8 | 9 | ## Data model 10 | 11 | This data model was inspired by the [Crunchy Data postgresql-prometheus-adapter](https://github.com/CrunchyData/postgresql-prometheus-adapter). 12 | 13 | **metric_labels**: Stores the metric name labels. 14 | 15 | ``` 16 | id | name | labels 17 | ----+------------------------------------+------------------------- 18 | 1 | container_cpu_usage_seconds_total | {"pod": "my-pod-1", ...} 19 | 2 | container_cpu_usage_seconds_total | {"pod": "my-pod-2", ...} 20 | 3 | container_memory_working_set_bytes | {"pod": "my-pod-1", ...} 21 | 4 | container_memory_working_set_bytes | {"pod": "my-pod-2", ...} 22 | ``` 23 | 24 | **metric_values**: A partitioned table that stores metric values, when they happened, and the corresponding labels. 25 | 26 | ``` 27 | label_id | time | value 28 | ----------+------------+---------- 29 | 4320 | 1702678142 | 12214272 30 | 4320 | 1702678742 | 11923456 31 | 4320 | 1702679342 | 12230656 32 | 4320 | 1702679942 | 11804672 33 | 4320 | 1702677542 | 11870208 34 | 4331 | 1702679942 | 53743616 35 | 4331 | 1702678142 | 54022144 36 | 4331 | 1702678742 | 53903360 37 | 4331 | 1702679342 | 53288960 38 | 4331 | 1702677542 | 53514240 39 | ``` 40 | 41 | ## Example query 42 | 43 | The query in **sample-query.sql** is an example of showing the current memory utilization of each container in kube-system. 44 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | ## Prometheus_fdw 2 | 3 | Prometheus_fdw is an integration of Prometheus monitoring data into Postgres. It enables querying for Prometheus metrics directly within Postgres, bridging the gap between Prometheus monitoring and Postgres's robust database capabilities. 4 | [![Static Badge](https://img.shields.io/badge/%40tembo-community?logo=slack&label=slack)](https://join.slack.com/t/tembocommunity/shared_invite/zt-20dtnhcmo-pLNV7_Aobi50TdTLpfQ~EQ) 5 | [![PGXN version](https://badge.fury.io/pg/prometheus_fdw.svg)](https://pgxn.org/dist/prometheus_fdw/) 6 | 7 | ### Pre-requisistes 8 | 9 | - Install `prometheus_fdw` 10 | - (Optional) install `pg_partman` and `pg_cron` 11 | 12 | ### Quick start 13 | 14 | `create extension prometheus_fdw;` 15 | 16 | Create the foreign data wrapper: 17 | 18 | ```sql 19 | create foreign data wrapper prometheus_wrapper 20 | handler prometheus_fdw_handler 21 | validator prometheus_fdw_validator; 22 | ``` 23 | 24 | Create the server: 25 | 26 | ```sql 27 | create server my_prometheus_server 28 | foreign data wrapper prometheus_wrapper 29 | options ( 30 | base_url ''); 31 | ``` 32 | 33 | Create Foreign Table: 34 | 35 | ```sql 36 | CREATE FOREIGN TABLE IF NOT EXISTS metrics ( 37 | metric_name TEXT, 38 | metric_labels JSONB, 39 | metric_time BIGINT, 40 | metric_value FLOAT8 41 | ) 42 | server my_prometheus_server 43 | options ( 44 | object 'metrics', 45 | step '10m' 46 | ); 47 | ``` 48 | 49 | ## Queries 50 | 51 | To simply run the fdw and look at values 52 | 53 | ```sql 54 | SELECT 55 | * 56 | FROM metrics 57 | WHERE 58 | metric_name='container_cpu_usage_seconds_total' 59 | AND metric_time > 1696046800 AND metric_time < 1696133000; 60 | ``` 61 | 62 | ## Examples 63 | 64 | Please see the `examples/` directory to find a basic example and a practical example. In the practical example, metrics are automatically synced into the database using `pg_cron`, and automatically expired using `pg_partman`. Performance is optimized using indexes and partitioning. 65 | -------------------------------------------------------------------------------- /examples/0_hello_world/Dockerfile: -------------------------------------------------------------------------------- 1 | # This image is a normal Postgres container, 2 | # configured for local dev (network access configs and password are insecure), 3 | # plus the CLI tool "Trunk" for installing extensions from https://pgt.dev 4 | # 5 | # Source: https://github.com/tembo-io/tembo-images 6 | FROM quay.io/tembo/tembo-local:latest 7 | 8 | RUN trunk install prometheus_fdw --version 0.1.3 9 | -------------------------------------------------------------------------------- /examples/0_hello_world/README.md: -------------------------------------------------------------------------------- 1 | # Prometheus FDW basic demo 2 | 3 | - **Dockerfile**: A Postgres database with prometheus_fdw installed 4 | - **setup-prometheus-fdw.sql**: A script to show how to configure 5 | - **sample-query.sql**: A sample query against Prometheus 6 | - **run-demo.sh**: A script showing the whole process of running the demo 7 | -------------------------------------------------------------------------------- /examples/0_hello_world/run-demo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Build the image and run it 4 | docker build -t example-local-image . 5 | docker rm --force local-tembo 6 | docker run -d -it --name local-tembo -p 5432:5432 --rm example-local-image 7 | 8 | # wait for connect 9 | until psql postgres://postgres:postgres@localhost:5432 -c "select 1" &> /dev/null; do 10 | echo "Waiting for postgres to start..." 11 | sleep 1 12 | done 13 | echo "Ready!" 14 | 15 | # Run sample scripts 16 | psql postgres://postgres:postgres@localhost:5432 -f ./setup-prometheus-fdw.sql 17 | 18 | start_time=$(TZ=UTC date -j -v-800S +%s) 19 | end_time=$(TZ=UTC date -j -v-300S +%s) 20 | 21 | echo "Start time: $start_time" 22 | echo "End time: $end_time" 23 | psql postgres://postgres:postgres@localhost:5432 -v start_time=$start_time -v end_time=$end_time -f ./sample-query.sql 24 | -------------------------------------------------------------------------------- /examples/0_hello_world/sample-query.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | * 3 | FROM metrics 4 | WHERE 5 | metric_name = 'container_cpu_usage_seconds_total' 6 | AND metric_time > :start_time 7 | AND metric_time < :end_time; 8 | -------------------------------------------------------------------------------- /examples/0_hello_world/setup-prometheus-fdw.sql: -------------------------------------------------------------------------------- 1 | -- Enable the extension 2 | CREATE EXTENSION prometheus_fdw; 3 | 4 | -- Create the FDW 5 | CREATE FOREIGN DATA WRAPPER prometheus_wrapper 6 | HANDLER prometheus_fdw_handler 7 | VALIDATOR prometheus_fdw_validator; 8 | 9 | -- Configure connection to server 10 | CREATE SERVER my_prometheus_server 11 | FOREIGN DATA WRAPPER prometheus_wrapper 12 | OPTIONS ( 13 | base_url 'https://prometheus-data-1.use1.dev.plat.cdb-svc.com/'); 14 | 15 | -- Create FDW table we can query to get metrics 16 | CREATE FOREIGN TABLE metrics ( 17 | metric_name TEXT, 18 | metric_labels JSONB, 19 | metric_time BIGINT, 20 | metric_value FLOAT8 21 | ) 22 | SERVER my_prometheus_server 23 | OPTIONS ( 24 | object 'metrics', 25 | step '30s' 26 | ); 27 | -------------------------------------------------------------------------------- /examples/1_practical_example/Dockerfile: -------------------------------------------------------------------------------- 1 | # This image is a normal Postgres container, 2 | # configured for local dev (network access configs and password are insecure), 3 | # plus the CLI tool "Trunk" for installing extensions from https://pgt.dev 4 | # 5 | # Source: https://github.com/tembo-io/tembo-images 6 | # Documentation: https://tembo.io/docs/tembo-cloud/try-extensions-locally 7 | FROM quay.io/tembo/tembo-local:latest 8 | 9 | # We will use pg_partman to optimize storing and querying timeseries data 10 | RUN trunk install pg_partman --version 4.7.4 11 | # We will use pg_cron to schedule syncing prometheus into the local DB 12 | RUN trunk install pg_cron --version 1.5.2 13 | 14 | RUN trunk install prometheus_fdw --version 0.1.3 15 | 16 | # Extra Postgres configurations 17 | COPY custom.conf $PGDATA/extra-configs 18 | -------------------------------------------------------------------------------- /examples/1_practical_example/README.md: -------------------------------------------------------------------------------- 1 | # Practical example 2 | 3 | - **Dockerfile**: A Postgres database with prometheus_fdw installed 4 | - **setup-prometheus-fdw.sql**: A script to show how to configure 5 | - **setup-cache.sql**: Setup tables for local storage of metrics data 6 | - **setup-metrics-sync.sql**: Automatically sync data from Prometheus to Postgres 7 | - **run-demo.sh**: A script showing the whole process of running the demo 8 | 9 | ## Data model 10 | 11 | This data model was inspired by the [Crunchy Data postgresql-prometheus-adapter](https://github.com/CrunchyData/postgresql-prometheus-adapter). 12 | 13 | **metric_labels**: Stores the metric name labels. 14 | 15 | ``` 16 | id | name | labels 17 | ----+------------------------------------+------------------------- 18 | 1 | container_cpu_usage_seconds_total | {"pod": "my-pod-1", ...} 19 | 2 | container_cpu_usage_seconds_total | {"pod": "my-pod-2", ...} 20 | 3 | container_memory_working_set_bytes | {"pod": "my-pod-1", ...} 21 | 4 | container_memory_working_set_bytes | {"pod": "my-pod-2", ...} 22 | ``` 23 | 24 | **metric_values**: A partitioned table that stores metric values, when they happened, and the corresponding labels. 25 | 26 | ``` 27 | label_id | time | value 28 | ----------+------------+---------- 29 | 4320 | 1702678142 | 12214272 30 | 4320 | 1702678742 | 11923456 31 | 4320 | 1702679342 | 12230656 32 | 4320 | 1702679942 | 11804672 33 | 4320 | 1702677542 | 11870208 34 | 4331 | 1702679942 | 53743616 35 | 4331 | 1702678142 | 54022144 36 | 4331 | 1702678742 | 53903360 37 | 4331 | 1702679342 | 53288960 38 | 4331 | 1702677542 | 53514240 39 | ``` 40 | 41 | ## Example query 42 | 43 | The query in **sample-query.sql** is an example of showing the current memory utilization of each container in kube-system. 44 | -------------------------------------------------------------------------------- /examples/1_practical_example/custom.conf: -------------------------------------------------------------------------------- 1 | shared_preload_libraries = 'pg_partman_bgw,pg_cron' 2 | -------------------------------------------------------------------------------- /examples/1_practical_example/run-demo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Build the image and run it 4 | docker build -t example-local-image . 5 | docker rm --force local-tembo 6 | docker run -d -it --name local-tembo -p 5432:5432 --rm example-local-image 7 | 8 | # wait for connect 9 | until psql postgres://postgres:postgres@localhost:5432 -c "select 1" &> /dev/null; do 10 | echo "Waiting for postgres to start..." 11 | sleep 1 12 | done 13 | echo "Ready!" 14 | 15 | # Run sample scripts 16 | psql postgres://postgres:postgres@localhost:5432 -f ./setup-prometheus-fdw.sql 17 | psql postgres://postgres:postgres@localhost:5432 -f ./setup-cache.sql 18 | psql postgres://postgres:postgres@localhost:5432 -f ./setup-metrics-sync.sql 19 | psql postgres://postgres:postgres@localhost:5432 -f ./sample-query.sql 20 | -------------------------------------------------------------------------------- /examples/1_practical_example/sample-query.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | ml.labels ->> 'pod' AS pod_name, 3 | mv.value / 1048576.0 AS memory_usage_mib 4 | FROM 5 | metric_labels ml 6 | JOIN 7 | metric_values mv ON ml.id = mv.label_id 8 | WHERE 9 | ml.name = 'container_memory_working_set_bytes' AND 10 | ml.labels ->> 'namespace' = 'kube-system' AND 11 | mv.time = ( 12 | SELECT MAX(mv2.time) 13 | FROM metric_values mv2 14 | WHERE mv2.label_id = ml.id 15 | ) 16 | ORDER BY 17 | mv.time DESC; 18 | -------------------------------------------------------------------------------- /examples/1_practical_example/setup-cache.sql: -------------------------------------------------------------------------------- 1 | -- Table for saving results from FDW 2 | CREATE TABLE metrics_local ( 3 | metric_name TEXT, 4 | metric_labels JSONB, 5 | metric_time BIGINT, 6 | metric_value FLOAT8 7 | ); 8 | 9 | -- Create metric_labels table 10 | CREATE TABLE metric_labels ( 11 | id BIGSERIAL NOT NULL, 12 | name TEXT NOT NULL, 13 | labels JSONB, 14 | PRIMARY KEY (id), 15 | UNIQUE (name, labels) 16 | ); 17 | 18 | -- Create metric_values table 19 | CREATE TABLE metric_values ( 20 | label_id bigint NOT NULL, 21 | "time" bigint NOT NULL, 22 | value double precision NOT NULL, 23 | id serial NOT NULL, 24 | PRIMARY KEY (id, "time"), 25 | UNIQUE (label_id, "time"), 26 | FOREIGN KEY (label_id) REFERENCES public.metric_labels(id) 27 | ) PARTITION BY RANGE ("time"); 28 | 29 | -- Configure automatic partitioning 30 | SELECT create_parent( 31 | p_parent_table := 'public.metric_values', 32 | p_control := 'time', 33 | p_type := 'native', 34 | p_interval := 'daily', 35 | p_automatic_maintenance := 'on', 36 | p_start_partition := '2023-09-06', 37 | p_epoch := 'seconds', 38 | p_premake := 30 39 | ); 40 | -- Configure retention 41 | UPDATE part_config 42 | SET retention = '30 days', 43 | retention_keep_table = false, 44 | retention_keep_index = false, 45 | infinite_time_partitions = true 46 | WHERE parent_table = 'public.metric_values'; 47 | 48 | CREATE INDEX IF NOT EXISTS metric_labels_labels_idx ON metric_labels USING GIN (labels); 49 | CREATE INDEX IF NOT EXISTS metric_values_id_time_idx on metric_values USING btree (id, time DESC); 50 | CREATE INDEX IF NOT EXISTS metric_values_time_idx on metric_values USING btree (time DESC); 51 | -------------------------------------------------------------------------------- /examples/1_practical_example/setup-metrics-sync.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION public.insert_metrics() 2 | RETURNS void 3 | LANGUAGE plpgsql 4 | AS $function$ 5 | DECLARE 6 | start_time BIGINT; 7 | end_time BIGINT; 8 | metric_name text; 9 | metric_names text[] := ARRAY['container_cpu_usage_seconds_total', 'container_memory_working_set_bytes']; -- Add your metric names here 10 | BEGIN 11 | start_time := EXTRACT(epoch FROM now() - interval '1 hour' + interval '1 second')::BIGINT; 12 | end_time := EXTRACT(epoch FROM now())::BIGINT; 13 | 14 | FOREACH metric_name IN ARRAY metric_names 15 | LOOP 16 | EXECUTE format( 17 | 'INSERT INTO metrics_local 18 | SELECT * FROM metrics 19 | WHERE 20 | metric_name = %L 21 | AND metric_time > %s 22 | AND metric_time < %s;', 23 | metric_name, 24 | start_time, 25 | end_time 26 | ); 27 | END LOOP; 28 | END; 29 | $function$; 30 | 31 | CREATE OR REPLACE FUNCTION insert_metric_labels() RETURNS void LANGUAGE plpgsql AS $$ 32 | BEGIN 33 | EXECUTE ' 34 | INSERT INTO public.metric_labels (name, labels) 35 | SELECT 36 | metric_name, 37 | metric_labels 38 | FROM metrics_local 39 | ON CONFLICT (name, labels) DO NOTHING; 40 | '; 41 | END; 42 | $$; 43 | 44 | CREATE OR REPLACE FUNCTION insert_metric_values() RETURNS void LANGUAGE plpgsql AS $$ 45 | BEGIN 46 | EXECUTE ' 47 | INSERT INTO metric_values (label_id, time, value) 48 | SELECT 49 | mlab.id, 50 | ml.metric_time, 51 | ml.metric_value 52 | FROM 53 | metrics_local ml 54 | INNER JOIN 55 | metric_labels mlab 56 | ON 57 | ml.metric_labels = mlab.labels 58 | ON CONFLICT (id, time) DO NOTHING; 59 | '; 60 | END; 61 | $$; 62 | 63 | CREATE OR REPLACE FUNCTION truncate_metrics_local() RETURNS void LANGUAGE plpgsql AS $$ 64 | BEGIN 65 | EXECUTE 'TRUNCATE TABLE metrics_local;'; 66 | END; 67 | $$; 68 | 69 | -- Perform an initial sync 70 | SELECT 71 | insert_metrics(), 72 | insert_metric_labels(), 73 | insert_metric_values(), 74 | truncate_metrics_local(); 75 | 76 | 77 | -- Schedule syncs 78 | SELECT cron.schedule( 79 | '0 * * * *', 80 | $$ 81 | SELECT 82 | insert_metrics(), 83 | insert_metric_labels(), 84 | insert_metric_values(), 85 | truncate_metrics_local(); 86 | $$ 87 | ); 88 | -------------------------------------------------------------------------------- /examples/1_practical_example/setup-prometheus-fdw.sql: -------------------------------------------------------------------------------- 1 | -- Enable the extensions 2 | CREATE EXTENSION IF NOT EXISTS prometheus_fdw CASCADE; 3 | CREATE EXTENSION IF NOT EXISTS pg_partman CASCADE; 4 | CREATE EXTENSION IF NOT EXISTS pg_cron CASCADE; 5 | 6 | -- Create the FDW 7 | CREATE FOREIGN DATA WRAPPER prometheus_wrapper 8 | HANDLER prometheus_fdw_handler 9 | VALIDATOR prometheus_fdw_validator; 10 | 11 | -- Configure connection to server 12 | CREATE SERVER my_prometheus_server 13 | FOREIGN DATA WRAPPER prometheus_wrapper 14 | OPTIONS ( 15 | base_url 'https://prometheus-data-1.use1.dev.plat.cdb-svc.com/'); 16 | 17 | -- Create FDW table we can query to get metrics 18 | CREATE FOREIGN TABLE metrics ( 19 | metric_name TEXT, 20 | metric_labels JSONB, 21 | metric_time BIGINT, 22 | metric_value FLOAT8 23 | ) 24 | SERVER my_prometheus_server 25 | OPTIONS ( 26 | object 'metrics', 27 | step '10m' 28 | ); 29 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Prometheus FDW 2 | theme: 3 | name: material 4 | palette: 5 | - scheme: default 6 | primary: teal 7 | toggle: 8 | icon: material/weather-night 9 | name: dark mode 10 | - scheme: slate 11 | primary: teal 12 | toggle: 13 | icon: material/weather-sunny 14 | name: light mode 15 | nav: 16 | - Prometheus FDW: 'index.md' 17 | - hello world: 18 | - 'hello_world/basic_setup.md' 19 | - practical example: 20 | - 'practical_example/setup.md' 21 | markdown_extensions: 22 | - toc: 23 | permalink: true 24 | - markdown.extensions.codehilite: 25 | guess_lang: false 26 | - codehilite: 27 | - admonition 28 | - extra 29 | - pymdownx.snippets: 30 | check_paths: true 31 | - pymdownx.highlight: 32 | anchor_linenums: true 33 | line_spans: __span 34 | pygments_lang_class: true 35 | - pymdownx.inlinehilite 36 | - pymdownx.superfences 37 | plugins: 38 | - search 39 | - mkdocstrings -------------------------------------------------------------------------------- /prometheus_fdw.control: -------------------------------------------------------------------------------- 1 | comment = 'prometheus_fdw: A foreign data wrapper for prometheus' 2 | default_version = '@CARGO_VERSION@' 3 | module_pathname = '$libdir/prometheus_fdw' 4 | relocatable = false 5 | superuser = true 6 | -------------------------------------------------------------------------------- /sql/prometheus_fdw--0.1.1--0.1.2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jayko001/prometheus_fdw/d9794a9b89bf00e65bf9d31475b740d7f5fdf9f0/sql/prometheus_fdw--0.1.1--0.1.2.sql -------------------------------------------------------------------------------- /sql/prometheus_fdw--0.1.2--0.1.3.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jayko001/prometheus_fdw/d9794a9b89bf00e65bf9d31475b740d7f5fdf9f0/sql/prometheus_fdw--0.1.2--0.1.3.sql -------------------------------------------------------------------------------- /sql/prometheus_fdw--0.1.3--0.1.4.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jayko001/prometheus_fdw/d9794a9b89bf00e65bf9d31475b740d7f5fdf9f0/sql/prometheus_fdw--0.1.3--0.1.4.sql -------------------------------------------------------------------------------- /sql/prometheus_fdw--0.1.4--0.1.5.sql: -------------------------------------------------------------------------------- 1 | CREATE FUNCTION basic_setup(base_url text) 2 | RETURNS void 3 | AS 'MODULE_PATHNAME', 'basic_setup' 4 | LANGUAGE C STRICT; 5 | 6 | CREATE FUNCTION create_tables() 7 | RETURNS void 8 | AS 'MODULE_PATHNAME', 'create_tables' 9 | LANGUAGE C STRICT; 10 | 11 | CREATE FUNCTION create_indexes() 12 | RETURNS void 13 | AS 'MODULE_PATHNAME', 'create_indexes' 14 | LANGUAGE C STRICT; 15 | 16 | CREATE FUNCTION create_partitions(retention_period text) 17 | RETURNS void 18 | AS 'MODULE_PATHNAME', 'create_partitions' 19 | LANGUAGE C STRICT; 20 | -------------------------------------------------------------------------------- /sql/prometheus_fdw--0.1.5--0.2.0.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jayko001/prometheus_fdw/d9794a9b89bf00e65bf9d31475b740d7f5fdf9f0/sql/prometheus_fdw--0.1.5--0.2.0.sql -------------------------------------------------------------------------------- /sql/prometheus_fdw--0.2.0--0.2.1.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jayko001/prometheus_fdw/d9794a9b89bf00e65bf9d31475b740d7f5fdf9f0/sql/prometheus_fdw--0.2.0--0.2.1.sql -------------------------------------------------------------------------------- /src/bin/pgrx_embed.rs: -------------------------------------------------------------------------------- 1 | ::pgrx::pgrx_embed!(); 2 | -------------------------------------------------------------------------------- /src/init.rs: -------------------------------------------------------------------------------- 1 | use pgrx::prelude::*; 2 | use std::error::Error; 3 | 4 | #[pg_extern] 5 | fn basic_setup(base_url: &str) -> Result<(), Box> { 6 | let queries = format!( 7 | r#" 8 | -- Enable the extensions 9 | CREATE EXTENSION IF NOT EXISTS prometheus_fdw CASCADE; 10 | CREATE EXTENSION IF NOT EXISTS pg_partman CASCADE; 11 | CREATE EXTENSION IF NOT EXISTS pg_cron CASCADE; 12 | 13 | -- Create the FDW 14 | CREATE FOREIGN DATA WRAPPER prometheus_wrapper 15 | HANDLER prometheus_fdw_handler 16 | VALIDATOR prometheus_fdw_validator; 17 | 18 | -- Configure connection to server 19 | CREATE SERVER my_prometheus_server 20 | FOREIGN DATA WRAPPER prometheus_wrapper 21 | OPTIONS ( 22 | base_url '{}'); 23 | 24 | -- Create FDW table we can query to get metrics 25 | CREATE FOREIGN TABLE metrics ( 26 | metric_name TEXT, 27 | metric_labels JSONB, 28 | metric_time BIGINT, 29 | metric_value FLOAT8 30 | ) 31 | SERVER my_prometheus_server 32 | OPTIONS ( 33 | object 'metrics', 34 | step '{}' 35 | ); 36 | "#, 37 | base_url, "10m" 38 | ); 39 | 40 | let _ = Spi::run(&queries); 41 | Ok(()) 42 | } 43 | 44 | /// Creates the necessary tables for metric tracking. 45 | #[pg_extern] 46 | fn create_tables() -> Result<(), Box> { 47 | let queries = r#" 48 | CREATE TABLE IF NOT EXISTS metric_labels ( 49 | id SERIAL PRIMARY KEY, 50 | name TEXT NOT NULL, 51 | labels jsonb NOT NULL 52 | ); 53 | CREATE TABLE IF NOT EXISTS metric_values ( 54 | label_id INTEGER REFERENCES metric_labels (id), 55 | time TIMESTAMP NOT NULL, 56 | value DOUBLE PRECISION NOT NULL 57 | ) PARTITION BY RANGE (time); 58 | "#; 59 | 60 | let _ = Spi::run(&queries); 61 | Ok(()) 62 | } 63 | 64 | /// Creates indexes to optimize query performance. 65 | #[pg_extern] 66 | fn create_indexes() -> Result<(), Box> { 67 | let queries = r#" 68 | CREATE INDEX idx_metric_labels_name ON metric_labels (name); 69 | CREATE INDEX idx_metric_labels_labels ON metric_labels USING GIN (labels); 70 | CREATE INDEX idx_metric_values_time ON metric_values (time); 71 | CREATE INDEX idx_metric_values_label_id ON metric_values (label_id); 72 | "#; 73 | 74 | let _ = Spi::run(queries); 75 | Ok(()) 76 | } 77 | 78 | /// Sets up partitioning for the metric_values table and configures retention policy. 79 | #[pg_extern] 80 | fn create_partitions(retention_period: &str) -> Result<(), Box> { 81 | let setup_partitioning = r#" 82 | SELECT create_parent('public.metric_values', 'time', 'native', '1 day'); 83 | "#; 84 | 85 | // Execute the partition setup query 86 | let _ = Spi::run(setup_partitioning); 87 | 88 | let setup_retention = format!( 89 | r#" 90 | UPDATE part_config 91 | SET retention = '{}', 92 | retention_keep_table = false, 93 | retention_keep_index = false, 94 | infinite_time_partitions = true 95 | WHERE parent_table = 'public.metric_values'; 96 | "#, 97 | retention_period 98 | ); 99 | 100 | // Execute the retention setup query 101 | let _ = Spi::run(&setup_retention); 102 | Ok(()) 103 | } 104 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | mod init; 2 | 3 | use pgrx::warning; 4 | use pgrx::{pg_sys, prelude::*, JsonB}; 5 | use reqwest::{self, Client}; 6 | use serde_json::Value as JsonValue; 7 | use std::collections::HashMap; 8 | use std::env; 9 | use supabase_wrappers::prelude::*; 10 | use tokio::runtime::Runtime; 11 | pgrx::pg_module_magic!(); 12 | use pgrx::pg_sys::panic::ErrorReport; 13 | use std::time::Duration; 14 | use urlencoding::encode; 15 | 16 | // convert response body text to rows 17 | fn resp_to_rows(obj: &str, resp: &JsonValue, quals: &[Qual]) -> Vec { 18 | let mut result = Vec::new(); 19 | 20 | match obj { 21 | "metrics" => { 22 | if let Some(result_array) = resp["data"]["result"].as_array() { 23 | for result_obj in result_array { 24 | let metric_name_filter = quals 25 | .iter() 26 | .find(|qual| qual.field == "metric_name" && qual.operator == "="); 27 | if let Some(metric_name) = metric_name_filter 28 | .map(|qual| PrometheusFdw::value_to_promql_string(&qual.value)) 29 | { 30 | let metric_labels = result_obj["metric"].clone(); 31 | if let Some(values_array) = result_obj["values"].as_array() { 32 | for value_pair in values_array { 33 | if let (Some(time_str), Some(value_str)) = 34 | (value_pair[0].as_i64(), value_pair[1].as_str()) 35 | { 36 | if let (metric_time, Ok(metric_value)) = 37 | (time_str, value_str.parse::()) 38 | { 39 | let mut row = Row::new(); 40 | row.push( 41 | "metric_name", 42 | Some(Cell::String(metric_name.clone())), 43 | ); 44 | row.push( 45 | "metric_labels", 46 | Some(Cell::Json(JsonB(metric_labels.clone()))), 47 | ); 48 | row.push("metric_time", Some(Cell::I64(metric_time))); 49 | row.push("metric_value", Some(Cell::F64(metric_value))); 50 | result.push(row); 51 | } 52 | } 53 | } 54 | } 55 | } 56 | } 57 | } 58 | } 59 | _ => { 60 | warning!("unsupported object: {}", obj); 61 | } 62 | } 63 | 64 | result 65 | } 66 | 67 | #[wrappers_fdw( 68 | version = "0.2.0", 69 | author = "Jay Kothari", 70 | website = "https://tembo.io", 71 | error_type = "PrometheusFdwError" 72 | )] 73 | 74 | pub(crate) struct PrometheusFdw { 75 | rt: Runtime, 76 | base_url: Option, 77 | username: Option, 78 | password: Option, 79 | bearer_token: Option, 80 | client: Option, 81 | scan_result: Option>, 82 | tgt_cols: Vec, 83 | } 84 | 85 | enum PrometheusFdwError {} 86 | 87 | impl From for ErrorReport { 88 | fn from(_value: PrometheusFdwError) -> Self { 89 | ErrorReport::new(PgSqlErrorCode::ERRCODE_FDW_ERROR, "", "") 90 | } 91 | } 92 | 93 | type PrometheusFdwResult = Result; 94 | 95 | impl PrometheusFdw { 96 | fn value_to_promql_string(value: &supabase_wrappers::interface::Value) -> String { 97 | match value { 98 | supabase_wrappers::interface::Value::Cell(cell) => match cell { 99 | supabase_wrappers::interface::Cell::String(s) => s.clone(), 100 | supabase_wrappers::interface::Cell::I32(i) => i.to_string(), 101 | _ => { 102 | println!("Unsupported cell: {:?}", cell); 103 | String::new() 104 | } 105 | }, 106 | _ => { 107 | println!("Unsupported value: {:?}", value); 108 | String::new() 109 | } 110 | } 111 | } 112 | 113 | fn build_url(&self, obj: &str, options: &HashMap, quals: &[Qual]) -> String { 114 | let step = if let Some(step_value) = options.get("step") { 115 | step_value.to_owned() 116 | } else { 117 | warning!("Using default value of 10m for step"); 118 | let step_value = "10m".to_string(); 119 | step_value 120 | }; 121 | match obj { 122 | "metrics" => { 123 | let metric_name_filter = quals 124 | .iter() 125 | .find(|qual| qual.field == "metric_name" && qual.operator == "="); 126 | let lower_timestamp = quals 127 | .iter() 128 | .find(|qual| qual.field == "metric_time" && qual.operator == ">"); 129 | 130 | let upper_timestamp = quals 131 | .iter() 132 | .find(|qual| qual.field == "metric_time" && qual.operator == "<"); 133 | 134 | if let (Some(metric_name), Some(lower_timestamp), Some(upper_timestamp)) = 135 | (metric_name_filter, lower_timestamp, upper_timestamp) 136 | { 137 | let metric_name = Self::value_to_promql_string(&metric_name.value); 138 | let lower_timestamp = Self::value_to_promql_string(&lower_timestamp.value); 139 | let upper_timestamp = Self::value_to_promql_string(&upper_timestamp.value); 140 | let ret = format!( 141 | "{}/api/v1/query_range?query={}&start={}&end={}&step={}", 142 | self.base_url.as_ref().unwrap(), 143 | encode(&metric_name), 144 | lower_timestamp, 145 | upper_timestamp, 146 | step 147 | ); 148 | ret 149 | } else { 150 | println!("filters not found in quals"); 151 | "".to_string() 152 | } 153 | } 154 | _ => { 155 | println!("Unsupported object: {}", obj); 156 | "".to_string() 157 | } 158 | } 159 | } 160 | } 161 | 162 | impl ForeignDataWrapper for PrometheusFdw { 163 | fn new(server: ForeignServer) -> PrometheusFdwResult { 164 | let mut ret = Self { 165 | rt: create_async_runtime().expect("failed to create async runtime"), 166 | base_url: None, 167 | username: None, 168 | password: None, 169 | bearer_token: None, 170 | client: None, 171 | tgt_cols: Vec::new(), 172 | scan_result: None, 173 | }; 174 | 175 | let base_url = if let Some(prom_url) = server.options.get("base_url") { 176 | prom_url.to_owned() 177 | } else { 178 | warning!("Cannot find prometheus base url in options"); 179 | let prom_url = env::var("PROMETHEUS_BASE_URL").unwrap(); 180 | prom_url 181 | }; 182 | 183 | ret.base_url = Some(base_url); 184 | ret.client = Some( 185 | reqwest::Client::builder() 186 | .timeout(Duration::from_secs(30)) 187 | .build() 188 | .expect("Failed to build client"), 189 | ); 190 | 191 | Ok(ret) 192 | } 193 | 194 | fn begin_scan( 195 | &mut self, 196 | quals: &[Qual], 197 | columns: &[Column], 198 | _sorts: &[Sort], 199 | _limit: &Option, 200 | options: &HashMap, 201 | ) -> PrometheusFdwResult<()> { 202 | let obj = require_option("object", options).expect("invalid option"); 203 | 204 | self.scan_result = None; 205 | self.tgt_cols = columns.to_vec(); 206 | 207 | if let Some(client) = &self.client { 208 | let mut result = Vec::new(); 209 | 210 | if obj == "metrics" { 211 | let url = self.build_url(&obj, options, quals); 212 | let resp; 213 | 214 | if let Some(bearer_token) = &self.bearer_token { 215 | // Create a RequestBuilder and set the bearer token 216 | let request = client.get(&url).bearer_auth(bearer_token); 217 | resp = self.rt.block_on(async { request.send().await }).ok(); 218 | } else if let (Some(username), Some(password)) = (&self.username, &self.password) { 219 | // Create a RequestBuilder with basic auth 220 | let request = client.get(&url).basic_auth(username, Some(password)); 221 | resp = self.rt.block_on(async { request.send().await }).ok(); 222 | } else { 223 | // Send a request without authentication 224 | resp = self 225 | .rt 226 | .block_on(async { client.get(&url).send().await }) 227 | .ok(); 228 | } 229 | 230 | // Assuming resp is of type Result 231 | match resp { 232 | Some(response) => { 233 | let body_result = self.rt.block_on(async { response.text().await }); 234 | match body_result { 235 | Ok(body) => { 236 | // `body` is a String here 237 | let json: JsonValue = serde_json::from_str(&body).unwrap(); 238 | result = resp_to_rows(&obj, &json, &quals); 239 | } 240 | Err(e) => { 241 | warning!("failed to get body: {}", e); 242 | } 243 | } 244 | } 245 | None => { 246 | // Handle the case when resp is None 247 | warning!("No response received"); 248 | } 249 | } 250 | } 251 | 252 | self.scan_result = Some(result); 253 | } 254 | Ok(()) 255 | } 256 | 257 | fn iter_scan(&mut self, row: &mut Row) -> PrometheusFdwResult> { 258 | if let Some(ref mut result) = self.scan_result { 259 | if !result.is_empty() { 260 | let scanned = result.drain(0..1).last().map(|src_row| { 261 | row.replace_with(src_row); 262 | }); 263 | return Ok(scanned); 264 | } 265 | } 266 | Ok(None) 267 | } 268 | 269 | fn end_scan(&mut self) -> PrometheusFdwResult<()> { 270 | self.scan_result.take(); 271 | Ok(()) 272 | } 273 | 274 | fn validator( 275 | options: Vec>, 276 | catalog: Option, 277 | ) -> PrometheusFdwResult<()> { 278 | if let Some(oid) = catalog { 279 | if oid == FOREIGN_TABLE_RELATION_ID { 280 | let _ = check_options_contain(&options, "object"); 281 | } 282 | } 283 | Ok(()) 284 | } 285 | } 286 | --------------------------------------------------------------------------------