From 07633dc3078e63cd825a56319be67a4f54a8e593 Mon Sep 17 00:00:00 2001 From: Daniele Rondina Date: Sun, 5 Jan 2020 18:05:48 +0100 Subject: [PATCH] Add container-diff summary --- pkg/compiler/artifact.go | 35 ++++++++++++++++++++++++++++ pkg/compiler/backend/simpledocker.go | 15 ++++++++++-- pkg/compiler/interface.go | 13 +++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/pkg/compiler/artifact.go b/pkg/compiler/artifact.go index 44ac8f2c..af45d8d6 100644 --- a/pkg/compiler/artifact.go +++ b/pkg/compiler/artifact.go @@ -459,3 +459,38 @@ func ExtractArtifactFromDelta(src, dst string, layers []ArtifactLayer, concurren } return a, nil } + +func ComputeArtifactLayerSummary(diffs []ArtifactLayer) ArtifactLayersSummary { + + ans := ArtifactLayersSummary{ + Layers: make([]ArtifactLayerSummary, 0), + } + + for _, layer := range diffs { + sum := ArtifactLayerSummary{ + FromImage: layer.FromImage, + ToImage: layer.ToImage, + AddFiles: 0, + AddSizes: 0, + DelFiles: 0, + DelSizes: 0, + ChangeFiles: 0, + ChangeSizes: 0, + } + for _, a := range layer.Diffs.Additions { + sum.AddFiles++ + sum.AddSizes += int64(a.Size) + } + for _, d := range layer.Diffs.Deletions { + sum.DelFiles++ + sum.DelSizes += int64(d.Size) + } + for _, c := range layer.Diffs.Changes { + sum.ChangeFiles++ + sum.ChangeSizes += int64(c.Size) + } + ans.Layers = append(ans.Layers, sum) + } + + return ans +} diff --git a/pkg/compiler/backend/simpledocker.go b/pkg/compiler/backend/simpledocker.go index 86d64926..7a84f5bb 100644 --- a/pkg/compiler/backend/simpledocker.go +++ b/pkg/compiler/backend/simpledocker.go @@ -17,6 +17,7 @@ package backend import ( "encoding/json" + "fmt" "io/ioutil" "os" "os/exec" @@ -237,8 +238,6 @@ func (*SimpleDocker) Changes(fromImage, toImage string) ([]compiler.ArtifactLaye if config.LuetCfg.GetGeneral().ShowBuildOutput { Info(string(out)) - } else { - Debug(string(out)) } var diffs []compiler.ArtifactLayer @@ -247,5 +246,17 @@ func (*SimpleDocker) Changes(fromImage, toImage string) ([]compiler.ArtifactLaye if err != nil { return []compiler.ArtifactLayer{}, errors.Wrap(err, "Failed unmarshalling json response: "+string(out)) } + + if config.LuetCfg.GetLogging().Level == "debug" { + summary := compiler.ComputeArtifactLayerSummary(diffs) + for _, l := range summary.Layers { + Debug(fmt.Sprintf("Diff %s -> %s: add %d (%d bytes), del %d (%d bytes), change %d (%d bytes)", + l.FromImage, l.ToImage, + l.AddFiles, l.AddSizes, + l.DelFiles, l.DelSizes, + l.ChangeFiles, l.ChangeSizes)) + } + } + return diffs, nil } diff --git a/pkg/compiler/interface.go b/pkg/compiler/interface.go index fbe334da..46a60877 100644 --- a/pkg/compiler/interface.go +++ b/pkg/compiler/interface.go @@ -106,6 +106,19 @@ type ArtifactLayer struct { ToImage string `json:"Image2"` Diffs ArtifactDiffs `json:"Diff"` } +type ArtifactLayerSummary struct { + FromImage string `json:"image1"` + ToImage string `json:"image2"` + AddFiles int `json:"add_files"` + AddSizes int64 `json:"add_sizes"` + DelFiles int `json:"del_files"` + DelSizes int64 `json:"del_sizes"` + ChangeFiles int `json:"change_files"` + ChangeSizes int64 `json:"change_sizes"` +} +type ArtifactLayersSummary struct { + Layers []ArtifactLayerSummary `json:"summary"` +} // CompilationSpec represent a compilation specification derived from a package type CompilationSpec interface {