diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2016-12-12 14:03:13 -0800 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2016-12-12 14:03:13 -0800 |
| commit | 1310e9e052de50a8d53bc9b88696f8b6c61bece6 (patch) | |
| tree | 06eb0f59092190d55ecc24c1fc867d200bf1a2e6 | |
| parent | 1726d629111bf88715c4e478d5903a4cec49ebbb (diff) | |
| download | vcpkg-1310e9e052de50a8d53bc9b88696f8b6c61bece6.tar.gz vcpkg-1310e9e052de50a8d53bc9b88696f8b6c61bece6.zip | |
Add SQM User Id to metrics
| -rw-r--r-- | toolsrc/include/metrics.h | 1 | ||||
| -rw-r--r-- | toolsrc/src/main.cpp | 1 | ||||
| -rw-r--r-- | toolsrc/src/metrics.cpp | 34 |
3 files changed, 36 insertions, 0 deletions
diff --git a/toolsrc/include/metrics.h b/toolsrc/include/metrics.h index 52662cd97..a0f4fc61d 100644 --- a/toolsrc/include/metrics.h +++ b/toolsrc/include/metrics.h @@ -13,6 +13,7 @@ namespace vcpkg void TrackProperty(const std::string& name, const std::string& value); void TrackProperty(const std::string& name, const std::wstring& value); bool GetCompiledMetricsEnabled(); + std::wstring GetSQMUser(); void Upload(const std::string& payload); void Flush(); diff --git a/toolsrc/src/main.cpp b/toolsrc/src/main.cpp index f937be7f1..5e9dcf7ff 100644 --- a/toolsrc/src/main.cpp +++ b/toolsrc/src/main.cpp @@ -197,6 +197,7 @@ int wmain(const int argc, const wchar_t* const* const argv) const std::string trimmed_command_line = trim_path_from_command_line(Strings::utf16_to_utf8(GetCommandLineW())); TrackProperty("cmdline", trimmed_command_line); loadConfig(); + TrackProperty("sqmuser", GetSQMUser()); const vcpkg_cmd_arguments args = vcpkg_cmd_arguments::create_from_command_line(argc, argv); diff --git a/toolsrc/src/metrics.cpp b/toolsrc/src/metrics.cpp index 23962bcfe..51c7179c8 100644 --- a/toolsrc/src/metrics.cpp +++ b/toolsrc/src/metrics.cpp @@ -235,6 +235,40 @@ true return DISABLE_METRICS == 0; } + std::wstring GetSQMUser() + { + LONG err = NULL; + + struct RAII_HKEY { + HKEY hkey = NULL; + ~RAII_HKEY() + { + if (hkey != NULL) + RegCloseKey(hkey); + } + } HKCU_SQMClient; + + err = RegOpenKeyExW(HKEY_CURRENT_USER, LR"(Software\Microsoft\SQMClient)", NULL, KEY_READ, &HKCU_SQMClient.hkey); + if (err != ERROR_SUCCESS) + { + return L"{}"; + } + + std::array<wchar_t,128> buffer; + DWORD lType = 0; + DWORD dwBufferSize = static_cast<DWORD>(buffer.size() * sizeof(wchar_t)); + err = RegQueryValueExW(HKCU_SQMClient.hkey, L"UserId", NULL, &lType, reinterpret_cast<LPBYTE>(buffer.data()), &dwBufferSize); + if (err == ERROR_SUCCESS && lType == REG_SZ && dwBufferSize >= sizeof(wchar_t)) + { + size_t sz = dwBufferSize / sizeof(wchar_t); + if (buffer[sz - 1] == '\0') + --sz; + return std::wstring(buffer.begin(), buffer.begin() + sz); + } + + return L"{}"; + } + void SetUserInformation(const std::string& user_id, const std::string& first_use_time) { g_metricmessage.user_id = user_id; |
