From 2aca3252e8ea28ec740eccd93a3b53fdfaca119a Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Tue, 29 Mar 2016 19:41:16 -0700 Subject: [PATCH] etcdctl: alarm command --- etcdctl/ctlv3/command/alarm_command.go | 81 ++++++++++++++++++++++++++ etcdctl/ctlv3/command/printer.go | 13 +++++ etcdctl/ctlv3/ctl.go | 1 + 3 files changed, 95 insertions(+) create mode 100644 etcdctl/ctlv3/command/alarm_command.go diff --git a/etcdctl/ctlv3/command/alarm_command.go b/etcdctl/ctlv3/command/alarm_command.go new file mode 100644 index 000000000..b0579fda3 --- /dev/null +++ b/etcdctl/ctlv3/command/alarm_command.go @@ -0,0 +1,81 @@ +// Copyright 2016 CoreOS, 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 command + +import ( + "fmt" + + v3 "github.com/coreos/etcd/clientv3" + "github.com/spf13/cobra" +) + +// NewAlarmCommand returns the cobra command for "alarm". +func NewAlarmCommand() *cobra.Command { + ac := &cobra.Command{ + Use: "alarm ", + Short: "alarm related command", + } + + ac.AddCommand(NewAlarmDisarmCommand()) + ac.AddCommand(NewAlarmListCommand()) + + return ac +} + +func NewAlarmDisarmCommand() *cobra.Command { + cmd := cobra.Command{ + Use: "disarm", + Short: "disarm all alarms", + Run: alarmDisarmCommandFunc, + } + return &cmd +} + +// alarmDisarmCommandFunc executes the "alarm disarm" command. +func alarmDisarmCommandFunc(cmd *cobra.Command, args []string) { + if len(args) != 0 { + ExitWithError(ExitBadArgs, fmt.Errorf("alarm disarm command accepts no arguments")) + } + ctx, cancel := commandCtx(cmd) + resp, err := mustClientFromCmd(cmd).AlarmDisarm(ctx, &v3.AlarmMember{}) + cancel() + if err != nil { + ExitWithError(ExitError, err) + } + display.Alarm(*resp) +} + +func NewAlarmListCommand() *cobra.Command { + cmd := cobra.Command{ + Use: "list", + Short: "list all alarms", + Run: alarmListCommandFunc, + } + return &cmd +} + +// alarmListCommandFunc executes the "alarm list" command. +func alarmListCommandFunc(cmd *cobra.Command, args []string) { + if len(args) != 0 { + ExitWithError(ExitBadArgs, fmt.Errorf("alarm disarm command accepts no arguments")) + } + ctx, cancel := commandCtx(cmd) + resp, err := mustClientFromCmd(cmd).AlarmList(ctx) + cancel() + if err != nil { + ExitWithError(ExitError, err) + } + display.Alarm(*resp) +} diff --git a/etcdctl/ctlv3/command/printer.go b/etcdctl/ctlv3/command/printer.go index df0abc3b9..7c8b1966e 100644 --- a/etcdctl/ctlv3/command/printer.go +++ b/etcdctl/ctlv3/command/printer.go @@ -35,6 +35,8 @@ type printer interface { Watch(v3.WatchResponse) MemberList(v3.MemberListResponse) + + Alarm(v3.AlarmResponse) } func NewPrinter(printerType string, isHex bool) printer { @@ -96,6 +98,12 @@ func (s *simplePrinter) Watch(resp v3.WatchResponse) { } } +func (s *simplePrinter) Alarm(resp v3.AlarmResponse) { + for _, e := range resp.Alarms { + fmt.Printf("%+v\n", e) + } +} + func (s *simplePrinter) MemberList(resp v3.MemberListResponse) { table := tablewriter.NewWriter(os.Stdout) table.SetHeader([]string{"ID", "Status", "Name", "Peer Addrs", "Client Addrs", "Is Leader"}) @@ -130,6 +138,7 @@ func (p *jsonPrinter) Get(r v3.GetResponse) { func (p *jsonPrinter) Put(r v3.PutResponse) { printJSON(r) } func (p *jsonPrinter) Txn(r v3.TxnResponse) { printJSON(r) } func (p *jsonPrinter) Watch(r v3.WatchResponse) { printJSON(r) } +func (p *jsonPrinter) Alarm(r v3.AlarmResponse) { printJSON(r) } func (p *jsonPrinter) MemberList(r v3.MemberListResponse) { printJSON(r) } func printJSON(v interface{}) { @@ -169,6 +178,10 @@ func (p *pbPrinter) Watch(r v3.WatchResponse) { } } +func (p *pbPrinter) Alarm(r v3.AlarmResponse) { + printPB((*pb.AlarmResponse)(&r)) +} + func (pb *pbPrinter) MemberList(r v3.MemberListResponse) { ExitWithError(ExitBadFeature, errors.New("only support simple or json as output format")) } diff --git a/etcdctl/ctlv3/ctl.go b/etcdctl/ctlv3/ctl.go index 428241fda..d787f4221 100644 --- a/etcdctl/ctlv3/ctl.go +++ b/etcdctl/ctlv3/ctl.go @@ -66,6 +66,7 @@ func init() { command.NewDelCommand(), command.NewTxnCommand(), command.NewCompactionCommand(), + command.NewAlarmCommand(), command.NewDefragCommand(), command.NewWatchCommand(), command.NewVersionCommand(),