MM-59826: Add more invalidation event types (#27719)

This came up as part of the Redis work. I noticed that a lot of new
invalidation events were missing. This is important to understand
where invalidations are coming from.

https://mattermost.atlassian.net/browse/MM-59826

```release-note
NONE
```

Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
Agniva De Sarker
2024-07-26 19:09:09 +05:30
коммит произвёл GitHub
родитель 5547504c1d
Коммит c72e14f73d
2 изменённых файлов: 50 добавлений и 49 удалений

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

@@ -76,21 +76,8 @@ type MetricsInterfaceImpl struct {
ClusterHealthGauge prometheus.GaugeFunc ClusterHealthGauge prometheus.GaugeFunc
ClusterEventTypeCounters *prometheus.CounterVec ClusterEventTypeCounters *prometheus.CounterVec
ClusterEventTypePublish prometheus.Counter ClusterEventMap map[model.ClusterEvent]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
LoginCounter prometheus.Counter LoginCounter prometheus.Counter
LoginFailCounter prometheus.Counter LoginFailCounter prometheus.Counter
@@ -467,17 +454,48 @@ func New(ps *platform.PlatformService, driver, dataSource string) *MetricsInterf
[]string{"name"}, []string{"name"},
) )
m.Registry.MustRegister(m.ClusterEventTypeCounters) m.Registry.MustRegister(m.ClusterEventTypeCounters)
m.ClusterEventTypePublish = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventPublish)}) m.ClusterEventMap = make(map[model.ClusterEvent]prometheus.Counter)
m.ClusterEventTypeStatus = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventUpdateStatus)}) for _, event := range []model.ClusterEvent{
m.ClusterEventTypeInvAll = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateAllCaches)}) // Note: Keep this list in sync with the events in model/cluster_message.go.
m.ClusterEventTypeInvReactions = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForReactions)}) model.ClusterEventPublish,
m.ClusterEventTypeInvChannelMembersNotifyProps = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForChannelMembersNotifyProps)}) model.ClusterEventUpdateStatus,
m.ClusterEventTypeInvChannelByName = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForChannelByName)}) model.ClusterEventInvalidateAllCaches,
m.ClusterEventTypeInvChannel = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForChannel)}) model.ClusterEventInvalidateCacheForReactions,
m.ClusterEventTypeInvUser = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForUser)}) model.ClusterEventInvalidateCacheForChannelMembersNotifyProps,
m.ClusterEventTypeInvSessions = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventClearSessionCacheForUser)}) model.ClusterEventInvalidateCacheForChannelByName,
m.ClusterEventTypeInvRoles = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": string(model.ClusterEventInvalidateCacheForRoles)}) model.ClusterEventInvalidateCacheForChannel,
m.ClusterEventTypeOther = m.ClusterEventTypeCounters.With(prometheus.Labels{"name": "other"}) 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 // Login Subsystem
@@ -1482,30 +1500,11 @@ func (mi *MetricsInterfaceImpl) ObserveAPIEndpointDuration(handler, method, stat
} }
func (mi *MetricsInterfaceImpl) IncrementClusterEventType(eventType model.ClusterEvent) { func (mi *MetricsInterfaceImpl) IncrementClusterEventType(eventType model.ClusterEvent) {
switch eventType { if event, ok := mi.ClusterEventMap[eventType]; ok {
case model.ClusterEventPublish: event.Inc()
mi.ClusterEventTypePublish.Inc() return
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()
} }
mi.ClusterEventMap[model.ClusterEvent("other")].Inc()
} }
func (mi *MetricsInterfaceImpl) IncrementLogin() { func (mi *MetricsInterfaceImpl) IncrementLogin() {

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

@@ -41,6 +41,8 @@ const (
ClusterEventPluginEvent ClusterEvent = "plugin_event" ClusterEventPluginEvent ClusterEvent = "plugin_event"
ClusterEventInvalidateCacheForTermsOfService ClusterEvent = "inv_terms_of_service" ClusterEventInvalidateCacheForTermsOfService ClusterEvent = "inv_terms_of_service"
ClusterEventBusyStateChanged ClusterEvent = "busy_state_change" 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 // Gossip communication
ClusterGossipEventRequestGetLogs = "gossip_request_get_logs" ClusterGossipEventRequestGetLogs = "gossip_request_get_logs"