diff --git a/server/enterprise/metrics/metrics.go b/server/enterprise/metrics/metrics.go index a393b141ad..605d2fdb32 100644 --- a/server/enterprise/metrics/metrics.go +++ b/server/enterprise/metrics/metrics.go @@ -76,21 +76,8 @@ type MetricsInterfaceImpl struct { ClusterHealthGauge prometheus.GaugeFunc - ClusterEventTypeCounters *prometheus.CounterVec - ClusterEventTypePublish prometheus.Counter - ClusterEventTypeStatus prometheus.Counter - ClusterEventTypeInvAll prometheus.Counter - ClusterEventTypeInvReactions prometheus.Counter - ClusterEventTypeInvWebhook prometheus.Counter - ClusterEventTypeInvChannelPosts prometheus.Counter - ClusterEventTypeInvChannelMembersNotifyProps prometheus.Counter - ClusterEventTypeInvChannelMembers prometheus.Counter - ClusterEventTypeInvChannelByName prometheus.Counter - ClusterEventTypeInvChannel prometheus.Counter - ClusterEventTypeInvUser prometheus.Counter - ClusterEventTypeInvSessions prometheus.Counter - ClusterEventTypeInvRoles prometheus.Counter - ClusterEventTypeOther prometheus.Counter + ClusterEventTypeCounters *prometheus.CounterVec + ClusterEventMap map[model.ClusterEvent]prometheus.Counter LoginCounter prometheus.Counter LoginFailCounter prometheus.Counter @@ -467,17 +454,48 @@ func New(ps *platform.PlatformService, driver, dataSource string) *MetricsInterf []string{"name"}, ) m.Registry.MustRegister(m.ClusterEventTypeCounters) - m.ClusterEventTypePublish = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventPublish)}) - m.ClusterEventTypeStatus = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventUpdateStatus)}) - m.ClusterEventTypeInvAll = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateAllCaches)}) - m.ClusterEventTypeInvReactions = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForReactions)}) - m.ClusterEventTypeInvChannelMembersNotifyProps = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForChannelMembersNotifyProps)}) - m.ClusterEventTypeInvChannelByName = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForChannelByName)}) - m.ClusterEventTypeInvChannel = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForChannel)}) - m.ClusterEventTypeInvUser = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForUser)}) - m.ClusterEventTypeInvSessions = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventClearSessionCacheForUser)}) - m.ClusterEventTypeInvRoles = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForRoles)}) - m.ClusterEventTypeOther = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": "other"}) + m.ClusterEventMap = make(map[model.ClusterEvent]prometheus.Counter) + for _, event := range []model.ClusterEvent{ + // Note: Keep this list in sync with the events in model/cluster_message.go. + model.ClusterEventPublish, + model.ClusterEventUpdateStatus, + model.ClusterEventInvalidateAllCaches, + model.ClusterEventInvalidateCacheForReactions, + model.ClusterEventInvalidateCacheForChannelMembersNotifyProps, + model.ClusterEventInvalidateCacheForChannelByName, + model.ClusterEventInvalidateCacheForChannel, + model.ClusterEventInvalidateCacheForChannelGuestCount, + model.ClusterEventInvalidateCacheForUser, + model.ClusterEventInvalidateCacheForUserTeams, + model.ClusterEventClearSessionCacheForUser, + model.ClusterEventInvalidateCacheForRoles, + model.ClusterEventInvalidateCacheForRolePermissions, + model.ClusterEventInvalidateCacheForProfileByIds, + model.ClusterEventInvalidateCacheForAllProfiles, + model.ClusterEventInvalidateCacheForProfileInChannel, + model.ClusterEventInvalidateCacheForSchemes, + model.ClusterEventInvalidateCacheForFileInfos, + model.ClusterEventInvalidateCacheForWebhooks, + model.ClusterEventInvalidateCacheForEmojisById, + model.ClusterEventInvalidateCacheForEmojisIdByName, + model.ClusterEventInvalidateCacheForChannelFileCount, + model.ClusterEventInvalidateCacheForChannelPinnedpostsCounts, + model.ClusterEventInvalidateCacheForChannelMemberCounts, + model.ClusterEventInvalidateCacheForChannelsMemberCount, + model.ClusterEventInvalidateCacheForLastPosts, + model.ClusterEventInvalidateCacheForLastPostTime, + model.ClusterEventInvalidateCacheForPostsUsage, + model.ClusterEventInvalidateCacheForTeams, + model.ClusterEventClearSessionCacheForAllUsers, + model.ClusterEventInstallPlugin, + model.ClusterEventRemovePlugin, + model.ClusterEventPluginEvent, + model.ClusterEventInvalidateCacheForTermsOfService, + model.ClusterEventBusyStateChanged, + } { + m.ClusterEventMap[event] = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(event)}) + } + m.ClusterEventMap[model.ClusterEvent("other")] = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": "other"}) // Login Subsystem @@ -1482,30 +1500,11 @@ func (mi *MetricsInterfaceImpl) ObserveAPIEndpointDuration(handler, method, stat } func (mi *MetricsInterfaceImpl) IncrementClusterEventType(eventType model.ClusterEvent) { - switch eventType { - case model.ClusterEventPublish: - mi.ClusterEventTypePublish.Inc() - case model.ClusterEventUpdateStatus: - mi.ClusterEventTypeStatus.Inc() - case model.ClusterEventInvalidateAllCaches: - mi.ClusterEventTypeInvAll.Inc() - case model.ClusterEventInvalidateCacheForReactions: - mi.ClusterEventTypeInvReactions.Inc() - case model.ClusterEventInvalidateCacheForChannelMembersNotifyProps: - mi.ClusterEventTypeInvChannelMembersNotifyProps.Inc() - case model.ClusterEventInvalidateCacheForChannelByName: - mi.ClusterEventTypeInvChannelByName.Inc() - case model.ClusterEventInvalidateCacheForChannel: - mi.ClusterEventTypeInvChannel.Inc() - case model.ClusterEventInvalidateCacheForUser: - mi.ClusterEventTypeInvUser.Inc() - case model.ClusterEventClearSessionCacheForUser: - mi.ClusterEventTypeInvSessions.Inc() - case model.ClusterEventInvalidateCacheForRoles: - mi.ClusterEventTypeInvRoles.Inc() - default: - mi.ClusterEventTypeOther.Inc() + if event, ok := mi.ClusterEventMap[eventType]; ok { + event.Inc() + return } + mi.ClusterEventMap[model.ClusterEvent("other")].Inc() } func (mi *MetricsInterfaceImpl) IncrementLogin() { diff --git a/server/public/model/cluster_message.go b/server/public/model/cluster_message.go index c708af9a25..649dc8987a 100644 --- a/server/public/model/cluster_message.go +++ b/server/public/model/cluster_message.go @@ -41,6 +41,8 @@ const ( ClusterEventPluginEvent ClusterEvent = "plugin_event" ClusterEventInvalidateCacheForTermsOfService ClusterEvent = "inv_terms_of_service" ClusterEventBusyStateChanged ClusterEvent = "busy_state_change" + // Note: if you are adding a new event, please also add it in the slice of + // m.ClusterEventMap in metrics/metrics.go file. // Gossip communication ClusterGossipEventRequestGetLogs = "gossip_request_get_logs"