This project has retired. For details please refer to its
Attic page.
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 package org.apache.oozie.util.db;
019
020 import java.util.Date;
021
022 import org.apache.oozie.ErrorCode;
023 import org.apache.oozie.SLAEventBean;
024 import org.apache.oozie.client.SLAEvent.SlaAppType;
025 import org.apache.oozie.client.SLAEvent.Status;
026 import org.apache.oozie.command.CommandException;
027 import org.apache.oozie.service.Services;
028 import org.apache.oozie.store.Store;
029 import org.apache.oozie.util.DateUtils;
030 import org.apache.oozie.util.XLog;
031 import org.jdom.Element;
032
033 public class SLADbOperations {
034 public static final String CLIENT_ID_TAG = "oozie:sla:client-id";
035
036 public static SLAEventBean createSlaRegistrationEvent(Element eSla, Store store, String slaId, SlaAppType appType, String user,
037 String groupName) throws Exception {
038 // System.out.println("BBBBB SLA added");
039 if (eSla == null) {
040 return null;
041 }
042 // System.out.println("Writing REG AAAAA " + slaId);
043 SLAEventBean sla = new SLAEventBean();
044 // sla.setClientId(getTagElement( eSla, "client-id"));
045 // sla.setClientId(getClientId());
046 sla.setAppName(getTagElement(eSla, "app-name"));
047 sla.setParentClientId(getTagElement(eSla, "parent-child-id"));
048 sla.setParentSlaId(getTagElement(eSla, "parent-sla-id"));
049 String strNominalTime = getTagElement(eSla, "nominal-time");
050 // System.out.println("AAAAA SLA nominal time "+ strNominalTime);
051 if (strNominalTime == null || strNominalTime.length() == 0) {
052 throw new RuntimeException("Nominal time is required"); // TODO:
053 // change to
054 // CommandException
055 }
056 Date nominalTime = DateUtils.parseDateOozieTZ(strNominalTime);
057 // Setting expected start time
058 String strRelExpectedStart = getTagElement(eSla, "should-start");
059 if (strRelExpectedStart == null || strRelExpectedStart.length() == 0) {
060 throw new RuntimeException("should-start can't be empty");
061 }
062 int relExpectedStart = Integer.parseInt(strRelExpectedStart);
063 if (relExpectedStart < 0) {
064 sla.setExpectedStart(null);
065 }
066 else {
067 Date expectedStart = new Date(nominalTime.getTime() + relExpectedStart * 60 * 1000);
068 sla.setExpectedStart(expectedStart);
069 // sla.setExpectedStart(nominalTime);
070 }
071
072 // Setting expected end time
073 String strRelExpectedEnd = getTagElement(eSla, "should-end");
074 if (strRelExpectedEnd == null || strRelExpectedEnd.length() == 0) {
075 throw new RuntimeException("should-end can't be empty");
076 }
077 int relExpectedEnd = Integer.parseInt(strRelExpectedEnd);
078 if (relExpectedEnd < 0) {
079 sla.setExpectedEnd(null);
080 }
081 else {
082 Date expectedEnd = new Date(nominalTime.getTime() + relExpectedEnd * 60 * 1000);
083 sla.setExpectedEnd(expectedEnd);
084 }
085
086 sla.setNotificationMsg(getTagElement(eSla, "notification-msg"));
087 sla.setAlertContact(getTagElement(eSla, "alert-contact"));
088 sla.setDevContact(getTagElement(eSla, "dev-contact"));
089 sla.setQaContact(getTagElement(eSla, "qa-contact"));
090 sla.setSeContact(getTagElement(eSla, "se-contact"));
091 sla.setAlertFrequency(getTagElement(eSla, "alert-frequency"));
092 sla.setAlertPercentage(getTagElement(eSla, "alert-percentage"));
093
094 sla.setUpstreamApps(getTagElement(eSla, "upstream-apps"));
095
096 // Oozie defined
097
098 sla.setSlaId(slaId);
099 sla.setAppType(appType);
100 sla.setUser(user);
101 sla.setGroupName(groupName);
102 sla.setJobStatus(Status.CREATED);
103 sla.setStatusTimestamp(new Date());
104
105 return sla;
106 }
107
108 public static SLAEventBean createSlaRegistrationEvent(Element eSla,
109 String slaId, SlaAppType appType, String user, String groupName, XLog log)
110 throws Exception {
111 // System.out.println("BBBBB SLA added");
112 if (eSla == null) {
113 return null;
114 }
115 //System.out.println("Writing REG AAAAA " + slaId);
116 SLAEventBean sla = new SLAEventBean();
117 // sla.setClientId(getTagElement( eSla, "client-id"));
118 // sla.setClientId(getClientId());
119 sla.setAppName(getTagElement(eSla, "app-name"));
120 sla.setParentClientId(getTagElement(eSla, "parent-child-id"));
121 sla.setParentSlaId(getTagElement(eSla, "parent-sla-id"));
122 String strNominalTime = getTagElement(eSla, "nominal-time");
123 // System.out.println("AAAAA SLA nominal time "+ strNominalTime);
124 if (strNominalTime == null || strNominalTime.length() == 0) {
125 throw new RuntimeException("Nominal time is required"); // TODO:
126 // change to
127 // CommandException
128 }
129 Date nominalTime = DateUtils.parseDateOozieTZ(strNominalTime);
130 // Setting expected start time
131 String strRelExpectedStart = getTagElement(eSla, "should-start");
132 if (strRelExpectedStart == null || strRelExpectedStart.length() == 0) {
133 throw new RuntimeException("should-start can't be empty");
134 }
135 int relExpectedStart = Integer.parseInt(strRelExpectedStart);
136 if (relExpectedStart < 0) {
137 sla.setExpectedStart(null);
138 }
139 else {
140 Date expectedStart = new Date(nominalTime.getTime()
141 + relExpectedStart * 60 * 1000);
142 sla.setExpectedStart(expectedStart);
143 // sla.setExpectedStart(nominalTime);
144 }
145
146 // Setting expected end time
147 String strRelExpectedEnd = getTagElement(eSla, "should-end");
148 if (strRelExpectedEnd == null || strRelExpectedEnd.length() == 0) {
149 throw new RuntimeException("should-end can't be empty");
150 }
151 int relExpectedEnd = Integer.parseInt(strRelExpectedEnd);
152 if (relExpectedEnd < 0) {
153 sla.setExpectedEnd(null);
154 }
155 else {
156 Date expectedEnd = new Date(nominalTime.getTime() + relExpectedEnd
157 * 60 * 1000);
158 sla.setExpectedEnd(expectedEnd);
159 }
160
161 sla.setNotificationMsg(getTagElement(eSla, "notification-msg"));
162 sla.setAlertContact(getTagElement(eSla, "alert-contact"));
163 sla.setDevContact(getTagElement(eSla, "dev-contact"));
164 sla.setQaContact(getTagElement(eSla, "qa-contact"));
165 sla.setSeContact(getTagElement(eSla, "se-contact"));
166 sla.setAlertFrequency(getTagElement(eSla, "alert-frequency"));
167 sla.setAlertPercentage(getTagElement(eSla, "alert-percentage"));
168
169 sla.setUpstreamApps(getTagElement(eSla, "upstream-apps"));
170
171 // Oozie defined
172
173 sla.setSlaId(slaId);
174 sla.setAppType(appType);
175 sla.setUser(user);
176 sla.setGroupName(groupName);
177 sla.setJobStatus(Status.CREATED);
178 sla.setStatusTimestamp(new Date());
179
180 //SLAStore slaStore = (SLAStore) Services.get().get(StoreService.class)
181 // .getStore(SLAStore.class, store);
182 //slaStore.insertSLAEvent(sla);
183
184 return sla;
185 }
186
187 public static SLAEventBean createSlaStatusEvent(String id,
188 Status status, Store store, SlaAppType appType) throws Exception {
189 SLAEventBean sla = new SLAEventBean();
190 sla.setSlaId(id);
191 sla.setJobStatus(status);
192 sla.setAppType(appType);
193 sla.setStatusTimestamp(new Date());
194 //System.out.println("Writing STATUS AAAAA " + id);
195 //SLAStore slaStore = (SLAStore) Services.get().get(StoreService.class)
196 //.getStore(SLAStore.class, store);
197 //slaStore.insertSLAEvent(sla);
198 return sla;
199 }
200
201 public static SLAEventBean createSlaStatusEvent(String id, Status status, SlaAppType appType, XLog log) throws Exception {
202 SLAEventBean sla = new SLAEventBean();
203 sla.setSlaId(id);
204 sla.setJobStatus(status);
205 sla.setAppType(appType);
206 sla.setStatusTimestamp(new Date());
207 // System.out.println("Writing STATUS AAAAA " + id);
208 //SLAStore slaStore = (SLAStore) Services.get().get(StoreService.class).getStore(SLAStore.class, store);
209 //slaStore.insertSLAEvent(sla);
210
211 return sla;
212 }
213
214 public static SLAEventBean createStatusEvent(String slaXml, String id, Store store,
215 Status stat, SlaAppType appType) throws CommandException {
216 if (slaXml == null || slaXml.length() == 0) {
217 return null;
218 }
219 try {
220 return createSlaStatusEvent(id, stat, store, appType);
221 }
222 catch (Exception e) {
223 throw new CommandException(ErrorCode.E1007, " id " + id, e.getMessage(), e);
224 }
225 }
226
227 public static SLAEventBean createStatusEvent(String slaXml, String id, Status stat, SlaAppType appType, XLog log)
228 throws CommandException {
229 if (slaXml == null || slaXml.length() == 0) {
230 return null;
231 }
232 try {
233 return createSlaStatusEvent(id, stat, appType, log);
234 }
235 catch (Exception e) {
236 throw new CommandException(ErrorCode.E1007, " id " + id, e.getMessage(), e);
237 }
238 }
239
240 public static String getClientId() {
241 Services services = Services.get();
242 if (services == null) {
243 throw new RuntimeException("Services is not initialized");
244 }
245 String clientId = services.getConf().get(CLIENT_ID_TAG,
246 "oozie-default-instance"); // TODO" remove default
247 if (clientId == null) {
248 //System.out.println("CONF "
249 // + XmlUtils.prettyPrint(services.getConf()));
250 throw new RuntimeException(
251 "No SLA_CLIENT_ID defined in oozie-site.xml with property name "
252 + CLIENT_ID_TAG);
253 }
254 return clientId;
255 }
256
257 private static String getTagElement(Element elem, String tagName) {
258 if (elem != null
259 && elem.getChild(tagName, elem.getNamespace("sla")) != null) {
260 return elem.getChild(tagName, elem.getNamespace("sla")).getText()
261 .trim();
262 }
263 else {
264 return null;
265 }
266 }
267
268 }