From ea6f5c8d88853cb55fc903e71e4f098aa97501c3 Mon Sep 17 00:00:00 2001 From: seraphima Date: Thu, 18 Jul 2024 14:24:03 +0200 Subject: [PATCH] projects module interface telemetry --- .../Projects/ProjectsLib/ProjectsLib.vcxproj | 2 + .../ProjectsLib/ProjectsLib.vcxproj.filters | 6 +++ src/modules/Projects/ProjectsLib/pch.h | 4 ++ src/modules/Projects/ProjectsLib/trace.cpp | 51 +++++++++++++++++++ src/modules/Projects/ProjectsLib/trace.h | 17 +++++++ .../ProjectsModuleInterface.vcxproj | 6 +-- .../ProjectsModuleInterface/dllmain.cpp | 16 +++--- 7 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 src/modules/Projects/ProjectsLib/trace.cpp create mode 100644 src/modules/Projects/ProjectsLib/trace.h diff --git a/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj b/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj index 41e95bf188..09d1c28c3f 100644 --- a/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj +++ b/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj @@ -32,11 +32,13 @@ + Create + diff --git a/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj.filters b/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj.filters index edb4a24874..56281ae7e4 100644 --- a/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj.filters +++ b/src/modules/Projects/ProjectsLib/ProjectsLib.vcxproj.filters @@ -14,10 +14,16 @@ Header Files + + Header Files + Source Files + + Source Files + \ No newline at end of file diff --git a/src/modules/Projects/ProjectsLib/pch.h b/src/modules/Projects/ProjectsLib/pch.h index dba977e716..57caf5d38d 100644 --- a/src/modules/Projects/ProjectsLib/pch.h +++ b/src/modules/Projects/ProjectsLib/pch.h @@ -6,5 +6,9 @@ #ifndef PCH_H #define PCH_H +#define WIN32_LEAN_AND_MEAN +#include +#include +#include #endif //PCH_H diff --git a/src/modules/Projects/ProjectsLib/trace.cpp b/src/modules/Projects/ProjectsLib/trace.cpp new file mode 100644 index 0000000000..6f6acfd3c6 --- /dev/null +++ b/src/modules/Projects/ProjectsLib/trace.cpp @@ -0,0 +1,51 @@ +#include "pch.h" +#include "trace.h" + +#include + +// Telemetry strings should not be localized. +#define LoggingProviderKey "Microsoft.PowerToys" + +TRACELOGGING_DEFINE_PROVIDER( + g_hProvider, + LoggingProviderKey, + // {38e8889b-9731-53f5-e901-e8a7c1753074} + (0x38e8889b, 0x9731, 0x53f5, 0xe9, 0x01, 0xe8, 0xa7, 0xc1, 0x75, 0x30, 0x74), + TraceLoggingOptionProjectTelemetry()); + +void Trace::RegisterProvider() noexcept +{ + TraceLoggingRegister(g_hProvider); +} + +void Trace::UnregisterProvider() noexcept +{ + TraceLoggingUnregister(g_hProvider); +} + +void Trace::Projects::Enable(bool enabled) noexcept +{ + TraceLoggingWrite( + g_hProvider, + "Projects_EnableProjects", + ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), + TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE), + TraceLoggingBoolean(enabled, "Enabled")); +} + +void Trace::Projects::SettingsTelemetry(const PowertoyModuleIface::HotkeyEx& hotkey) noexcept +{ + std::wstring hotKeyStr = + std::wstring((hotkey.modifiersMask & MOD_WIN) == MOD_WIN ? L"Win + " : L"") + + std::wstring((hotkey.modifiersMask & MOD_CONTROL) == MOD_CONTROL ? L"Ctrl + " : L"") + + std::wstring((hotkey.modifiersMask & MOD_SHIFT) == MOD_SHIFT ? L"Shift + " : L"") + + std::wstring((hotkey.modifiersMask & MOD_ALT) == MOD_ALT ? L"Alt + " : L"") + + std::wstring(L"VK ") + std::to_wstring(hotkey.vkCode); + + TraceLoggingWrite( + g_hProvider, + "Projects_Settings", + ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), + TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE), + TraceLoggingWideString(hotKeyStr.c_str(), "HotKey")); +} diff --git a/src/modules/Projects/ProjectsLib/trace.h b/src/modules/Projects/ProjectsLib/trace.h new file mode 100644 index 0000000000..db3061a42f --- /dev/null +++ b/src/modules/Projects/ProjectsLib/trace.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +class Trace +{ +public: + static void RegisterProvider() noexcept; + static void UnregisterProvider() noexcept; + + class Projects + { + public: + static void Enable(bool enabled) noexcept; + static void SettingsTelemetry(const PowertoyModuleIface::HotkeyEx& hotkey) noexcept; + }; +}; diff --git a/src/modules/Projects/ProjectsModuleInterface/ProjectsModuleInterface.vcxproj b/src/modules/Projects/ProjectsModuleInterface/ProjectsModuleInterface.vcxproj index b3a005fff5..14e029e80b 100644 --- a/src/modules/Projects/ProjectsModuleInterface/ProjectsModuleInterface.vcxproj +++ b/src/modules/Projects/ProjectsModuleInterface/ProjectsModuleInterface.vcxproj @@ -51,12 +51,12 @@ {caba8dfb-823b-4bf2-93ac-3f31984150d9} - - {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd} - {6955446d-23f7-4023-9bb3-8657f904af99} + + {b31fcc55-b5a4-4ea7-b414-2dceae6af332} + diff --git a/src/modules/Projects/ProjectsModuleInterface/dllmain.cpp b/src/modules/Projects/ProjectsModuleInterface/dllmain.cpp index dc316cb264..6a0c40a2f8 100644 --- a/src/modules/Projects/ProjectsModuleInterface/dllmain.cpp +++ b/src/modules/Projects/ProjectsModuleInterface/dllmain.cpp @@ -10,6 +10,8 @@ #include #include +#include + #include #include "resource.h" @@ -33,7 +35,7 @@ BOOL APIENTRY DllMain(HMODULE /*hModule*/, DWORD ul_reason_for_call, LPVOID /*lp switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: - // TODO: Trace::RegisterProvider(); + Trace::RegisterProvider(); break; case DLL_THREAD_ATTACH: @@ -41,7 +43,7 @@ BOOL APIENTRY DllMain(HMODULE /*hModule*/, DWORD ul_reason_for_call, LPVOID /*lp break; case DLL_PROCESS_DETACH: - // TODO: Trace::UnregisterProvider(); + Trace::UnregisterProvider(); break; } return TRUE; @@ -104,8 +106,6 @@ public: parse_hotkeys(values); auto settingsObject = values.get_raw_json(); - // TODO: telemetry - values.save_to_settings_file(); } catch (std::exception&) @@ -159,7 +159,7 @@ public: virtual void send_settings_telemetry() override { Logger::info("Send settings telemetry"); - // TODO + Trace::Projects::SettingsTelemetry(m_hotkey); } ProjectsModuleInterface() @@ -176,8 +176,7 @@ private: Logger::info("Enable"); m_enabled = true; - // Log telemetry - // TODO: Trace::Projects::EnableProjects(true); + Trace::Projects::Enable(true); unsigned long powertoys_pid = GetCurrentProcessId(); std::wstring executable_args = L""; @@ -208,10 +207,9 @@ private: { Logger::info("Disable"); m_enabled = false; - // Log telemetry if (traceEvent) { - // TODO: Trace::Projects::EnableProjects(false); + Trace::Projects::Enable(false); } if (m_toggleEditorEvent)