Skip to content

Commit eaf25cb

Browse files
authored
Merge pull request #42 from sapcc/transferred-bytes
report the number of bytes transferred
2 parents 0966c4b + 215203a commit eaf25cb

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

pkg/actors/report.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ type ReportEvent struct {
3939

4040
IsFile bool
4141
FileTransferResult objects.TransferResult
42+
FileTransferBytes int64
4243

4344
IsCleanup bool
4445
CleanedUpObjectCount int64
@@ -70,6 +71,7 @@ func (r *Report) Run() {
7071
filesFailed int64
7172
filesTransferred int64
7273
filesCleanedUp int64
74+
bytesTransferred int64
7375
jobsSkipped int64
7476
statter statsd.Statter
7577
)
@@ -100,6 +102,7 @@ func (r *Report) Run() {
100102
switch mark.FileTransferResult {
101103
case objects.TransferSuccess:
102104
filesTransferred++
105+
bytesTransferred += mark.FileTransferBytes
103106
case objects.TransferFailed:
104107
filesFailed++
105108
}
@@ -125,6 +128,7 @@ func (r *Report) Run() {
125128
gauge("last_run.files_transfered", filesTransferred, 1.0)
126129
gauge("last_run.files_failed", filesFailed, 1.0)
127130
gauge("last_run.files_cleaned_up", filesCleanedUp, 1.0)
131+
gauge("last_run.bytes_transfered", bytesTransferred, 1.0)
128132
if filesFailed > 0 || directoriesFailed > 0 {
129133
gauge("last_run.success", 0, 1.0)
130134
r.ExitCode = 1
@@ -145,6 +149,7 @@ func (r *Report) Run() {
145149
if filesCleanedUp > 0 {
146150
logg.Info("%d old files cleaned up", filesCleanedUp)
147151
}
152+
logg.Info("%d bytes transferred", bytesTransferred)
148153

149154
duration := time.Since(r.StartTime)
150155
gauge("last_run.duration_seconds", int64(duration.Seconds()), 1.0)

pkg/actors/transfer.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ LOOP:
5555
if !ok {
5656
break LOOP
5757
}
58-
result := file.PerformTransfer()
58+
result, size := file.PerformTransfer()
5959
if result == objects.TransferFailed {
6060
filesToRetry = append(filesToRetry, file)
6161
} else {
6262
t.Output <- FileInfoForCleaner{File: file, Failed: false}
63-
t.Report <- ReportEvent{IsFile: true, FileTransferResult: result}
63+
t.Report <- ReportEvent{IsFile: true, FileTransferResult: result, FileTransferBytes: size}
6464
}
6565
}
6666
}
@@ -71,14 +71,15 @@ LOOP:
7171
}
7272
for _, file := range filesToRetry {
7373
result := objects.TransferFailed
74+
var size int64
7475
//...but only if we were not aborted (this is checked in every loop
7576
//iteration because the abort signal (i.e. Ctrl-C) could also happen
7677
//during this loop)
7778
if !aborted && t.Context.Err() == nil {
78-
result = file.PerformTransfer()
79+
result, size = file.PerformTransfer()
7980
}
8081
t.Output <- FileInfoForCleaner{File: file, Failed: result == objects.TransferFailed}
81-
t.Report <- ReportEvent{IsFile: true, FileTransferResult: result}
82+
t.Report <- ReportEvent{IsFile: true, FileTransferResult: result, FileTransferBytes: size}
8283
}
8384

8485
//if interrupt was received, consume all remaining input to get the Scraper

pkg/objects/file.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,16 @@ const (
7373
)
7474

7575
//PerformTransfer transfers this file from the source to the target.
76-
//The return value indicates if the transfer finished successfully.
77-
func (f File) PerformTransfer() TransferResult {
76+
//It returns the TransferResult (which indicates if the transfer finished successfully)
77+
//and the number of bytes transferred.
78+
func (f File) PerformTransfer() (TransferResult, int64) {
7879
object := f.TargetObject()
7980

8081
//check if this file needs transfer
8182
if f.Job.Matcher.ImmutableFileRx != nil && f.Job.Matcher.ImmutableFileRx.MatchString(f.Spec.Path) {
8283
if f.Job.Target.FileExists[object.Name()] {
8384
logg.Debug("skipping %s: already transferred", object.FullName())
84-
return TransferSkipped
85+
return TransferSkipped, 0
8586
}
8687
}
8788

@@ -122,14 +123,14 @@ func (f File) PerformTransfer() TransferResult {
122123
logg.Error("skipping target %s: HEAD failed: %s",
123124
object.FullName(), err.Error(),
124125
)
125-
return TransferFailed
126+
return TransferFailed, 0
126127
}
127128
}
128129

129130
//if we want to upload a symlink, we can skip the whole Last-Modified/Etag
130131
//shebang and straight-up compare the symlink target
131132
if f.Spec.SymlinkTargetPath != "" {
132-
return f.uploadSymlink(currentSymlinkTarget, hdr.IsLargeObject())
133+
return f.uploadSymlink(currentSymlinkTarget, hdr.IsLargeObject()), 0
133134
}
134135

135136
//retrieve object from source, taking advantage of Etag and Last-Modified where possible
@@ -160,13 +161,13 @@ func (f File) PerformTransfer() TransferResult {
160161
}
161162
if err != nil {
162163
logg.Error("GET %s failed: %s", f.Spec.Path, err.Error())
163-
return TransferFailed
164+
return TransferFailed, 0
164165
}
165166
if body != nil {
166167
defer body.Close()
167168
}
168169
if sourceState.SkipTransfer { // 304 Not Modified
169-
return TransferSkipped
170+
return TransferSkipped, 0
170171
}
171172

172173
if util.LogIndividualTransfers {
@@ -198,9 +199,9 @@ func (f File) PerformTransfer() TransferResult {
198199
}
199200

200201
if ok {
201-
return TransferSuccess
202+
return TransferSuccess, size
202203
}
203-
return TransferFailed
204+
return TransferFailed, 0
204205
}
205206

206207
func (f File) uploadSymlink(previousTarget *schwift.Object, cleanupOldSegments bool) TransferResult {

0 commit comments

Comments
 (0)