Add new option to --disable-telemetry to disable quickinstall statistics collection (#1831)

* Add new option `--disable-quick-install-stats`

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>

* Send quickinstall stats in parallel

This commit also make sure'the stats is always sent for
each fetcher, regardless of whether it is picked or not,
to make sure that the quick-install stats collection gets
the full infomration of possible targets.

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>

* Rename option to `--disable-telemetry`

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>

* Update args.rs

Co-authored-by: Félix Saparelli <felix@passcod.name>
Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com>

* Update args.rs

Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com>

---------

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com>
Co-authored-by: Félix Saparelli <felix@passcod.name>
This commit is contained in:
Jiahao XU 2024-07-26 16:03:38 +10:00 committed by GitHub
parent fa105bb8d7
commit 6809601273
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 36 additions and 3 deletions

View file

@ -219,6 +219,14 @@ pub struct Args {
#[clap(help_heading = "Options", long)]
pub(crate) no_track: bool,
/// Disable statistics collection on popular crates.
///
/// Strategy quick-install (can be disabled via --disable-strategies) collects
/// statistics of popular crates by default, by sending the crate, version and
/// target to https://warehouse-clerk-tmp.vercel.app/api/crate
#[clap(help_heading = "Options", long, env = "BINSTALL_DISABLE_TELEMETRY")]
pub(crate) disable_telemetry: bool,
/// Install binaries in a custom location.
///
/// By default, binaries are installed to the global location `$CARGO_HOME/bin`, and global
@ -611,5 +619,21 @@ mod test {
Args::command().debug_assert()
}
#[test]
fn quickinstall_url_matches() {
let long_help = Args::command()
.get_opts()
.find(|opt| opt.get_long() == Some("disable-telemetry"))
.unwrap()
.get_long_help()
.unwrap()
.to_string();
assert!(
long_help.ends_with(binstalk::QUICK_INSTALL_STATS_URL),
"{}",
long_help
);
}
const _: () = assert!(Strategy::VARIANTS.len() == StrategyWrapped::VARIANTS.len());
}

View file

@ -207,6 +207,7 @@ pub fn install_crates(
} else {
SignaturePolicy::IfPresent
},
disable_telemetry: args.disable_telemetry,
});
// Destruct args before any async function to reduce size of the future

View file

@ -16,7 +16,7 @@ use crate::{
};
const BASE_URL: &str = "https://github.com/cargo-bins/cargo-quickinstall/releases/download";
const STATS_URL: &str = "https://warehouse-clerk-tmp.vercel.app/api/crate";
pub const QUICK_INSTALL_STATS_URL: &str = "https://warehouse-clerk-tmp.vercel.app/api/crate";
const QUICKINSTALL_SIGN_KEY: Cow<'static, str> =
Cow::Borrowed("RWTdnnab2pAka9OdwgCMYyOE66M/BlQoFWaJ/JjwcPV+f3n24IRTj97t");
@ -144,7 +144,7 @@ impl super::Fetcher for QuickInstall {
.expect("package_url is pre-generated and should never be invalid url"),
signature_url: Url::parse(&format!("{url}.sig"))
.expect("signature_url is pre-generated and should never be invalid url"),
stats_url: Url::parse(&format!("{STATS_URL}/{package}.tar.gz",))
stats_url: Url::parse(&format!("{QUICK_INSTALL_STATS_URL}/{package}.tar.gz",))
.expect("stats_url is pre-generated and should never be invalid url"),
package,
signature_policy,

View file

@ -9,3 +9,5 @@ pub use binstalk_fetchers as fetchers;
pub use binstalk_registry as registry;
pub use binstalk_types as manifests;
pub use detect_targets::{get_desired_targets, DesiredTargets, TARGET};
pub use fetchers::QUICK_INSTALL_STATS_URL;

View file

@ -55,4 +55,5 @@ pub struct Options {
pub registry: Registry,
pub signature_policy: SignaturePolicy,
pub disable_telemetry: bool,
}

View file

@ -175,8 +175,13 @@ async fn resolve_inner(
);
}
if !opts.disable_telemetry {
for fetcher in &handles {
fetcher.clone().report_to_upstream();
}
}
for fetcher in handles {
fetcher.clone().report_to_upstream();
match AutoAbortJoinHandle::new(fetcher.clone().find())
.flattened_join()
.await