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

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

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