Metrics for shared channels (#26199)
* add metrics definitions for shared channels
Этот коммит содержится в:
@@ -178,12 +178,25 @@ func (scs *Service) doSync() time.Duration {
|
||||
var task syncTask
|
||||
var ok bool
|
||||
var shortestWait time.Duration
|
||||
metrics := scs.server.GetMetrics()
|
||||
|
||||
if metrics != nil {
|
||||
scs.mux.Lock()
|
||||
size := len(scs.tasks)
|
||||
scs.mux.Unlock()
|
||||
metrics.ObserveSharedChannelsQueueSize(int64(size))
|
||||
}
|
||||
|
||||
for {
|
||||
task, ok, shortestWait = scs.removeOldestTask()
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
if metrics != nil {
|
||||
metrics.ObserveSharedChannelsTaskInQueueDuration(time.Since(task.AddedAt).Seconds())
|
||||
}
|
||||
|
||||
if err := scs.processTask(task); err != nil {
|
||||
// put task back into map so it will update again
|
||||
if task.incRetry() {
|
||||
@@ -236,18 +249,22 @@ func (scs *Service) removeOldestTask() (syncTask, bool, time.Duration) {
|
||||
|
||||
// processTask updates one or more remote clusters with any new channel content.
|
||||
func (scs *Service) processTask(task syncTask) error {
|
||||
var err error
|
||||
var remotes []*model.RemoteCluster
|
||||
// map is used to ensure remotes don't get sync'd twice, such as when
|
||||
// they have the autoinvited flag and have explicitly subscribed to a channel.
|
||||
remotesMap := make(map[string]*model.RemoteCluster)
|
||||
|
||||
if task.remoteID == "" {
|
||||
filter := model.RemoteClusterQueryFilter{
|
||||
InChannel: task.channelID,
|
||||
OnlyConfirmed: true,
|
||||
}
|
||||
remotes, err = scs.server.GetStore().RemoteCluster().GetAll(filter)
|
||||
remotes, err := scs.server.GetStore().RemoteCluster().GetAll(filter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, r := range remotes {
|
||||
remotesMap[r.RemoteId] = r
|
||||
}
|
||||
|
||||
// add all remotes that have the autoinvited option.
|
||||
filter = model.RemoteClusterQueryFilter{
|
||||
@@ -257,7 +274,9 @@ func (scs *Service) processTask(task syncTask) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
remotes = append(remotes, remotesAutoInvited...)
|
||||
for _, r := range remotesAutoInvited {
|
||||
remotesMap[r.RemoteId] = r
|
||||
}
|
||||
} else {
|
||||
rc, err := scs.server.GetStore().RemoteCluster().Get(task.remoteID)
|
||||
if err != nil {
|
||||
@@ -266,10 +285,10 @@ func (scs *Service) processTask(task syncTask) error {
|
||||
if !rc.IsOnline() {
|
||||
return fmt.Errorf("Failed updating shared channel '%s' for offline remote cluster '%s'", task.channelID, rc.DisplayName)
|
||||
}
|
||||
remotes = []*model.RemoteCluster{rc}
|
||||
remotesMap[rc.RemoteId] = rc
|
||||
}
|
||||
|
||||
for _, rc := range remotes {
|
||||
for _, rc := range remotesMap {
|
||||
rtask := task
|
||||
rtask.remoteID = rc.RemoteId
|
||||
if err := scs.syncForRemote(rtask, rc); err != nil {
|
||||
|
||||
Ссылка в новой задаче
Block a user