001/**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *      http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.apache.oozie.client.event.message;
019
020import java.util.Date;
021
022import javax.jms.JMSException;
023import javax.jms.Message;
024
025import org.apache.oozie.AppType;
026import org.apache.oozie.client.event.Event.MessageType;
027import org.apache.oozie.client.event.SLAEvent;
028import org.apache.oozie.client.event.jms.JMSHeaderConstants;
029import org.apache.oozie.client.event.message.EventMessage;
030import org.codehaus.jackson.annotate.JsonIgnore;
031import org.codehaus.jackson.annotate.JsonProperty;
032import org.codehaus.jackson.map.annotate.JsonSerialize;
033
034@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
035public class SLAMessage extends EventMessage {
036
037    @JsonProperty
038    private String id;
039    @JsonProperty
040    private String parentId;
041    @JsonProperty
042    private Date nominalTime;
043    @JsonProperty
044    private Date expectedStartTime;
045    @JsonProperty
046    private Date actualStartTime;
047    @JsonProperty
048    private Date expectedEndTime;
049    @JsonProperty
050    private Date actualEndTime;
051    @JsonProperty
052    private long expectedDuration;
053    @JsonProperty
054    private long actualDuration;
055    @JsonProperty
056    private String notificationMessage;
057    @JsonProperty
058    private String upstreamApps;
059
060    private String user;
061    private String appName;
062    private SLAEvent.EventStatus eventStatus;
063    private SLAEvent.SLAStatus slaStatus;
064
065    public SLAMessage(){
066        // Dummy constructor for JSON
067    }
068
069    public SLAMessage(SLAEvent.EventStatus eventStatus, SLAEvent.SLAStatus slaStatus, AppType appType, String appName,
070            String user, String jobId, String parentJobId, Date nominalTime, Date expectedStartTime,
071            Date actualStartTime, Date expectedEndTime, Date actualEndTime, long expectedDuration, long actualDuration,
072            String notificationMessage, String upstreamApps) {
073
074        super(MessageType.SLA, appType);
075        this.eventStatus = eventStatus;
076        this.slaStatus = slaStatus;
077        this.appName = appName;
078        this.user = user;
079        this.id = jobId;
080        this.parentId = parentJobId;
081        this.nominalTime = nominalTime;
082        this.expectedStartTime = expectedStartTime;
083        this.actualStartTime = actualStartTime;
084        this.expectedEndTime = expectedEndTime;
085        this.actualEndTime = actualEndTime;
086        this.expectedDuration = expectedDuration;
087        this.actualDuration = actualDuration;
088        this.notificationMessage = notificationMessage;
089        this.upstreamApps = upstreamApps;
090    }
091
092    /**
093     * Get the job Id
094     *
095     * @return id the job id
096     */
097    public String getId() {
098        return id;
099    }
100
101    /**
102     * Set the job Id for message
103     *
104     * @param id the job id
105     */
106    public void setId(String id) {
107        this.id = id;
108    }
109
110    /**
111     * Gets the parent job id
112     *
113     * @return the parent job Id
114     */
115    public String getParentId() {
116        return parentId;
117    }
118
119    /**
120     * Set the parent job Id for message
121     *
122     * @param parentId the parent job Id
123     */
124    public void setParentId(String parentId) {
125        this.parentId = parentId;
126    }
127
128    /**
129     * Get nominal time
130     *
131     * @return nominal time
132     */
133    public Date getNominalTime() {
134        return nominalTime;
135    }
136
137    /**
138     * Set nominal time for message
139     *
140     * @param nominalTime
141     */
142    public void setNominalTime(Date nominalTime) {
143        this.nominalTime = nominalTime;
144    }
145
146    /**
147     * Get expected start time
148     *
149     * @return the expected start time
150     */
151    public Date getExpectedStartTime() {
152        return expectedStartTime;
153    }
154
155    /**
156     * Set expected start time for message
157     *
158     * @param expectedStartTime
159     */
160    public void setExpectedStartTime(Date expectedStartTime) {
161        this.expectedStartTime = expectedStartTime;
162    }
163
164    /**
165     * Get actual start time
166     *
167     * @return actual start time
168     */
169    public Date getActualStartTime() {
170        return actualStartTime;
171    }
172
173    /**
174     * Set actual start time for message
175     *
176     * @param actualStartTime
177     */
178    public void setActualStartTime(Date actualStartTime) {
179        this.actualStartTime = actualStartTime;
180    }
181
182    /**
183     * Get expected end time
184     *
185     * @return expectedEndTime
186     */
187    public Date getExpectedEndTime() {
188        return expectedEndTime;
189    }
190
191    /**
192     * Set expected end time for message
193     *
194     * @param expectedEndTime
195     */
196    public void setExpectedEndTime(Date expectedEndTime) {
197        this.expectedEndTime = expectedEndTime;
198    }
199
200    /**
201     * Get actual end time
202     *
203     * @return actual end time
204     */
205    public Date getActualEndTime() {
206        return actualEndTime;
207    }
208
209    /**
210     * Set actual end time for message
211     *
212     * @param actualEndTime
213     */
214    public void setActualEndTime(Date actualEndTime) {
215        this.actualEndTime = actualEndTime;
216    }
217
218    /**
219     * Get expected duration time (in milliseconds)
220     *
221     * @return expectedDuration (in milliseconds)
222     */
223    public long getExpectedDuration() {
224        return expectedDuration;
225    }
226
227    /**
228     * Set expected duration (in milliseconds) for message
229     *
230     * @param expectedDuration (in milliseconds)
231     */
232    public void setExpectedDuration(long expectedDuration) {
233        this.expectedDuration = expectedDuration;
234    }
235
236    /**
237     * Get actual duration (in milliseconds)
238     *
239     * @return actual duration (in milliseconds)
240     */
241    public long getActualDuration() {
242        return actualDuration;
243    }
244
245    /**
246     * Set actual duration (in milliseconds) for message
247     *
248     * @param actualDuration (in milliseconds)
249     */
250    public void setActualDuration(long actualDuration) {
251        this.actualDuration = actualDuration;
252    }
253
254    /**
255     * Get notification message
256     *
257     * @return notification message
258     */
259    public String getNotificationMessage() {
260        return notificationMessage;
261    }
262
263    /**
264     * Set notification message
265     *
266     * @param notificationMessage
267     */
268    public void setNotificationMessage(String notificationMessage) {
269        this.notificationMessage = notificationMessage;
270    }
271
272    /**
273     * Get upstream app names
274     *
275     * @return upstreamApps
276     */
277    public String getUpstreamApps() {
278        return upstreamApps;
279    }
280
281    /**
282     * Set upstream app names
283     *
284     * @param upstreamApps
285     */
286    public void setUpstreamApps(String upstreamApps) {
287        this.upstreamApps = upstreamApps;
288    }
289
290    /**
291     * Get user name
292     *
293     * @return user name
294     */
295    @JsonIgnore
296    public String getUser() {
297        return user;
298    }
299
300    /**
301     * Set user name for message
302     *
303     * @param user
304     */
305    public void setUser(String user) {
306        this.user = user;
307    }
308
309    /**
310     * Get application name
311     *
312     * @return application name
313     */
314    @JsonIgnore
315    public String getAppName() {
316        return appName;
317    }
318
319    /**
320     * Set application name for message
321     *
322     * @param appName
323     */
324    public void setAppName(String appName) {
325        this.appName = appName;
326    }
327
328    /**
329     * Get event status
330     *
331     * @return event status
332     */
333    @JsonIgnore
334    public SLAEvent.EventStatus getEventStatus() {
335        return eventStatus;
336    }
337
338    /**
339     * Set event status
340     *
341     * @param eventStatus
342     */
343    public void setEventStatus(SLAEvent.EventStatus eventStatus){
344        this.eventStatus = eventStatus;
345    }
346
347    /**
348     * Get SLA status
349     *
350     * @return sla status
351     */
352    @JsonIgnore
353    public SLAEvent.SLAStatus getSLAStatus() {
354        return slaStatus;
355    }
356
357    /**
358     * Set SLA status for message
359     *
360     * @param slaStatus
361     */
362    public void setSLAStatus(SLAEvent.SLAStatus slaStatus) {
363        this.slaStatus = slaStatus;
364    }
365
366    /**
367     * Set the JMS properties for SLA message
368     *
369     * @param message the JMS message
370     * @throws JMSException
371     */
372    @Override
373    @JsonIgnore
374    public void setProperties(Message message) throws JMSException {
375        super.setProperties(message);
376        setEventStatus(SLAEvent.EventStatus.valueOf(message.getStringProperty(JMSHeaderConstants.EVENT_STATUS)));
377        setSLAStatus(SLAEvent.SLAStatus.valueOf(message.getStringProperty(JMSHeaderConstants.SLA_STATUS)));
378        setAppName(message.getStringProperty(JMSHeaderConstants.APP_NAME));
379        setUser(message.getStringProperty(JMSHeaderConstants.USER));
380    }
381}