From 028c114f7ae4b211b5790691f2499d0974587143 Mon Sep 17 00:00:00 2001 From: Nicole Mazzuca Date: Tue, 16 Mar 2021 15:57:17 -0700 Subject: [PATCH 1/3] add metrics --- include/vcpkg/registries.h | 2 ++ src/vcpkg/configuration.cpp | 2 ++ src/vcpkg/registries.cpp | 23 ++++++++++++++++++++++- src/vcpkg/vcpkgpaths.cpp | 27 +++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/include/vcpkg/registries.h b/include/vcpkg/registries.h index 9c07f1a609..3e0284c9f9 100644 --- a/include/vcpkg/registries.h +++ b/include/vcpkg/registries.h @@ -31,6 +31,8 @@ namespace vcpkg struct RegistryImplementation { + virtual StringLiteral kind() const = 0; + // returns nullptr if the port doesn't exist virtual std::unique_ptr get_port_entry(const VcpkgPaths& paths, StringView port_name) const = 0; diff --git a/src/vcpkg/configuration.cpp b/src/vcpkg/configuration.cpp index 3fa02876ff..0ed1676eaf 100644 --- a/src/vcpkg/configuration.cpp +++ b/src/vcpkg/configuration.cpp @@ -2,6 +2,7 @@ #include #include +#include #include namespace @@ -74,6 +75,7 @@ namespace vcpkg { if (!flags.registries && registry_set.has_modifications()) { + Metrics::g_metrics.lock()->track_property("registries-error-registry-modification-without-feature-flag", "defined"); System::printf(System::Color::warning, "Warning: configuration specified the \"registries\" or \"default-registries\" field, but " "the %s feature flag was not enabled.\n", diff --git a/src/vcpkg/registries.cpp b/src/vcpkg/registries.cpp index 971e8d0c29..6f40bb65ca 100644 --- a/src/vcpkg/registries.cpp +++ b/src/vcpkg/registries.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -45,6 +46,11 @@ namespace { } + StringLiteral kind() const override + { + return "git"; + } + std::unique_ptr get_port_entry(const VcpkgPaths&, StringView) const override; void get_all_port_names(std::vector&, const VcpkgPaths&) const override; @@ -73,6 +79,7 @@ namespace registry_versions_dir_name); if (!maybe_tree) { + Metrics::g_metrics.lock()->track_property("registries-error-no-versions-at-commit", "defined"); Checks::exit_with_message( VCPKG_LINE_INFO, "Error: could not find the git tree for `versions` in repo `%s` at commit `%s`: %s", @@ -84,7 +91,7 @@ namespace if (!maybe_path) { Checks::exit_with_message(VCPKG_LINE_INFO, - "Error: failed to check out `port_versions` from repo %s: %s", + "Error: failed to check out `versions` from repo %s: %s", m_repo, maybe_path.error()); } @@ -158,6 +165,11 @@ namespace Debug::print("BuiltinRegistry initialized with: \"", m_baseline_identifier, "\"\n"); } + StringLiteral kind() const override + { + return "builtin"; + } + std::unique_ptr get_port_entry(const VcpkgPaths& paths, StringView port_name) const override; void get_all_port_names(std::vector&, const VcpkgPaths&) const override; @@ -177,6 +189,11 @@ namespace { } + StringLiteral kind() const override + { + return "filesystem"; + } + std::unique_ptr get_port_entry(const VcpkgPaths&, StringView) const override; void get_all_port_names(std::vector&, const VcpkgPaths&) const override; @@ -524,6 +541,7 @@ namespace if (m_baseline_identifier == "default") { + Metrics::g_metrics.lock()->track_property("registries-error-could-not-find-baseline", "defined"); Checks::exit_with_message( VCPKG_LINE_INFO, "Couldn't find explicitly specified baseline `\"default\"` in the baseline file.", @@ -534,6 +552,7 @@ namespace auto explicit_hash = paths.git_fetch_from_remote_registry(m_repo, m_baseline_identifier); if (!explicit_hash.has_value()) { + Metrics::g_metrics.lock()->track_property("registries-error-could-not-find-baseline", "defined"); Checks::exit_with_message( VCPKG_LINE_INFO, "Error: Couldn't find explicitly specified baseline `\"%s\"` in the baseline file for repo %s, " @@ -546,6 +565,7 @@ namespace auto maybe_contents = paths.git_show_from_remote_registry(*explicit_hash.get(), path_to_baseline); if (!maybe_contents.has_value()) { + Metrics::g_metrics.lock()->track_property("registries-error-could-not-find-baseline", "defined"); Checks::exit_with_message( VCPKG_LINE_INFO, "Error: Couldn't find explicitly specified baseline `\"%s\"` in the baseline file for repo %s, " @@ -568,6 +588,7 @@ namespace } else { + Metrics::g_metrics.lock()->track_property("registries-error-could-not-find-baseline", "defined"); Checks::exit_maybe_upgrade( VCPKG_LINE_INFO, "Couldn't find explicitly specified baseline `\"%s\"` in the baseline file for repo %s, " diff --git a/src/vcpkg/vcpkgpaths.cpp b/src/vcpkg/vcpkgpaths.cpp index c0c5b5b84f..e2306aa514 100644 --- a/src/vcpkg/vcpkgpaths.cpp +++ b/src/vcpkg/vcpkgpaths.cpp @@ -338,6 +338,33 @@ If you wish to silence this error and use classic mode, you can: auto config_file = load_configuration(filesystem, args, root, manifest_root_dir); + // metrics from configuration + { + auto default_registry = config_file.config.registry_set.default_registry(); + auto other_registries = config_file.config.registry_set.registries(); + auto metrics = Metrics::g_metrics.lock(); + + if (default_registry) + { + metrics->track_property("registries-default-registry-kind", default_registry->kind()); + } + else + { + metrics->track_property("registries-default-registry-kind", "disabled"); + } + + if (other_registries.size() != 0) + { + std::vector registry_kinds; + for (const auto& reg : other_registries) + { + registry_kinds.push_back(reg.implementation().kind()); + } + Util::sort_unique_erase(registry_kinds); + metrics->track_property("registries-kinds-used", Strings::join(",", registry_kinds)); + } + } + config_root_dir = std::move(config_file.config_directory); m_pimpl->m_config = std::move(config_file.config); From e1cdad7bd733b10578e440025fdd2b741ba67324 Mon Sep 17 00:00:00 2001 From: Nicole Mazzuca Date: Thu, 18 Mar 2021 11:26:02 -0700 Subject: [PATCH 2/3] fix build --- src/vcpkg-test/registries.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vcpkg-test/registries.cpp b/src/vcpkg-test/registries.cpp index 1c839409d9..40136bff9e 100644 --- a/src/vcpkg-test/registries.cpp +++ b/src/vcpkg-test/registries.cpp @@ -10,6 +10,8 @@ namespace { struct TestRegistryImplementation final : RegistryImplementation { + StringLiteral kind() const override { return "test"; } + std::unique_ptr get_port_entry(const VcpkgPaths&, StringView) const override { return nullptr; } void get_all_port_names(std::vector&, const VcpkgPaths&) const override { } From 0947c4efb9e5d6bd68772e9adaacbd93f1bc8c47 Mon Sep 17 00:00:00 2001 From: Nicole Mazzuca Date: Mon, 22 Mar 2021 15:27:32 -0700 Subject: [PATCH 3/3] format --- src/vcpkg/configuration.cpp | 3 ++- src/vcpkg/registries.cpp | 15 +++------------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/vcpkg/configuration.cpp b/src/vcpkg/configuration.cpp index 0ed1676eaf..6377544aff 100644 --- a/src/vcpkg/configuration.cpp +++ b/src/vcpkg/configuration.cpp @@ -75,7 +75,8 @@ namespace vcpkg { if (!flags.registries && registry_set.has_modifications()) { - Metrics::g_metrics.lock()->track_property("registries-error-registry-modification-without-feature-flag", "defined"); + Metrics::g_metrics.lock()->track_property("registries-error-registry-modification-without-feature-flag", + "defined"); System::printf(System::Color::warning, "Warning: configuration specified the \"registries\" or \"default-registries\" field, but " "the %s feature flag was not enabled.\n", diff --git a/src/vcpkg/registries.cpp b/src/vcpkg/registries.cpp index 6f40bb65ca..f31001e5d9 100644 --- a/src/vcpkg/registries.cpp +++ b/src/vcpkg/registries.cpp @@ -46,10 +46,7 @@ namespace { } - StringLiteral kind() const override - { - return "git"; - } + StringLiteral kind() const override { return "git"; } std::unique_ptr get_port_entry(const VcpkgPaths&, StringView) const override; @@ -165,10 +162,7 @@ namespace Debug::print("BuiltinRegistry initialized with: \"", m_baseline_identifier, "\"\n"); } - StringLiteral kind() const override - { - return "builtin"; - } + StringLiteral kind() const override { return "builtin"; } std::unique_ptr get_port_entry(const VcpkgPaths& paths, StringView port_name) const override; @@ -189,10 +183,7 @@ namespace { } - StringLiteral kind() const override - { - return "filesystem"; - } + StringLiteral kind() const override { return "filesystem"; } std::unique_ptr get_port_entry(const VcpkgPaths&, StringView) const override;