github.com/secure-build/gitlab-runner@v12.5.0+incompatible/executors/docker/machine/data.go (about) 1 package machine 2 3 import ( 4 "fmt" 5 "os" 6 "time" 7 8 "github.com/sirupsen/logrus" 9 ) 10 11 type machinesData struct { 12 Runner string 13 Acquired int 14 Creating int 15 Idle int 16 Used int 17 Removing int 18 StuckOnRemoving int 19 } 20 21 func (d *machinesData) Available() int { 22 return d.Acquired + d.Creating + d.Idle 23 } 24 25 func (d *machinesData) Total() int { 26 return d.Acquired + d.Creating + d.Idle + d.Used + d.Removing + d.StuckOnRemoving 27 } 28 29 func (d *machinesData) Add(details *machineDetails) { 30 switch details.State { 31 case machineStateIdle: 32 d.Idle++ 33 34 case machineStateCreating: 35 d.Creating++ 36 37 case machineStateAcquired: 38 d.Acquired++ 39 40 case machineStateUsed: 41 d.Used++ 42 43 case machineStateRemoving: 44 if details.isStuckOnRemove() { 45 d.StuckOnRemoving++ 46 } else { 47 d.Removing++ 48 } 49 } 50 } 51 52 func (d *machinesData) Fields() logrus.Fields { 53 return logrus.Fields{ 54 "runner": d.Runner, 55 "used": d.Used, 56 "idle": d.Idle, 57 "total": d.Total(), 58 "creating": d.Creating, 59 "removing": d.Removing, 60 } 61 } 62 63 func (d *machinesData) writeDebugInformation() { 64 if logrus.GetLevel() < logrus.DebugLevel { 65 return 66 } 67 68 file, err := os.OpenFile("machines.csv", os.O_RDWR|os.O_APPEND, 0600) 69 if err != nil { 70 return 71 } 72 defer file.Close() 73 fmt.Fprintln(file, 74 "time", time.Now(), 75 "runner", d.Runner, 76 "acquired", d.Acquired, 77 "creating", d.Creating, 78 "idle", d.Idle, 79 "used", d.Used, 80 "removing", d.Removing) 81 }