<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="generator" content="Osso Notes">
    <title></title></head>
<body>
<p>hi,
<br>
<br>what about introducing a template function that expands to the number of elements in the context?
<br>
<br>that way the condition could use that together with numeric comparisons that are already available.
<br>
<br>----- Original message -----
<br>&gt; <a href="mailto:balint.kovacs@balabit.com">balint.kovacs@balabit.com</a> writes:
<br>&gt;
<br>&gt; &gt; It was quite unintuitive to determine if a previous message exists in
<br>&gt; &gt; the correlation context as the basis of the decision whether an action
<br>&gt; &gt; should be run or not. This patch adds support for the min-messages and
<br>&gt; &gt; max-messages attributes of the action XML node, the action is run only,
<br>&gt; &gt; of the correlation context contains more or equal messages as the
<br>&gt; &gt; min-messages attribute and less or equal messages as the max-messages
<br>&gt; &gt; attribute.
<br>&gt; &gt;
<br>&gt; &gt; This way it is easy to determine if a context contains sufficient
<br>&gt; &gt; amount of messages for the event to be complete and run a different
<br>&gt; &gt; action if it is not, e.g. if 2 messages are needed for an event,
<br>&gt; &gt; this should emit an event message if there are enough messages and
<br>&gt; &gt; an error message if not.
<br>&gt;
<br>&gt; Now this was confusing at first (and even after in-person explanation,
<br>&gt; it is still a bit hard to wrap my head around it based on this
<br>&gt; description). The naming is bad, sorry!
<br>&gt;
<br>&gt; Just to clarify it to myself, what happens here, is that the patch
<br>&gt; introduces two new attributes for the action tag. Since I can't explain
<br>&gt; what they accomplish too well yet, I'd like to use an example:
<br>&gt;
<br>&gt; Lets suppose we have an event we want to corellate from at least five
<br>&gt; messages:
<br>&gt;
<br>&gt; program: session=f00; login; username="user"
<br>&gt; program: session=f00; task="something"
<br>&gt; program: session=f00; status="ok"
<br>&gt; program: session=f00; task="noop"
<br>&gt; program: session=f00; logout
<br>&gt;
<br>&gt; We want to make sure that whenever a corellation action fires, we have
<br>&gt; all five messages (and we'll assume that the five messages we have are
<br>&gt; the correct ones): for that, there's the new min-messages
<br>&gt; attribute. When set to 5, it will only emit a message when there are
<br>&gt; five or more messages in the context. Add this action to the closing
<br>&gt; pattern, and missin accomplished.
<br>&gt;
<br>&gt; It is most useful for closing patterns, but there's probably use case
<br>&gt; for using it elsewhere too.
<br>&gt;
<br>&gt; And to detect errors, we need a way to emit a message when we receive a
<br>&gt; closing pattern, but don't have enough messages: that's what
<br>&gt; max-messages does.
<br>&gt;
<br>&gt; Lets say that the noop task did not happen, so when the logout message
<br>&gt; arrives, we only have four messages in the context. If max-messages is
<br>&gt; set to 4, then the action will trigger.
<br>&gt;
<br>&gt; I find the naming unintuitive, though, it's kind of backwards...
<br>&gt;
<br>&gt; How about if-msg-count-ge (min-messages) and if-msg-count-le
<br>&gt; (max-messages)? I think that would make it slightly easier to understand
<br>&gt; what they're used for.
<br>&gt;
<br>&gt; Transforming your example, this:
<br>&gt;
<br>&gt; &gt; &lt;actions&gt;
<br>&gt; &gt; &lt;action min-messages='2'&gt;
<br>&gt; &gt; &lt;message&gt;
<br>&gt; &gt; &lt;values&gt;
<br>&gt; &gt; &lt;value name="PROGRAM"&gt;event&lt;/value&gt;
<br>&gt; &gt; &lt;value name="MESSAGE"&gt;Hello event!&lt;/value&gt;
<br>&gt; &gt; &lt;/values&gt;
<br>&gt; &gt; &lt;/message&gt;
<br>&gt; &gt; &lt;/action&gt;
<br>&gt; &gt; &lt;action max-messages='1'&gt;
<br>&gt; &gt; &lt;message&gt;
<br>&gt; &gt; &lt;values&gt;
<br>&gt; &gt; &lt;value name="PROGRAM"&gt;error&lt;/value&gt;
<br>&gt; &gt; &lt;value name="MESSAGE"&gt;Hello error!&lt;/value&gt;
<br>&gt; &gt; &lt;/values&gt;
<br>&gt; &gt; &lt;/message&gt;
<br>&gt; &gt; &lt;/action&gt;
<br>&gt; &gt; &lt;/actions&gt;
<br>&gt;
<br>&gt; ...would turn into:
<br>&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;actions&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;action if-msg-count-ge='2'&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;message&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;values&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;value name="PROGRAM"&gt;event&lt;/value&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;value name="MESSAGE"&gt;Hello event!&lt;/value&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;/values&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;/message&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;/action&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;action if-msg-count-le='1'&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;message&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;values&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;value name="PROGRAM"&gt;error&lt;/value&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;value name="MESSAGE"&gt;Hello error!&lt;/value&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;/values&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;/message&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;/action&gt;
<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#32;&lt;/actions&gt;
<br>&gt;
<br>&gt; I for one, would understand what this latter does without further
<br>&gt; explanation. Provided I understood the intent, that is. :)
<br>&gt;
<br>&gt; Perhaps we could even drop the if- prefix too, I'm not sure.
<br>&gt;
<br>&gt; Any ideas or opinions?
<br>&gt;
<br>&gt; --
<br>&gt; |8]
<br>&gt;
<br>&gt; ______________________________________________________________________________
<br>&gt; Member info: <a href="https://lists.balabit.hu/mailman/listinfo/syslog-ng">https://lists.balabit.hu/mailman/listinfo/syslog-ng</a>
<br>&gt; Documentation:
<br>&gt; <a href="http://www.balabit.com/support/documentation/?product=syslog-ng">http://www.balabit.com/support/documentation/?product=syslog-ng</a> FAQ:
<br>&gt; <a href="http://www.balabit.com/wiki/syslog-ng-faq">http://www.balabit.com/wiki/syslog-ng-faq</a>
<br>&gt;
<br><br></p>
</body>
</html>