diff --git a/plugins/common/properties.go b/plugins/common/properties.go index 1e6ff8b15..b4e6d2fa9 100644 --- a/plugins/common/properties.go +++ b/plugins/common/properties.go @@ -182,6 +182,33 @@ func PropertyListGet(pluginName string, appName string, property string) (lines return lines, nil } +// PropertyListLength returns the length of a property list +func PropertyListLength(pluginName string, appName string, property string) (length int, err error) { + if !PropertyExists(pluginName, appName, property) { + return length, nil + } + + propertyPath := getPropertyPath(pluginName, appName, property) + file, err := os.Open(propertyPath) + if err != nil { + return length, err + } + defer file.Close() + + var lines []string + scanner := bufio.NewScanner(file) + for scanner.Scan() { + lines = append(lines, scanner.Text()) + } + + if err = scanner.Err(); err != nil { + return length, fmt.Errorf("Unable to read %s config value for %s.%s: %s", pluginName, appName, property, err.Error()) + } + + length = len(lines) + return length, nil +} + // PropertyListGetByIndex returns an entry within property list by index func PropertyListGetByIndex(pluginName string, appName string, property string, index int) (propertyValue string, err error) { lines, err := PropertyListGet(pluginName, appName, property) diff --git a/plugins/common/property-functions b/plugins/common/property-functions index 66eeb67a4..faf5cad53 100755 --- a/plugins/common/property-functions +++ b/plugins/common/property-functions @@ -63,6 +63,12 @@ fn-plugin-property-list-get-by-value() { "$PLUGIN_CORE_AVAILABLE_PATH/common/prop" "lismember" "$PLUGIN" "$APP" "$KEY" "$VALUE" } +fn-plugin-property-list-length() { + declare desc="returns a property list" + declare PLUGIN="$1" APP="$2" KEY="$3" + "$PLUGIN_CORE_AVAILABLE_PATH/common/prop" "llen" "$PLUGIN" "$APP" "$KEY" +} + fn-plugin-property-list-remove() { declare desc="removes a value from a property list" declare PLUGIN="$1" APP="$2" KEY="$3" VALUE="$4" diff --git a/plugins/common/src/prop/prop.go b/plugins/common/src/prop/prop.go index 0c4a1bc99..7a2426bbf 100644 --- a/plugins/common/src/prop/prop.go +++ b/plugins/common/src/prop/prop.go @@ -46,13 +46,13 @@ func main() { case "llen": appName := flag.Arg(2) property := flag.Arg(3) - lines, err := common.PropertyListGet(pluginName, appName, property) + length, err := common.PropertyListLength(pluginName, appName, property) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } - println(len(lines)) + println(length) case "lrange": appName := flag.Arg(2) property := flag.Arg(3)