ACK! Please go, let's set aside my probably too strong concerns. I am
perfectly happy when you say it's a small change and glad you do it!

Rainer

Sent from phone, thus brief.
Am 25.03.2016 06:21 schrieb "David Lang" <[email protected]>:

> As I understand Rainer, go .
>
> David Lang
>
> On Fri, 25 Mar 2016, singh.janmejay wrote:
>
> Makes sense. So final call on foreach? Go or no-go?
>> On Mar 25, 2016 2:38 AM, "David Lang" <[email protected]> wrote:
>>
>> Just a note, the dynastats output line needs this as well as the bucket
>>> line.
>>>
>>> This isn't remote-input, but it needs the same ability to iterate over
>>> things.
>>>
>>> example:
>>>
>>>
>>>
>>> {"name":"global","origin":"dynstats","message_framing.ops_overflow":0,"message_framing.new_metric_add":5,"message_framing.no_metric":0,"message_framing.metrics_purged":0,"message_framing.ops_ignored":0,"message_framing.purge_triggered":0,"msgs_per_host.ops_overflow":0,"msgs_per_host.new_metric_add":0,"msgs_per_host.no_metric":0,"msgs_per_host.metrics_purged":0,"msgs_per_host.ops_ignored":0,"msgs_per_host.purge_triggered":0,"msgs_per_edge_relay.ops_overflow":0,"msgs_per_edge_relay.new_metric_add":0,"msgs_per_edge_relay.no_metric":0,"msgs_per_edge_relay.metrics_purged":0,"msgs_per_edge_relay.ops_ignored":0,"msgs_per_edge_relay.purge_triggered":0,"msgs_per_core_relay.ops_overflow":0,"msgs_per_core_relay.new_metric_add":0,"msgs_per_core_relay.no_metric":0,"msgs_per_core_relay.metrics_purged":0,"msgs_per_core_relay.ops_ignored":0,"msgs_per_core_relay.purge_triggered":0,"msgs_per_program.ops_overflow":0,"msgs_per_program.new_metric_add":0,"msgs_per_program.no_metric":0,"msgs_pe
 !
>>>
>> r_
>
>> p!
>>
>>>
>>>
>>> rogram.metrics_purged":0,"msgs_per_program.ops_ignored":0,"msgs_per_program.purge_triggered":0,"msgs_per_tag.ops_overflow":0,"msgs_per_tag.new_metric_add":0,"msgs_per_tag.no_metric":0,"msgs_per_tag.metrics_purged":0,"msgs_per_tag.ops_ignored":0,"msgs_per_tag.purge_triggered":0}
>>>
>>> David Lang
>>>
>>> On Wed, 23 Mar 2016, singh.janmejay wrote:
>>>
>>> Date: Wed, 23 Mar 2016 09:10:47 +0530
>>>
>>>> From: singh.janmejay <[email protected]>
>>>> Reply-To: rsyslog-users <[email protected]>
>>>> To: rsyslog-users <[email protected]>
>>>> Subject: Re: [rsyslog] dynastats JSON output need work
>>>>
>>>> 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.
>>>>
>>>>
>>> _______________________________________________
>>> 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