2014-10-01 1 views
0

1 분마다 서비스로 실행되는 그루비 스크립트가 있습니다. 그루비 서비스가 제대로 실행됩니다. 우리가 날짜 - 시간 필드 named- 종료 시작 시간 티켓에 대한종료 종료 시간에있는이 그루비 스크립트에서Groovy - 현재 시간에서 특정 시간이 경과했는지 계산합니다.

. 종료 시간이 인 경우 120 분 (2 시간) 후에 전자 메일을 트리거하려는 경우 현재 시간이 보다 작을 때까지 종료 일정 종료 시간 (미래 날짜)입니다.

아래는 현재 시간과 종료 시간 사이의 경과 된 시간을 가져 오는 Groovy 스크립트입니다. 그러나 경과 분이 120 분 배수인지 확인하는 방법을 알 수는 없습니다.

import java.util.Date 
import groovy.time.* 
import java.util.* 
import java.util.concurrent.TimeUnit 
import java.util.Calendar 

CustomFieldManager customFieldManager = componentManager.getCustomFieldManager() 
CustomField downTimeStart = customFieldManager.getCustomFieldObjectByName("Shutdown Start Time") 
CustomField downTimeEnd = customFieldManager.getCustomFieldObjectByName("Shutdown End Time") 

Date downTimeStartCFDate = (Date)issue.getCustomFieldValue(downTimeStart) //Get the Shutdown Start Time 
Date downTimeEndCFDate = (Date)issue.getCustomFieldValue(downTimeEnd) //Get the Shutdown End Time 

//Get elapsed time between the current time and the Shutdown Start Time  
TimeDuration startDuration = TimeCategory.minus(new Date(), downTimeStartCFDate) 
long downtimeStartElapsedMinutes =TimeUnit.MILLISECONDS.toMinutes(startDuration.toMilliseconds()) 

//Get elapsed time between the current time and the Shutdown End Time     
TimeDuration endDuration = TimeCategory.minus(downTimeEndCFDate, downTimeStartCFDate) 
long downtimeEndRemaniningMinutes = TimeUnit.MILLISECONDS.toMinutes(endDuration.toMilliseconds()) 

//This sample 'if' condition checks if 12 minutes are elapsed. 
if(downtimeStartElapsedMinutes % 3 == 0 && downtimeStartElapsedMinutes % 4 == 0) 
{ 
    //Send an email 
} 

위의 그루비 스크립트는 매분마다 실행되는 서비스로 구현됩니다. 이 그루비 스크립트에서 현재 시간과 사이의 경과 시간을 확인해야합니다. 종료 시작 시간은 미래 120 분 (2 시간)입니다. 종료 시간 종료 날짜가 도착했습니다.

즉,의 말을하자 -

다운 타임 시작 - 2014년 10월 6일 23 : 00 : 00.0
중단 엔드 - 2014년 10월 7일 18 : 51 : 00.0

그런 다음 1 분마다 실행되는 그루비 서비스는 가동 중지 날짜부터 가동 중단 시간 종료 날짜까지 2 시간마다 전자 메일을 트리거해야합니다. -

다운 타임 시작 - 2014년 10월 6일 23 : 00 : 00.0

보낸

1 이메일 - 2014년 10월 7일 01 : 00 : 00.0

보낸

2 이메일 - 2014년 10월 7일 3시 : 00.0

보낸

3 이메일 - 2014년 10월 7일 05 : 00 : 00.0

보낸

4 이메일 - 2014년 10월 7일 07 : 00 : 00.0

5 이메일 전송 - 2014년 10월 7일 09 : 00 : 00.0

6t 시간 이메일 전송 - 2014년 10월 7일 11 : 00 : 00.0

7 이메일 전송 - 2014년 10월 7일 13 : 00 : 00.0

8 이메일 전송 - 2014년 10월 7일 15 : 00 : 00.0

보낸

9 이메일 - 2014년 10월 7일 17 : 00 : 00.0

중단 엔드 - 2014년 10월 7일 18 : 51 : 00.0

그것은 매우 될 것입니다 도움이 사람이 할 수있는 경우에 내가 그루비 스크립팅에 익숙하지 않은만큼 이것에 대한 의견을 공유하십시오.

+0

그래서 종료 시간까지 2 시간마다 이메일을 보내시겠습니까? – evanwong

답변

1

너무 복잡하지 않습니까?

final long TWO_HOURS_MILIS = 2 * 60 * 60 * 1000l 

Date downTimeStartCFDate = (Date)issue.getCustomFieldValue(downTimeStart) 
Date downTimeEndCFDate = (Date)issue.getCustomFieldValue(downTimeEnd) 
long now = System.currentTimeMillis() 
long delta = now - downTimeStartCFDate.time 

// fire between 1:59 and 2:00 
if(delta % TWO_HOURS_MILIS >= TWO_HOURS_MILLIS - 60000 && now < downTimeEndCFDate.time){ 
    sendEmail() 
} 
+0

고마워요. @injecteer. 하지만 여기서 if 블록에서 다운 타임 시작 후 2 시간이 경과 한 경우에만 전자 메일이 처음으로 트리거됩니다. 이 전자 메일 트리거링 프로세스는 증분이어야하며 ** 2 시간 **마다 중단 시간 시작부터 중단 시간 종료 날짜 - 시간에 도달 할 때까지 ** 이메일을 전송합니다. – Naren

+0

업데이트보기 ... – injecteer

+1

'(날짜)'에 대한 귀하의 캐스트가 불필요하다고 생각합니다. 변수에 정적 유형의 'Date'가 있기 때문에 해당 형 변환이 자동으로 수행됩니다. –