From e3240a2ddd3a91ec8b93d206a52141178c3dc1aa Mon Sep 17 00:00:00 2001 From: Allan Guwatudde Date: Fri, 12 Nov 2021 10:16:19 +0300 Subject: [PATCH] [MM-40022] - Expose telemetry service in the server (#18976) * [MM-40022] - Expose telemetry service in the server * make app-layers * feedback impl --- app/telemetry.go | 10 +++ services/telemetry/telemetry.go | 94 ++++++++++++++-------------- services/telemetry/telemetry_test.go | 2 +- 3 files changed, 58 insertions(+), 48 deletions(-) create mode 100644 app/telemetry.go diff --git a/app/telemetry.go b/app/telemetry.go new file mode 100644 index 0000000000..e0c42375f8 --- /dev/null +++ b/app/telemetry.go @@ -0,0 +1,10 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package app + +import "github.com/mattermost/mattermost-server/v6/services/telemetry" + +func (s *Server) GetTelemetryService() *telemetry.TelemetryService { + return s.telemetryService +} diff --git a/services/telemetry/telemetry.go b/services/telemetry/telemetry.go index 9b939f5f92..743c3fa3ca 100644 --- a/services/telemetry/telemetry.go +++ b/services/telemetry/telemetry.go @@ -165,7 +165,7 @@ func (ts *TelemetryService) sendDailyTelemetry(override bool) { } } -func (ts *TelemetryService) sendTelemetry(event string, properties map[string]interface{}) { +func (ts *TelemetryService) SendTelemetry(event string, properties map[string]interface{}) { if ts.rudderClient != nil { var context *rudder.Context // if we are part of a cloud installation, add it's ID to the tracked event's context @@ -331,7 +331,7 @@ func (ts *TelemetryService) trackActivity() { activeUsersMonthlyCount = r.Data.(int64) } - ts.sendTelemetry(TrackActivity, map[string]interface{}{ + ts.SendTelemetry(TrackActivity, map[string]interface{}{ "registered_users": userCount, "bot_accounts": botAccountsCount, "guest_accounts": guestAccountsCount, @@ -355,7 +355,7 @@ func (ts *TelemetryService) trackActivity() { func (ts *TelemetryService) trackConfig() { cfg := ts.srv.Config() - ts.sendTelemetry(TrackConfigService, map[string]interface{}{ + ts.SendTelemetry(TrackConfigService, map[string]interface{}{ "web_server_mode": *cfg.ServiceSettings.WebserverMode, "enable_security_fix_alert": *cfg.ServiceSettings.EnableSecurityFixAlert, "enable_insecure_outgoing_connections": *cfg.ServiceSettings.EnableInsecureOutgoingConnections, @@ -437,7 +437,7 @@ func (ts *TelemetryService) trackConfig() { "restrict_link_previews": isDefault(*cfg.ServiceSettings.RestrictLinkPreviews, ""), }) - ts.sendTelemetry(TrackConfigTeam, map[string]interface{}{ + ts.SendTelemetry(TrackConfigTeam, map[string]interface{}{ "enable_user_creation": cfg.TeamSettings.EnableUserCreation, "enable_open_server": *cfg.TeamSettings.EnableOpenServer, "enable_user_deactivation": *cfg.TeamSettings.EnableUserDeactivation, @@ -460,7 +460,7 @@ func (ts *TelemetryService) trackConfig() { "experimental_default_channels": len(cfg.TeamSettings.ExperimentalDefaultChannels), }) - ts.sendTelemetry(TrackConfigClientReq, map[string]interface{}{ + ts.SendTelemetry(TrackConfigClientReq, map[string]interface{}{ "android_latest_version": cfg.ClientRequirements.AndroidLatestVersion, "android_min_version": cfg.ClientRequirements.AndroidMinVersion, "desktop_latest_version": cfg.ClientRequirements.DesktopLatestVersion, @@ -469,7 +469,7 @@ func (ts *TelemetryService) trackConfig() { "ios_min_version": cfg.ClientRequirements.IosMinVersion, }) - ts.sendTelemetry(TrackConfigSQL, map[string]interface{}{ + ts.SendTelemetry(TrackConfigSQL, map[string]interface{}{ "driver_name": *cfg.SqlSettings.DriverName, "trace": cfg.SqlSettings.Trace, "max_idle_conns": *cfg.SqlSettings.MaxIdleConns, @@ -482,7 +482,7 @@ func (ts *TelemetryService) trackConfig() { "disable_database_search": *cfg.SqlSettings.DisableDatabaseSearch, }) - ts.sendTelemetry(TrackConfigLog, map[string]interface{}{ + ts.SendTelemetry(TrackConfigLog, map[string]interface{}{ "enable_console": cfg.LogSettings.EnableConsole, "console_level": cfg.LogSettings.ConsoleLevel, "console_json": *cfg.LogSettings.ConsoleJson, @@ -494,7 +494,7 @@ func (ts *TelemetryService) trackConfig() { "advanced_logging_config": *cfg.LogSettings.AdvancedLoggingConfig != "", }) - ts.sendTelemetry(TrackConfigAudit, map[string]interface{}{ + ts.SendTelemetry(TrackConfigAudit, map[string]interface{}{ "file_enabled": *cfg.ExperimentalAuditSettings.FileEnabled, "file_max_size_mb": *cfg.ExperimentalAuditSettings.FileMaxSizeMB, "file_max_age_days": *cfg.ExperimentalAuditSettings.FileMaxAgeDays, @@ -504,7 +504,7 @@ func (ts *TelemetryService) trackConfig() { "advanced_logging_config": *cfg.ExperimentalAuditSettings.AdvancedLoggingConfig != "", }) - ts.sendTelemetry(TrackConfigNotificationLog, map[string]interface{}{ + ts.SendTelemetry(TrackConfigNotificationLog, map[string]interface{}{ "enable_console": *cfg.NotificationLogSettings.EnableConsole, "console_level": *cfg.NotificationLogSettings.ConsoleLevel, "console_json": *cfg.NotificationLogSettings.ConsoleJson, @@ -515,7 +515,7 @@ func (ts *TelemetryService) trackConfig() { "advanced_logging_config": *cfg.NotificationLogSettings.AdvancedLoggingConfig != "", }) - ts.sendTelemetry(TrackConfigPassword, map[string]interface{}{ + ts.SendTelemetry(TrackConfigPassword, map[string]interface{}{ "minimum_length": *cfg.PasswordSettings.MinimumLength, "lowercase": *cfg.PasswordSettings.Lowercase, "number": *cfg.PasswordSettings.Number, @@ -523,7 +523,7 @@ func (ts *TelemetryService) trackConfig() { "symbol": *cfg.PasswordSettings.Symbol, }) - ts.sendTelemetry(TrackConfigFile, map[string]interface{}{ + ts.SendTelemetry(TrackConfigFile, map[string]interface{}{ "enable_public_links": cfg.FileSettings.EnablePublicLink, "driver_name": *cfg.FileSettings.DriverName, "isdefault_directory": isDefault(*cfg.FileSettings.Directory, model.FileSettingsDefaultDirectory), @@ -541,7 +541,7 @@ func (ts *TelemetryService) trackConfig() { "enable_mobile_download": *cfg.FileSettings.EnableMobileDownload, }) - ts.sendTelemetry(TrackConfigEmail, map[string]interface{}{ + ts.SendTelemetry(TrackConfigEmail, map[string]interface{}{ "enable_sign_up_with_email": cfg.EmailSettings.EnableSignUpWithEmail, "enable_sign_in_with_email": *cfg.EmailSettings.EnableSignInWithEmail, "enable_sign_in_with_username": *cfg.EmailSettings.EnableSignInWithUsername, @@ -568,7 +568,7 @@ func (ts *TelemetryService) trackConfig() { "smtp_server_timeout": *cfg.EmailSettings.SMTPServerTimeout, }) - ts.sendTelemetry(TrackConfigRate, map[string]interface{}{ + ts.SendTelemetry(TrackConfigRate, map[string]interface{}{ "enable_rate_limiter": *cfg.RateLimitSettings.Enable, "vary_by_remote_address": *cfg.RateLimitSettings.VaryByRemoteAddr, "vary_by_user": *cfg.RateLimitSettings.VaryByUser, @@ -578,19 +578,19 @@ func (ts *TelemetryService) trackConfig() { "isdefault_vary_by_header": isDefault(cfg.RateLimitSettings.VaryByHeader, ""), }) - ts.sendTelemetry(TrackConfigPrivacy, map[string]interface{}{ + ts.SendTelemetry(TrackConfigPrivacy, map[string]interface{}{ "show_email_address": cfg.PrivacySettings.ShowEmailAddress, "show_full_name": cfg.PrivacySettings.ShowFullName, }) - ts.sendTelemetry(TrackConfigTheme, map[string]interface{}{ + ts.SendTelemetry(TrackConfigTheme, map[string]interface{}{ "enable_theme_selection": *cfg.ThemeSettings.EnableThemeSelection, "isdefault_default_theme": isDefault(*cfg.ThemeSettings.DefaultTheme, model.TeamSettingsDefaultTeamText), "allow_custom_themes": *cfg.ThemeSettings.AllowCustomThemes, "allowed_themes": len(cfg.ThemeSettings.AllowedThemes), }) - ts.sendTelemetry(TrackConfigOAuth, map[string]interface{}{ + ts.SendTelemetry(TrackConfigOAuth, map[string]interface{}{ "enable_gitlab": cfg.GitLabSettings.Enable, "openid_gitlab": *cfg.GitLabSettings.Enable && strings.Contains(*cfg.GitLabSettings.Scope, model.ServiceOpenid), "enable_google": cfg.GoogleSettings.Enable, @@ -600,7 +600,7 @@ func (ts *TelemetryService) trackConfig() { "enable_openid": cfg.OpenIdSettings.Enable, }) - ts.sendTelemetry(TrackConfigSupport, map[string]interface{}{ + ts.SendTelemetry(TrackConfigSupport, map[string]interface{}{ "isdefault_terms_of_service_link": isDefault(*cfg.SupportSettings.TermsOfServiceLink, model.SupportSettingsDefaultTermsOfServiceLink), "isdefault_privacy_policy_link": isDefault(*cfg.SupportSettings.PrivacyPolicyLink, model.SupportSettingsDefaultPrivacyPolicyLink), "isdefault_about_link": isDefault(*cfg.SupportSettings.AboutLink, model.SupportSettingsDefaultAboutLink), @@ -612,7 +612,7 @@ func (ts *TelemetryService) trackConfig() { "enable_ask_community_link": *cfg.SupportSettings.EnableAskCommunityLink, }) - ts.sendTelemetry(TrackConfigLDAP, map[string]interface{}{ + ts.SendTelemetry(TrackConfigLDAP, map[string]interface{}{ "enable": *cfg.LdapSettings.Enable, "enable_sync": *cfg.LdapSettings.EnableSync, "enable_admin_filter": *cfg.LdapSettings.EnableAdminFilter, @@ -643,18 +643,18 @@ func (ts *TelemetryService) trackConfig() { "isnotempty_private_key": !isDefault(*cfg.LdapSettings.PrivateKeyFile, ""), }) - ts.sendTelemetry(TrackConfigCompliance, map[string]interface{}{ + ts.SendTelemetry(TrackConfigCompliance, map[string]interface{}{ "enable": *cfg.ComplianceSettings.Enable, "enable_daily": *cfg.ComplianceSettings.EnableDaily, }) - ts.sendTelemetry(TrackConfigLocalization, map[string]interface{}{ + ts.SendTelemetry(TrackConfigLocalization, map[string]interface{}{ "default_server_locale": *cfg.LocalizationSettings.DefaultServerLocale, "default_client_locale": *cfg.LocalizationSettings.DefaultClientLocale, "available_locales": *cfg.LocalizationSettings.AvailableLocales, }) - ts.sendTelemetry(TrackConfigSAML, map[string]interface{}{ + ts.SendTelemetry(TrackConfigSAML, map[string]interface{}{ "enable": *cfg.SamlSettings.Enable, "enable_sync_with_ldap": *cfg.SamlSettings.EnableSyncWithLdap, "enable_sync_with_ldap_include_auth": *cfg.SamlSettings.EnableSyncWithLdapIncludeAuth, @@ -683,7 +683,7 @@ func (ts *TelemetryService) trackConfig() { "isdefault_login_button_text_color": isDefault(*cfg.SamlSettings.LoginButtonTextColor, ""), }) - ts.sendTelemetry(TrackConfigCluster, map[string]interface{}{ + ts.SendTelemetry(TrackConfigCluster, map[string]interface{}{ "enable": *cfg.ClusterSettings.Enable, "network_interface": isDefault(*cfg.ClusterSettings.NetworkInterface, ""), "bind_address": isDefault(*cfg.ClusterSettings.BindAddress, ""), @@ -694,19 +694,19 @@ func (ts *TelemetryService) trackConfig() { "read_only_config": *cfg.ClusterSettings.ReadOnlyConfig, }) - ts.sendTelemetry(TrackConfigMetrics, map[string]interface{}{ + ts.SendTelemetry(TrackConfigMetrics, map[string]interface{}{ "enable": *cfg.MetricsSettings.Enable, "block_profile_rate": *cfg.MetricsSettings.BlockProfileRate, }) - ts.sendTelemetry(TrackConfigNativeApp, map[string]interface{}{ + ts.SendTelemetry(TrackConfigNativeApp, map[string]interface{}{ "isdefault_app_custom_url_schemes": isDefaultArray(cfg.NativeAppSettings.AppCustomURLSchemes, model.GetDefaultAppCustomURLSchemes()), "isdefault_app_download_link": isDefault(*cfg.NativeAppSettings.AppDownloadLink, model.NativeappSettingsDefaultAppDownloadLink), "isdefault_android_app_download_link": isDefault(*cfg.NativeAppSettings.AndroidAppDownloadLink, model.NativeappSettingsDefaultAndroidAppDownloadLink), "isdefault_iosapp_download_link": isDefault(*cfg.NativeAppSettings.IosAppDownloadLink, model.NativeappSettingsDefaultIosAppDownloadLink), }) - ts.sendTelemetry(TrackConfigExperimental, map[string]interface{}{ + ts.SendTelemetry(TrackConfigExperimental, map[string]interface{}{ "client_side_cert_enable": *cfg.ExperimentalSettings.ClientSideCertEnable, "isdefault_client_side_cert_check": isDefault(*cfg.ExperimentalSettings.ClientSideCertCheck, model.ClientSideCertCheckPrimaryAuth), "link_metadata_timeout_milliseconds": *cfg.ExperimentalSettings.LinkMetadataTimeoutMilliseconds, @@ -719,11 +719,11 @@ func (ts *TelemetryService) trackConfig() { "enable_remote_cluster_service": *cfg.ExperimentalSettings.EnableRemoteClusterService && cfg.FeatureFlags.EnableRemoteClusterService, }) - ts.sendTelemetry(TrackConfigAnalytics, map[string]interface{}{ + ts.SendTelemetry(TrackConfigAnalytics, map[string]interface{}{ "isdefault_max_users_for_statistics": isDefault(*cfg.AnalyticsSettings.MaxUsersForStatistics, model.AnalyticsSettingsDefaultMaxUsersForStatistics), }) - ts.sendTelemetry(TrackConfigAnnouncement, map[string]interface{}{ + ts.SendTelemetry(TrackConfigAnnouncement, map[string]interface{}{ "enable_banner": *cfg.AnnouncementSettings.EnableBanner, "isdefault_banner_color": isDefault(*cfg.AnnouncementSettings.BannerColor, model.AnnouncementSettingsDefaultBannerColor), "isdefault_banner_text_color": isDefault(*cfg.AnnouncementSettings.BannerTextColor, model.AnnouncementSettingsDefaultBannerTextColor), @@ -732,7 +732,7 @@ func (ts *TelemetryService) trackConfig() { "user_notices_enabled": *cfg.AnnouncementSettings.UserNoticesEnabled, }) - ts.sendTelemetry(TrackConfigElasticsearch, map[string]interface{}{ + ts.SendTelemetry(TrackConfigElasticsearch, map[string]interface{}{ "isdefault_connection_url": isDefault(*cfg.ElasticsearchSettings.ConnectionURL, model.ElasticsearchSettingsDefaultConnectionURL), "isdefault_username": isDefault(*cfg.ElasticsearchSettings.Username, model.ElasticsearchSettingsDefaultUsername), "isdefault_password": isDefault(*cfg.ElasticsearchSettings.Password, model.ElasticsearchSettingsDefaultPassword), @@ -756,7 +756,7 @@ func (ts *TelemetryService) trackConfig() { ts.trackPluginConfig(cfg, model.PluginSettingsDefaultMarketplaceURL) - ts.sendTelemetry(TrackConfigDataRetention, map[string]interface{}{ + ts.SendTelemetry(TrackConfigDataRetention, map[string]interface{}{ "enable_message_deletion": *cfg.DataRetentionSettings.EnableMessageDeletion, "enable_file_deletion": *cfg.DataRetentionSettings.EnableFileDeletion, "message_retention_days": *cfg.DataRetentionSettings.MessageRetentionDays, @@ -766,7 +766,7 @@ func (ts *TelemetryService) trackConfig() { "cleanup_jobs_threshold_days": *cfg.JobSettings.CleanupJobsThresholdDays, }) - ts.sendTelemetry(TrackConfigMessageExport, map[string]interface{}{ + ts.SendTelemetry(TrackConfigMessageExport, map[string]interface{}{ "enable_message_export": *cfg.MessageExportSettings.EnableExport, "export_format": *cfg.MessageExportSettings.ExportFormat, "daily_run_time": *cfg.MessageExportSettings.DailyRunTime, @@ -780,33 +780,33 @@ func (ts *TelemetryService) trackConfig() { "download_export_results": *cfg.MessageExportSettings.DownloadExportResults, }) - ts.sendTelemetry(TrackConfigDisplay, map[string]interface{}{ + ts.SendTelemetry(TrackConfigDisplay, map[string]interface{}{ "experimental_timezone": *cfg.DisplaySettings.ExperimentalTimezone, "isdefault_custom_url_schemes": len(cfg.DisplaySettings.CustomURLSchemes) != 0, }) - ts.sendTelemetry(TrackConfigGuestAccounts, map[string]interface{}{ + ts.SendTelemetry(TrackConfigGuestAccounts, map[string]interface{}{ "enable": *cfg.GuestAccountsSettings.Enable, "allow_email_accounts": *cfg.GuestAccountsSettings.AllowEmailAccounts, "enforce_multifactor_authentication": *cfg.GuestAccountsSettings.EnforceMultifactorAuthentication, "isdefault_restrict_creation_to_domains": isDefault(*cfg.GuestAccountsSettings.RestrictCreationToDomains, ""), }) - ts.sendTelemetry(TrackConfigImageProxy, map[string]interface{}{ + ts.SendTelemetry(TrackConfigImageProxy, map[string]interface{}{ "enable": *cfg.ImageProxySettings.Enable, "image_proxy_type": *cfg.ImageProxySettings.ImageProxyType, "isdefault_remote_image_proxy_url": isDefault(*cfg.ImageProxySettings.RemoteImageProxyURL, ""), "isdefault_remote_image_proxy_options": isDefault(*cfg.ImageProxySettings.RemoteImageProxyOptions, ""), }) - ts.sendTelemetry(TrackConfigBleve, map[string]interface{}{ + ts.SendTelemetry(TrackConfigBleve, map[string]interface{}{ "enable_indexing": *cfg.BleveSettings.EnableIndexing, "enable_searching": *cfg.BleveSettings.EnableSearching, "enable_autocomplete": *cfg.BleveSettings.EnableAutocomplete, "bulk_indexing_time_window_seconds": *cfg.BleveSettings.BulkIndexingTimeWindowSeconds, }) - ts.sendTelemetry(TrackConfigExport, map[string]interface{}{ + ts.SendTelemetry(TrackConfigExport, map[string]interface{}{ "retention_days": *cfg.ExportSettings.RetentionDays, }) @@ -816,7 +816,7 @@ func (ts *TelemetryService) trackConfig() { for k, v := range flags { interfaceFlags[k] = v } - ts.sendTelemetry(TrackFeatureFlags, interfaceFlags) + ts.SendTelemetry(TrackFeatureFlags, interfaceFlags) } func (ts *TelemetryService) trackLicense() { @@ -836,7 +836,7 @@ func (ts *TelemetryService) trackLicense() { data["feature_"+featureName] = featureValue } - ts.sendTelemetry(TrackLicense, data) + ts.SendTelemetry(TrackLicense, data) } } @@ -891,7 +891,7 @@ func (ts *TelemetryService) trackPlugins() { totalDisabledCount = -1 // -1 to indicate disabled or error } - ts.sendTelemetry(TrackPlugins, map[string]interface{}{ + ts.SendTelemetry(TrackPlugins, map[string]interface{}{ "enabled_plugins": totalEnabledCount, "enabled_webapp_plugins": webappEnabledCount, "enabled_backend_plugins": backendEnabledCount, @@ -920,7 +920,7 @@ func (ts *TelemetryService) trackServer() { data["database_version"] = scr } - ts.sendTelemetry(TrackServer, data) + ts.SendTelemetry(TrackServer, data) } func (ts *TelemetryService) trackPermissions() { @@ -934,7 +934,7 @@ func (ts *TelemetryService) trackPermissions() { phase2Complete = true } - ts.sendTelemetry(TrackPermissionsGeneral, map[string]interface{}{ + ts.SendTelemetry(TrackPermissionsGeneral, map[string]interface{}{ "phase_1_migration_complete": phase1Complete, "phase_2_migration_complete": phase2Complete, }) @@ -1012,7 +1012,7 @@ func (ts *TelemetryService) trackPermissions() { systemReadOnlyAdminCount = 0 } - ts.sendTelemetry(TrackPermissionsSystemScheme, map[string]interface{}{ + ts.SendTelemetry(TrackPermissionsSystemScheme, map[string]interface{}{ "system_admin_permissions": systemAdminPermissions, "system_user_permissions": systemUserPermissions, "system_manager_permissions": systemManagerPermissions, @@ -1066,7 +1066,7 @@ func (ts *TelemetryService) trackPermissions() { count, _ := ts.dbStore.Team().AnalyticsGetTeamCountForScheme(scheme.Id) - ts.sendTelemetry(TrackPermissionsTeamSchemes, map[string]interface{}{ + ts.SendTelemetry(TrackPermissionsTeamSchemes, map[string]interface{}{ "scheme_id": scheme.Id, "team_admin_permissions": teamAdminPermissions, "team_user_permissions": teamUserPermissions, @@ -1089,7 +1089,7 @@ func (ts *TelemetryService) trackElasticsearch() { } } - ts.sendTelemetry(TrackElasticsearch, data) + ts.SendTelemetry(TrackElasticsearch, data) } func (ts *TelemetryService) trackGroups() { @@ -1133,7 +1133,7 @@ func (ts *TelemetryService) trackGroups() { mlog.Debug("Could not get group_count_with_allow_reference", mlog.Err(err)) } - ts.sendTelemetry(TrackGroups, map[string]interface{}{ + ts.SendTelemetry(TrackGroups, map[string]interface{}{ "group_count": groupCount, "group_team_count": groupTeamCount, "group_channel_count": groupChannelCount, @@ -1188,7 +1188,7 @@ func (ts *TelemetryService) trackChannelModeration() { mlog.Debug("Could not get use_channel_mentions_guest_disabled_count", mlog.Err(err)) } - ts.sendTelemetry(TrackChannelModeration, map[string]interface{}{ + ts.SendTelemetry(TrackChannelModeration, map[string]interface{}{ "channel_scheme_count": channelSchemeCount, "create_post_user_disabled_count": createPostUser, @@ -1272,7 +1272,7 @@ func (ts *TelemetryService) trackWarnMetrics() { for key, value := range systemDataList { if strings.HasPrefix(key, model.WarnMetricStatusStorePrefix) { if _, ok := model.WarnMetricsTable[key]; ok { - ts.sendTelemetry(TrackWarnMetrics, map[string]interface{}{ + ts.SendTelemetry(TrackWarnMetrics, map[string]interface{}{ key: value != "false", }) } @@ -1359,7 +1359,7 @@ func (ts *TelemetryService) trackPluginConfig(cfg *model.Config, marketplaceURL } } - ts.sendTelemetry(TrackConfigPlugin, pluginConfigData) + ts.SendTelemetry(TrackConfigPlugin, pluginConfigData) } func (ts *TelemetryService) getAllMarketplaceplugins(marketplaceURL string) ([]*model.BaseMarketplacePlugin, error) { diff --git a/services/telemetry/telemetry_test.go b/services/telemetry/telemetry_test.go index bba229c86a..ac1731d2df 100644 --- a/services/telemetry/telemetry_test.go +++ b/services/telemetry/telemetry_test.go @@ -417,7 +417,7 @@ func TestRudderTelemetry(t *testing.T) { t.Run("Send", func(t *testing.T) { testValue := "test-send-value-6789" - telemetryService.sendTelemetry("Testing Telemetry", map[string]interface{}{ + telemetryService.SendTelemetry("Testing Telemetry", map[string]interface{}{ "hey": testValue, }) select {