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 удалений

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

@@ -77,20 +77,7 @@ 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
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"