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; 020 021import java.io.DataInput; 022import java.io.DataOutput; 023import java.io.IOException; 024import java.text.MessageFormat; 025import java.util.Date; 026 027import javax.persistence.Basic; 028import javax.persistence.Column; 029import javax.persistence.Entity; 030import javax.persistence.NamedQueries; 031import javax.persistence.NamedQuery; 032 033import org.apache.hadoop.io.Writable; 034import org.apache.oozie.client.rest.JsonSLAEvent; 035import org.apache.oozie.util.DateUtils; 036import org.apache.oozie.util.XLog; 037import org.jdom.Element; 038 039@Deprecated 040@Entity 041@NamedQueries({ 042 @NamedQuery(name = "GET_SLA_EVENT_NEWER_SEQ_LIMITED", query = "select OBJECT(w) from SLAEventBean w where w.event_id " 043 + "> :id order by w.event_id"), 044 @NamedQuery(name = "GET_SLA_EVENTS", query = "select OBJECT(w) from SLAEventBean w") }) 045 046public class SLAEventBean extends JsonSLAEvent implements Writable { 047 048 @Basic 049 @Column(name = "job_status") 050 private String jobStatusStr = null; 051 052 @Basic 053 @Column(name = "app_type") 054 private String appTypeStr = null; 055 056 @Basic 057 @Column(name = "expected_start") 058 private java.sql.Timestamp expectedStartTS = null; 059 060 @Basic 061 @Column(name = "expected_end") 062 private java.sql.Timestamp expectedEndTS = null; 063 064 @Basic 065 @Column(name = "status_timestamp") 066 private java.sql.Timestamp statusTimestampTS = null; 067 068 @Basic 069 @Column(name = "event_type") 070 private String eventType = null; 071 072 public SLAEventBean() { 073 074 } 075 076 public String getJobStatusStr() { 077 return jobStatusStr; 078 } 079 080 public void setJobStatusStr(String jobStatusStr) { 081 this.jobStatusStr = jobStatusStr; 082 } 083 084 @Override 085 public Status getJobStatus() { 086 return Status.valueOf(this.jobStatusStr); 087 } 088 089 @Override 090 public void setJobStatus(Status jobStatus) { 091 super.setJobStatus(jobStatus); 092 this.jobStatusStr = jobStatus.toString(); 093 } 094 095 public String getAppTypeStr() { 096 return appTypeStr; 097 } 098 099 public void setAppTypeStr(String appTypeStr) { 100 this.appTypeStr = appTypeStr; 101 } 102 103 @Override 104 public SlaAppType getAppType() { 105 return SlaAppType.valueOf(appTypeStr); 106 } 107 108 @Override 109 public void setAppType(SlaAppType appType) { 110 super.setAppType(appType); 111 this.appTypeStr = appType.toString(); 112 } 113 114 public java.sql.Timestamp getExpectedStartTS() { 115 return expectedStartTS; 116 } 117 118 @Override 119 public Date getExpectedStart() { 120 return DateUtils.toDate(expectedStartTS); 121 } 122 123 @Override 124 public void setExpectedStart(Date expectedStart) { 125 super.setExpectedStart(expectedStart); 126 this.expectedStartTS = DateUtils.convertDateToTimestamp(expectedStart); 127 } 128 129 public java.sql.Timestamp getExpectedEndTS() { 130 return expectedEndTS; 131 } 132 133 @Override 134 public Date getExpectedEnd() { 135 return DateUtils.toDate(expectedEndTS); 136 } 137 138 @Override 139 public void setExpectedEnd(Date expectedEnd) { 140 super.setExpectedEnd(expectedEnd); 141 this.expectedEndTS = DateUtils.convertDateToTimestamp(expectedEnd); 142 } 143 144 public java.sql.Timestamp getStatusTimestampTS() { 145 return statusTimestampTS; 146 } 147 148 @Override 149 public Date getStatusTimestamp() { 150 return DateUtils.toDate(statusTimestampTS); 151 } 152 153 @Override 154 public void setStatusTimestamp(Date statusTimestamp) { 155 super.setStatusTimestamp(statusTimestamp); 156 this.statusTimestampTS = DateUtils.convertDateToTimestamp(statusTimestamp); 157 } 158 159 public String getEventType() { 160 return eventType; 161 } 162 163 public void setEventType(String eventType) { 164 this.eventType = eventType; 165 } 166 167 @Override 168 public void readFields(DataInput arg0) throws IOException { 169 // TODO Auto-generated method stub 170 171 } 172 173 @Override 174 public void write(DataOutput arg0) throws IOException { 175 // TODO Auto-generated method stub 176 177 } 178 179 @Override 180 public String toString() { 181 return MessageFormat.format("Event id[{0}] status[{1}]", getEvent_id(), getJobStatus()); 182 } 183 184 public Element toXml() { 185 Element retElem = null; 186 if (getJobStatus() == Status.CREATED) { 187 retElem = getRegistrationEvent("event"); 188 } 189 else { 190 retElem = getStatusEvent("event"); 191 } 192 return retElem; 193 } 194 195 private Element getRegistrationEvent(String tag) { 196 Element eReg = new Element(tag); 197 eReg.addContent(createATagElement("sequence-id", String.valueOf(getEvent_id()))); 198 Element e = new Element("registration"); 199 e.addContent(createATagElement("sla-id", getSlaId())); 200 e.addContent(createATagElement("app-type", getAppType().toString())); 201 e.addContent(createATagElement("app-name", getAppName())); 202 e.addContent(createATagElement("user", getUser())); 203 e.addContent(createATagElement("group", getGroupName())); 204 e.addContent(createATagElement("parent-sla-id", String 205 .valueOf(getParentSlaId()))); 206 e.addContent(createATagElement("expected-start", 207 getDateString(getExpectedStart()))); 208 e.addContent(createATagElement("expected-end", 209 getDateString(getExpectedEnd()))); 210 e.addContent(createATagElement("status-timestamp", 211 getDateString(getStatusTimestamp()))); 212 e.addContent(createATagElement("notification-msg", getNotificationMsg())); 213 214 e.addContent(createATagElement("alert-contact", getAlertContact())); 215 e.addContent(createATagElement("dev-contact", getDevContact())); 216 e.addContent(createATagElement("qa-contact", getQaContact())); 217 e.addContent(createATagElement("se-contact", getSeContact())); 218 219 e.addContent(createATagElement("alert-percentage", getAlertPercentage())); 220 e.addContent(createATagElement("alert-frequency", getAlertFrequency())); 221 222 e.addContent(createATagElement("upstream-apps", getUpstreamApps())); 223 e.addContent(createATagElement("job-status", getJobStatus().toString())); 224 e.addContent(createATagElement("job-data", getJobData())); 225 eReg.addContent(e); 226 return eReg; 227 } 228 229 private Element getStatusEvent(String tag) { 230 Element eStat = new Element(tag); 231 eStat.addContent(createATagElement("sequence-id", String.valueOf(getEvent_id()))); 232 Element e = new Element("status"); 233 e.addContent(createATagElement("sla-id", getSlaId())); 234 e.addContent(createATagElement("status-timestamp", getDateString(getStatusTimestamp()))); 235 e.addContent(createATagElement("job-status", getJobStatus().toString())); 236 e.addContent(createATagElement("job-data", getJobData())); 237 e.addContent(createATagElement("user", getUser())); 238 e.addContent(createATagElement("group", getGroupName())); 239 e.addContent(createATagElement("app-name", getAppName())); 240 eStat.addContent(e); 241 return eStat; 242 } 243 244 private Element createATagElement(String tag, String content) { 245 if (content == null) { 246 content = ""; 247 } 248 Element e = new Element(tag); 249 e.addContent(content); 250 return e; 251 } 252 253 private String getDateString(Date d) { 254 try { 255 return DateUtils.formatDateOozieTZ(d); 256 } 257 catch (Exception e) { 258 e.printStackTrace(); 259 XLog.getLog(getClass()).error("Date formatting error " + d, e); 260 throw new RuntimeException("Date formatting error " + d + e); 261 } 262 } 263 264}