// NewManager constructs a user.Manager for use func NewManager(rMgr region.Manager, hMgr host.Manager, jMgr job.Manager, userConnector core.UserConnector, pers persist.MGMDB, notify notifier, log logger.Log) Manager { um := Manager{} um.log = logger.Wrap("USER", log) um.conn = userConnector um.hMgr = hMgr um.rMgr = rMgr um.jMgr = jMgr um.mgm = pers um.users = make(map[uuid.UUID]mgm.User) um.uMutex = &sync.Mutex{} um.pendingUsers = make(map[string]mgm.PendingUser) um.puMutex = &sync.Mutex{} um.estates = make(map[int64]mgm.Estate) um.estateMutex = &sync.Mutex{} um.groups = make(map[uuid.UUID]mgm.Group) um.groupMutex = &sync.Mutex{} um.notify = notify // Get users from simian users, err := userConnector.GetUsers() if err != nil { um.log.Fatal("Cannot get users from simian: ", err.Error()) } for _, u := range users { um.users[u.UserID] = u } // get pending users from mysql for _, u := range pers.QueryPendingUsers() { um.pendingUsers[u.Email] = u } //get estates from mysql for _, e := range pers.QueryEstates() { um.estates[e.ID] = e } // Get groups from simian groups, err := userConnector.GetGroups() if err != nil { um.log.Fatal("Cannot get groups from simian: ", err.Error()) } for _, g := range groups { um.groups[g.ID] = g } return um }