* add metrics definitions for shared channels
Этот коммит содержится в:
Doug Lauder
2024-02-21 17:21:35 -05:00
коммит произвёл GitHub
родитель f90b3d4141
Коммит 38bbf04e48
9 изменённых файлов: 318 добавлений и 8 удалений

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

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