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  }