Search in sources :

Example 1 with JobTracker

use of org.pentaho.di.core.gui.JobTracker in project pentaho-kettle by pentaho.

the class JobEntryMail method execute.

public Result execute(Result result, int nr) {
    File masterZipfile = null;
    // Send an e-mail...
    // create some properties and get the default Session
    Properties props = new Properties();
    if (Utils.isEmpty(server)) {
        logError(BaseMessages.getString(PKG, "JobMail.Error.HostNotSpecified"));
        result.setNrErrors(1L);
        result.setResult(false);
        return result;
    }
    String protocol = "smtp";
    if (usingSecureAuthentication) {
        if (secureConnectionType.equals("TLS")) {
            // Allow TLS authentication
            props.put("mail.smtp.starttls.enable", "true");
        } else {
            protocol = "smtps";
            // required to get rid of a SSL exception :
            // nested exception is:
            // javax.net.ssl.SSLException: Unsupported record version Unknown
            props.put("mail.smtps.quitwait", "false");
        }
    }
    props.put("mail." + protocol + ".host", environmentSubstitute(server));
    if (!Utils.isEmpty(port)) {
        props.put("mail." + protocol + ".port", environmentSubstitute(port));
    }
    if (log.isDebug()) {
        props.put("mail.debug", "true");
    }
    if (usingAuthentication) {
        props.put("mail." + protocol + ".auth", "true");
    /*
       * authenticator = new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new
       * PasswordAuthentication( StringUtil.environmentSubstitute(Const.NVL(authenticationUser, "")),
       * StringUtil.environmentSubstitute(Const.NVL(authenticationPassword, "")) ); } };
       */
    }
    Session session = Session.getInstance(props);
    session.setDebug(log.isDebug());
    try {
        // create a message
        Message msg = new MimeMessage(session);
        // set message priority
        if (usePriority) {
            String priority_int = "1";
            if (priority.equals("low")) {
                priority_int = "3";
            }
            if (priority.equals("normal")) {
                priority_int = "2";
            }
            // (String)int between 1= high and 3 = low.
            msg.setHeader("X-Priority", priority_int);
            msg.setHeader("Importance", importance);
            // seems to be needed for MS Outlook.
            // where it returns a string of high /normal /low.
            msg.setHeader("Sensitivity", sensitivity);
        // Possible values are normal, personal, private, company-confidential
        }
        // Set Mail sender (From)
        String sender_address = environmentSubstitute(replyAddress);
        if (!Utils.isEmpty(sender_address)) {
            String sender_name = environmentSubstitute(replyName);
            if (!Utils.isEmpty(sender_name)) {
                sender_address = sender_name + '<' + sender_address + '>';
            }
            msg.setFrom(new InternetAddress(sender_address));
        } else {
            throw new MessagingException(BaseMessages.getString(PKG, "JobMail.Error.ReplyEmailNotFilled"));
        }
        // set Reply to addresses
        String reply_to_address = environmentSubstitute(replyToAddresses);
        if (!Utils.isEmpty(reply_to_address)) {
            // Split the mail-address: space separated
            String[] reply_Address_List = environmentSubstitute(reply_to_address).split(" ");
            InternetAddress[] address = new InternetAddress[reply_Address_List.length];
            for (int i = 0; i < reply_Address_List.length; i++) {
                address[i] = new InternetAddress(reply_Address_List[i]);
            }
            msg.setReplyTo(address);
        }
        // Split the mail-address: space separated
        String[] destinations = environmentSubstitute(destination).split(" ");
        InternetAddress[] address = new InternetAddress[destinations.length];
        for (int i = 0; i < destinations.length; i++) {
            address[i] = new InternetAddress(destinations[i]);
        }
        msg.setRecipients(Message.RecipientType.TO, address);
        String realCC = environmentSubstitute(getDestinationCc());
        if (!Utils.isEmpty(realCC)) {
            // Split the mail-address Cc: space separated
            String[] destinationsCc = realCC.split(" ");
            InternetAddress[] addressCc = new InternetAddress[destinationsCc.length];
            for (int i = 0; i < destinationsCc.length; i++) {
                addressCc[i] = new InternetAddress(destinationsCc[i]);
            }
            msg.setRecipients(Message.RecipientType.CC, addressCc);
        }
        String realBCc = environmentSubstitute(getDestinationBCc());
        if (!Utils.isEmpty(realBCc)) {
            // Split the mail-address BCc: space separated
            String[] destinationsBCc = realBCc.split(" ");
            InternetAddress[] addressBCc = new InternetAddress[destinationsBCc.length];
            for (int i = 0; i < destinationsBCc.length; i++) {
                addressBCc[i] = new InternetAddress(destinationsBCc[i]);
            }
            msg.setRecipients(Message.RecipientType.BCC, addressBCc);
        }
        String realSubject = environmentSubstitute(subject);
        if (!Utils.isEmpty(realSubject)) {
            msg.setSubject(realSubject);
        }
        msg.setSentDate(new Date());
        StringBuilder messageText = new StringBuilder();
        String endRow = isUseHTML() ? "<br>" : Const.CR;
        String realComment = environmentSubstitute(comment);
        if (!Utils.isEmpty(realComment)) {
            messageText.append(realComment).append(Const.CR).append(Const.CR);
        }
        if (!onlySendComment) {
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.Job")).append(endRow);
            messageText.append("-----").append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.JobName") + "    : ").append(parentJob.getJobMeta().getName()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.JobDirectory") + "  : ").append(parentJob.getJobMeta().getRepositoryDirectory()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.JobEntry") + "   : ").append(getName()).append(endRow);
            messageText.append(Const.CR);
        }
        if (includeDate) {
            messageText.append(endRow).append(BaseMessages.getString(PKG, "JobMail.Log.Comment.MsgDate") + ": ").append(XMLHandler.date2string(new Date())).append(endRow).append(endRow);
        }
        if (!onlySendComment && result != null) {
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.PreviousResult") + ":").append(endRow);
            messageText.append("-----------------").append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.JobEntryNr") + "         : ").append(result.getEntryNr()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.Errors") + "               : ").append(result.getNrErrors()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.LinesRead") + "           : ").append(result.getNrLinesRead()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.LinesWritten") + "        : ").append(result.getNrLinesWritten()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.LinesInput") + "          : ").append(result.getNrLinesInput()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.LinesOutput") + "         : ").append(result.getNrLinesOutput()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.LinesUpdated") + "        : ").append(result.getNrLinesUpdated()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.LinesRejected") + "       : ").append(result.getNrLinesRejected()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.Status") + "  : ").append(result.getExitStatus()).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.Result") + "               : ").append(result.getResult()).append(endRow);
            messageText.append(endRow);
        }
        if (!onlySendComment && (!Utils.isEmpty(environmentSubstitute(contactPerson)) || !Utils.isEmpty(environmentSubstitute(contactPhone)))) {
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.ContactInfo") + " :").append(endRow);
            messageText.append("---------------------").append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.PersonToContact") + " : ").append(environmentSubstitute(contactPerson)).append(endRow);
            messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.Tel") + "  : ").append(environmentSubstitute(contactPhone)).append(endRow);
            messageText.append(endRow);
        }
        // Include the path to this job entry...
        if (!onlySendComment) {
            JobTracker jobTracker = parentJob.getJobTracker();
            if (jobTracker != null) {
                messageText.append(BaseMessages.getString(PKG, "JobMail.Log.Comment.PathToJobentry") + ":").append(endRow);
                messageText.append("------------------------").append(endRow);
                addBacktracking(jobTracker, messageText);
                if (isUseHTML()) {
                    messageText.replace(0, messageText.length(), messageText.toString().replace(Const.CR, endRow));
                }
            }
        }
        MimeMultipart parts = new MimeMultipart();
        // put the text in the
        MimeBodyPart part1 = new MimeBodyPart();
        // Attached files counter
        int nrattachedFiles = 0;
        if (useHTML) {
            if (!Utils.isEmpty(getEncoding())) {
                part1.setContent(messageText.toString(), "text/html; " + "charset=" + getEncoding());
            } else {
                part1.setContent(messageText.toString(), "text/html; " + "charset=ISO-8859-1");
            }
        } else {
            part1.setText(messageText.toString());
        }
        parts.addBodyPart(part1);
        if (includingFiles && result != null) {
            List<ResultFile> resultFiles = result.getResultFilesList();
            if (resultFiles != null && !resultFiles.isEmpty()) {
                if (!zipFiles) {
                    // 
                    for (ResultFile resultFile : resultFiles) {
                        FileObject file = resultFile.getFile();
                        if (file != null && file.exists()) {
                            boolean found = false;
                            for (int i = 0; i < fileType.length; i++) {
                                if (fileType[i] == resultFile.getType()) {
                                    found = true;
                                }
                            }
                            if (found) {
                                // create a data source
                                MimeBodyPart files = new MimeBodyPart();
                                URLDataSource fds = new URLDataSource(file.getURL());
                                // get a data Handler to manipulate this file type;
                                files.setDataHandler(new DataHandler(fds));
                                // include the file in the data source
                                files.setFileName(file.getName().getBaseName());
                                // insist on base64 to preserve line endings
                                files.addHeader("Content-Transfer-Encoding", "base64");
                                // add the part with the file in the BodyPart();
                                parts.addBodyPart(files);
                                nrattachedFiles++;
                                logBasic("Added file '" + fds.getName() + "' to the mail message.");
                            }
                        }
                    }
                } else {
                    // create a single ZIP archive of all files
                    masterZipfile = new File(System.getProperty("java.io.tmpdir") + Const.FILE_SEPARATOR + environmentSubstitute(zipFilename));
                    ZipOutputStream zipOutputStream = null;
                    try {
                        zipOutputStream = new ZipOutputStream(new FileOutputStream(masterZipfile));
                        for (ResultFile resultFile : resultFiles) {
                            boolean found = false;
                            for (int i = 0; i < fileType.length; i++) {
                                if (fileType[i] == resultFile.getType()) {
                                    found = true;
                                }
                            }
                            if (found) {
                                FileObject file = resultFile.getFile();
                                ZipEntry zipEntry = new ZipEntry(file.getName().getBaseName());
                                zipOutputStream.putNextEntry(zipEntry);
                                // Now put the content of this file into this archive...
                                BufferedInputStream inputStream = new BufferedInputStream(KettleVFS.getInputStream(file));
                                try {
                                    int c;
                                    while ((c = inputStream.read()) >= 0) {
                                        zipOutputStream.write(c);
                                    }
                                } finally {
                                    inputStream.close();
                                }
                                zipOutputStream.closeEntry();
                                nrattachedFiles++;
                                logBasic("Added file '" + file.getName().getURI() + "' to the mail message in a zip archive.");
                            }
                        }
                    } catch (Exception e) {
                        logError("Error zipping attachement files into file [" + masterZipfile.getPath() + "] : " + e.toString());
                        logError(Const.getStackTracker(e));
                        result.setNrErrors(1);
                    } finally {
                        if (zipOutputStream != null) {
                            try {
                                zipOutputStream.finish();
                                zipOutputStream.close();
                            } catch (IOException e) {
                                logError("Unable to close attachement zip file archive : " + e.toString());
                                logError(Const.getStackTracker(e));
                                result.setNrErrors(1);
                            }
                        }
                    }
                    // Now attach the master zip file to the message.
                    if (result.getNrErrors() == 0) {
                        // create a data source
                        MimeBodyPart files = new MimeBodyPart();
                        FileDataSource fds = new FileDataSource(masterZipfile);
                        // get a data Handler to manipulate this file type;
                        files.setDataHandler(new DataHandler(fds));
                        // include the file in the data source
                        files.setFileName(fds.getName());
                        // add the part with the file in the BodyPart();
                        parts.addBodyPart(files);
                    }
                }
            }
        }
        int nrEmbeddedImages = 0;
        if (embeddedimages != null && embeddedimages.length > 0) {
            FileObject imageFile = null;
            for (int i = 0; i < embeddedimages.length; i++) {
                String realImageFile = environmentSubstitute(embeddedimages[i]);
                String realcontenID = environmentSubstitute(contentids[i]);
                if (messageText.indexOf("cid:" + realcontenID) < 0) {
                    if (log.isDebug()) {
                        log.logDebug("Image [" + realImageFile + "] is not used in message body!");
                    }
                } else {
                    try {
                        boolean found = false;
                        imageFile = KettleVFS.getFileObject(realImageFile, this);
                        if (imageFile.exists() && imageFile.getType() == FileType.FILE) {
                            found = true;
                        } else {
                            log.logError("We can not find [" + realImageFile + "] or it is not a file");
                        }
                        if (found) {
                            // Create part for the image
                            MimeBodyPart messageBodyPart = new MimeBodyPart();
                            // Load the image
                            URLDataSource fds = new URLDataSource(imageFile.getURL());
                            messageBodyPart.setDataHandler(new DataHandler(fds));
                            // Setting the header
                            messageBodyPart.setHeader("Content-ID", "<" + realcontenID + ">");
                            // Add part to multi-part
                            parts.addBodyPart(messageBodyPart);
                            nrEmbeddedImages++;
                            log.logBasic("Image '" + fds.getName() + "' was embedded in message.");
                        }
                    } catch (Exception e) {
                        log.logError("Error embedding image [" + realImageFile + "] in message : " + e.toString());
                        log.logError(Const.getStackTracker(e));
                        result.setNrErrors(1);
                    } finally {
                        if (imageFile != null) {
                            try {
                                imageFile.close();
                            } catch (Exception e) {
                            /* Ignore */
                            }
                        }
                    }
                }
            }
        }
        if (nrEmbeddedImages > 0 && nrattachedFiles == 0) {
            // If we need to embedd images...
            // We need to create a "multipart/related" message.
            // otherwise image will appear as attached file
            parts.setSubType("related");
        }
        // put all parts together
        msg.setContent(parts);
        Transport transport = null;
        try {
            transport = session.getTransport(protocol);
            String authPass = getPassword(authenticationPassword);
            if (usingAuthentication) {
                if (!Utils.isEmpty(port)) {
                    transport.connect(environmentSubstitute(Const.NVL(server, "")), Integer.parseInt(environmentSubstitute(Const.NVL(port, ""))), environmentSubstitute(Const.NVL(authenticationUser, "")), authPass);
                } else {
                    transport.connect(environmentSubstitute(Const.NVL(server, "")), environmentSubstitute(Const.NVL(authenticationUser, "")), authPass);
                }
            } else {
                transport.connect();
            }
            transport.sendMessage(msg, msg.getAllRecipients());
        } finally {
            if (transport != null) {
                transport.close();
            }
        }
    } catch (IOException e) {
        logError("Problem while sending message: " + e.toString());
        result.setNrErrors(1);
    } catch (MessagingException mex) {
        logError("Problem while sending message: " + mex.toString());
        result.setNrErrors(1);
        Exception ex = mex;
        do {
            if (ex instanceof SendFailedException) {
                SendFailedException sfex = (SendFailedException) ex;
                Address[] invalid = sfex.getInvalidAddresses();
                if (invalid != null) {
                    logError("    ** Invalid Addresses");
                    for (int i = 0; i < invalid.length; i++) {
                        logError("         " + invalid[i]);
                        result.setNrErrors(1);
                    }
                }
                Address[] validUnsent = sfex.getValidUnsentAddresses();
                if (validUnsent != null) {
                    logError("    ** ValidUnsent Addresses");
                    for (int i = 0; i < validUnsent.length; i++) {
                        logError("         " + validUnsent[i]);
                        result.setNrErrors(1);
                    }
                }
                Address[] validSent = sfex.getValidSentAddresses();
                if (validSent != null) {
                    // System.out.println("    ** ValidSent Addresses");
                    for (int i = 0; i < validSent.length; i++) {
                        logError("         " + validSent[i]);
                        result.setNrErrors(1);
                    }
                }
            }
            if (ex instanceof MessagingException) {
                ex = ((MessagingException) ex).getNextException();
            } else {
                ex = null;
            }
        } while (ex != null);
    } finally {
        if (masterZipfile != null && masterZipfile.exists()) {
            masterZipfile.delete();
        }
    }
    if (result.getNrErrors() > 0) {
        result.setResult(false);
    } else {
        result.setResult(true);
    }
    return result;
}
Also used : InternetAddress(javax.mail.internet.InternetAddress) Message(javax.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) ZipEntry(java.util.zip.ZipEntry) DataHandler(javax.activation.DataHandler) Properties(java.util.Properties) MimeMessage(javax.mail.internet.MimeMessage) MimeMultipart(javax.mail.internet.MimeMultipart) BufferedInputStream(java.io.BufferedInputStream) FileDataSource(javax.activation.FileDataSource) FileObject(org.apache.commons.vfs2.FileObject) SendFailedException(javax.mail.SendFailedException) URLDataSource(javax.activation.URLDataSource) MessagingException(javax.mail.MessagingException) JobTracker(org.pentaho.di.core.gui.JobTracker) IOException(java.io.IOException) ResultFile(org.pentaho.di.core.ResultFile) Date(java.util.Date) MessagingException(javax.mail.MessagingException) KettleXMLException(org.pentaho.di.core.exception.KettleXMLException) SendFailedException(javax.mail.SendFailedException) KettleException(org.pentaho.di.core.exception.KettleException) KettleDatabaseException(org.pentaho.di.core.exception.KettleDatabaseException) IOException(java.io.IOException) ZipOutputStream(java.util.zip.ZipOutputStream) FileOutputStream(java.io.FileOutputStream) MimeBodyPart(javax.mail.internet.MimeBodyPart) Transport(javax.mail.Transport) ResultFile(org.pentaho.di.core.ResultFile) File(java.io.File) Session(javax.mail.Session)

