first commit

This commit is contained in:
Maksim Totmin
2026-10-01 09:50:59 +07:00
commit 4beb4b55d3
29 changed files with 3034 additions and 0 deletions
+60
View File
@@ -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
}