[ 
https://issues.apache.org/jira/browse/METRON-1121?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16138382#comment-16138382
 ] 

ASF GitHub Bot commented on METRON-1121:
----------------------------------------

Github user cestella commented on a diff in the pull request:

    https://github.com/apache/metron/pull/707#discussion_r134758762
  
    --- Diff: 
metron-analytics/metron-profiler-common/src/main/java/org/apache/metron/profiler/DefaultProfileBuilder.java
 ---
    @@ -140,33 +144,41 @@ public void apply(JSONObject message) {
        * @return Returns the completed profile measurement.
        */
       @Override
    -  public ProfileMeasurement flush() {
    +  public Optional<ProfileMeasurement> flush() {
         LOG.debug("Flushing profile: profile={}, entity={}", profileName, 
entity);
    +    Optional<ProfileMeasurement> result = Optional.empty();
     
    -    // execute the 'profile' expression(s)
    -    @SuppressWarnings("unchecked")
    -    Object profileValue = 
execute(definition.getResult().getProfileExpressions().getExpression(), 
"result/profile");
    -
    -    // execute the 'triage' expression(s)
    -    Map<String, Object> triageValues = 
definition.getResult().getTriageExpressions().getExpressions()
    -            .entrySet()
    -            .stream()
    -            .collect(Collectors.toMap(
    -                    e -> e.getKey(),
    -                    e -> execute(e.getValue(), "result/triage")));
    -
    -    // execute the 'groupBy' expression(s) - can refer to value of 
'result' expression
    -    List<Object> groups = execute(definition.getGroupBy(), 
ImmutableMap.of("result", profileValue), "groupBy");
    +    try {
    +      // execute the 'profile' expression(s)
    +      Object profileValue = 
execute(definition.getResult().getProfileExpressions().getExpression(), 
"result/profile");
    +
    +      // execute the 'triage' expression(s)
    +      Map<String, Object> triageValues = 
definition.getResult().getTriageExpressions().getExpressions()
    +              .entrySet()
    +              .stream()
    +              .collect(Collectors.toMap(
    +                      e -> e.getKey(),
    +                      e -> execute(e.getValue(), "result/triage")));
    +
    +      // execute the 'groupBy' expression(s) - can refer to value of 
'result' expression
    +      List<Object> groups = execute(definition.getGroupBy(), 
ImmutableMap.of("result", profileValue), "groupBy");
    +
    +      result = Optional.of(new ProfileMeasurement()
    +              .withProfileName(profileName)
    +              .withEntity(entity)
    +              .withGroups(groups)
    +              .withPeriod(clock.currentTimeMillis(), periodDurationMillis, 
TimeUnit.MILLISECONDS)
    +              .withProfileValue(profileValue)
    +              .withTriageValues(triageValues)
    +              .withDefinition(definition));
    +
    +    } catch(Exception e) {
    +      // if any of the Stellar expressions fail, a measurement should NOT 
be returned
    +      LOG.error(format("Unable to flush profile: %s", e.getMessage()));
    --- End diff --
    
    Can we pass the exception as the second argument to `LOG.error`


> Ignore Profile with Bad 'init', 'update' or 'groupBy'
> -----------------------------------------------------
>
>                 Key: METRON-1121
>                 URL: https://issues.apache.org/jira/browse/METRON-1121
>             Project: Metron
>          Issue Type: Bug
>            Reporter: Nick Allen
>            Assignee: Nick Allen
>             Fix For: 0.4.1
>
>
> The Profiler needs to gracefully ignore profiles that have a bad 'init', 
> 'update' or 'groupBy' expression.  Under certain conditions a message may not 
> be applied to all valid profiles, due to a single bad profile.
> If the Profiler is running with multiple profiles defined and one of those 
> profiles has a Stellar expression that throws an exception for either the 
> 'init', 'update' or 'groupBy', the current logic will not continue to attempt 
> to apply the message to the remaining valid profiles.  Only valid profiles 
> executed before the bad profile will have the message applied.  Any valid 
> profiles after the bad profile will not see the message.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to