Example 2 with JobTracker

use of org.pentaho.di.core.gui.JobTracker in project pentaho-kettle by pentaho.

the class Job method execute.

/**
 * Execute a job without previous results. This is a job entry point (not recursive)<br>
 * <br>
 *
 * @return the result of the execution
 *
 * @throws KettleException
 */
private Result execute() throws KettleException {
    try {
        log.snap(Metrics.METRIC_JOB_START);
        finished.set(false);
        stopped.set(false);
        KettleEnvironment.setExecutionInformation(this, rep);
        log.logMinimal(BaseMessages.getString(PKG, "Job.Comment.JobStarted"));
        ExtensionPointHandler.callExtensionPoint(log, KettleExtensionPoint.JobStart.id, this);
        // Start the tracking...
        JobEntryResult jerStart = new JobEntryResult(null, null, BaseMessages.getString(PKG, "Job.Comment.JobStarted"), BaseMessages.getString(PKG, "Job.Reason.Started"), null, 0, null);
        jobTracker.addJobTracker(new JobTracker(jobMeta, jerStart));
        active.set(true);
        // Where do we start?
        JobEntryCopy startpoint;
        // synchronize this to a parent job if needed.
        // 
        Object syncObject = this;
        if (parentJob != null) {
            // parallel execution in a job
            syncObject = parentJob;
        }
        synchronized (syncObject) {
            beginProcessing();
        }
        Result res = null;
        if (startJobEntryCopy == null) {
            startpoint = jobMeta.findJobEntry(JobMeta.STRING_SPECIAL_START, 0, false);
        } else {
            startpoint = startJobEntryCopy;
            res = startJobEntryResult;
        }
        if (startpoint == null) {
            throw new KettleJobException(BaseMessages.getString(PKG, "Job.Log.CounldNotFindStartingPoint"));
        }
        JobEntryResult jerEnd = null;
        if (startpoint.isStart()) {
            // Perform optional looping in the special Start job entry...
            // 
            // long iteration = 0;
            boolean isFirst = true;
            JobEntrySpecial jes = (JobEntrySpecial) startpoint.getEntry();
            while ((jes.isRepeat() || isFirst) && !isStopped()) {
                isFirst = false;
                res = execute(0, null, startpoint, null, BaseMessages.getString(PKG, "Job.Reason.Started"));
            // 
            // if (iteration > 0 && (iteration % 500) == 0) {
            // System.out.println("other 500 iterations: " + iteration);
            // }
            // iteration++;
            // 
            }
            jerEnd = new JobEntryResult(res, jes.getLogChannelId(), BaseMessages.getString(PKG, "Job.Comment.JobFinished"), BaseMessages.getString(PKG, "Job.Reason.Finished"), null, 0, null);
        } else {
            res = execute(0, res, startpoint, null, BaseMessages.getString(PKG, "Job.Reason.Started"));
            jerEnd = new JobEntryResult(res, startpoint.getEntry().getLogChannel().getLogChannelId(), BaseMessages.getString(PKG, "Job.Comment.JobFinished"), BaseMessages.getString(PKG, "Job.Reason.Finished"), null, 0, null);
        }
        // Save this result...
        jobTracker.addJobTracker(new JobTracker(jobMeta, jerEnd));
        log.logMinimal(BaseMessages.getString(PKG, "Job.Comment.JobFinished"));
        active.set(false);
        finished.set(true);
        return res;
    } finally {
        log.snap(Metrics.METRIC_JOB_STOP);
    }
}
Also used : JobEntryCopy(org.pentaho.di.job.entry.JobEntryCopy) JobEntrySpecial(org.pentaho.di.job.entries.special.JobEntrySpecial) JobTracker(org.pentaho.di.core.gui.JobTracker) FileObject(org.apache.commons.vfs2.FileObject) KettleJobException(org.pentaho.di.core.exception.KettleJobException) WebResult(org.pentaho.di.www.WebResult) Result(org.pentaho.di.core.Result)

