diff --git a/consul/state_store.go b/consul/state_store.go index 3fff27e9af..2dfb7ec21e 100644 --- a/consul/state_store.go +++ b/consul/state_store.go @@ -299,6 +299,9 @@ func (s *StateStore) initialize() error { "KVSGet": MDBTables{s.kvsTable}, "KVSList": MDBTables{s.kvsTable}, "KVSListKeys": MDBTables{s.kvsTable}, + "SessionGet": MDBTables{s.sessionTable}, + "SessionList": MDBTables{s.sessionTable}, + "NodeSessions": MDBTables{s.sessionTable}, } return nil } @@ -1212,6 +1215,36 @@ func (s *StateStore) SessionRestore(session *structs.Session) error { return tx.Commit() } +// SessionGet is used to get a session entry +func (s *StateStore) SessionGet(id string) (uint64, *structs.Session, error) { + idx, res, err := s.sessionTable.Get("id", id) + var d *structs.Session + if len(res) > 0 { + d = res[0].(*structs.Session) + } + return idx, d, err +} + +// SessionList is used to list all the open sessions +func (s *StateStore) SessionList() (uint64, []*structs.Session, error) { + idx, res, err := s.sessionTable.Get("id") + out := make([]*structs.Session, len(res)) + for i, raw := range res { + out[i] = raw.(*structs.Session) + } + return idx, out, err +} + +// NodeSessions is used to list all the open sessions for a node +func (s *StateStore) NodeSessions(node string) (uint64, []*structs.Session, error) { + idx, res, err := s.sessionTable.Get("node", node) + out := make([]*structs.Session, len(res)) + for i, raw := range res { + out[i] = raw.(*structs.Session) + } + return idx, out, err +} + // Snapshot is used to create a point in time snapshot func (s *StateStore) Snapshot() (*StateSnapshot, error) { // Begin a new txn on all tables