Esempio n. 1
0
// 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
}