Example 3 with JobTracker

use of org.pentaho.di.core.gui.JobTracker in project pentaho-kettle by pentaho.

the class Job method init.

/**
 * Initializes the Job.
 */
public void init() {
    jobListeners = new ArrayList<JobListener>();
    jobEntryListeners = new ArrayList<JobEntryListener>();
    delegationListeners = new ArrayList<DelegationListener>();
    activeJobEntryTransformations = new HashMap<JobEntryCopy, JobEntryTrans>();
    activeJobEntryJobs = new HashMap<JobEntryCopy, JobEntryJob>();
    extensionDataMap = new HashMap<String, Object>();
    active = new AtomicBoolean(false);
    stopped = new AtomicBoolean(false);
    jobTracker = new JobTracker(jobMeta);
    synchronized (jobEntryResults) {
        jobEntryResults.clear();
    }
    initialized = new AtomicBoolean(false);
    finished = new AtomicBoolean(false);
    errors = new AtomicInteger(0);
    batchId = -1;
    passedBatchId = -1;
    maxJobEntriesLogged = Const.toInt(EnvUtil.getSystemProperty(Const.KETTLE_MAX_JOB_ENTRIES_LOGGED), 1000);
    result = null;
    startJobEntryCopy = null;
    startJobEntryResult = null;
    this.setDefaultLogCommitSize();
}
Also used : JobTracker(org.pentaho.di.core.gui.JobTracker) ValueMetaString(org.pentaho.di.core.row.value.ValueMetaString) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) JobEntryCopy(org.pentaho.di.job.entry.JobEntryCopy) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) JobEntryTrans(org.pentaho.di.job.entries.trans.JobEntryTrans) FileObject(org.apache.commons.vfs2.FileObject) JobEntryJob(org.pentaho.di.job.entries.job.JobEntryJob)

