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 */
018
019package org.apache.oozie.sla;
020
021import java.util.Date;
022import org.apache.oozie.AppType;
023import org.apache.oozie.client.event.SLAEvent;
024
025/**
026 * Class used by SLAService to store SLA objects and perform calculations and
027 * sla decisions
028 */
029public class SLACalcStatus extends SLAEvent {
030
031    private SLARegistrationBean regBean;
032    private String jobStatus;
033    private SLAStatus slaStatus;
034    private EventStatus eventStatus;
035    private Date actualStart;
036    private Date actualEnd;
037    private long actualDuration = -1;
038    private Date lastModifiedTime;
039    private byte eventProcessed;
040
041    public SLACalcStatus(SLARegistrationBean reg) {
042        this();
043        setSLARegistrationBean(reg);
044    }
045
046    public SLACalcStatus(SLASummaryBean summary, SLARegistrationBean regBean) {
047        this();
048        SLARegistrationBean reg = new SLARegistrationBean();
049        reg.setNotificationMsg(regBean.getNotificationMsg());
050        reg.setUpstreamApps(regBean.getUpstreamApps());
051        reg.setAlertContact(regBean.getAlertContact());
052        reg.setAlertEvents(regBean.getAlertEvents());
053        reg.setJobData(regBean.getJobData());
054        reg.setId(summary.getId());
055        reg.setAppType(summary.getAppType());
056        reg.setUser(summary.getUser());
057        reg.setAppName(summary.getAppName());
058        reg.setParentId(summary.getParentId());
059        reg.setNominalTime(summary.getNominalTime());
060        reg.setExpectedStart(summary.getExpectedStart());
061        reg.setExpectedEnd(summary.getExpectedEnd());
062        reg.setExpectedDuration(summary.getExpectedDuration());
063        setSLARegistrationBean(reg);
064        setActualStart(summary.getActualStart());
065        setActualEnd(summary.getActualEnd());
066        setActualDuration(summary.getActualDuration());
067        setSLAStatus(summary.getSLAStatus());
068        setJobStatus(summary.getJobStatus());
069        setEventStatus(summary.getEventStatus());
070        setLastModifiedTime(summary.getLastModifiedTime());
071        setEventProcessed(summary.getEventProcessed());
072    }
073
074    /**
075     * copy constructor
076     * @return SLACalcStatus
077     */
078    public SLACalcStatus(SLACalcStatus a) {
079        this();
080        setSLARegistrationBean(a.getSLARegistrationBean());
081        setJobStatus(a.getJobStatus());
082        setSLAStatus(a.getSLAStatus());
083        setEventStatus(a.getEventStatus());
084        setActualStart(a.getActualStart());
085        setActualEnd(a.getActualEnd());
086        setActualDuration(a.getActualDuration());
087        setEventProcessed(a.getEventProcessed());
088    }
089
090    public SLACalcStatus() {
091        setMsgType(MessageType.SLA);
092        setLastModifiedTime(new Date());
093    }
094
095    public SLARegistrationBean getSLARegistrationBean() {
096        return regBean;
097    }
098
099    public void setSLARegistrationBean(SLARegistrationBean slaBean) {
100        this.regBean = slaBean;
101    }
102
103    @Override
104    public String getId() {
105        return regBean.getId();
106    }
107
108    public void setId(String id) {
109        regBean.setId(id);
110    }
111
112    @Override
113    public Date getActualStart() {
114        return actualStart;
115    }
116
117    public void setActualStart(Date actualStart) {
118        this.actualStart = actualStart;
119    }
120
121    @Override
122    public Date getActualEnd() {
123        return actualEnd;
124    }
125
126    public void setActualEnd(Date actualEnd) {
127        this.actualEnd = actualEnd;
128    }
129
130    @Override
131    public long getActualDuration() {
132        return actualDuration;
133    }
134
135    public void setActualDuration(long actualDuration) {
136        this.actualDuration = actualDuration;
137    }
138
139    @Override
140    public String getJobStatus() {
141        return jobStatus;
142    }
143
144    public void setJobStatus(String status) {
145        this.jobStatus = status;
146    }
147
148    @Override
149    public SLAStatus getSLAStatus() {
150        return slaStatus;
151    }
152
153    public void setSLAStatus(SLAStatus slaStatus) {
154        this.slaStatus = slaStatus;
155    }
156
157    @Override
158    public EventStatus getEventStatus() {
159        return eventStatus;
160    }
161
162    public void setEventStatus(EventStatus es) {
163        this.eventStatus = es;
164    }
165
166    public void setLastModifiedTime(Date lastModifiedTime) {
167        this.lastModifiedTime = lastModifiedTime;
168    }
169
170    /**
171     * Get which type of sla event has been processed needed when calculator
172     * periodically loops to update all jobs' sla
173     *
174     * @return byte 1st bit set (from LSB) = start processed
175     * 2nd bit set = duration processed
176     * 3rd bit set = end processed
177     * only 4th bit set = everything processed
178     */
179    public byte getEventProcessed() {
180        return eventProcessed;
181    }
182
183    public void setEventProcessed(int eventProcessed) {
184        this.eventProcessed = (byte) eventProcessed;
185    }
186
187    @Override
188    public String getParentId() {
189        return regBean.getParentId();
190    }
191
192    @Override
193    public AppType getAppType() {
194        return regBean.getAppType();
195    }
196
197    @Override
198    public String getAppName() {
199        return regBean.getAppName();
200    }
201
202    @Override
203    public Date getNominalTime() {
204        return regBean.getNominalTime();
205    }
206
207    @Override
208    public Date getExpectedStart() {
209        return regBean.getExpectedStart();
210    }
211
212    @Override
213    public Date getExpectedEnd() {
214        return regBean.getExpectedEnd();
215    }
216
217    @Override
218    public long getExpectedDuration() {
219        return regBean.getExpectedDuration();
220    }
221
222    @Override
223    public String getNotificationMsg() {
224        return regBean.getNotificationMsg();
225    }
226
227    @Override
228    public String getAlertEvents() {
229        return regBean.getAlertEvents();
230    }
231
232    @Override
233    public String getAlertContact() {
234        return regBean.getAlertContact();
235    }
236
237    @Override
238    public String getUpstreamApps() {
239        return regBean.getUpstreamApps();
240    }
241
242    @Override
243    public String getJobData() {
244        return regBean.getJobData();
245    }
246
247    @Override
248    public String getUser() {
249        return regBean.getUser();
250    }
251
252    @Override
253    public String getSlaConfig() {
254        return regBean.getSlaConfig();
255    }
256
257    @Override
258    public MessageType getMsgType() {
259        return regBean.getMsgType();
260    }
261
262    @Override
263    public Date getLastModifiedTime() {
264        return lastModifiedTime;
265    }
266
267}