github.com/scaleway/scaleway-cli@v1.11.1/pkg/cli/x_cs.go (about)

     1  // Copyright (C) 2015 Scaleway. All rights reserved.
     2  // Use of this source code is governed by a MIT-style
     3  // license that can be found in the LICENSE.md file.
     4  
     5  package cli
     6  
     7  import (
     8  	"fmt"
     9  	"strconv"
    10  	"strings"
    11  	"time"
    12  
    13  	"github.com/dustin/go-humanize"
    14  )
    15  
    16  var cmdCS = &Command{
    17  	Exec:        runCS,
    18  	UsageLine:   "_cs [CONTAINER_NAME]",
    19  	Description: "",
    20  	Hidden:      true,
    21  	Help:        "List containers / datas",
    22  	Examples: `
    23      $ scw _cs
    24      $ scw _cs containerName
    25  `,
    26  }
    27  
    28  func init() {
    29  	cmdCS.Flag.BoolVar(&csHelp, []string{"h", "-help"}, false, "Print usage")
    30  }
    31  
    32  // Flags
    33  var csHelp bool // -h, --help flag
    34  
    35  func runCS(cmd *Command, args []string) error {
    36  	if csHelp {
    37  		return cmd.PrintUsage()
    38  	}
    39  	if len(args) > 1 {
    40  		return cmd.PrintShortUsage()
    41  	}
    42  	if len(args) == 0 {
    43  		containers, err := cmd.API.GetContainers()
    44  		if err != nil {
    45  			return fmt.Errorf("Unable to get your containers: %v", err)
    46  		}
    47  		for _, container := range containers.Containers {
    48  			fmt.Fprintf(cmd.Streams().Stdout, "s3://%s\n", container.Name)
    49  		}
    50  		return nil
    51  	}
    52  	container := strings.Replace(args[0], "s3://", "", 1)
    53  	datas, err := cmd.API.GetContainerDatas(container)
    54  	if err != nil {
    55  		return fmt.Errorf("Unable to get your data from %s: %v", container, err)
    56  	}
    57  	for _, data := range datas.Container {
    58  		t, err := time.Parse(time.RFC3339, data.LastModified)
    59  		if err != nil {
    60  			return err
    61  		}
    62  		year, month, day := t.Date()
    63  		hour, minute, _ := t.Clock()
    64  		size, err := strconv.Atoi(data.Size)
    65  		if err != nil {
    66  			return err
    67  		}
    68  		fmt.Fprintf(cmd.Streams().Stdout, "%-4d-%02d-%02d %02d:%02d %8s s3://%s/%s\n", year, month, day, hour, minute, humanize.Bytes(uint64(size)), container, data.Name)
    69  	}
    70  	return nil
    71  }