Example 4 with JobTracker

use of org.pentaho.di.core.gui.JobTracker in project pentaho-kettle by pentaho.

the class Job method emergencyWriteJobTracker.

private void emergencyWriteJobTracker(Result res) {
    JobEntryResult jerFinalResult = new JobEntryResult(res, this.getLogChannelId(), BaseMessages.getString(PKG, "Job.Comment.JobFinished"), null, null, 0, null);
    JobTracker finalTrack = new JobTracker(this.getJobMeta(), jerFinalResult);
    // jobTracker is up to date too.
    this.jobTracker.addJobTracker(finalTrack);
}
Also used : JobTracker(org.pentaho.di.core.gui.JobTracker)

Example 5 with JobTracker

use of org.pentaho.di.core.gui.JobTracker in project pentaho-kettle by pentaho.

the class JobEntryMail method addBacktracking.

private void addBacktracking(JobTracker jobTracker, StringBuilder messageText, int level) {
    int nr = jobTracker.nrJobTrackers();
    messageText.append(Const.rightPad(" ", level * 2));
    messageText.append(Const.NVL(jobTracker.getJobName(), "-"));
    JobEntryResult jer = jobTracker.getJobEntryResult();
    if (jer != null) {
        messageText.append(" : ");
        if (jer.getJobEntryName() != null) {
            messageText.append(" : ");
            messageText.append(jer.getJobEntryName());
        }
        if (jer.getResult() != null) {
            messageText.append(" : ");
            messageText.append("[" + jer.getResult().toString() + "]");
        }
        if (jer.getReason() != null) {
            messageText.append(" : ");
            messageText.append(jer.getReason());
        }
        if (jer.getComment() != null) {
            messageText.append(" : ");
            messageText.append(jer.getComment());
        }
        if (jer.getLogDate() != null) {
            messageText.append(" (");
            messageText.append(XMLHandler.date2string(jer.getLogDate()));
            messageText.append(')');
        }
    }
    messageText.append(Const.CR);
    for (int i = 0; i < nr; i++) {
        JobTracker jt = jobTracker.getJobTracker(i);
        addBacktracking(jt, messageText, level + 1);
    }
}
Also used : JobTracker(org.pentaho.di.core.gui.JobTracker) JobEntryResult(org.pentaho.di.job.JobEntryResult)

Aggregations

JobTracker (org.pentaho.di.core.gui.JobTracker)8 JobEntryCopy (org.pentaho.di.job.entry.JobEntryCopy)4 FileObject (org.apache.commons.vfs2.FileObject)3 Result (org.pentaho.di.core.Result)3 Date (java.util.Date)2 KettleException (org.pentaho.di.core.exception.KettleException)2 ValueMetaString (org.pentaho.di.core.row.value.ValueMetaString)2 JobEntryResult (org.pentaho.di.job.JobEntryResult)2 JobEntryTrans (org.pentaho.di.job.entries.trans.JobEntryTrans)2 JobEntryInterface (org.pentaho.di.job.entry.JobEntryInterface)2 WebResult (org.pentaho.di.www.WebResult)2 BufferedInputStream (java.io.BufferedInputStream)1 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Properties (java.util.Properties)1 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1