Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Commit

Permalink
Command: Cat command to concatenate and print detectors
Browse files Browse the repository at this point in the history
Created command to accept list of detectors to concatenate and
print detectors. This is similar to cat command in unix.
  • Loading branch information
VijayanB committed Aug 7, 2020
1 parent 5ca6c2b commit 8c6c22a
Showing 1 changed file with 105 additions and 0 deletions.
105 changes: 105 additions & 0 deletions cli/cmd/cat.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/*
* Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
* http://www.apache.org/licenses/LICENSE-2.0
* or in the "license" file accompanying this file. This file 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 (
"encoding/json"
entity "esad/internal/entity/ad"
"esad/internal/handler/ad"
"fmt"
"github.com/spf13/cobra"
)

const (
commandCat = "cat"
)

//catCmd prints detectors configuration based on id and name pattern.
var catCmd = &cobra.Command{
Use: commandCat + " [flags] [list of detectors]",
Short: "Concatenate and print detectors based on id or name pattern",
Long: `concatenate and print detectors based on pattern, use "" to make sure the name is not matched with pwd lists'`,
Run: func(cmd *cobra.Command, args []string) {
//If no args, display usage
if len(args) < 1 {
if err := cmd.Usage(); err != nil {
fmt.Println(err)
}
return
}
idStatus, _ := cmd.Flags().GetBool("id")
commandHandler, err := getCommandHandler()
if err != nil {
fmt.Println(err)
}
var results []*entity.DetectorOutput
if idStatus {
results = executeByID(commandHandler, args)
} else {
results = executeByNames(commandHandler, args)
}
printDetectors(results)
},
}

//executeByNames gets detector output based on name as argument
func executeByNames(commandHandler *ad.Handler, args []string) []*entity.DetectorOutput {

var results []*entity.DetectorOutput
for _, detector := range args {
output, err := ad.GetAnomalyDetectorsByNamePattern(commandHandler, detector)
results = append(results, output...)
if err != nil {
fmt.Println(err)
return nil
}
}
return results
}

//executeByID gets detector output based on ID as argument
func executeByID(commandHandler *ad.Handler, args []string) []*entity.DetectorOutput {

var results []*entity.DetectorOutput
for _, detector := range args {
output, err := ad.GetAnomalyDetectorByID(commandHandler, detector)
results = append(results, output)
if err != nil {
fmt.Println(err)
return nil
}
}
return results
}

//printDetectors displays the list of output. Since this is json format, use indent function to
// pretty print before printing on console
func printDetectors(results []*entity.DetectorOutput) {
if results == nil {
return
}
for _, d := range results {
formattedOutput, err := json.MarshalIndent(d, "", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(formattedOutput))
}
}

func init() {
esadCmd.AddCommand(catCmd)
catCmd.Flags().BoolP("name", "", true, "Input is name or pattern")
catCmd.Flags().BoolP("id", "", false, "Input is id")
}

0 comments on commit 8c6c22a

Please sign in to comment.