Casey Stella created METRON-668:
-----------------------------------

             Summary: Remove the "tickUpdate" profile config and make the 
"init" phase not reset variables
                 Key: METRON-668
                 URL: https://issues.apache.org/jira/browse/METRON-668
             Project: Metron
          Issue Type: Improvement
            Reporter: Casey Stella
            Assignee: Casey Stella


Originally during work on the MAD outlier work, I conceived of a need for a new 
callback in the profile configuration, "tickUpdate" that ran at the tick and 
had the variables from the tick that just completed available to it.  This was 
done so that I could merge the state accumulated in the tick with a lookback 
window of state for MAD.  The problem is that the "init" phase happens after 
this and blows away the changes done in "tickUpdate", so it never worked like 
intended.

It occurs to me that what we really want is not to have two separate config 
phases, but only one, "init" and to not reset the variables on the tick for the 
profile.  You can, of course, choose to update them by overwriting them in the 
"init" phase *or* you can choose to use them as part of your init.

For context, this would make the example for MAD:
{code:javascript}
{
  "profiles": [
    {
      "profile": "sketchy_mad",
      "foreach": "'global'",
      "onlyif": "true",
      "init" : {
        "s": "OUTLIER_MAD_STATE_MERGE(PROFILE_GET('sketchy_mad',
'global', 5, 'MINUTES'))"
               },
      "tickUpdate": {
        "s": "OUTLIER_MAD_STATE_MERGE(PROFILE_GET('sketchy_mad',
'global', 5, 'MINUTES'), s)"
                },
      "update": {
        "s": "OUTLIER_MAD_ADD(s, value)"
                },
      "result": "s"
    }
  ]
}
{code}
is functionally equivalent to
{code:javascript}
{
  "profiles": [
    {
      "profile": "sketchy_mad",
      "foreach": "'global'",
      "onlyif": "true",
      "init" : {
        "s": "OUTLIER_MAD_STATE_MERGE(PROFILE_GET('sketchy_mad',
'global', 5, 'MINUTES'))"
               },
      "update": {
        "s": "OUTLIER_MAD_ADD(s, value)"
                },
      "result": "s"
    }
  ]
}
{code}

This resets the MAD state to the last 5 minute window.  If we did NOT reset the 
state and keep accumulating state (provided we did not clear the variables on 
init, we could do the following:
{code:javascript}
{
  "profiles": [
    {
      "profile": "sketchy_mad",
      "foreach": "'global'",
      "onlyif": "true",
      "init" : {
        "s": "if exists(s) then s else 
OUTLIER_MAD_STATE_MERGE(PROFILE_GET('sketchy_mad',
'global', 5, 'MINUTES'))"
               },
      "update": {
        "s": "OUTLIER_MAD_ADD(s, value)"
                },
      "result": "s"
    }
  ]
}
{code}

s would get initialized sensibly and then always accumulate as long as the 
topology continued (rather than having a fixed lookback).

In short, making init to not reset the variables shouldn't cause any harm and 
should provide another set of use-cases for the profiler.  Also, tickUpdate has 
no function whatsoever and should be removed because it gets overwritten by 
init directly after being called.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to