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 }