Skip to content

Commit 40ba833

Browse files
committed
feat(get): progress UI with block count and consistent size display
Signed-off-by: Chayan Das <01chayandas@gmail.com>
1 parent 8082038 commit 40ba833

5 files changed

Lines changed: 152 additions & 177 deletions

File tree

core/commands/dag/dag.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ type DagStat struct {
297297
Cid cid.Cid
298298
Size uint64 `json:",omitempty"`
299299
NumBlocks int64 `json:",omitempty"`
300-
NumFiles int64 `json:",omitempty"` // UnixFS file nodes (actual files, including nested)
301300
}
302301

303302
func (s *DagStat) String() string {
@@ -350,15 +349,13 @@ type DagStatSummary struct {
350349
TotalSize uint64 `json:",omitempty"`
351350
SharedSize uint64 `json:",omitempty"`
352351
Ratio float32 `json:",omitempty"`
353-
NumFiles int64 `json:",omitempty"` // total UnixFS file count across all DAGs
354352
DagStatsArray []*DagStat `json:"DagStats,omitempty"`
355353
}
356354

357355
func (s *DagStatSummary) String() string {
358-
return fmt.Sprintf("Total Size: %d (%s)\nUnique Blocks: %d\nTotal Files: %d\nShared Size: %d (%s)\nRatio: %f",
356+
return fmt.Sprintf("Total Size: %d (%s)\nUnique Blocks: %d\nShared Size: %d (%s)\nRatio: %f",
359357
s.TotalSize, humanize.Bytes(s.TotalSize),
360358
s.UniqueBlocks,
361-
s.NumFiles,
362359
s.SharedSize, humanize.Bytes(s.SharedSize),
363360
s.Ratio)
364361
}
@@ -408,17 +405,15 @@ Note: This command skips duplicate blocks in reporting both size and the number
408405
csvWriter := csv.NewWriter(w)
409406
csvWriter.Comma = '\t'
410407
cidSpacing := len(event.DagStatsArray[0].Cid.String())
411-
header := []string{fmt.Sprintf("%-*s", cidSpacing, "CID"), fmt.Sprintf("%-15s", "Blocks"), fmt.Sprintf("%-10s", "Files"), "Size"}
408+
header := []string{fmt.Sprintf("%-*s", cidSpacing, "CID"), fmt.Sprintf("%-15s", "Blocks"), "Size"}
412409
if err := csvWriter.Write(header); err != nil {
413410
return err
414411
}
415412
for _, dagStat := range event.DagStatsArray {
416413
numBlocksStr := fmt.Sprint(dagStat.NumBlocks)
417-
numFilesStr := fmt.Sprint(dagStat.NumFiles)
418414
err := csvWriter.Write([]string{
419415
dagStat.Cid.String(),
420416
fmt.Sprintf("%-15s", numBlocksStr),
421-
fmt.Sprintf("%-10s", numFilesStr),
422417
fmt.Sprint(dagStat.Size),
423418
})
424419
if err != nil {

core/commands/dag/stat.go

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/dustin/go-humanize"
99
mdag "github.com/ipfs/boxo/ipld/merkledag"
1010
"github.com/ipfs/boxo/ipld/merkledag/traverse"
11-
"github.com/ipfs/boxo/ipld/unixfs"
1211
cid "github.com/ipfs/go-cid"
1312
cmds "github.com/ipfs/go-ipfs-cmds"
1413
"github.com/ipfs/kubo/core/commands/cmdenv"
@@ -26,7 +25,6 @@ func dagStat(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment)
2625
if val, specified := req.Options[progressOptionName].(bool); specified {
2726
progressive = val
2827
}
29-
3028
api, err := cmdenv.GetApi(env, req)
3129
if err != nil {
3230
return err
@@ -35,7 +33,6 @@ func dagStat(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment)
3533

3634
cidSet := cid.NewSet()
3735
dagStatSummary := &DagStatSummary{DagStatsArray: []*DagStat{}}
38-
3936
for _, a := range req.Arguments {
4037
p, err := cmdutils.PathOrCidPath(a)
4138
if err != nil {
@@ -53,45 +50,24 @@ func dagStat(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment)
5350
if err != nil {
5451
return err
5552
}
56-
5753
dagstats := &DagStat{Cid: rp.RootCid()}
5854
dagStatSummary.appendStats(dagstats)
59-
60-
chunkCids := cid.NewSet()
6155
err = traverse.Traverse(obj, traverse.Options{
6256
DAG: nodeGetter,
6357
Order: traverse.DFSPre,
6458
Func: func(current traverse.State) error {
65-
nd := current.Node
66-
currentNodeSize := uint64(len(nd.RawData()))
59+
currentNodeSize := uint64(len(current.Node.RawData()))
6760
dagstats.Size += currentNodeSize
6861
dagstats.NumBlocks++
69-
70-
if pn, ok := nd.(*mdag.ProtoNode); ok {
71-
if fsn, err := unixfs.FSNodeFromBytes(pn.Data()); err == nil {
72-
if fsn.Type() == unixfs.TFile && len(pn.Links()) > 0 {
73-
for _, l := range pn.Links() {
74-
chunkCids.Add(l.Cid)
75-
}
76-
}
77-
if !chunkCids.Has(nd.Cid()) {
78-
// Count as a file only if not a chunk block
79-
switch fsn.Type() {
80-
case unixfs.TFile, unixfs.TRaw, unixfs.TSymlink, unixfs.TMetadata:
81-
dagstats.NumFiles++
82-
}
83-
}
84-
}
85-
}
86-
87-
if !cidSet.Has(nd.Cid()) {
62+
if !cidSet.Has(current.Node.Cid()) {
8863
dagStatSummary.incrementTotalSize(currentNodeSize)
8964
}
9065
dagStatSummary.incrementRedundantSize(currentNodeSize)
91-
cidSet.Add(nd.Cid())
92-
66+
cidSet.Add(current.Node.Cid())
9367
if progressive {
94-
return res.Emit(dagStatSummary)
68+
if err := res.Emit(dagStatSummary); err != nil {
69+
return err
70+
}
9571
}
9672
return nil
9773
},
@@ -106,13 +82,10 @@ func dagStat(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment)
10682
dagStatSummary.UniqueBlocks = cidSet.Len()
10783
dagStatSummary.calculateSummary()
10884

109-
var totalFiles int64
110-
for _, s := range dagStatSummary.DagStatsArray {
111-
totalFiles += s.NumFiles
85+
if err := res.Emit(dagStatSummary); err != nil {
86+
return err
11287
}
113-
dagStatSummary.NumFiles = totalFiles
114-
115-
return res.Emit(dagStatSummary)
88+
return nil
11689
}
11790

11891
func finishCLIStat(res cmds.Response, re cmds.ResponseEmitter) error {
@@ -149,10 +122,7 @@ func finishCLIStat(res cmds.Response, re cmds.ResponseEmitter) error {
149122
totalBlocks += stat.NumBlocks
150123
totalSize += stat.Size
151124
}
152-
fmt.Fprintf(os.Stderr,
153-
"Fetched/Processed %d blocks, %d bytes (%s)\r",
154-
totalBlocks, totalSize, humanize.Bytes(totalSize),
155-
)
125+
fmt.Fprintf(os.Stderr, "Fetched/Processed %d blocks, %d bytes (%s)\r", totalBlocks, totalSize, humanize.Bytes(totalSize))
156126
}
157127
default:
158128
return e.TypeErr(out, v)

0 commit comments

Comments
 (0)