Agree, if most of us like it, I can implement foreach for objects. As of
now I use omprog to call a script which uses jq and awk to make it opentsdb
and redis friendly. I could have used omredis if foreach worked for objects.

Let us conclude.

@Rainer any thoughts on foreach for object?
On Mar 23, 2016 1:56 AM, "David Lang" <[email protected]> wrote:

> On Wed, 23 Mar 2016, singh.janmejay wrote:
>
> Makes sense.
>>
>> ..."counters":["a":80,"b":67] won't work, I think you meant
>> ..."counters": [{"a" : 80}, {"b": 67}].
>>
>
> ahh, showing my lack of knowledge of JSON :-) talking things through:
>
> so our choices are:
>
> "counters": [{"a":80},{"b":67}]
> vs
> "counters": {"a":80,"b":67}
>
> running these through jq gives
>
> {
>   "counters": [
>     {
>       "a": 80
>     },
>     {
>       "b": 67
>     }
>   ]
> }
>
> vs
>
> {
>   "counters": {
>     "a": 80,
>     "b": 67
>   }
> }
>
> or to reference a
> .counters[0].a
> vs
> .counters.a
>
> The latter seems to clearly be the cleaner and more logical one to me.
>
> Does this seem sane?
>
> But to use it, we need a variation of foreach that gives the object name
> as well as the object contents.
>
> David Lang
>
> So it boils down to foreach handling object or not.
>>
>> Thoughts?
>>
>> On Wed, Mar 23, 2016 at 1:18 AM, David Lang <[email protected]> wrote:
>>
>>> On Wed, 23 Mar 2016, singh.janmejay wrote:
>>>
>>> What about wrapDynamicObjects="on|off"? That is required regardless,
>>>> right? (if we want to preserve backward compatibility). Unless we
>>>> choose to change it anyway (which im fine with).
>>>>
>>>
>>>
>>> I think the fact that data from the log could overwrite name or origin
>>> is a
>>> fatal flaw and the existing format should not be allowed. So I think we
>>> should break backwards compatibility here (if it was more established,
>>> I'd
>>> be much more reluctant to do so, but at this point, I think it's only
>>> early
>>> adopters who are using it)
>>>
>>> So if we are always going to push things down one level, the only
>>> question
>>> is the format
>>>
>>> {"name":"h","origin":"dynstats.bucket"},"counters":{"a":80,"b":67}}
>>>
>>> vs
>>>
>>> {"name":"h","origin":"dynstats.bucket"},"counters":["a":80,"b":67]}
>>>
>>> or the horrible
>>>
>>>
>>> {"name":"h","origin":"dynstats.bucket"},"counters":[{"name":"a","value":80},{"name":"b","value":67}]}
>>>
>>> I really want to avoid this third one. I'd say it's probably better to
>>> have
>>> to use an external script to process things than make the third one a
>>> standard :-)
>>>
>>> David Lang
>>>
>>>
>>> @Rainer: what do you think about foreach handling object?
>>>>
>>>> On Wed, Mar 23, 2016 at 1:01 AM, David Lang <[email protected]> wrote:
>>>>
>>>>>
>>>>> On Wed, 23 Mar 2016, singh.janmejay wrote:
>>>>>
>>>>> Foreach can only work with arrays as of now. It can't work with
>>>>>> objects (key-value pairs). So [{name: ... value: ...}, {..},...] is
>>>>>> the only format that will work as of now.
>>>>>>
>>>>>> We can enhance foreach to work with objects.
>>>>>>
>>>>>> I can make a flag available at dyn-stats bucket level, which can
>>>>>> control serialization format, but that would really be a hack.
>>>>>>
>>>>>> From single-responsibility pattern pov, impstats should be the only
>>>>>> component that decides how to layout data for user to see.
>>>>>>
>>>>>> How about this:
>>>>>>
>>>>>> impstats(format="json" wrapDynamicObjects="on"...)?
>>>>>>
>>>>>> It defaults to off, which keeps backward compatibility.
>>>>>>
>>>>>> So what do you guys think about:
>>>>>> - wrapDynamicObjects="on|off"
>>>>>> - generating [{name: a, value: 10}, {...} ...] vs. {a: 10, ...}
>>>>>> (foreach will handle the former out of the box, but later is concise,
>>>>>> readable and light-weight in addition to being more json-y.
>>>>>> - enhancing foreach to work with {a: 10, b: 20...}
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> If we can enhance foreach to work with the concise format, I would
>>>>> rather
>>>>> wait for it instead of introducing the wrapping version.
>>>>>
>>>>> I'm thinking that foreach walks through arrays, rather than mixing
>>>>> concepts,
>>>>> a foreachobject that gives us a name and contents for a {} list of
>>>>> objects
>>>>> may be the right thing to do?
>>>>>
>>>>> foreach just returns a single object while foreachobject needs to
>>>>> return
>>>>> the
>>>>> object and name.
>>>>>
>>>>> although, if we ever get the ability to address arrays directly, being
>>>>> able
>>>>> to look at the array position would be the equivalent of the name.
>>>>>
>>>>> David Lang
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Mar 23, 2016 at 12:26 AM, David Lang <[email protected]> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, 22 Mar 2016, singh.janmejay wrote:
>>>>>>>
>>>>>>> How about this: we support a new flag in impstats which allows
>>>>>>>> json-formatted stats-line to optionally use
>>>>>>>> encapsulated/wrapped-layout?
>>>>>>>>
>>>>>>>> impstats(format="json" ...) generates
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> {"name":"msg_per_host","origin":"dynstats.bucket","z-scribe1r-b":80,"SWEB10":67}
>>>>>>>>
>>>>>>>> however,
>>>>>>>>
>>>>>>>> impstats(format="json/w" ...) generates {"header":
>>>>>>>> {"name":"msg_per_host","origin":"dynstats.bucket"}, "counters" :
>>>>>>>> {"z-scribe1r-b":80,"SWEB10":67}}
>>>>>>>>
>>>>>>>> This is relevant, the serilization format we use right now mixes
>>>>>>>> pre-defined keys with counter-names and it can affect regular static
>>>>>>>> counters too.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> with the existing pstats output, there is no ability for user-defined
>>>>>>> data
>>>>>>> to become a tag name, so there is no potential for ambiguity. but
>>>>>>> with
>>>>>>> dynastats, this is not a possibility, and the format we use should
>>>>>>> prevent
>>>>>>> problems.
>>>>>>>
>>>>>>> Also, just from a conceptual point of view, why should the bucket
>>>>>>> contents
>>>>>>> be at the same level as the bucket name?
>>>>>>>
>>>>>>> other than backwards compatibility, what advantage is there of the
>>>>>>> current
>>>>>>> version in JSON? the documentation uses the plain text equivalant,
>>>>>>> which
>>>>>>> is
>>>>>>> perfectly legitimate because there is an order to the line, and after
>>>>>>> you
>>>>>>> get past the name and origin, everything else on the line is
>>>>>>> name-value
>>>>>>> pairs of counters, again, no ambiguity.
>>>>>>>
>>>>>>> But with JSON, I don't believe that you can depend on tools
>>>>>>> maintaining
>>>>>>> (or
>>>>>>> even identifying) the order of the elements, and if you have multiple
>>>>>>> elements with the same name, it's implementation dependent as to
>>>>>>> which
>>>>>>> one
>>>>>>> will be seen.
>>>>>>>
>>>>>>> So purely from a correctness and defensive programming point of
>>>>>>> view, I
>>>>>>> think the current JSON serialization should be changed, with the old
>>>>>>> format
>>>>>>> no longer being an option.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> As to the details of the new format
>>>>>>>
>>>>>>> What I'm wanting to do with the counters is something like
>>>>>>>
>>>>>>> if $!origin == "dynstats.bucket" then {
>>>>>>>   foreach $.tag $!counters {
>>>>>>>     /var/log/stats;format
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>> to output one line per counter.
>>>>>>>
>>>>>>> I'm very flexible in how to do this, but I would much rather be able
>>>>>>> to
>>>>>>> do
>>>>>>> this inside rsyslog than have to serialize things to an external
>>>>>>> script,
>>>>>>> have it parse the json and process it.
>>>>>>>
>>>>>>> my initial thinking was just do
>>>>>>>
>>>>>>> counters: [ "z-scribe1r-b":80,"SWEB10":67 ]
>>>>>>>
>>>>>>> but as I'm typing this, I realize that doesn't work as I don't have a
>>>>>>> way
>>>>>>> to
>>>>>>> break $.tag down to reference the name and the value.
>>>>>>>
>>>>>>> I'd hate to have to do something like
>>>>>>>
>>>>>>> counters: [{"name":"z-scribe1r-b","value":80
>>>>>>> },{"name":"SWEB10","value":67}]
>>>>>>>
>>>>>>> this mirrors the misuse of XML that gives it such a horrible
>>>>>>> reputation.
>>>>>>> But
>>>>>>> unless we introduce some new function to rsyslog to break things
>>>>>>> down,
>>>>>>> I
>>>>>>> don't see a better way. If we do need to do something like this, I
>>>>>>> sure
>>>>>>> would not want to make it the default JSON, which would result in two
>>>>>>> different formats. I hate the idea of starting to have different
>>>>>>> formats
>>>>>>> because of subtypes of data (what is someone wants the cee version of
>>>>>>> this
>>>>>>> for example, you start to have orthoginal format decisions)
>>>>>>>
>>>>>>>
>>>>>>> David Lang
>>>>>>> _______________________________________________
>>>>>>> rsyslog mailing list
>>>>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog
>>>>>>> http://www.rsyslog.com/professional-services/
>>>>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards
>>>>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a
>>>>>>> myriad
>>>>>>> of
>>>>>>> sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you
>>>>>>> DON'T
>>>>>>> LIKE THAT.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>> rsyslog mailing list
>>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog
>>>>> http://www.rsyslog.com/professional-services/
>>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards
>>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a
>>>>> myriad
>>>>> of
>>>>> sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you
>>>>> DON'T
>>>>> LIKE THAT.
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>> rsyslog mailing list
>>> http://lists.adiscon.net/mailman/listinfo/rsyslog
>>> http://www.rsyslog.com/professional-services/
>>> What's up with rsyslog? Follow https://twitter.com/rgerhards
>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad
>>> of
>>> sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T
>>> LIKE THAT.
>>>
>>
>>
>>
>>
>> _______________________________________________
> rsyslog mailing list
> http://lists.adiscon.net/mailman/listinfo/rsyslog
> http://www.rsyslog.com/professional-services/
> What's up with rsyslog? Follow https://twitter.com/rgerhards
> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad
> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you
> DON'T LIKE THAT.
>
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com/professional-services/
What's up with rsyslog? Follow https://twitter.com/rgerhards
NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of 
sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE 
THAT.

Reply via email to