first commit
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
package lexicomai
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
// InstallSession — описатель одной запущенной (или завершённой) установки.
|
||||
// Хранится в Manager, чтобы клиент мог опросить статус по id.
|
||||
type InstallSession struct {
|
||||
ID string
|
||||
Target string // alias машины
|
||||
Product string
|
||||
Branch string
|
||||
Version string
|
||||
File string // имя дистрибутива
|
||||
LogFile string // путь к логу установки на машине
|
||||
Started time.Time
|
||||
}
|
||||
|
||||
// installSessions — потокобезопасный реестр установок.
|
||||
type installSessions struct {
|
||||
mu sync.Mutex
|
||||
list map[string]*InstallSession
|
||||
seq atomic.Int64
|
||||
}
|
||||
|
||||
func newInstallSessions() *installSessions {
|
||||
return &installSessions{list: make(map[string]*InstallSession)}
|
||||
}
|
||||
|
||||
// add создаёт и регистрирует новую сессию; возвращает её с присвоенным id.
|
||||
func (s *installSessions) add(target, product, branch, version, file, logFile string) *InstallSession {
|
||||
n := s.seq.Add(1)
|
||||
id := fmt.Sprintf("i%d-%d", time.Now().UnixNano(), n)
|
||||
sess := &InstallSession{
|
||||
ID: id,
|
||||
Target: target,
|
||||
Product: product,
|
||||
Branch: branch,
|
||||
Version: version,
|
||||
File: file,
|
||||
LogFile: logFile,
|
||||
Started: time.Now(),
|
||||
}
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
s.list[id] = sess
|
||||
return sess
|
||||
}
|
||||
|
||||
// get возвращает сессию по id.
|
||||
func (s *installSessions) get(id string) (*InstallSession, bool) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
sess, ok := s.list[id]
|
||||
return sess, ok
|
||||
}
|
||||
Reference in New Issue
Block a user