Package org.apache.oozie.util.db

Source Code of org.apache.oozie.util.db.SLADbOperations

/**
* Copyright (c) 2010 Yahoo! Inc. All rights reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License. See accompanying LICENSE file.
*/
package org.apache.oozie.util.db;

import java.sql.Timestamp;
import java.util.Date;

import org.apache.oozie.ErrorCode;
import org.apache.oozie.SLAEventBean;
import org.apache.oozie.client.SLAEvent.SlaAppType;
import org.apache.oozie.client.SLAEvent.Status;
import org.apache.oozie.command.CommandException;
import org.apache.oozie.service.Services;
import org.apache.oozie.service.StoreService;
import org.apache.oozie.store.CoordinatorStore;
import org.apache.oozie.store.SLAStore;
import org.apache.oozie.store.Store;
import org.apache.oozie.util.DateUtils;
import org.apache.oozie.util.XmlUtils;
import org.jdom.Element;
import org.jdom.JDOMException;

public class SLADbOperations {
    public static final String CLIENT_ID_TAG = "oozie:sla:client-id";

    public static void writeSlaRegistrationEvent(Element eSla, Store store,
                                                 String slaId, SlaAppType appType, String user, String groupName)
            throws Exception {
        // System.out.println("BBBBB SLA added");
        if (eSla == null) {
            return;
        }
        //System.out.println("Writing REG AAAAA " + slaId);
        SLAEventBean sla = new SLAEventBean();
        // sla.setClientId(getTagElement( eSla, "client-id"));
        // sla.setClientId(getClientId());
        sla.setAppName(getTagElement(eSla, "app-name"));
        sla.setParentClientId(getTagElement(eSla, "parent-child-id"));
        sla.setParentSlaId(getTagElement(eSla, "parent-sla-id"));
        String strNominalTime = getTagElement(eSla, "nominal-time");
        // System.out.println("AAAAA SLA nominal time "+ strNominalTime);
        if (strNominalTime == null || strNominalTime.length() == 0) {
            throw new RuntimeException("Nominal time is required"); // TODO:
            // change to
            // CommandException
        }
        Date nominalTime = DateUtils.parseDateUTC(strNominalTime);
        // Setting expected start time
        String strRelExpectedStart = getTagElement(eSla, "should-start");
        if (strRelExpectedStart == null || strRelExpectedStart.length() == 0) {
            throw new RuntimeException("should-start can't be empty");
        }
        int relExpectedStart = Integer.parseInt(strRelExpectedStart);
        if (relExpectedStart < 0) {
            sla.setExpectedStart(null);
        }
        else {
            Date expectedStart = new Date(nominalTime.getTime()
                    + relExpectedStart * 60 * 1000);
            sla.setExpectedStart(expectedStart);
            // sla.setExpectedStart(nominalTime);
        }

        // Setting expected end time
        String strRelExpectedEnd = getTagElement(eSla, "should-end");
        if (strRelExpectedEnd == null || strRelExpectedEnd.length() == 0) {
            throw new RuntimeException("should-end can't be empty");
        }
        int relExpectedEnd = Integer.parseInt(strRelExpectedEnd);
        if (relExpectedEnd < 0) {
            sla.setExpectedEnd(null);
        }
        else {
            Date expectedEnd = new Date(nominalTime.getTime() + relExpectedEnd
                    * 60 * 1000);
            sla.setExpectedEnd(expectedEnd);
        }

        sla.setNotificationMsg(getTagElement(eSla, "notification-msg"));
        sla.setAlertContact(getTagElement(eSla, "alert-contact"));
        sla.setDevContact(getTagElement(eSla, "dev-contact"));
        sla.setQaContact(getTagElement(eSla, "qa-contact"));
        sla.setSeContact(getTagElement(eSla, "se-contact"));
        sla.setAlertFrequency(getTagElement(eSla, "alert-frequency"));
        sla.setAlertPercentage(getTagElement(eSla, "alert-percentage"));

        sla.setUpstreamApps(getTagElement(eSla, "upstream-apps"));

        // Oozie defined

        sla.setSlaId(slaId);
        sla.setAppType(appType);
        sla.setUser(user);
        sla.setGroupName(groupName);
        sla.setJobStatus(Status.CREATED);
        sla.setStatusTimestamp(new Date());

        SLAStore slaStore = (SLAStore) Services.get().get(StoreService.class)
                .getStore(SLAStore.class, store);
        slaStore.insertSLAEvent(sla);
    }

    public static void writeSlaStatusEvent(String id,
                                           Status status, Store store, SlaAppType appType) throws Exception {
        SLAEventBean sla = new SLAEventBean();
        sla.setSlaId(id);
        sla.setJobStatus(status);
        sla.setAppType(appType);
        sla.setStatusTimestamp(new Date());
        //System.out.println("Writing STATUS AAAAA " + id);
        SLAStore slaStore = (SLAStore) Services.get().get(StoreService.class)
                .getStore(SLAStore.class, store);
        slaStore.insertSLAEvent(sla);
    }

    public static void writeStausEvent(String slaXml, String id, Store store,
                                       Status stat, SlaAppType appType) throws CommandException {
        if (slaXml == null || slaXml.length() == 0) {
            return;
        }
        try {
            writeSlaStatusEvent(id, stat, store, appType);
        }
        catch (Exception e) {
            throw new CommandException(ErrorCode.E1007, " id " + id, e);
        }
    }

    public static String getClientId() {
        Services services = Services.get();
        if (services == null) {
            throw new RuntimeException("Services is not initialized");
        }
        String clientId = services.getConf().get(CLIENT_ID_TAG,
                                                 "oozie-default-instance"); // TODO" remove default
        if (clientId == null) {
            //System.out.println("CONF "
            //       + XmlUtils.prettyPrint(services.getConf()));
            throw new RuntimeException(
                    "No SLA_CLIENT_ID defined in oozie-site.xml with property name "
                            + CLIENT_ID_TAG);
        }
        return clientId;
    }

    private static String getTagElement(Element elem, String tagName) {
        if (elem != null
                && elem.getChild(tagName, elem.getNamespace("sla")) != null) {
            return elem.getChild(tagName, elem.getNamespace("sla")).getText()
                    .trim();
        }
        else {
            return null;
        }
    }

}
TOP

Related Classes of org.apache.oozie.util.db.SLADbOperations

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.