├── .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 | [](https://cloud.tembo.io/sign-up)
9 |
10 | [](https://join.slack.com/t/tembocommunity/shared_invite/zt-20dtnhcmo-pLNV7_Aobi50TdTLpfQ~EQ)
11 | [](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 | [](https://join.slack.com/t/tembocommunity/shared_invite/zt-20dtnhcmo-pLNV7_Aobi50TdTLpfQ~EQ)
5 | [](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