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

Satish Subhashrao Saley edited comment on OOZIE-2572 at 6/14/16 9:59 PM:
-------------------------------------------------------------------------

We are unable to see DURATION_MISS for IN_PROCESS job because the times which 
we are comparing have different time units.
I had look at a coord job while it was running:

{code}
{
slaSummaryList: [
{
nominalTime: 1465930800000,
jobStatus: "RUNNING",
expectedEnd: 1465948800000,
appName: "meow",
actualEnd: null,

actualDuration: 55, <==It is in minutes
expectedDuration: 3600000, <== It is in milliseconds

}
{code}

The java script code is doing comparison based on these values
{code}
oozie-sla-table.js

        if (slaSummary.actualDuration != -1 && slaSummary.expectedDuration != 
-1) {
            slaSummary.durDiff = slaSummary.actualDuration - 
slaSummary.expectedDuration;
            if (slaSummary.actualDuration > slaSummary.expectedDuration) {
                slaMisses += "DURATION_MISS, ";
            }
        }
{code}
The comparison happens correctly if job has ended, because we update the time 
in milliseconds and prepare the json string correctly.
{code}
org.apache.oozie.command.sla.SLAJobEventXCommand.processForEnd()
slaCalc.setActualDuration(slaCalc.getActualEnd().getTime() - 
slaCalc.getActualStart().getTime());
{code} 

For the job which is running, we just do comparison in correct time units but 
does not update actualDuration.
We need to change the logic for preparation of json string

{code}
 org.apache.oozie.command.sla.SLAJobEventXCommand.processForRunning()

else if (slaCalc.getActualStart() != null && slaCalc.getExpectedDuration() != 
-1) {
                if (System.currentTimeMillis() - 
slaCalc.getActualStart().getTime() > slaCalc.getExpectedDuration()) {
                    slaCalc.setEventStatus(EventStatus.DURATION_MISS);
                    if (shouldAlert(slaCalc)) {
                        queueEvent(new SLACalcStatus(slaCalc));
                    }
                    eventProc += 2;
                }
            }
{code}


{code}
JSONObject org.apache.oozie.sla.SLASummaryBean.toJSONObject(String timeZoneId)

json.put(JsonTags.SLA_SUMMARY_EXPECTED_DURATION, expectedDuration);
if (actualDuration == -1 && expectedDuration != -1 && actualStartTS != null) {
    long currentDur = (new Date().getTime() - actualStartTS.getTime()) / (1000 
* 60);
    json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, currentDur);
}
else {
    json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, actualDuration);
}
{code}


was (Author: satishsaley):
1. Have you received email notification? 
2. We are unable to see DURATION_MISS for IN_PROCESS job because the times 
which we are comparing have different time units.
I had look at 1464144-160602055743812-oozie_PR-C@100 while it was running:

{code}
{
slaSummaryList: [
{
nominalTime: 1465930800000,
jobStatus: "RUNNING",
expectedEnd: 1465948800000,
appName: "cdw_cow_complete_1h",
actualEnd: null,

actualDuration: 55, <==It is in minutes
expectedDuration: 3600000, <== It is in milliseconds

}
{code}

The java script code is doing comparison based on these values
{code}
oozie-sla-table.js

        if (slaSummary.actualDuration != -1 && slaSummary.expectedDuration != 
-1) {
            slaSummary.durDiff = slaSummary.actualDuration - 
slaSummary.expectedDuration;
            if (slaSummary.actualDuration > slaSummary.expectedDuration) {
                slaMisses += "DURATION_MISS, ";
            }
        }
{code}
The comparison happens correctly if job has ended, because we update the time 
in milliseconds and prepare the json string correctly.
{code}
org.apache.oozie.command.sla.SLAJobEventXCommand.processForEnd()
slaCalc.setActualDuration(slaCalc.getActualEnd().getTime() - 
slaCalc.getActualStart().getTime());
{code} 

For the job which is running, we just do comparison in correct time units but 
does not update actualDuration.
We need to change the logic for preparation of json string

{code}
 org.apache.oozie.command.sla.SLAJobEventXCommand.processForRunning()

else if (slaCalc.getActualStart() != null && slaCalc.getExpectedDuration() != 
-1) {
                if (System.currentTimeMillis() - 
slaCalc.getActualStart().getTime() > slaCalc.getExpectedDuration()) {
                    slaCalc.setEventStatus(EventStatus.DURATION_MISS);
                    if (shouldAlert(slaCalc)) {
                        queueEvent(new SLACalcStatus(slaCalc));
                    }
                    eventProc += 2;
                }
            }
{code}


{code}
JSONObject org.apache.oozie.sla.SLASummaryBean.toJSONObject(String timeZoneId)

json.put(JsonTags.SLA_SUMMARY_EXPECTED_DURATION, expectedDuration);
if (actualDuration == -1 && expectedDuration != -1 && actualStartTS != null) {
    long currentDur = (new Date().getTime() - actualStartTS.getTime()) / (1000 
* 60);
    json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, currentDur);
}
else {
    json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, actualDuration);
}
{code}

> SLA DURATION miss not shown when job is running for longer than expected time
> -----------------------------------------------------------------------------
>
>                 Key: OOZIE-2572
>                 URL: https://issues.apache.org/jira/browse/OOZIE-2572
>             Project: Oozie
>          Issue Type: Bug
>            Reporter: Satish Subhashrao Saley
>            Assignee: Satish Subhashrao Saley
>
> If job is running for beyond expected duration, Oozie UI is not slowing SLA 
> for duration miss.



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

Reply via email to