# # format # value of the LLD macro sent into server by agentd or via trapper: { "data":[ { "{#VALUE}":"this is the value including quotes" } ] } item #1 key prototype item #1 key as created from prototype item #2 formula prototype item #2 formula as created from prototype (read from database) status - whether corresponding item key found when evaluating the formula [optional comment] # # sanity check # "abc" echo[{#VALUE}] echo[abc] strlen(echo[{#VALUE}]) strlen(echo[abc]) OK 2 echo[{#VALUE}] echo[2] strlen(echo[{#VALUE}]) strlen(echo[2]) OK # # unquoted -> quoted due to special chars # "\\" echo[{#VALUE}] echo[\] strlen("localhost":echo[{#VALUE}]) strlen("localhost":echo[\]) OK "a,b,c" echo[{#VALUE}] echo["a,b,c"] strlen(echo[{#VALUE}]) strlen("echo[\"a,b,c\"]") OK "a,b,c" echo[{#VALUE}] echo["a,b,c"] strlen({HOST.HOST}:echo[{#VALUE}]) strlen({HOST.HOST}:echo[{#VALUE}]) FAIL --> Cannot evaluate function [strlen()]: item [localhost:{HOST.HOST}:echo[{#VALUE}]] not found Failed macro expansion part of the key instead of host. "a,b,c" echo[{#VALUE}] echo["a,b,c"] strlen("{HOST.HOST}":echo[{#VALUE}]) strlen("{HOST.HOST}":echo[a,b,c]) FAIL --> Invalid first parameter in function [strlen("{HOST.HOST}":echo[a,b,c])] Actually sort of OK - no such host. "a,b,c" echo[{#VALUE}] echo["a,b,c"] strlen("local host":echo[{#VALUE}]) strlen("local host":echo[a,b,c]) FAIL --> Invalid first parameter in function [strlen("local host":echo[a,b,c])] Workaround: don't quote the host part but the whole key. "a,b,c" echo[{#VALUE}] echo["a,b,c"] strlen(localhost:echo[{#VALUE}]) strlen("localhost:echo[\"a,b,c\"]") OK "a,b,c" echo[{#VALUE}] echo["a,b,c"] strlen("localhost":echo[{#VALUE}]) strlen("localhost":echo[a,b,c]) FAIL --> Invalid first parameter in function [strlen("localhost":echo[a,b,c])] Workaround: don't quote the host part but the whole key. # # quoted by user # "abc" echo["{#VALUE}"] echo["abc"] strlen(echo["{#VALUE}"]) strlen(echo["abc"]) OK "a,b,c" echo["{#VALUE}"] echo["a,b,c"] strlen(echo["{#VALUE}"]) strlen("echo[\"a,b,c\"]") OK "a,b,c" echo["{#VALUE}"] echo["a,b,c"] strlen("localhost":echo["{#VALUE}"]) strlen("localhost":echo["a,b,c"]) OK 2 echo["{#VALUE}"] echo["2"] strlen("localhost":echo["{#VALUE}"]) strlen("localhost":echo["2"]) OK # # quoted in JSON # "\"abc\"" echo[{#VALUE}] echo["\"abc\""] strlen("localhost":echo[{#VALUE}]) strlen("localhost":echo["abc"]) FAIL --> Invalid first parameter in function [strlen("localhost":echo["abc"])] Workaround: don't quote the host part but the whole key. "\"abc\"" echo[{#VALUE}] echo["\"abc\""] strlen(echo[{#VALUE}]) strlen(echo["\"abc\""]) OK # # embedded macro # "{$HELLO}" echo[{#VALUE}] echo[{$HELLO}] strlen(echo[{#VALUE}]) strlen(echo[{$HELLO}]) OK "{$HELLO}" echo["{#VALUE}"] echo["{$HELLO}"] strlen(echo["{#VALUE}"]) strlen(echo["{$HELLO}"]) OK "\"{$HELLO}\"" echo[{#VALUE}] echo["{$HELLO}"] strlen(echo[{#VALUE}]) strlen(echo["{$HELLO}"]) OK # # escaped things # "\"" echo[{#VALUE}] echo["\""] strlen(echo[{#VALUE}]) strlen(echo["\""]) OK "\"" echo["{#VALUE}"] echo["\""] strlen(echo["{#VALUE}"]) strlen(echo["\""]) OK "\\" echo["{#VALUE}"] echo["\"] strlen(echo["{#VALUE}"]) strlen(echo["\"]) OK "\\\\" echo["{#VALUE}"] echo["\\"] strlen(echo["{#VALUE}"]) strlen(echo["\\"]) OK "\\\"\\\"" echo["{#VALUE}"] echo["\\"\\""] strlen(echo["{#VALUE}"]) strlen(echo["\\"\\""]) OK "\\\"\\\"" echo["abc {#VALUE}"] echo["abc \\"\\""] strlen(echo["abc {#VALUE}"]) strlen(echo["abc \\"\\""]) OK "\\\"\\\"" echo["abc:d={#VALUE}"] echo["abc:d=\\"\\""] strlen(echo["abc:d={#VALUE}"]) strlen(echo["abc:d=\\"\\""]) OK "\\\"\\\"" echo["abc:d=e,g={#VALUE}"] echo["abc:d=e,g=\\"\\""] strlen(echo["abc:d=e,g={#VALUE}"]) strlen(echo["abc:d=e,g=\"\""]) FAIL (customer's case) --> Cannot evaluate function [strlen(g=\"\""])]: item [localhost:echo["abc:d=e] not found Workaround: quote the key in the function and escape quotes in key's params. "\\\"\\\"" echo["abc:d=e,g={#VALUE}"] echo["abc:d=e,g=\\"\\""] strlen("echo[\"abc:d=e,g={#VALUE}\"]") strlen("echo[\"abc:d=e,g=\\\"\\\"\"]") OK --> workaround - quote manually (but won't work without the fix) "\"" echo[",{#VALUE}"] echo[",\""] strlen(echo[",{#VALUE}"]) strlen(echo[",""]) FAIL --> Cannot evaluate function [strlen(""])]: item [localhost:echo["] not found Workaround: quote the key in the function and escape quotes in key's params. "\"" echo[,{#VALUE}] echo[,"\""] strlen(echo[,{#VALUE}]) strlen(echo[,"]) FAIL --> Format error or unsupported operator. Exp: [echo[,"]] Workaround: quote the key in the function and escape quotes in key's params. "\"" echo[{#VALUE},] echo["\"",] strlen(echo[{#VALUE},]) strlen(echo[{#VALUE},]) FAIL --> Cannot evaluate function [strlen(])]: item [localhost:echo[{#VALUE}] not found Workaround: quote the key in the function and escape quotes in key's params. "\"" echo[{#VALUE},] echo["\"",] strlen("echo[{#VALUE},]") strlen("echo[\"\\"\",]") OK "\"" echo[a,{#VALUE}] echo[a,"\""] strlen(echo[,{#VALUE}]) strlen("echo[a,\"\\"\"]") OK # # LLD macro contains comma # "," echo[{#VALUE}] echo[","] strlen.echo[{#VALUE}] strlen("echo[\",\"]") OK "\",\"" echo[{#VALUE}] echo["\",\""] strlen(echo[{#VALUE}]) strlen("echo[\"\\",\\"\"]") OK "\",\"" echo[a,{#VALUE}] echo[a,"\",\""] strlen(echo[a,{#VALUE}]) strlen(echo[a,"\",\"]") FAIL --> Cannot evaluate function [strlen("\,\]")]: item [localhost:echo[a] not found Workaround: quote the key in the function and escape quotes in key's params. "\",\"" echo[a,{#VALUE}] echo[a,"\",\""] strlen("localhost:echo[a,{#VALUE}]") strlen("localhost:echo[a,\"\\",\\"\"]") OK "\",\"" echo[a,{#VALUE}] echo[a,"\",\""] strlen("localhost":"echo[a,{#VALUE}]") strlen("localhost":"echo[a,","]") FAIL --> Invalid first parameter in function [strlen("localhost":"echo[a,","]")] Workaround: quote the key in the function and escape quotes in key's params.