Skip to content

Commit

Permalink
Merge pull request #5 from flou/refactor
Browse files Browse the repository at this point in the history
Refactor
  • Loading branch information
flou authored Aug 21, 2020
2 parents 0e8a83a + d0b74b8 commit 2c11d71
Show file tree
Hide file tree
Showing 19 changed files with 312 additions and 297 deletions.
16 changes: 11 additions & 5 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ before:
hooks:
# You may remove this if you don't use go modules.
- go mod download

builds:
- env:
- CGO_ENABLED=0
Expand All @@ -12,16 +13,21 @@ builds:
flags:
- -trimpath
ldflags:
- -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{ .CommitDate }}
- -s -w -X github.com/flou/ecs/cmd.version={{.Version}} -X github.com/flou/ecs/cmd.commit={{.Commit}}

archives:
- replacements:
darwin: Darwin
linux: Linux
windows: Windows
- name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
replacements:
darwin: darwin
linux: linux
windows: windows
386: i386
amd64: x86_64
format: binary

checksum:
name_template: 'checksums.txt'

changelog:
sort: asc
filters:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ECS tools

[![Travis](https://img.shields.io/travis/flou/ecs.svg)](https://travis-ci.org/flou/ecs)
[![Travis](https://github.com/flou/ecs/workflows/build/badge.svg)](https://github.com/flou/ecs/actions?query=workflow%3Abuild)
[![Go Report Card](https://goreportcard.com/badge/github.com/flou/ecs)](https://goreportcard.com/report/github.com/flou/ecs)

## Installation
Expand Down
62 changes: 62 additions & 0 deletions cmd/completion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package cmd

import (
"os"

"github.com/spf13/cobra"
)

func buildCompletionCmd() *cobra.Command {
var completionCmd = &cobra.Command{
Use: "completion [bash|zsh|fish|powershell]",
Short: "Generate completion script",
Long: `To load completions:
Bash:
$ source <(ecs completion bash)
# To load completions for each session, execute once:
Linux:
$ ecs completion bash > /etc/bash_completion.d/ecs
MacOS:
$ ecs completion bash > /usr/local/etc/bash_completion.d/ecs
Zsh:
# If shell completion is not already enabled in your environment you will need
# to enable it. You can execute the following once:
$ echo "autoload -U compinit; compinit" >> ~/.zshrc
# To load completions for each session, execute once:
$ ecs completion zsh > "${fpath[1]}/_ecs"
# You will need to start a new shell for this setup to take effect.
Fish:
$ ecs completion fish | source
# To load completions for each session, execute once:
$ ecs completion fish > ~/.config/fish/completions/ecs.fish
`,
DisableFlagsInUseLine: true,
ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
Args: cobra.ExactValidArgs(1),
Run: func(cmd *cobra.Command, args []string) {
switch args[0] {
case "bash":
cmd.Root().GenBashCompletion(os.Stdout)
case "zsh":
cmd.Root().GenZshCompletion(os.Stdout)
case "fish":
cmd.Root().GenFishCompletion(os.Stdout, true)
case "powershell":
cmd.Root().GenPowerShellCompletion(os.Stdout)
}
},
}

return completionCmd
}
23 changes: 0 additions & 23 deletions cmd/error.go

This file was deleted.

24 changes: 9 additions & 15 deletions cmd/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,6 @@ import (
"github.com/spf13/cobra"
)

type eventsCmd struct {
cmd *cobra.Command
opts eventsOpts
}

type eventsOpts struct {
region string
clusterFilter string
Expand All @@ -23,23 +18,22 @@ type eventsOpts struct {
skipSteady bool
}

func buildEventsCmd() *eventsCmd {
var root = &eventsCmd{}
func buildEventsCmd() *cobra.Command {
var opts = eventsOpts{}
var cmd = &cobra.Command{
Use: "events",
Short: "List events for services running in your ECS clusters",
RunE: func(cmd *cobra.Command, args []string) error {
return runCommandEvents(root.opts)
return runCommandEvents(opts)
},
}
cmd.Flags().StringVarP(&root.opts.region, "region", "r", "", "AWS region name")
cmd.Flags().StringVarP(&root.opts.clusterFilter, "cluster", "c", "", "Filter by the name of the ECS cluster")
cmd.Flags().StringVarP(&root.opts.serviceFilter, "service", "s", "", "Filter by the name of the ECS service")
cmd.Flags().StringVarP(&root.opts.serviceType, "type", "t", "", "Filter by service launch type")
cmd.Flags().BoolVar(&root.opts.skipSteady, "skip-steady", false, "Don't display events that say the service is steady")
cmd.Flags().StringVarP(&opts.region, "region", "r", "", "AWS region name")
cmd.Flags().StringVarP(&opts.clusterFilter, "cluster", "c", "", "Filter by the name of the ECS cluster")
cmd.Flags().StringVarP(&opts.serviceFilter, "service", "s", "", "Filter by the name of the ECS service")
cmd.Flags().StringVarP(&opts.serviceType, "type", "t", "", "Filter by service launch type")
cmd.Flags().BoolVar(&opts.skipSteady, "skip-steady", false, "Don't display events that say the service is steady")

root.cmd = cmd
return root
return cmd
}

func runCommandEvents(options eventsOpts) error {
Expand Down
22 changes: 8 additions & 14 deletions cmd/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,29 @@ import (
"github.com/spf13/cobra"
)

type imagesCmd struct {
cmd *cobra.Command
opts imagesOpts
}

type imagesOpts struct {
region string
clusterFilter string
serviceFilter string
serviceType string
}

func buildImagesCmd() *imagesCmd {
var root = &imagesCmd{}
func buildImagesCmd() *cobra.Command {
var opts = imagesOpts{}
var cmd = &cobra.Command{
Use: "images",
Short: "List the Docker images of a service running in ECS",
RunE: func(cmd *cobra.Command, args []string) error {
return runCommandImage(root.opts)
return runCommandImage(opts)
},
}

cmd.Flags().StringVarP(&root.opts.region, "region", "r", "", "AWS region name")
cmd.Flags().StringVarP(&root.opts.clusterFilter, "cluster", "c", "", "Filter by the name of the ECS cluster")
cmd.Flags().StringVarP(&root.opts.serviceFilter, "service", "s", "", "Filter by the name of the ECS service")
cmd.Flags().StringVarP(&root.opts.serviceType, "type", "t", "", "Filter by service launch type")
cmd.Flags().StringVarP(&opts.region, "region", "r", "", "AWS region name")
cmd.Flags().StringVarP(&opts.clusterFilter, "cluster", "c", "", "Filter by the name of the ECS cluster")
cmd.Flags().StringVarP(&opts.serviceFilter, "service", "s", "", "Filter by the name of the ECS service")
cmd.Flags().StringVarP(&opts.serviceType, "type", "t", "", "Filter by service launch type")

root.cmd = cmd
return root
return cmd
}

func runCommandImage(options imagesOpts) error {
Expand Down
53 changes: 24 additions & 29 deletions cmd/instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,43 +9,37 @@ import (

"github.com/aws/aws-sdk-go-v2/service/ec2"
"github.com/aws/aws-sdk-go-v2/service/ecs"
"github.com/fatih/color"
"github.com/flou/ecs/pkg/aws"
"github.com/mitchellh/colorstring"
"github.com/spf13/cobra"
)

type instancesCmd struct {
cmd *cobra.Command
opts instanceOpts
}

type instanceOpts struct {
region string
clusterFilter string
longOutput bool
}

type eInstance struct {
IPAddress string
ImageID string
Name string
}

func buildInstancesCmd() *instancesCmd {
var root = &instancesCmd{}
func buildInstancesCmd() *cobra.Command {
var opts = instanceOpts{}
var cmd = &cobra.Command{
Use: "instances",
Short: "List container instances in your ECS clusters",
RunE: func(cmd *cobra.Command, args []string) error {
return runCommandInstances(root.opts)
return runCommandInstances(opts)
},
}
cmd.Flags().StringVarP(&root.opts.region, "region", "r", "", "AWS region name")
cmd.Flags().StringVarP(&root.opts.clusterFilter, "cluster", "c", "", "Filter by the name of the ECS cluster")
cmd.Flags().BoolVarP(&root.opts.longOutput, "long", "l", false, "Enable detailed output of containers instances")
cmd.Flags().StringVarP(&opts.region, "region", "r", "", "AWS region name")
cmd.Flags().StringVarP(&opts.clusterFilter, "cluster", "c", "", "Filter by the name of the ECS cluster")
cmd.Flags().BoolVarP(&opts.longOutput, "long", "l", false, "Enable detailed output of containers instances")

return cmd
}

root.cmd = cmd
return root
type eInstance struct {
IPAddress string
ImageID string
Name string
}

func runCommandInstances(options instanceOpts) error {
Expand Down Expand Up @@ -101,15 +95,14 @@ func runCommandInstances(options instanceOpts) error {
}
}
fmt.Printf(
"%-20s %-8s %5s %8s %8s %8s %8s %15s %12s %6v %-12s %-8s %11s %s\n",
"INSTANCE ID", "STATUS", "TASKS", "CPU/used", "CPU/free",
"MEM/used", "MEM/free", "PRIVATE IP", "INST.TYPE", "AGENT",
"IMAGE", "DOCKER", "AGE", "NAME",
"%-20s %-8s %5s %10s %10s %15s %10s %6v %-21s %-6s %10s\n",
"INSTANCE ID", "STATUS", "TASKS", "CPU:used/free", "MEM:used/free",
"PRIVATE IP", "INST.TYPE", "AGENT", "AMI", "DOCKER", "AGE",
)
for _, cinst := range describeContainerInstancesResp.ContainerInstances {
agentVersion := colorstring.Color("[green]" + *cinst.VersionInfo.AgentVersion)
agentVersion := color.GreenString(*cinst.VersionInfo.AgentVersion)
if *cinst.AgentConnected == false {
agentVersion = colorstring.Color("[red]" + *cinst.VersionInfo.AgentVersion)
agentVersion = color.RedString(*cinst.VersionInfo.AgentVersion)
}
registeredCPU := aws.FindResource(cinst.RegisteredResources, "CPU").IntegerValue
remainingCPU := aws.FindResource(cinst.RemainingResources, "CPU").IntegerValue
Expand All @@ -120,16 +113,18 @@ func runCommandInstances(options instanceOpts) error {
ageInDays := fmt.Sprintf("%4.1f days", time.Since(*cinst.RegisteredAt).Hours()/24)
instance := instances[*cinst.Ec2InstanceId]
fmt.Printf(
"%-20s %-8s %5d %8d %8d %8d %8d %15s %12s %-6v %12s %10s %s %s\n",
"%-20s %-8s %5d %13s %13s %15s %10s %-6v %12s %7s %s\n",
*cinst.Ec2InstanceId, *cinst.Status, *cinst.RunningTasksCount,
*registeredCPU-*remainingCPU, *remainingCPU, *registeredMemory-*remainingMemory, *remainingMemory,
fmt.Sprintf("%d/%d", *registeredCPU-*remainingCPU, *remainingCPU),
fmt.Sprintf("%d/%d", *registeredMemory-*remainingMemory, *remainingMemory),
instance.IPAddress, *instanceType, agentVersion, instance.ImageID,
dockerVersion, ageInDays, instance.Name,
dockerVersion, ageInDays,
)
if options.longOutput == true {
aws.DetailedInstanceOutput(&cinst)
}
}
fmt.Println()
}
return nil
}
Loading

0 comments on commit 2c11d71

Please sign in to comment.