diff --git a/.dockerignore b/.dockerignore index 09301dc..0280210 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,4 @@ # flyctl launch added from .gitignore target fly.toml +.envrc diff --git a/.github/workflows/hurl_tests.yml b/.github/workflows/hurl_tests.yml index b2e395f..273d3e5 100644 --- a/.github/workflows/hurl_tests.yml +++ b/.github/workflows/hurl_tests.yml @@ -9,6 +9,29 @@ on: jobs: tests: runs-on: ubuntu-latest + env: + DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres + SQLX_OFFLINE: 1 + PORKBUN_API_KEY: FAKE + PORKBUN_SECRET_API_KEY: FAKE + CRON_DISABLED: true + services: + # Label used to access the service container + postgres: + # Docker Hub image + image: postgres + # Provide the password for postgres + env: + POSTGRES_PASSWORD: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps tcp port 5432 on service container to the host + - 5432:5432 steps: - name: Checkout uses: actions/checkout@v4 @@ -26,4 +49,4 @@ jobs: with: command: hurl hurl/*.hurl start: cargo run - wait-on: "http://localhost:3001" + wait-on: "http://localhost:3000" diff --git a/.gitignore b/.gitignore index ea8c4bf..46b5d68 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +.envrc diff --git a/.sqlx/query-0115c52b6c77a377e6585308ba0df3daaaf7d30a19a37b28abcae7efbe9b4ca7.json b/.sqlx/query-0115c52b6c77a377e6585308ba0df3daaaf7d30a19a37b28abcae7efbe9b4ca7.json new file mode 100644 index 0000000..6e5e69d --- /dev/null +++ b/.sqlx/query-0115c52b6c77a377e6585308ba0df3daaaf7d30a19a37b28abcae7efbe9b4ca7.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT pg_advisory_unlock($1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "pg_advisory_unlock", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + null + ] + }, + "hash": "0115c52b6c77a377e6585308ba0df3daaaf7d30a19a37b28abcae7efbe9b4ca7" +} diff --git a/.sqlx/query-14ed731d1079774973f5529b94abd775446017b2514434647902d9bfa7c27135.json b/.sqlx/query-14ed731d1079774973f5529b94abd775446017b2514434647902d9bfa7c27135.json new file mode 100644 index 0000000..ac87d0f --- /dev/null +++ b/.sqlx/query-14ed731d1079774973f5529b94abd775446017b2514434647902d9bfa7c27135.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO PorkbunDomains\n (porkbun_domain_id, auto_renew, purchase_date, domain, expire_date, not_local, security_lock, status, tld, whois_privacy)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)\n ON CONFLICT (domain)\n DO UPDATE SET\n auto_renew = excluded.auto_renew,\n purchase_date = excluded.purchase_date,\n expire_date = excluded.expire_date,\n not_local = excluded.not_local,\n security_lock = excluded.security_lock,\n status = excluded.status,\n tld = excluded.tld,\n whois_privacy = excluded.whois_privacy\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Bool", + "Timestamptz", + "Text", + "Timestamptz", + "Bool", + "Bool", + "Text", + "Text", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "14ed731d1079774973f5529b94abd775446017b2514434647902d9bfa7c27135" +} diff --git a/.sqlx/query-b895561dd1cdc3b47ea1f3c353f4d563bfbf45ab7892fd9e481f3f392c3cef05.json b/.sqlx/query-b895561dd1cdc3b47ea1f3c353f4d563bfbf45ab7892fd9e481f3f392c3cef05.json new file mode 100644 index 0000000..842305d --- /dev/null +++ b/.sqlx/query-b895561dd1cdc3b47ea1f3c353f4d563bfbf45ab7892fd9e481f3f392c3cef05.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT pg_advisory_lock($1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "pg_advisory_lock", + "type_info": "Void" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + null + ] + }, + "hash": "b895561dd1cdc3b47ea1f3c353f4d563bfbf45ab7892fd9e481f3f392c3cef05" +} diff --git a/Cargo.lock b/Cargo.lock index 380e62a..2fa6883 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,54 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.2" @@ -26,6 +74,27 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.80" @@ -38,6 +107,28 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b3d0060af21e8d11a926981cc00c6c1541aa91dd64b9f881985c3da1094425f" +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + [[package]] name = "async-trait" version = "0.1.77" @@ -46,7 +137,16 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", ] [[package]] @@ -55,6 +155,34 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "axum" version = "0.7.4" @@ -62,7 +190,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" dependencies = [ "async-trait", - "axum-core", + "axum-core 0.4.3", "bytes", "futures-util", "http 1.1.0", @@ -89,6 +217,23 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "axum-core" version = "0.4.3" @@ -119,7 +264,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -137,12 +282,33 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "backtrace-ext" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" +dependencies = [ + "backtrace", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64" version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bitflags" version = "1.3.2" @@ -154,6 +320,18 @@ name = "bitflags" version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] [[package]] name = "bstr" @@ -181,6 +359,12 @@ version = "3.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.5.0" @@ -231,6 +415,54 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.4", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "cja" +version = "0.0.0" +source = "git+https://github.com/coreyja/coreyja.com?branch=main#196fd4499750acfcb60d61017326c92e04d8a649" +dependencies = [ + "async-trait", + "axum 0.7.4", + "base64 0.21.7", + "chrono", + "http 1.1.0", + "miette", + "serde", + "serde_json", + "sqlx", + "thiserror", + "tokio", + "tower", + "tower-cookies", + "tower-http", + "tower-service", + "tracing", + "tracing-common", + "uuid", +] + [[package]] name = "clru" version = "0.6.1" @@ -264,6 +496,30 @@ dependencies = [ "tracing-error", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cookie" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd91cf61412820176e137621345ee43b3f4423e589e7ae4e50d601d93e35ef8" +dependencies = [ + "aes-gcm", + "base64 0.21.7", + "hkdf", + "hmac", + "percent-encoding", + "rand", + "sha2", + "subtle", + "time", + "version_check", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -280,6 +536,30 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.4.0" @@ -298,12 +578,54 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "debugid" version = "0.8.0" @@ -314,6 +636,17 @@ dependencies = [ "uuid", ] +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + [[package]] name = "deranged" version = "0.3.11" @@ -323,31 +656,58 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + [[package]] name = "domains" version = "0.1.0" dependencies = [ "async-trait", - "axum", + "axum 0.7.4", "axum-macros", + "chrono", + "cja", "color-eyre", + "futures", "maud", - "opentelemetry", - "opentelemetry-otlp", - "opentelemetry_sdk", - "sentry", - "sentry-tower", + "miette", + "opentelemetry 0.22.0", + "opentelemetry-otlp 0.15.0", + "opentelemetry_sdk 0.22.1", + "reqwest", + "sentry 0.32.2", + "sentry-tower 0.32.2", "serde", "serde_json", + "sqlx", "tokio", + "tower", + "tower-cookies", "tower-http", "tracing", - "tracing-opentelemetry", + "tracing-opentelemetry 0.23.0", "tracing-subscriber", - "tracing-tree", + "tracing-tree 0.3.0", + "uuid", "vergen", ] +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "dunce" version = "1.0.4" @@ -359,6 +719,9 @@ name = "either" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +dependencies = [ + "serde", +] [[package]] name = "encoding_rs" @@ -385,6 +748,23 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "eyre" version = "0.6.12" @@ -422,6 +802,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + [[package]] name = "flate2" version = "1.0.28" @@ -433,11 +819,22 @@ dependencies = [ ] [[package]] -name = "fnv" -version = "1.0.7" +name = "flume" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -447,6 +844,21 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.30" @@ -454,6 +866,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -473,6 +886,17 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + [[package]] name = "futures-io" version = "0.3.30" @@ -487,7 +911,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -508,6 +932,7 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ + "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -519,6 +944,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.12" @@ -530,6 +965,16 @@ dependencies = [ "wasi", ] +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + [[package]] name = "gimli" version = "0.28.1" @@ -754,7 +1199,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebe47d8c0887f82355e2e9e16b6cecaa4d5e5346a7a474ca78ff94de1db35a5b" dependencies = [ "gix-hash", - "hashbrown", + "hashbrown 0.14.3", "parking_lot", ] @@ -802,7 +1247,7 @@ checksum = "d75e7ab728059f595f6ddc1ad8771b8d6a231971ae493d9d5948ecad366ee8bb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -1054,7 +1499,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", @@ -1073,24 +1518,46 @@ dependencies = [ "futures-sink", "futures-util", "http 1.1.0", - "indexmap", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", "tracing", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.3", +] [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +dependencies = [ + "unicode-segmentation", +] [[package]] name = "hermit-abi" @@ -1104,6 +1571,24 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "home" version = "0.5.9" @@ -1250,6 +1735,18 @@ dependencies = [ "tokio-rustls", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.28", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-util" version = "0.1.3" @@ -1266,6 +1763,29 @@ dependencies = [ "tokio", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "idna" version = "0.5.0" @@ -1282,6 +1802,16 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + [[package]] name = "indexmap" version = "2.2.5" @@ -1289,7 +1819,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", ] [[package]] @@ -1298,6 +1837,23 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_ci" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" + [[package]] name = "itertools" version = "0.10.5" @@ -1307,6 +1863,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.10" @@ -1327,6 +1892,9 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] [[package]] name = "libc" @@ -1334,6 +1902,23 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linux-raw-sys" version = "0.4.13" @@ -1394,7 +1979,17 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.52", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", ] [[package]] @@ -1412,12 +2007,50 @@ dependencies = [ "libc", ] +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "backtrace", + "backtrace-ext", + "is-terminal", + "miette-derive", + "once_cell", + "owo-colors", + "supports-color", + "supports-hyperlinks", + "supports-unicode", + "terminal_size", + "textwrap", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.2" @@ -1438,6 +2071,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1457,12 +2100,49 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.18" @@ -1470,6 +2150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1506,12 +2187,28 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk 0.19.0", +] + [[package]] name = "opentelemetry" version = "0.22.0" @@ -1527,6 +2224,19 @@ dependencies = [ "urlencoding", ] +[[package]] +name = "opentelemetry-http" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" +dependencies = [ + "async-trait", + "bytes", + "http 0.2.12", + "opentelemetry_api", + "reqwest", +] + [[package]] name = "opentelemetry-http" version = "0.11.0" @@ -1536,8 +2246,26 @@ dependencies = [ "async-trait", "bytes", "http 0.2.12", - "opentelemetry", + "opentelemetry 0.22.0", + "reqwest", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8af72d59a4484654ea8eb183fea5ae4eb6a41d7ac3e3bae5f4d2a282a3a7d3ca" +dependencies = [ + "async-trait", + "futures", + "futures-util", + "http 0.2.12", + "opentelemetry 0.19.0", + "opentelemetry-http 0.8.0", + "opentelemetry-proto 0.2.0", + "prost 0.11.9", "reqwest", + "thiserror", ] [[package]] @@ -1549,26 +2277,39 @@ dependencies = [ "async-trait", "futures-core", "http 0.2.12", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-proto", + "opentelemetry 0.22.0", + "opentelemetry-http 0.11.0", + "opentelemetry-proto 0.5.0", "opentelemetry-semantic-conventions", - "opentelemetry_sdk", - "prost", + "opentelemetry_sdk 0.22.1", + "prost 0.12.3", "reqwest", "thiserror", ] +[[package]] +name = "opentelemetry-proto" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "045f8eea8c0fa19f7d48e7bc3128a39c2e5c533d5c61298c548dfefc1064474c" +dependencies = [ + "futures", + "futures-util", + "opentelemetry 0.19.0", + "prost 0.11.9", + "tonic 0.8.3", +] + [[package]] name = "opentelemetry-proto" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a8fddc9b68f5b80dae9d6f510b88e02396f006ad48cac349411fbecc80caae4" dependencies = [ - "opentelemetry", - "opentelemetry_sdk", - "prost", - "tonic", + "opentelemetry 0.22.0", + "opentelemetry_sdk 0.22.1", + "prost 0.12.3", + "tonic 0.11.0", ] [[package]] @@ -1577,21 +2318,37 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9ab5bd6c42fb9349dcf28af2ba9a0667f697f9bdcca045d39f2cec5543e2910" +[[package]] +name = "opentelemetry_api" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", +] + [[package]] name = "opentelemetry_sdk" -version = "0.22.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e90c7113be649e31e9a0f8b5ee24ed7a16923b322c3c5ab6367469c049d6b7e" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" dependencies = [ "async-trait", "crossbeam-channel", + "dashmap", + "fnv", "futures-channel", "futures-executor", "futures-util", - "glob", "once_cell", - "opentelemetry", - "ordered-float", + "opentelemetry_api", "percent-encoding", "rand", "thiserror", @@ -1600,7 +2357,29 @@ dependencies = [ ] [[package]] -name = "ordered-float" +name = "opentelemetry_sdk" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e90c7113be649e31e9a0f8b5ee24ed7a16923b322c3c5ab6367469c049d6b7e" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "once_cell", + "opentelemetry 0.22.0", + "ordered-float", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "ordered-float" version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" @@ -1654,6 +2433,21 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -1677,7 +2471,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -1692,6 +2486,45 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1742,6 +2575,16 @@ version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "744a264d26b88a6a7e37cbad97953fa233b94d585236310bcbc88474b4092d79" +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive 0.11.9", +] + [[package]] name = "prost" version = "0.12.3" @@ -1749,7 +2592,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.12.3", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -1759,10 +2615,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" dependencies = [ "anyhow", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -1863,7 +2719,7 @@ version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ - "base64", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -1909,11 +2765,31 @@ dependencies = [ "cfg-if", "getrandom", "libc", - "spin", + "spin 0.9.8", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -1986,7 +2862,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64", + "base64 0.21.7", ] [[package]] @@ -2094,6 +2970,26 @@ dependencies = [ "serde", ] +[[package]] +name = "sentry" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce4b57f1b521f674df7a1d200be8ff5d74e3712020ee25b553146657b5377d5" +dependencies = [ + "httpdate", + "reqwest", + "rustls 0.21.10", + "sentry-backtrace 0.31.8", + "sentry-contexts 0.31.8", + "sentry-core 0.31.8", + "sentry-panic 0.31.8", + "sentry-tower 0.31.8", + "sentry-tracing 0.31.8", + "tokio", + "ureq", + "webpki-roots 0.25.4", +] + [[package]] name = "sentry" version = "0.32.2" @@ -2103,17 +2999,29 @@ dependencies = [ "httpdate", "reqwest", "rustls 0.21.10", - "sentry-backtrace", - "sentry-contexts", - "sentry-core", - "sentry-panic", - "sentry-tower", - "sentry-tracing", + "sentry-backtrace 0.32.2", + "sentry-contexts 0.32.2", + "sentry-core 0.32.2", + "sentry-panic 0.32.2", + "sentry-tower 0.32.2", + "sentry-tracing 0.32.2", "tokio", "ureq", "webpki-roots 0.25.4", ] +[[package]] +name = "sentry-backtrace" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cc8d4e04a73de8f718dc703943666d03f25d3e9e4d0fb271ca0b8c76dfa00e" +dependencies = [ + "backtrace", + "once_cell", + "regex", + "sentry-core 0.31.8", +] + [[package]] name = "sentry-backtrace" version = "0.32.2" @@ -2123,7 +3031,21 @@ dependencies = [ "backtrace", "once_cell", "regex", - "sentry-core", + "sentry-core 0.32.2", +] + +[[package]] +name = "sentry-contexts" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6436c1bad22cdeb02179ea8ef116ffc217797c028927def303bc593d9320c0d1" +dependencies = [ + "hostname", + "libc", + "os_info", + "rustc_version", + "sentry-core 0.31.8", + "uname", ] [[package]] @@ -2136,10 +3058,23 @@ dependencies = [ "libc", "os_info", "rustc_version", - "sentry-core", + "sentry-core 0.32.2", "uname", ] +[[package]] +name = "sentry-core" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901f761681f97db3db836ef9e094acdd8756c40215326c194201941947164ef1" +dependencies = [ + "once_cell", + "rand", + "sentry-types 0.31.8", + "serde", + "serde_json", +] + [[package]] name = "sentry-core" version = "0.32.2" @@ -2148,19 +3083,40 @@ checksum = "b1189f68d7e7e102ef7171adf75f83a59607fafd1a5eecc9dc06c026ff3bdec4" dependencies = [ "once_cell", "rand", - "sentry-types", + "sentry-types 0.32.2", "serde", "serde_json", ] +[[package]] +name = "sentry-panic" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74fbf1c163f8b6a9d05912e1b272afa27c652e8b47ea60cb9a57ad5e481eea99" +dependencies = [ + "sentry-backtrace 0.31.8", + "sentry-core 0.31.8", +] + [[package]] name = "sentry-panic" version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1c18d0b5fba195a4950f2f4c31023725c76f00aabb5840b7950479ece21b5ca" dependencies = [ - "sentry-backtrace", - "sentry-core", + "sentry-backtrace 0.32.2", + "sentry-core 0.32.2", +] + +[[package]] +name = "sentry-tower" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e782e369edac4adfc5bf528b27577270bc3e7023c388ebad9db08e1d56b30b" +dependencies = [ + "sentry-core 0.31.8", + "tower-layer", + "tower-service", ] [[package]] @@ -2171,24 +3127,53 @@ checksum = "d87dfe009138dc515009842619b562e03b2b3f926a91318ec7ae23d09435f8b4" dependencies = [ "http 1.1.0", "pin-project", - "sentry-core", + "sentry-core 0.32.2", "tower-layer", "tower-service", "url", ] +[[package]] +name = "sentry-tracing" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82eabcab0a047040befd44599a1da73d3adb228ff53b5ed9795ae04535577704" +dependencies = [ + "sentry-backtrace 0.31.8", + "sentry-core 0.31.8", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "sentry-tracing" version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3012699a9957d7f97047fd75d116e22d120668327db6e7c59824582e16e791b2" dependencies = [ - "sentry-backtrace", - "sentry-core", + "sentry-backtrace 0.32.2", + "sentry-core 0.32.2", "tracing-core", "tracing-subscriber", ] +[[package]] +name = "sentry-types" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da956cca56e0101998c8688bc65ce1a96f00673a0e58e663664023d4c7911e82" +dependencies = [ + "debugid", + "hex", + "rand", + "serde", + "serde_json", + "thiserror", + "time", + "url", + "uuid", +] + [[package]] name = "sentry-types" version = "0.32.2" @@ -2223,7 +3208,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -2238,97 +3223,420 @@ dependencies = [ ] [[package]] -name = "serde_path_to_error" -version = "0.1.15" +name = "serde_path_to_error" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" +dependencies = [ + "itertools 0.12.1", + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +dependencies = [ + "ahash", + "atoi", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashlink", + "hex", + "indexmap 2.2.5", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rustls 0.21.10", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlformat", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid", + "webpki-roots 0.25.4", +] + +[[package]] +name = "sqlx-macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +dependencies = [ + "dotenvy", + "either", + "heck", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 1.0.109", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.4.2", + "byteorder", + "bytes", + "chrono", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand", + "rsa", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "uuid", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.4.2", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand", "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "uuid", + "whoami", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "sqlx-sqlite" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", "serde", + "sqlx-core", + "tracing", + "url", + "urlencoding", + "uuid", ] [[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - -[[package]] -name = "sharded-slab" -version = "0.1.7" +name = "stringprep" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ - "lazy_static", + "finl_unicode", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "signal-hook" -version = "0.3.17" +name = "subtle" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" -dependencies = [ - "libc", - "signal-hook-registry", -] +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] -name = "signal-hook-registry" -version = "1.4.1" +name = "supports-color" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89" dependencies = [ - "libc", + "is-terminal", + "is_ci", ] [[package]] -name = "slab" -version = "0.4.9" +name = "supports-hyperlinks" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "f84231692eb0d4d41e4cdd0cabfdd2e6cd9e255e65f80c9aa7c98dd502b4233d" dependencies = [ - "autocfg", + "is-terminal", ] [[package]] -name = "smallvec" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" - -[[package]] -name = "socket2" -version = "0.5.6" +name = "supports-unicode" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "f850c19edd184a205e883199a261ed44471c81e39bd95b1357f5febbef00e77a" dependencies = [ - "libc", - "windows-sys 0.52.0", + "is-terminal", ] [[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "subtle" -version = "2.5.0" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] name = "syn" @@ -2380,6 +3688,27 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "terminal_size" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "textwrap" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + [[package]] name = "thiserror" version = "1.0.57" @@ -2397,7 +3726,7 @@ checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -2477,6 +3806,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.2.0" @@ -2485,7 +3824,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", ] [[package]] @@ -2523,6 +3862,38 @@ dependencies = [ "tracing", ] +[[package]] +name = "tonic" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.6.20", + "base64 0.13.1", + "bytes", + "futures-core", + "futures-util", + "h2 0.3.24", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost 0.11.9", + "prost-derive 0.11.9", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + [[package]] name = "tonic" version = "0.11.0" @@ -2530,13 +3901,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" dependencies = [ "async-trait", - "base64", + "base64 0.21.7", "bytes", "http 0.2.12", "http-body 0.4.6", "percent-encoding", "pin-project", - "prost", + "prost 0.12.3", "tokio", "tokio-stream", "tower-layer", @@ -2552,14 +3923,35 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "indexmap 1.9.3", "pin-project", "pin-project-lite", + "rand", + "slab", "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", ] +[[package]] +name = "tower-cookies" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fd0118512cf0b3768f7fcccf0bef1ae41d68f2b45edc1e77432b36c97c56c6d" +dependencies = [ + "async-trait", + "axum-core 0.4.3", + "cookie", + "futures-util", + "http 1.1.0", + "parking_lot", + "pin-project-lite", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-http" version = "0.5.2" @@ -2609,7 +4001,23 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", +] + +[[package]] +name = "tracing-common" +version = "0.1.0" +source = "git+https://github.com/coreyja/coreyja.com?branch=main#196fd4499750acfcb60d61017326c92e04d8a649" +dependencies = [ + "miette", + "opentelemetry 0.19.0", + "opentelemetry-otlp 0.12.0", + "sentry 0.31.8", + "sentry-tracing 0.31.8", + "tracing", + "tracing-opentelemetry 0.19.0", + "tracing-subscriber", + "tracing-tree 0.2.5", ] [[package]] @@ -2632,6 +4040,27 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -2643,6 +4072,20 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" +dependencies = [ + "once_cell", + "opentelemetry 0.19.0", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + [[package]] name = "tracing-opentelemetry" version = "0.23.0" @@ -2651,12 +4094,12 @@ checksum = "a9be14ba1bbe4ab79e9229f7f89fab8d120b865859f10527f31c033e599d2284" dependencies = [ "js-sys", "once_cell", - "opentelemetry", - "opentelemetry_sdk", + "opentelemetry 0.22.0", + "opentelemetry_sdk 0.22.1", "smallvec", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", "tracing-subscriber", "web-time", ] @@ -2676,7 +4119,19 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", +] + +[[package]] +name = "tracing-tree" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" +dependencies = [ + "nu-ansi-term 0.46.0", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", ] [[package]] @@ -2687,7 +4142,7 @@ checksum = "65139ecd2c3f6484c3b99bc01c77afe21e95473630747c7aca525e78b0666675" dependencies = [ "nu-ansi-term 0.49.0", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", "tracing-subscriber", ] @@ -2697,6 +4152,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + [[package]] name = "uname" version = "0.1.1" @@ -2724,6 +4185,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + [[package]] name = "unicode-normalization" version = "0.1.23" @@ -2733,6 +4200,34 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "untrusted" version = "0.9.0" @@ -2745,7 +4240,7 @@ version = "2.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" dependencies = [ - "base64", + "base64 0.21.7", "log", "once_cell", "rustls 0.22.2", @@ -2779,6 +4274,7 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" dependencies = [ + "getrandom", "serde", ] @@ -2788,6 +4284,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vergen" version = "8.3.1" @@ -2835,6 +4337,12 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + [[package]] name = "wasm-bindgen" version = "0.2.92" @@ -2856,7 +4364,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.52", "wasm-bindgen-shared", ] @@ -2890,7 +4398,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.52", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2936,6 +4444,16 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall", + "wasite", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2967,6 +4485,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.4", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -3118,6 +4645,26 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + [[package]] name = "zeroize" version = "1.7.0" diff --git a/Cargo.toml b/Cargo.toml index 5364763..9bf30ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,19 @@ async-trait = "0.1.60" axum = "0.7.4" axum-macros = "0.4.0" tower-http = { version = "0.5.2", features = ["trace"] } +tower = "0.4.13" +reqwest = { version = "0.11.12", features = [ + "json", + "rustls-tls", +], default-features = false } + +cja = { version = "0.0.0", git = "https://github.com/coreyja/coreyja.com", branch = "main" } +sqlx = "0.7.3" +uuid = { version = "1.6.1", features = ["v4"] } +tower-cookies = { version = "0.10.0", features = ["private", "signed"] } +miette = { version = "5.7" } +futures = "0.3.30" +chrono = { version = "0.4.23", default-features = false, features = ["serde"] } [build-dependencies] vergen = { version = "8.3.1", features = [ diff --git a/Dockerfile b/Dockerfile index 3916117..07e8753 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,6 +22,6 @@ WORKDIR /app COPY --from=builder /app/target/release/domains . -EXPOSE 3001 +EXPOSE 3000 ENTRYPOINT ["./domains"] diff --git a/build.rs b/build.rs index 41fe109..571dd2d 100644 --- a/build.rs +++ b/build.rs @@ -3,6 +3,8 @@ use std::error::Error; use vergen::EmitBuilder; fn main() -> Result<(), Box> { + println!("cargo:rerun-if-changed=migrations"); + EmitBuilder::builder() .all_build() .all_cargo() diff --git a/fly.toml b/fly.toml index 0989df2..065f1d1 100644 --- a/fly.toml +++ b/fly.toml @@ -7,7 +7,7 @@ app = 'coreyja-domains' primary_region = 'ewr' [http_service] - internal_port = 3001 + internal_port = 3000 force_https = true auto_stop_machines = true auto_start_machines = true diff --git a/hurl/real_domain.hurl b/hurl/real_domain.hurl index 2262de0..23c95e6 100644 --- a/hurl/real_domain.hurl +++ b/hurl/real_domain.hurl @@ -1,4 +1,4 @@ -GET http://localhost:3001 +GET http://localhost:3000 HOST: redirects.coreyja.domains HTTP 200 [Asserts] diff --git a/hurl/redirects.hurl b/hurl/redirects.hurl index 59c4502..fbde95b 100644 --- a/hurl/redirects.hurl +++ b/hurl/redirects.hurl @@ -1,22 +1,22 @@ -GET http://localhost:3001 +GET http://localhost:3000 HOST: coreyja.tv HTTP 303 [Asserts] header "Location" == "https://coreyja.com/videos" -GET http://localhost:3001 +GET http://localhost:3000 HOST: coreyja.blog HTTP 303 [Asserts] header "Location" == "https://coreyja.com/posts" -GET http://localhost:3001 +GET http://localhost:3000 HOST: coreyja.club HTTP 303 [Asserts] header "Location" == "https://discord.gg/CpAPpXrgUq" -GET http://localhost:3001 +GET http://localhost:3000 HOST: coreyja.tube HTTP 303 [Asserts] diff --git a/migrations/20240316161307_CreateJobs.sql b/migrations/20240316161307_CreateJobs.sql new file mode 100644 index 0000000..0f91381 --- /dev/null +++ b/migrations/20240316161307_CreateJobs.sql @@ -0,0 +1,14 @@ +-- Add migration script here +-- Add migration script here +CREATE TABLE + Jobs ( + job_id UUID PRIMARY KEY NOT NULL, + name TEXT NOT NULL, + payload JSONB NOT NULL, + priority INT NOT NULL, + run_at TIMESTAMPTZ NOT NULL DEFAULT NOW (), + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW (), + locked_at TIMESTAMPTZ, + locked_by TEXT, + context TEXT NOT NULL + ); diff --git a/migrations/20240316161322_CreateCrons.sql b/migrations/20240316161322_CreateCrons.sql new file mode 100644 index 0000000..cd73f86 --- /dev/null +++ b/migrations/20240316161322_CreateCrons.sql @@ -0,0 +1,17 @@ +-- Add migration script here +CREATE TABLE + Crons ( + cron_id UUID PRIMARY KEY, + name TEXT NOT NULL, + last_run_at TIMESTAMP + WITH + TIME ZONE NOT NULL, + created_at TIMESTAMP + WITH + TIME ZONE NOT NULL, + updated_at TIMESTAMP + WITH + TIME ZONE NOT NULL + ); + +CREATE UNIQUE INDEX idx_crons_name ON Crons (name); diff --git a/migrations/20240316232103_AddDomains.down.sql b/migrations/20240316232103_AddDomains.down.sql new file mode 100644 index 0000000..e07b74d --- /dev/null +++ b/migrations/20240316232103_AddDomains.down.sql @@ -0,0 +1,2 @@ +-- Add migration script here +DROP TABLE PorkbunDomains; diff --git a/migrations/20240316232103_AddDomains.up.sql b/migrations/20240316232103_AddDomains.up.sql new file mode 100644 index 0000000..52c48b5 --- /dev/null +++ b/migrations/20240316232103_AddDomains.up.sql @@ -0,0 +1,18 @@ +-- Add migration script here +CREATE TABLE + PorkbunDomains ( + porkbun_domain_id UUID PRIMARY KEY NOT NULL, + auto_renew BOOLEAN NOT NULL, + purchase_date TIMESTAMPTZ NOT NULL, + domain TEXT NOT NULL, + expire_date TIMESTAMPTZ NOT NULL, + not_local BOOLEAN NOT NULL, + security_lock BOOLEAN NOT NULL, + status TEXT, + tld TEXT NOT NULL, + whois_privacy BOOLEAN NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW (), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW () + ); + +CREATE UNIQUE INDEX idx_porkbun_domains_on_domain ON PorkbunDomains (domain); diff --git a/src/apis/mod.rs b/src/apis/mod.rs new file mode 100644 index 0000000..a39b179 --- /dev/null +++ b/src/apis/mod.rs @@ -0,0 +1 @@ +pub mod porkbun; diff --git a/src/apis/porkbun.rs b/src/apis/porkbun.rs new file mode 100644 index 0000000..09bc38c --- /dev/null +++ b/src/apis/porkbun.rs @@ -0,0 +1,59 @@ +use serde::{Deserialize, Serialize}; + +pub struct Config { + api_key: String, + secret_api_key: String, +} + +impl Config { + pub fn from_env() -> color_eyre::Result { + Ok(Self { + api_key: std::env::var("PORKBUN_API_KEY")?, + secret_api_key: std::env::var("PORKBUN_SECRET_API_KEY")?, + }) + } +} + +#[derive(Debug, Serialize)] +struct Auth { + apikey: String, + secretapikey: String, +} + +impl Auth { + pub fn from_config(config: &Config) -> Self { + Self { + apikey: config.api_key.clone(), + secretapikey: config.secret_api_key.clone(), + } + } +} + +#[derive(Serialize, Deserialize)] +pub struct FetchDomainsResponse { + pub domains: Vec, +} +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PorkbunDomain { + pub auto_renew: String, + pub create_date: String, + pub domain: String, + pub expire_date: String, + pub not_local: i32, + pub security_lock: String, + pub status: Option, + pub tld: String, + pub whois_privacy: String, +} + +pub async fn fetch_domains(config: Config) -> color_eyre::Result { + let client = reqwest::Client::new(); + let response = client + .post("https://porkbun.com/api/json/v3/domain/listAll") + .json(&Auth::from_config(&config)) + .send() + .await?; + + Ok(response.json().await?) +} diff --git a/src/cron.rs b/src/cron.rs new file mode 100644 index 0000000..a5e2ba2 --- /dev/null +++ b/src/cron.rs @@ -0,0 +1,19 @@ +use std::time::Duration; + +use cja::cron::{CronRegistry, Worker}; + +use crate::{jobs::refresh_domains::RefreshDomains, AppState}; + +fn cron_registry() -> CronRegistry { + let mut registry = CronRegistry::new(); + + registry.register_job(RefreshDomains, Duration::from_secs(60 * 60)); + + registry +} + +pub(crate) async fn run_cron(app_state: AppState) -> miette::Result<()> { + Worker::new(app_state, cron_registry()).run().await?; + + Ok(()) +} diff --git a/src/jobs.rs b/src/jobs.rs new file mode 100644 index 0000000..0f9e257 --- /dev/null +++ b/src/jobs.rs @@ -0,0 +1,5 @@ +use crate::{jobs::refresh_domains::RefreshDomains, AppState}; + +pub mod refresh_domains; + +cja::impl_job_registry!(AppState, RefreshDomains); diff --git a/src/jobs/refresh_domains.rs b/src/jobs/refresh_domains.rs new file mode 100644 index 0000000..4689557 --- /dev/null +++ b/src/jobs/refresh_domains.rs @@ -0,0 +1,53 @@ +use chrono::NaiveDateTime; +use cja::jobs::Job; +use miette::IntoDiagnostic; + +use crate::AppState; + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct RefreshDomains; + +#[async_trait::async_trait] +impl Job for RefreshDomains { + const NAME: &'static str = "RefreshDomains"; + + async fn run(&self, app_state: AppState) -> miette::Result<()> { + let config = + crate::apis::porkbun::Config::from_env().expect("Failed to get porkbun config"); + + let resp = crate::apis::porkbun::fetch_domains(config).await.unwrap(); + + let format = "%Y-%m-%d %H:%M:%S"; + + for domain in resp.domains { + sqlx::query!(" + INSERT INTO PorkbunDomains + (porkbun_domain_id, auto_renew, purchase_date, domain, expire_date, not_local, security_lock, status, tld, whois_privacy) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) + ON CONFLICT (domain) + DO UPDATE SET + auto_renew = excluded.auto_renew, + purchase_date = excluded.purchase_date, + expire_date = excluded.expire_date, + not_local = excluded.not_local, + security_lock = excluded.security_lock, + status = excluded.status, + tld = excluded.tld, + whois_privacy = excluded.whois_privacy + ", + uuid::Uuid::new_v4(), + domain.auto_renew == "1", + NaiveDateTime::parse_from_str(&domain.create_date, &format).into_diagnostic()?.and_utc(), + domain.domain, + NaiveDateTime::parse_from_str(&domain.expire_date, &format).into_diagnostic()?.and_utc(), + domain.not_local == 1, + domain.security_lock == "1", + domain.status, + domain.tld, + domain.whois_privacy == "1" + ).execute(&app_state.db).await.into_diagnostic()?; + } + + Ok(()) + } +} diff --git a/src/main.rs b/src/main.rs index e3cc10a..614784a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,20 @@ use axum::{ - extract::Host, + extract::{Host, Request}, response::{IntoResponse, Redirect, Response}, + routing::get, }; -use color_eyre::eyre::Context; -use setup::{setup_sentry, setup_tracing}; -use tokio::net::TcpListener; -use tower_http::trace::TraceLayer; +use cja::{ + app_state::AppState as _, + server::run_server, + setup::{setup_sentry, setup_tracing}, +}; +use miette::{Context, IntoDiagnostic}; +use sqlx::{postgres::PgPoolOptions, PgPool}; +use tracing::info; -mod server_tracing; -mod setup; +mod apis; +mod cron; +mod jobs; fn main() -> color_eyre::Result<()> { let _sentry_guard = setup_sentry(); @@ -21,44 +27,134 @@ fn main() -> color_eyre::Result<()> { } async fn _main() -> color_eyre::Result<()> { - setup_tracing()?; + setup_tracing("domains") + .wrap_err("Failed to setup tracing") + .unwrap(); + + let app_state = AppState::from_env().await?; + + cja::sqlx::migrate!().run(app_state.db()).await?; + + info!("Spawning Tasks"); + let mut futures = vec![ + tokio::spawn(run_server(routes(app_state.clone()))), + tokio::spawn(cja::jobs::worker::job_worker(app_state.clone(), jobs::Jobs)), + ]; + if std::env::var("CRON_DISABLED").unwrap_or_else(|_| "true".to_string()) != "true" { + futures.push(tokio::spawn(cron::run_cron(app_state.clone()))); + } + info!("Tasks Spawned"); - run_axum(AppState).await + futures::future::try_join_all(futures).await?; + + Ok(()) } #[derive(Clone, Debug)] -struct AppState; +struct AppState { + db: sqlx::Pool, + cookie_key: cja::server::cookies::CookieKey, +} + +impl cja::app_state::AppState for AppState { + fn version(&self) -> &str { + env!("VERGEN_GIT_SHA") + } + + fn db(&self) -> &sqlx::PgPool { + &self.db + } + + fn cookie_key(&self) -> &cja::server::cookies::CookieKey { + &self.cookie_key + } +} + +impl AppState { + pub async fn from_env() -> color_eyre::Result { + let pool = setup_db_pool().await.unwrap(); + + let cookie_key = cja::server::cookies::CookieKey::from_env_or_generate()?; + + Ok(Self { + db: pool, + cookie_key, + }) + } +} async fn handler(Host(host): Host) -> Response { match host.as_str() { "redirects.coreyja.domains" => { "I have lots of domains. Some of them just redirect to others.".into_response() } - "coreyja.tv" | "coreyja.tube" => Redirect::to("https://coreyja.com/videos").into_response(), - "coreyja.blog" => Redirect::to("https://coreyja.com/posts").into_response(), - "coreyja.club" => Redirect::to("https://discord.gg/CpAPpXrgUq").into_response(), _ => "This is not one of the hosts I know about.".into_response(), } } -async fn run_axum(app_state: AppState) -> color_eyre::Result<()> { - let tracer = server_tracing::Tracer; - let trace_layer = TraceLayer::new_for_http() - .make_span_with(tracer) - .on_response(tracer); +async fn host_redirection( + // you can add more extractors here but the last + // extractor must implement `FromRequest` which + // `Request` does + Host(host): Host, + request: Request, + next: axum::middleware::Next, +) -> Response { + let redirect_to = match host.as_str() { + "coreyja.tv" | "coreyja.tube" => Some("https://coreyja.com/videos"), + "coreyja.blog" => Some("https://coreyja.com/posts"), + "coreyja.club" => Some("https://discord.gg/CpAPpXrgUq"), + _ => None, + }; + + if let Some(redirect_to) = redirect_to { + return Redirect::to(redirect_to).into_response(); + }; - let app = axum::Router::new() - .fallback(handler) + next.run(request).await +} + +fn routes(app_state: AppState) -> axum::Router { + axum::Router::new() + .route("/", get(handler)) .with_state(app_state) - .layer(trace_layer); + .layer(axum::middleware::from_fn(host_redirection)) +} - let addr = std::net::SocketAddr::from(([0, 0, 0, 0], 3001)); - let listener = TcpListener::bind(&addr).await.unwrap(); - tracing::debug!("listening on {}", addr); +#[tracing::instrument(err)] +pub async fn setup_db_pool() -> miette::Result { + const MIGRATION_LOCK_ID: i64 = 0xDB_DB_DB_DB_DB_DB_DB; - axum::serve(listener, app) + let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let pool = PgPoolOptions::new() + .max_connections(5) + .connect(&database_url) .await - .wrap_err("Failed to run server")?; + .into_diagnostic()?; - Ok(()) + sqlx::query!("SELECT pg_advisory_lock($1)", MIGRATION_LOCK_ID) + .execute(&pool) + .await + .into_diagnostic()?; + + sqlx::migrate!().run(&pool).await.into_diagnostic()?; + + let unlock_result = sqlx::query!("SELECT pg_advisory_unlock($1)", MIGRATION_LOCK_ID) + .fetch_one(&pool) + .await + .into_diagnostic()? + .pg_advisory_unlock; + + match unlock_result { + Some(b) => { + if b { + tracing::info!("Migration lock unlocked"); + } else { + tracing::info!("Failed to unlock migration lock"); + } + } + None => panic!("Failed to unlock migration lock"), + } + + Ok(pool) } diff --git a/src/server_tracing.rs b/src/server_tracing.rs deleted file mode 100644 index c68708d..0000000 --- a/src/server_tracing.rs +++ /dev/null @@ -1,74 +0,0 @@ -use axum::http::Request; -use tower_http::trace::{MakeSpan, OnResponse}; -use tracing::Level; - -#[derive(Debug, Clone, Copy)] -pub(crate) struct Tracer; - -impl MakeSpan for Tracer { - fn make_span(&mut self, request: &axum::http::Request) -> tracing::Span { - let route = http_route(request); - let span_name = format!("{} {}", request.method(), route); - - tracing::span!( - Level::INFO, - "server.request", - otel.name = span_name, - kind = "server", - uri = %request.uri(), - url.path = %request.uri().path(), - url.query = request.uri().query(), - url.scheme = request.uri().scheme_str(), - server.address = request.uri().host(), - server.port = request.uri().port_u16(), - http_version = ?request.version(), - user_agent.original = request.headers().get("user-agent").and_then(|h| h.to_str().ok()), - http.route = route, - http.request.method = %request.method(), - http.request.header.host = request.headers().get("host").and_then(|h| h.to_str().ok()), - http.request.header.forwarded_for = request.headers().get("x-forwarded-for").and_then(|h| h.to_str().ok()), - http.request.header.forwarded_proto = request.headers().get("x-forwarded-proto").and_then(|h| h.to_str().ok()), - http.request.header.host = request.headers().get("x-forwarded-ssl").and_then(|h| h.to_str().ok()), - http.request.header.referer = request.headers().get("referer").and_then(|h| h.to_str().ok()), - http.request.header.fly_forwarded_port = request.headers().get("fly-forwarded-port").and_then(|h| h.to_str().ok()), - http.request.header.fly_region = request.headers().get("fly-region").and_then(|h| h.to_str().ok()), - http.request.header.via = request.headers().get("via").and_then(|h| h.to_str().ok()), - - http.response.status_code = tracing::field::Empty, - http.response.header.content_type = tracing::field::Empty, - ) - } -} - -impl OnResponse for Tracer { - fn on_response( - self, - response: &axum::http::Response, - latency: std::time::Duration, - span: &tracing::Span, - ) { - let status_code = response.status().as_u16(); - tracing::event!( - Level::INFO, - status = status_code, - latency = format_args!("{} ms", latency.as_millis()), - "finished processing request" - ); - - span.record("http.response.status_code", status_code); - span.record( - "http.response.header.content_type", - response - .headers() - .get("content-type") - .and_then(|h| h.to_str().ok()), - ); - } -} - -#[inline] -fn http_route(req: &Request) -> &str { - req.extensions() - .get::() - .map_or_else(|| "", |mp| mp.as_str()) -} diff --git a/src/setup.rs b/src/setup.rs deleted file mode 100644 index c2c927c..0000000 --- a/src/setup.rs +++ /dev/null @@ -1,90 +0,0 @@ -use std::{collections::HashMap, time::Duration}; - -use color_eyre::{eyre::Context, Result}; -use opentelemetry_otlp::WithExportConfig; -use sentry::ClientInitGuard; -use tracing_opentelemetry::OpenTelemetryLayer; -use tracing_subscriber::{prelude::*, EnvFilter, Registry}; -use tracing_tree::HierarchicalLayer; - -pub fn setup_tracing() -> Result<()> { - let rust_log = std::env::var("RUST_LOG") - .unwrap_or_else(|_| "warn,server=trace,tower_http=debug,cja=info".into()); - - let env_filter = EnvFilter::builder() - .parse(&rust_log) - .wrap_err_with(|| format!("Couldn't create env filter from {}", rust_log))?; - - let opentelemetry_layer = if let Ok(honeycomb_key) = std::env::var("HONEYCOMB_API_KEY") { - let mut map = HashMap::::new(); - map.insert("x-honeycomb-team".to_string(), honeycomb_key); - map.insert("x-honeycomb-dataset".to_string(), "domains".to_string()); - - let tracer = opentelemetry_otlp::new_pipeline() - .tracing() - .with_exporter( - opentelemetry_otlp::new_exporter() - .http() - .with_endpoint("https://api.honeycomb.io/v1/traces") - .with_timeout(Duration::from_secs(3)) - .with_headers(map), - ) - .install_batch(opentelemetry_sdk::runtime::Tokio)?; - - let opentelemetry_layer = OpenTelemetryLayer::new(tracer); - println!("Honeycomb layer configured"); - - Some(opentelemetry_layer) - } else { - println!("Skipping Honeycomb layer"); - - None - }; - - let heirarchical = { - let heirarchical = HierarchicalLayer::default() - .with_writer(std::io::stdout) - .with_indent_lines(true) - .with_indent_amount(2) - .with_thread_names(true) - .with_thread_ids(true) - .with_verbose_exit(true) - .with_verbose_entry(true) - .with_targets(true); - - println!("Let's also log to stdout."); - - heirarchical - }; - - Registry::default() - .with(heirarchical) - .with(opentelemetry_layer) - .with(env_filter) - .try_init()?; - - Ok(()) -} - -pub fn setup_sentry() -> Option { - let git_commit: Option> = option_env!("VERGEN_GIT_SHA").map(|x| x.into()); - let release_name = - git_commit.unwrap_or_else(|| sentry::release_name!().unwrap_or_else(|| "dev".into())); - - if let Ok(sentry_dsn) = std::env::var("SENTRY_DSN") { - println!("Sentry enabled"); - - Some(sentry::init(( - sentry_dsn, - sentry::ClientOptions { - traces_sample_rate: 0.5, - release: Some(release_name), - ..Default::default() - }, - ))) - } else { - println!("Sentry not configured in this environment"); - - None - } -}