마지막 배포 상태 항상 유지 + timestamp

This commit is contained in:
2023-10-26 13:53:36 +09:00
parent 282ef95ab0
commit 22148f8ae7
3 changed files with 55 additions and 23 deletions

View File

@ -371,18 +371,27 @@ func NewClient(standalone bool) (HoustonClient, error) {
prog := gatherDeployedPrograms(hc.config.StorageRoot, dr.Name) prog := gatherDeployedPrograms(hc.config.StorageRoot, dr.Name)
hc.deploys[dr.Name] = prog hc.deploys[dr.Name] = prog
op.Refresh(ctx, hc.makeOperationQueryRequest()) op.Refresh(ctx, hc.makeOperationQueryRequest())
op.ReportDeployingProgress(ctx, &protos.DeployingProgress{
Hostname: hn,
Name: dr.Name,
Version: dr.Version,
State: "success",
Progress: 0,
Total: 0,
})
} else { } else {
logger.Println(err) logger.Println(err)
}
op.ReportDeployingProgress(ctx, &protos.DeployingProgress{ op.ReportDeployingProgress(ctx, &protos.DeployingProgress{
Hostname: hn, Hostname: hn,
Name: dr.Name, Name: dr.Name,
Version: dr.Version, Version: dr.Version,
State: "done", State: "fail:" + err.Error(),
Progress: 0, Progress: 0,
Total: 0, Total: 0,
}) })
}
} }
case shared.Withdraw: case shared.Withdraw:

View File

@ -6,6 +6,7 @@ import (
"reflect" "reflect"
"strings" "strings"
"sync" "sync"
"time"
"repositories.action2quare.com/ayo/houston/shared" "repositories.action2quare.com/ayo/houston/shared"
"repositories.action2quare.com/ayo/houston/shared/protos" "repositories.action2quare.com/ayo/houston/shared/protos"
@ -59,16 +60,21 @@ type hostPool struct {
hosts map[string]*hostWithChan hosts map[string]*hostWithChan
} }
type deployingBoard struct { type deployingProgress struct {
sync.Mutex *protos.DeployingProgress
progs []*protos.DeployingProgress Timestamp int64
} }
func (db *deployingBoard) clone() (out []*protos.DeployingProgress) { type deployingBoard struct {
sync.Mutex
progs []deployingProgress
}
func (db *deployingBoard) clone() (out []deployingProgress) {
db.Lock() db.Lock()
defer db.Unlock() defer db.Unlock()
out = make([]*protos.DeployingProgress, len(db.progs)) out = make([]deployingProgress, len(db.progs))
copy(out, db.progs) copy(out, db.progs)
return return
} }
@ -211,16 +217,16 @@ func (os *operationServer) ReportDeployingProgress(ctx context.Context, dp *prot
for i, p := range os.db.progs { for i, p := range os.db.progs {
if p.Hostname == dp.Hostname && p.Name == dp.Name && p.Version == dp.Version { if p.Hostname == dp.Hostname && p.Name == dp.Name && p.Version == dp.Version {
if dp.State == "done" { os.db.progs[i].DeployingProgress = dp
os.db.progs = append(os.db.progs[:i], os.db.progs[i+1:]...) os.db.progs[i].Timestamp = time.Now().UTC().Unix()
} else {
os.db.progs[i] = dp
}
return &protos.Empty{}, nil return &protos.Empty{}, nil
} }
} }
os.db.progs = append(os.db.progs, dp) os.db.progs = append(os.db.progs, deployingProgress{
DeployingProgress: dp,
Timestamp: time.Now().UTC().Unix(),
})
return &protos.Empty{}, nil return &protos.Empty{}, nil
} }
@ -253,12 +259,29 @@ func (os *operationServer) Deploy(d DeployRequest) {
}) })
} }
for _, t := range targets { dps := make([]deployingProgress, len(targets))
now := time.Now().UTC().Unix()
for i, t := range targets {
dps[i] = deployingProgress{
DeployingProgress: &protos.DeployingProgress{
Hostname: t.Hostname,
Name: d.Name,
Version: d.Version,
State: "prepare",
},
Timestamp: now,
}
t.opChan <- &opdef{ t.opChan <- &opdef{
operation: shared.Deploy, operation: shared.Deploy,
args: d, args: d,
} }
} }
os.db.Lock()
defer os.db.Unlock()
os.db.progs = dps
} }
func (os *operationServer) Withdraw(d WithdrawRequest) { func (os *operationServer) Withdraw(d WithdrawRequest) {
@ -418,7 +441,7 @@ func (os *operationServer) Hosts() map[string]hostSnapshot {
return os.hp.allHosts() return os.hp.allHosts()
} }
func (os *operationServer) DeplyingProgress() []*protos.DeployingProgress { func (os *operationServer) DeplyingProgress() []deployingProgress {
return os.db.clone() return os.db.clone()
} }

View File

@ -108,7 +108,7 @@ type Operation interface {
RestartProcess(RestartProcessRequest) RestartProcess(RestartProcessRequest)
Upload(UploadRequest) Upload(UploadRequest)
Hosts() map[string]hostSnapshot Hosts() map[string]hostSnapshot
DeplyingProgress() []*protos.DeployingProgress DeplyingProgress() []deployingProgress
} }
func loadServerConfig() serverConfig { func loadServerConfig() serverConfig {