github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/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 }