github.com/haalcala/mattermost-server-change-repo/v5@v5.33.2/store/sqlstore/cluster_discovery_store.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package sqlstore
     5  
     6  import (
     7  	sq "github.com/Masterminds/squirrel"
     8  	"github.com/pkg/errors"
     9  
    10  	"github.com/mattermost/mattermost-server/v5/model"
    11  	"github.com/mattermost/mattermost-server/v5/store"
    12  )
    13  
    14  type sqlClusterDiscoveryStore struct {
    15  	*SqlStore
    16  }
    17  
    18  func newSqlClusterDiscoveryStore(sqlStore *SqlStore) store.ClusterDiscoveryStore {
    19  	s := &sqlClusterDiscoveryStore{sqlStore}
    20  
    21  	for _, db := range sqlStore.GetAllConns() {
    22  		table := db.AddTableWithName(model.ClusterDiscovery{}, "ClusterDiscovery").SetKeys(false, "Id")
    23  		table.ColMap("Id").SetMaxSize(26)
    24  		table.ColMap("Type").SetMaxSize(64)
    25  		table.ColMap("ClusterName").SetMaxSize(64)
    26  		table.ColMap("Hostname").SetMaxSize(512)
    27  	}
    28  
    29  	return s
    30  }
    31  
    32  func (s sqlClusterDiscoveryStore) Save(ClusterDiscovery *model.ClusterDiscovery) error {
    33  	ClusterDiscovery.PreSave()
    34  	if err := ClusterDiscovery.IsValid(); err != nil {
    35  		return err
    36  	}
    37  
    38  	if err := s.GetMaster().Insert(ClusterDiscovery); err != nil {
    39  		return errors.Wrap(err, "failed to save ClusterDiscovery")
    40  	}
    41  	return nil
    42  }
    43  
    44  func (s sqlClusterDiscoveryStore) Delete(ClusterDiscovery *model.ClusterDiscovery) (bool, error) {
    45  	query := s.getQueryBuilder().
    46  		Delete("ClusterDiscovery").
    47  		Where(sq.Eq{"Type": ClusterDiscovery.Type}).
    48  		Where(sq.Eq{"ClusterName": ClusterDiscovery.ClusterName}).
    49  		Where(sq.Eq{"Hostname": ClusterDiscovery.Hostname})
    50  
    51  	queryString, args, err := query.ToSql()
    52  	if err != nil {
    53  		return false, errors.Wrap(err, "cluster_discovery_tosql")
    54  	}
    55  
    56  	count, err := s.GetMaster().SelectInt(queryString, args...)
    57  	if err != nil {
    58  		return false, errors.Wrap(err, "failed to delete ClusterDiscovery")
    59  	}
    60  	if count == 0 {
    61  		return false, nil
    62  	}
    63  	return true, nil
    64  }
    65  
    66  func (s sqlClusterDiscoveryStore) Exists(ClusterDiscovery *model.ClusterDiscovery) (bool, error) {
    67  	query := s.getQueryBuilder().
    68  		Select("COUNT(*)").
    69  		From("ClusterDiscovery").
    70  		Where(sq.Eq{"Type": ClusterDiscovery.Type}).
    71  		Where(sq.Eq{"ClusterName": ClusterDiscovery.ClusterName}).
    72  		Where(sq.Eq{"Hostname": ClusterDiscovery.Hostname})
    73  
    74  	queryString, args, err := query.ToSql()
    75  	if err != nil {
    76  		return false, errors.Wrap(err, "cluster_discovery_tosql")
    77  	}
    78  
    79  	count, err := s.GetMaster().SelectInt(queryString, args...)
    80  	if err != nil {
    81  		return false, errors.Wrap(err, "failed to count ClusterDiscovery")
    82  	}
    83  	if count == 0 {
    84  		return false, nil
    85  	}
    86  	return true, nil
    87  }
    88  
    89  func (s sqlClusterDiscoveryStore) GetAll(ClusterDiscoveryType, clusterName string) ([]*model.ClusterDiscovery, error) {
    90  	query := s.getQueryBuilder().
    91  		Select("*").
    92  		From("ClusterDiscovery").
    93  		Where(sq.Eq{"Type": ClusterDiscoveryType}).
    94  		Where(sq.Eq{"ClusterName": clusterName}).
    95  		Where(sq.Gt{"LastPingAt": model.GetMillis() - model.CDS_OFFLINE_AFTER_MILLIS})
    96  
    97  	queryString, args, err := query.ToSql()
    98  	if err != nil {
    99  		return nil, errors.Wrap(err, "cluster_discovery_tosql")
   100  	}
   101  
   102  	var list []*model.ClusterDiscovery
   103  	if _, err := s.GetMaster().Select(&list, queryString, args...); err != nil {
   104  		return nil, errors.Wrapf(err, "failed to find ClusterDiscovery")
   105  	}
   106  	return list, nil
   107  }
   108  
   109  func (s sqlClusterDiscoveryStore) SetLastPingAt(ClusterDiscovery *model.ClusterDiscovery) error {
   110  	query := s.getQueryBuilder().
   111  		Update("ClusterDiscovery").
   112  		Set("LastPingAt", model.GetMillis()).
   113  		Where(sq.Eq{"Type": ClusterDiscovery.Type}).
   114  		Where(sq.Eq{"ClusterName": ClusterDiscovery.ClusterName}).
   115  		Where(sq.Eq{"Hostname": ClusterDiscovery.Hostname})
   116  
   117  	queryString, args, err := query.ToSql()
   118  	if err != nil {
   119  		return errors.Wrap(err, "cluster_discovery_tosql")
   120  	}
   121  
   122  	if _, err := s.GetMaster().Exec(queryString, args...); err != nil {
   123  		return errors.Wrap(err, "failed to update ClusterDiscovery")
   124  	}
   125  	return nil
   126  }
   127  
   128  func (s sqlClusterDiscoveryStore) Cleanup() error {
   129  	query := s.getQueryBuilder().
   130  		Delete("ClusterDiscovery").
   131  		Where(sq.Lt{"LastPingAt": model.GetMillis() - model.CDS_OFFLINE_AFTER_MILLIS})
   132  
   133  	queryString, args, err := query.ToSql()
   134  	if err != nil {
   135  		return errors.Wrap(err, "cluster_discovery_tosql")
   136  	}
   137  
   138  	if _, err := s.GetMaster().Exec(queryString, args...); err != nil {
   139  		return errors.Wrap(err, "failed to delete ClusterDiscoveries")
   140  	}
   141  	return nil
   142  }