mirror of https://github.com/minio/minio.git
Browse Source
heal: Refactor heal command. (#2901)
heal: Refactor heal command. (#2901)
- return errors for heal operation through rpc replies. - implement rotating wheel for healing status. Fixes #2491pull/2931/head

committed by
GitHub

20 changed files with 614 additions and 239 deletions
-
4.travis.yml
-
83cmd/control-handlers.go
-
241cmd/control-heal-main.go
-
48cmd/control-mains_test.go
-
4cmd/control-router.go
-
82cmd/control_test.go
-
6cmd/errors.go
-
12cmd/format-config-v1.go
-
14cmd/format-config-v1_test.go
-
7cmd/fs-v1.go
-
6cmd/globals.go
-
7cmd/object-interface.go
-
92cmd/scan-bar.go
-
13cmd/utils.go
-
42cmd/utils_test.go
-
24cmd/xl-v1-bucket.go
-
47cmd/xl-v1-list-objects-heal.go
-
87cmd/xl-v1-object.go
-
9cmd/xl-v1-object_test.go
-
25cmd/xl-v1.go
@ -0,0 +1,92 @@ |
|||
/* |
|||
* Minio Cloud Storage (C) 2016 Minio, Inc. |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
|
|||
package cmd |
|||
|
|||
import ( |
|||
"fmt" |
|||
"runtime" |
|||
"strings" |
|||
|
|||
"github.com/cheggaaa/pb" |
|||
"github.com/dustin/go-humanize" |
|||
"github.com/minio/mc/pkg/console" |
|||
) |
|||
|
|||
// fixateScanBar truncates or stretches text to fit within the terminal size.
|
|||
func fixateScanBar(text string, width int) string { |
|||
if len([]rune(text)) > width { |
|||
// Trim text to fit within the screen
|
|||
trimSize := len([]rune(text)) - width + 3 //"..."
|
|||
if trimSize < len([]rune(text)) { |
|||
text = "..." + text[trimSize:] |
|||
} |
|||
} else { |
|||
text += strings.Repeat(" ", width-len([]rune(text))) |
|||
} |
|||
return text |
|||
} |
|||
|
|||
// Progress bar function report objects being scaned.
|
|||
type scanBarFunc func(string) |
|||
|
|||
// scanBarFactory returns a progress bar function to report URL scanning.
|
|||
func scanBarFactory() scanBarFunc { |
|||
fileCount := 0 |
|||
termWidth, err := pb.GetTerminalWidth() |
|||
if err != nil { |
|||
termWidth = 80 |
|||
} |
|||
|
|||
// Cursor animate channel.
|
|||
cursorCh := cursorAnimate() |
|||
return func(source string) { |
|||
scanPrefix := fmt.Sprintf("[%s] %s ", humanize.Comma(int64(fileCount)), string(<-cursorCh)) |
|||
source = fixateScanBar(source, termWidth-len([]rune(scanPrefix))) |
|||
barText := scanPrefix + source |
|||
console.PrintC("\r" + barText + "\r") |
|||
fileCount++ |
|||
} |
|||
} |
|||
|
|||
// cursorAnimate - returns a animated rune through read channel for every read.
|
|||
func cursorAnimate() <-chan rune { |
|||
cursorCh := make(chan rune) |
|||
var cursors string |
|||
|
|||
switch runtime.GOOS { |
|||
case "linux": |
|||
// cursors = "➩➪➫➬➭➮➯➱"
|
|||
// cursors = "▁▃▄▅▆▇█▇▆▅▄▃"
|
|||
cursors = "◐◓◑◒" |
|||
// cursors = "←↖↑↗→↘↓↙"
|
|||
// cursors = "◴◷◶◵"
|
|||
// cursors = "◰◳◲◱"
|
|||
//cursors = "⣾⣽⣻⢿⡿⣟⣯⣷"
|
|||
case "darwin": |
|||
cursors = "◐◓◑◒" |
|||
default: |
|||
cursors = "|/-\\" |
|||
} |
|||
go func() { |
|||
for { |
|||
for _, cursor := range cursors { |
|||
cursorCh <- cursor |
|||
} |
|||
} |
|||
}() |
|||
return cursorCh |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue