|
@@ -21,9 +21,12 @@ import (
|
|
|
"github.com/prometheus/prom2json"
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
"github.com/spf13/cobra"
|
|
|
+ "github.com/texttheater/golang-levenshtein/levenshtein"
|
|
|
"gopkg.in/yaml.v2"
|
|
|
)
|
|
|
|
|
|
+const MaxDistance = 7
|
|
|
+
|
|
|
func printHelp(cmd *cobra.Command) {
|
|
|
err := cmd.Help()
|
|
|
if err != nil {
|
|
@@ -68,6 +71,39 @@ func LoadHub() error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func Suggest(itemType string, baseItem string, suggestItem string, score int, ignoreErr bool) {
|
|
|
+ errMsg := ""
|
|
|
+ if score < MaxDistance {
|
|
|
+ errMsg = fmt.Sprintf("unable to find %s '%s', did you mean %s ?", itemType, baseItem, suggestItem)
|
|
|
+ } else {
|
|
|
+ errMsg = fmt.Sprintf("unable to find %s '%s'", itemType, baseItem)
|
|
|
+ }
|
|
|
+ if ignoreErr {
|
|
|
+ log.Error(errMsg)
|
|
|
+ } else {
|
|
|
+ log.Fatalf(errMsg)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func GetDistance(itemType string, itemName string) (*cwhub.Item, int) {
|
|
|
+ allItems := make([]string, 0)
|
|
|
+ nearestScore := 100
|
|
|
+ nearestItem := &cwhub.Item{}
|
|
|
+ hubItems := cwhub.GetHubStatusForItemType(itemType, "", true)
|
|
|
+ for _, item := range hubItems {
|
|
|
+ allItems = append(allItems, item.Name)
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, s := range allItems {
|
|
|
+ d := levenshtein.DistanceForStrings([]rune(itemName), []rune(s), levenshtein.DefaultOptions)
|
|
|
+ if d < nearestScore {
|
|
|
+ nearestScore = d
|
|
|
+ nearestItem = cwhub.GetItem(itemType, s)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nearestItem, nearestScore
|
|
|
+}
|
|
|
+
|
|
|
func compAllItems(itemType string, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
|
|
if err := LoadHub(); err != nil {
|
|
|
return nil, cobra.ShellCompDirectiveDefault
|