Skip to content
This repository has been archived by the owner on Sep 22, 2020. It is now read-only.

Commit

Permalink
Add library for getting used size and refactor percentage parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
Blake Howell committed Jun 18, 2016
1 parent a495353 commit c75900b
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 15 deletions.
39 changes: 24 additions & 15 deletions cmd/torusd/main.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package main

import (
"errors"
"fmt"
"net/url"
"os"
"os/signal"
"strings"
"path/filepath"
"strconv"
"syscall"
"strings"

"github.com/coreos/pkg/capnslog"
"github.com/dustin/go-humanize"
"github.com/ricochet2200/go-disk-usage/du"
"github.com/spf13/cobra"

"github.com/coreos/torus"
Expand Down Expand Up @@ -114,27 +116,22 @@ func configureServer(cmd *cobra.Command, args []string) {
os.Exit(1)
}
if strings.Contains(sizeStr, "%") {
var stat syscall.Statfs_t
sizePercent := strings.Split(sizeStr, "%")[0]
sizeNumber, err := strconv.Atoi(sizePercent)

percent, err := parsePercentage(sizeStr)
if err != nil {
fmt.Fprintf(os.Stderr, "error parsing size: %s\n", err)
os.Exit(1)
}
if sizeNumber < 1 || sizeNumber > 100 {
fmt.Fprintf(os.Stderr, "invalid size; must be between 1%% and 100%%\n")
os.Exit(1)
}

directory := dataDir
if dataDir == "" {
directory, _ = os.Getwd()
} else {
directory, _ = filepath.Abs(dataDir)
}
err = syscall.Statfs(directory, &stat)
if err != nil {
fmt.Fprintf(os.Stderr, "error getting volume for data-dir: %s\n", directory)
os.Exit(1)
}
size = stat.Blocks * uint64(stat.Bsize) * uint64(sizeNumber) / 100

size = du.NewDiskUsage(directory).Size() * percent / 100

} else {
size, err = humanize.ParseBytes(sizeStr)
if err != nil {
Expand Down Expand Up @@ -178,6 +175,18 @@ func configureServer(cmd *cobra.Command, args []string) {
}
}

func parsePercentage(percentString string) (uint64, error) {
sizePercent := strings.Split(percentString, "%")[0]
sizeNumber, err := strconv.Atoi(sizePercent)
if err != nil {
return 0, err
}
if sizeNumber < 1 || sizeNumber > 100 {
return 0, errors.New("invalid size; must be between 1%% and 100%%\n")
}
return uint64(sizeNumber), nil
}

func runServer(cmd *cobra.Command, args []string) {

var (
Expand Down
1 change: 1 addition & 0 deletions glide.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import:
- package: github.com/prometheus/client_golang
subpackages:
- prometheus
- package: github.com/ricochet2200/go-disk-usage
- package: github.com/serialx/hashring
- package: github.com/spf13/cobra
- package: golang.org/x/net
Expand Down

0 comments on commit c75900b

Please sign in to comment.