okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
02d2013
main
1package daemon 2 3import ( 4"context" 5"fmt" 6"io" 7"net/http" 8"strings" 9"time" 10 11"albedo/cli/internal/daemon/protocol" 12) 13 14const completedActionTimeout = 200 * time .Second 15 16type ReloadRequest struct {Target string } 17 18type SessionReloadResult protocol.ReloadResult 19type KernelUpgradeResult protocol.KernelUpgradeResult 20type CompactionResult protocol.CompactionResult 21 22func ReloadSession (ctx context.Context ,conn * Connection ,id string ,request ReloadRequest ) (SessionReloadResult ,error ) { 23var w protocol.ReloadResult 24err := executeMutation (ctx ,conn ,operation {Name :"reload session" ,BuildRequest :func (base string ,body io.Reader ) (* http.Request ,error ) { 25return protocol .NewReloadSessionRequestWithBody (base ,id ,"application/json" ,body ) 26 },Body : protocol.ReloadRequest {Target :optionalText (request .Target )},Policy :noRecovery ,Timeout :completedActionTimeout }, []int {200 },func (data []byte ,_ int )error { 27if err := decodeRequired (data ,& w );err != nil { 28return err 29 } 30if w .CachePolicy != nil && (w .CachePolicy .State != "refreshed" && w .CachePolicy .State != "failed" || (w .CachePolicy .State == "failed" )!= (w .CachePolicy .Failure != nil )) { 31return fieldError ("cache policy reload outcome" ) 32 } 33return nil 34 }) 35return SessionReloadResult (w ),err 36} 37 38func (r SessionReloadResult )Message ()string { 39message := "Reload completed." 40if r .Session != nil { 41if r .Session .State != "applied" { 42message = "Session reload " + r .Session .State + "." 43 } 44if r .Session .RestartRequired { 45message += " Kernel restart required." 46 } 47if r .Session .Failure != nil { 48message = r .Session .Failure .Detail 49 } 50for _ ,warning := range r .Session .Warnings { 51message += " " + warning .Detail 52 } 53 } 54for _ ,model := range r .Models { 55if model .Failure != nil { 56message += " " + model .Failure .Detail 57 } 58 } 59if r .CachePolicy != nil && r .CachePolicy .Failure != nil { 60message += " Cache policy reload failed: " + r .CachePolicy .Failure .Detail 61 } 62return message 63} 64func UpgradeKernel (ctx context.Context ,conn * Connection ,id string ) (KernelUpgradeResult ,error ) { 65var w protocol.KernelUpgradeResult 66err := executeMutation (ctx ,conn ,operation {Name :"upgrade kernel" ,BuildRequest :func (base string ,body io.Reader ) (* http.Request ,error ) { 67return protocol .NewUpgradeKernelRequestWithBody (base ,id ,"application/json" ,body ) 68 },Body :struct {}{},Policy :noRecovery ,Timeout :completedActionTimeout }, []int {200 },func (data []byte ,_ int )error { 69return decodeRequired (data ,& w ) 70 }) 71return KernelUpgradeResult (w ),err 72} 73 74func (r KernelUpgradeResult )Message ()string { 75var message strings.Builder 76fmt .Fprintf (& message ,"Kernel %s; %d background jobs stopped." ,r .State ,len (r .StoppedJobs )) 77for _ ,warning := range r .Warnings { 78message .WriteByte (' ' ) 79message .WriteString (warning .Detail ) 80 } 81if r .Failure != nil { 82message .WriteByte (' ' ) 83message .WriteString (r .Failure .Detail ) 84 } 85return message .String () 86} 87func CompactSession (ctx context.Context ,conn * Connection ,id ,strategy string ) (CompactionResult ,error ) { 88body := protocol.CompactionRequest {Strategy :optionalText (strategy )} 89var w protocol.CompactionResult 90err := executeMutation (ctx ,conn ,operation {Name :"compact session" ,BuildRequest :func (base string ,body io.Reader ) (* http.Request ,error ) { 91return protocol .NewCompactSessionRequestWithBody (base ,id ,"application/json" ,body ) 92 },Body :body ,Policy :noRecovery ,Timeout :completedActionTimeout }, []int {200 },func (data []byte ,_ int )error { 93return decodeRequired (data ,& w ) 94 }) 95return CompactionResult (w ),err 96} 97 98func (r CompactionResult )Message ()string { 99message := "Context " + r .State + "." 100if r .Observation != nil { 101message += fmt .Sprintf (" %d entries evicted." ,r .Observation .EvictedEntries ) 102 } 103if r .Failure != nil { 104message += " " + r .Failure .Detail 105 } 106return message 107}