[MM-40022] - Expose telemetry service in the server (#18976)

* [MM-40022] - Expose telemetry service in the server

* make app-layers

* feedback impl
Этот коммит содержится в:
Allan Guwatudde
2021-11-12 10:16:19 +03:00
коммит произвёл GitHub
родитель a850704afe
Коммит e3240a2ddd
3 изменённых файлов: 58 добавлений и 48 удалений

10
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
}

Просмотреть файл

@@ -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) {

Просмотреть файл

@@ -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 {