Add metric warning support (announcement bar and DM) (#14483)
* Admin. Advisory: Add warning for number of active users metric status Co-authored-by: Catalin Tomai <catalin.tomai@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
56fb31f06f
Коммит
549e5b57cd
@@ -1090,6 +1090,13 @@ func runLicenseExpirationCheckJob(a *App) {
|
||||
}, time.Hour*24)
|
||||
}
|
||||
|
||||
func runCheckNumberOfActiveUsersWarnMetricStatusJob(a *App) {
|
||||
doCheckNumberOfActiveUsersWarnMetricStatus(a)
|
||||
model.CreateRecurringTask("Check Number Of Active Users Warn Metric Status", func() {
|
||||
doCheckNumberOfActiveUsersWarnMetricStatus(a)
|
||||
}, time.Hour*24)
|
||||
}
|
||||
|
||||
func doSecurity(s *Server) {
|
||||
s.DoSecurityUpdateCheck()
|
||||
}
|
||||
@@ -1117,6 +1124,58 @@ func doSessionCleanup(s *Server) {
|
||||
s.Store.Session().Cleanup(model.GetMillis(), SESSIONS_CLEANUP_BATCH_SIZE)
|
||||
}
|
||||
|
||||
func doCheckNumberOfActiveUsersWarnMetricStatus(a *App) {
|
||||
license := a.Srv().License()
|
||||
if license != nil {
|
||||
mlog.Debug("License is present, skip this check")
|
||||
return
|
||||
}
|
||||
|
||||
numberOfActiveUsers, err := a.Srv().Store.User().Count(model.UserCountOptions{})
|
||||
if err != nil {
|
||||
mlog.Error("Error to get active registered users.", mlog.Err(err))
|
||||
}
|
||||
|
||||
warnMetrics := []model.WarnMetric{}
|
||||
if numberOfActiveUsers < model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_200].Limit {
|
||||
return
|
||||
} else if numberOfActiveUsers >= model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_200].Limit && numberOfActiveUsers < model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_400].Limit {
|
||||
warnMetrics = append(warnMetrics, model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_200])
|
||||
} else if numberOfActiveUsers >= model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_400].Limit && numberOfActiveUsers < model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_500].Limit {
|
||||
warnMetrics = append(warnMetrics, model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_400])
|
||||
} else {
|
||||
warnMetrics = append(warnMetrics, model.WarnMetricsTable[model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_500])
|
||||
}
|
||||
|
||||
for _, warnMetric := range warnMetrics {
|
||||
data, err := a.Srv().Store.System().GetByName(warnMetric.Id)
|
||||
if err == nil && data != nil && (data.Value == model.WARN_METRIC_STATUS_ACK || data.Value == model.WARN_METRIC_STATUS_RUNONCE) {
|
||||
mlog.Debug("This metric warning has already been acked or should only run once")
|
||||
continue
|
||||
}
|
||||
|
||||
if err = a.Srv().Store.System().SaveOrUpdate(&model.System{Name: warnMetric.Id, Value: model.WARN_METRIC_STATUS_LIMIT_REACHED}); err != nil {
|
||||
mlog.Error("Unable to write to database.", mlog.String("id", warnMetric.Id), mlog.Err(err))
|
||||
continue
|
||||
}
|
||||
warnMetricStatus, _ := a.getWarnMetricStatusAndDisplayTextsForId(warnMetric.Id, nil)
|
||||
|
||||
if !warnMetric.IsBotOnly {
|
||||
message := model.NewWebSocketEvent(model.WEBSOCKET_WARN_METRIC_STATUS_RECEIVED, "", "", "", nil)
|
||||
message.Add("warnMetricStatus", warnMetricStatus.ToJson())
|
||||
a.Publish(message)
|
||||
}
|
||||
|
||||
if err = a.notifyAdminsOfWarnMetricStatus(warnMetric.Id); err != nil {
|
||||
mlog.Error("Failed to send notifications to admin users.", mlog.Err(err))
|
||||
}
|
||||
|
||||
if warnMetric.IsRunOnce {
|
||||
a.setWarnMetricsStatusForId(warnMetric.Id, model.WARN_METRIC_STATUS_RUNONCE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func doLicenseExpirationCheck(a *App) {
|
||||
a.Srv().LoadLicense()
|
||||
license := a.Srv().License()
|
||||
|
||||
Ссылка в новой задаче
Block a user