github.com/Cloud-Foundations/Dominator@v0.3.4/imagebuilder/logarchiver/get.go (about)

     1  package logarchiver
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  	"path/filepath"
     7  )
     8  
     9  func (a *buildLogArchiver) GetBuildInfos(includeGood bool,
    10  	includeBad bool) *BuildInfos {
    11  	buildInfos := &BuildInfos{Builds: make(map[string]BuildInfo)}
    12  	a.mutex.Lock()
    13  	defer a.mutex.Unlock()
    14  	for element := a.ageList.Front(); element != nil; element = element.Next() {
    15  		image := element.Value.(*imageType)
    16  		imageStream := image.imageStream
    17  		if image.buildInfo.Error == "" && !includeGood {
    18  			continue
    19  		}
    20  		if image.buildInfo.Error != "" && !includeBad {
    21  			continue
    22  		}
    23  		imageName := filepath.Join(imageStream.name, image.name)
    24  		buildInfos.Builds[imageName] = image.buildInfo
    25  		buildInfos.ImagesByAge = append(buildInfos.ImagesByAge, imageName)
    26  	}
    27  	return buildInfos
    28  }
    29  
    30  func (a *buildLogArchiver) GetBuildInfosForRequestor(username string,
    31  	includeGood, includeBad bool) *BuildInfos {
    32  	buildInfos := &BuildInfos{Builds: make(map[string]BuildInfo)}
    33  	a.mutex.Lock()
    34  	defer a.mutex.Unlock()
    35  	for _, imageStream := range a.imageStreams {
    36  		for name, image := range imageStream.images {
    37  			if username != image.buildInfo.RequestorUsername {
    38  				continue
    39  			}
    40  			if image.buildInfo.Error == "" && !includeGood {
    41  				continue
    42  			}
    43  			if image.buildInfo.Error != "" && !includeBad {
    44  				continue
    45  			}
    46  			buildInfos.Builds[filepath.Join(imageStream.name,
    47  				name)] = image.buildInfo
    48  		}
    49  	}
    50  	return buildInfos
    51  }
    52  
    53  func (a *buildLogArchiver) GetBuildInfosForStream(streamName string,
    54  	includeGood, includeBad bool) *BuildInfos {
    55  	buildInfos := &BuildInfos{Builds: make(map[string]BuildInfo)}
    56  	a.mutex.Lock()
    57  	defer a.mutex.Unlock()
    58  	for name, image := range a.imageStreams[streamName].images {
    59  		if image.buildInfo.Error == "" && !includeGood {
    60  			continue
    61  		}
    62  		if image.buildInfo.Error != "" && !includeBad {
    63  			continue
    64  		}
    65  		buildInfos.Builds[filepath.Join(streamName, name)] = image.buildInfo
    66  	}
    67  	return buildInfos
    68  }
    69  
    70  func (a *buildLogArchiver) GetBuildLog(imageName string) (
    71  	io.ReadCloser, error) {
    72  	return os.Open(filepath.Join(a.options.Topdir, imageName, "buildLog"))
    73  }
    74  
    75  func (a *buildLogArchiver) GetSummary() *Summary {
    76  	summary := &Summary{
    77  		Streams:    make(map[string]*StreamSummary),
    78  		Requestors: make(map[string]*RequestorSummary),
    79  	}
    80  	a.mutex.Lock()
    81  	defer a.mutex.Unlock()
    82  	for _, imageStream := range a.imageStreams {
    83  		streamSummary := StreamSummary{}
    84  		for _, image := range imageStream.images {
    85  			requestorSummary :=
    86  				summary.Requestors[image.buildInfo.RequestorUsername]
    87  			if requestorSummary == nil {
    88  				requestorSummary = &RequestorSummary{}
    89  				summary.Requestors[image.buildInfo.RequestorUsername] =
    90  					requestorSummary
    91  			}
    92  			requestorSummary.NumBuilds++
    93  			streamSummary.NumBuilds++
    94  			if image.buildInfo.Error == "" {
    95  				requestorSummary.NumGoodBuilds++
    96  				streamSummary.NumGoodBuilds++
    97  			} else {
    98  				requestorSummary.NumErrorBuilds++
    99  				streamSummary.NumErrorBuilds++
   100  			}
   101  		}
   102  		summary.Streams[imageStream.name] = &streamSummary
   103  	}
   104  	return summary
   105  }