Search in sources :

Example 51 with Job

use of org.pentaho.di.job.Job in project pentaho-kettle by pentaho.

the class GetJobImageServlet method doGet.

/**
 *<div id="mindtouch">
 *    <h1>/kettle/jobImage</h1>
 *    <a name="GET"></a>
 *    <h2>GET</h2>
 *    <p>Generates and returns image of the specified job.
 *  Generates PNG image of the specified job currently present on Carte server. Job name and Carte job ID (optional)
 *  is used for specifying job to get information for. Response is binary of the PNG image.</p>
 *
 *    <p><b>Example Request:</b><br />
 *    <pre function="syntax.xml">
 *    GET /kettle/jobImage?name=dummy_job
 *    </pre>
 *
 *    </p>
 *    <h3>Parameters</h3>
 *    <table class="pentaho-table">
 *    <tbody>
 *    <tr>
 *      <th>name</th>
 *      <th>description</th>
 *      <th>type</th>
 *    </tr>
 *    <tr>
 *    <td>name</td>
 *    <td>Name of the job to be used for image generation.</td>
 *    <td>query</td>
 *    </tr>
 *    <tr>
 *    <td>id</td>
 *    <td>Carte id of the job to be used for image generation.</td>
 *    <td>query, optional</td>
 *    </tr>
 *    </tbody>
 *    </table>
 *
 *  <h3>Response Body</h3>
 *
 *  <table class="pentaho-table">
 *    <tbody>
 *      <tr>
 *        <td align="right">binary streak:</td>
 *        <td>image</td>
 *      </tr>
 *      <tr>
 *        <td align="right">media types:</td>
 *        <td>image/png</td>
 *      </tr>
 *    </tbody>
 *  </table>
 *    <p>A binary PNG image or empty response if no job is found.</p>
 *
 *    <h3>Status Codes</h3>
 *    <table class="pentaho-table">
 *  <tbody>
 *    <tr>
 *      <th>code</th>
 *      <th>description</th>
 *    </tr>
 *    <tr>
 *      <td>200</td>
 *      <td>Request was processed.</td>
 *    </tr>
 *    <tr>
 *      <td>500</td>
 *      <td>Internal server error occurs during request processing.</td>
 *    </tr>
 *  </tbody>
 *</table>
 *</div>
 */
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (isJettyMode() && !request.getContextPath().startsWith(CONTEXT_PATH)) {
        return;
    }
    if (log.isDebug()) {
        logDebug(BaseMessages.getString(PKG, "GetJobImageServlet.Log.JobImageRequested"));
    }
    String jobName = request.getParameter("name");
    String id = request.getParameter("id");
    // ID is optional...
    // 
    Job job;
    CarteObjectEntry entry;
    if (Utils.isEmpty(id)) {
        // get the first transformation that matches...
        // 
        entry = getJobMap().getFirstCarteObjectEntry(jobName);
        if (entry == null) {
            job = null;
        } else {
            id = entry.getId();
            job = getJobMap().getJob(entry);
        }
    } else {
        // Take the ID into account!
        // 
        entry = new CarteObjectEntry(jobName, id);
        job = getJobMap().getJob(entry);
    }
    try {
        if (job != null) {
            response.setStatus(HttpServletResponse.SC_OK);
            response.setCharacterEncoding("UTF-8");
            response.setContentType("image/png");
            // Generate xform image
            // 
            BufferedImage image = generateJobImage(job.getJobMeta());
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            try {
                ImageIO.write(image, "png", os);
            } finally {
                os.flush();
            }
            response.setContentLength(os.size());
            OutputStream out = response.getOutputStream();
            out.write(os.toByteArray());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Job(org.pentaho.di.job.Job) BufferedImage(java.awt.image.BufferedImage) ServletException(javax.servlet.ServletException) IOException(java.io.IOException)

Example 52 with Job

use of org.pentaho.di.job.Job in project pentaho-kettle by pentaho.

the class GetStatusServlet method doGet.

/**
 *  <div id="mindtouch">
 *      <h1>/kettle/status</h1>
 *      <a name="GET"></a>
 *      <h2>GET</h2>
 *      <p>Retrieve server status. The status contains information about the server itself (OS, memory, etc)
 *      and information about jobs and transformations present on the server.</p>
 *
 *      <p><b>Example Request:</b><br />
 *      <pre function="syntax.xml">
 *      GET /kettle/status/?xml=Y
 *      </pre>
 *
 *      </p>
 *      <h3>Parameters</h3>
 *      <table class="pentaho-table">
 *      <tbody>
 *      <tr>
 *        <th>name</th>
 *        <th>description</th>
 *        <th>type</th>
 *      </tr>
 *      <tr>
 *      <td>xml</td>
 *      <td>Boolean flag which defines output format <code>Y</code> forces XML output to be generated.
 *    HTML is returned otherwise.</td>
 *      <td>boolean, optional</td>
 *      </tr>
 *      </tbody>
 *      </table>
 *
 *    <h3>Response Body</h3>
 *
 *    <table class="pentaho-table">
 *      <tbody>
 *        <tr>
 *          <td align="right">element:</td>
 *          <td>(custom)</td>
 *        </tr>
 *        <tr>
 *          <td align="right">media types:</td>
 *          <td>text/xml, text/html</td>
 *        </tr>
 *      </tbody>
 *    </table>
 *      <p>Response XML or HTML response containing details about the transformation specified.
 *    If an error occurs during method invocation <code>result</code> field of the response
 *    will contain <code>ERROR</code> status.</p>
 *
 *      <p><b>Example Response:</b></p>
 *      <pre function="syntax.xml">
 *      <?xml version="1.0" encoding="UTF-8"?>
 *      <serverstatus>
 *        <statusdesc>Online</statusdesc>
 *        <memory_free>229093440</memory_free>
 *        <memory_total>285736960</memory_total>
 *        <cpu_cores>4</cpu_cores>
 *        <cpu_process_time>7534848300</cpu_process_time>
 *        <uptime>68818403</uptime>
 *        <thread_count>45</thread_count>
 *        <load_avg>-1.0</load_avg>
 *        <os_name>Windows 7</os_name>
 *        <os_version>6.1</os_version>
 *        <os_arch>amd64</os_arch>
 *        <transstatuslist>
 *          <transstatus>
 *            <transname>Row generator test</transname>
 *            <id>56c93d4e-96c1-4fae-92d9-d864b0779845</id>
 *            <status_desc>Waiting</status_desc>
 *            <error_desc/>
 *            <paused>N</paused>
 *            <stepstatuslist>
 *            </stepstatuslist>
 *            <first_log_line_nr>0</first_log_line_nr>
 *            <last_log_line_nr>0</last_log_line_nr>
 *            <logging_string>&#x3c;&#x21;&#x5b;CDATA&#x5b;&#x5d;&#x5d;&#x3e;</logging_string>
 *          </transstatus>
 *          <transstatus>
 *            <transname>dummy-trans</transname>
 *            <id>c56961b2-c848-49b8-abde-76c8015e29b0</id>
 *            <status_desc>Stopped</status_desc>
 *            <error_desc/>
 *            <paused>N</paused>
 *            <stepstatuslist>
 *            </stepstatuslist>
 *            <first_log_line_nr>0</first_log_line_nr>
 *            <last_log_line_nr>0</last_log_line_nr>
 *            <logging_string>&#x3c;&#x21;&#x5b;CDATA&#x5b;&#x5d;&#x5d;&#x3e;</logging_string>
 *          </transstatus>
 *        </transstatuslist>
 *        <jobstatuslist>
 *          <jobstatus>
 *            <jobname>dummy_job</jobname>
 *            <id>abd61143-8174-4f27-9037-6b22fbd3e229</id>
 *            <status_desc>Stopped</status_desc>
 *            <error_desc/>
 *            <logging_string>&#x3c;&#x21;&#x5b;CDATA&#x5b;&#x5d;&#x5d;&#x3e;</logging_string>
 *            <first_log_line_nr>0</first_log_line_nr>
 *            <last_log_line_nr>0</last_log_line_nr>
 *          </jobstatus>
 *        </jobstatuslist>
 *      </serverstatus>
 *      </pre>
 *
 *      <h3>Status Codes</h3>
 *      <table class="pentaho-table">
 *    <tbody>
 *      <tr>
 *        <th>code</th>
 *        <th>description</th>
 *      </tr>
 *      <tr>
 *        <td>200</td>
 *        <td>Request was processed.</td>
 *      </tr>
 *      <tr>
 *        <td>500</td>
 *        <td>Internal server error occurs during request processing.</td>
 *      </tr>
 *    </tbody>
 *  </table>
 *  </div>
 */
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (isJettyMode() && !request.getContextPath().startsWith(CONTEXT_PATH)) {
        return;
    }
    if (log.isDebug()) {
        logDebug(BaseMessages.getString(PKG, "GetStatusServlet.StatusRequested"));
    }
    response.setStatus(HttpServletResponse.SC_OK);
    boolean useXML = "Y".equalsIgnoreCase(request.getParameter("xml"));
    if (useXML) {
        response.setContentType("text/xml");
        response.setCharacterEncoding(Const.XML_ENCODING);
    } else {
        response.setContentType("text/html;charset=UTF-8");
    }
    PrintWriter out = response.getWriter();
    List<CarteObjectEntry> transEntries = getTransformationMap().getTransformationObjects();
    List<CarteObjectEntry> jobEntries = getJobMap().getJobObjects();
    if (useXML) {
        out.print(XMLHandler.getXMLHeader(Const.XML_ENCODING));
        SlaveServerStatus serverStatus = new SlaveServerStatus();
        serverStatus.setStatusDescription("Online");
        getSystemInfo(serverStatus);
        for (CarteObjectEntry entry : transEntries) {
            Trans trans = getTransformationMap().getTransformation(entry);
            String status = trans.getStatus();
            SlaveServerTransStatus sstatus = new SlaveServerTransStatus(entry.getName(), entry.getId(), status);
            sstatus.setLogDate(trans.getLogDate());
            sstatus.setPaused(trans.isPaused());
            serverStatus.getTransStatusList().add(sstatus);
        }
        for (CarteObjectEntry entry : jobEntries) {
            Job job = getJobMap().getJob(entry);
            String status = job.getStatus();
            SlaveServerJobStatus jobStatus = new SlaveServerJobStatus(entry.getName(), entry.getId(), status);
            jobStatus.setLogDate(job.getLogDate());
            serverStatus.getJobStatusList().add(jobStatus);
        }
        try {
            out.println(serverStatus.getXML());
        } catch (KettleException e) {
            throw new ServletException("Unable to get the server status in XML format", e);
        }
    } else {
        out.println("<HTML>");
        out.println("<HEAD><TITLE>" + BaseMessages.getString(PKG, "GetStatusServlet.KettleSlaveServerStatus") + "</TITLE>");
        out.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
        out.println("</HEAD>");
        out.println("<BODY>");
        out.println("<H1>" + BaseMessages.getString(PKG, "GetStatusServlet.TopStatus") + "</H1>");
        try {
            out.println("<table border=\"1\">");
            out.print("<tr> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.TransName") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.CarteId") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.Status") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.LastLogDate") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.Remove") + "</th> </tr>");
            Comparator<CarteObjectEntry> transComparator = new Comparator<CarteObjectEntry>() {

                @Override
                public int compare(CarteObjectEntry o1, CarteObjectEntry o2) {
                    Trans t1 = getTransformationMap().getTransformation(o1);
                    Trans t2 = getTransformationMap().getTransformation(o2);
                    Date d1 = t1.getLogDate();
                    Date d2 = t2.getLogDate();
                    // if both transformations have last log date, desc sort by log date
                    if (d1 != null && d2 != null) {
                        int logDateCompare = d2.compareTo(d1);
                        if (logDateCompare != 0) {
                            return logDateCompare;
                        }
                    }
                    return o1.compareTo(o2);
                }
            };
            Collections.sort(transEntries, transComparator);
            for (CarteObjectEntry entry : transEntries) {
                String name = entry.getName();
                String id = entry.getId();
                Trans trans = getTransformationMap().getTransformation(entry);
                String status = trans.getStatus();
                String removeText = "";
                // 
                if (trans.isFinished() || trans.isStopped() || (!trans.isInitializing() && !trans.isRunning())) {
                    removeText = "<a href=\"" + convertContextPath(RemoveTransServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(name, "UTF-8") + "&id=" + id + "\"> Remove </a>";
                }
                out.print("<tr>");
                out.print("<td><a href=\"" + convertContextPath(GetTransStatusServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(name, "UTF-8") + "&id=" + id + "\">" + name + "</a></td>");
                out.print("<td>" + id + "</td>");
                out.print("<td>" + status + "</td>");
                out.print("<td>" + (trans.getLogDate() == null ? "-" : XMLHandler.date2string(trans.getLogDate())) + "</td>");
                out.print("<td>" + removeText + "</td>");
                out.print("</tr>");
            }
            out.print("</table><p>");
            out.println("<table border=\"1\">");
            out.print("<tr> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.JobName") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.CarteId") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.Status") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.LastLogDate") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.Remove") + "</th> </tr>");
            Comparator<CarteObjectEntry> jobComparator = new Comparator<CarteObjectEntry>() {

                @Override
                public int compare(CarteObjectEntry o1, CarteObjectEntry o2) {
                    Job t1 = getJobMap().getJob(o1);
                    Job t2 = getJobMap().getJob(o2);
                    Date d1 = t1.getLogDate();
                    Date d2 = t2.getLogDate();
                    // if both jobs have last log date, desc sort by log date
                    if (d1 != null && d2 != null) {
                        int logDateCompare = d2.compareTo(d1);
                        if (logDateCompare != 0) {
                            return logDateCompare;
                        }
                    }
                    return o1.compareTo(o2);
                }
            };
            Collections.sort(jobEntries, jobComparator);
            for (CarteObjectEntry entry : jobEntries) {
                String name = entry.getName();
                String id = entry.getId();
                Job job = getJobMap().getJob(entry);
                String status = job.getStatus();
                String removeText;
                if (job.isFinished() || job.isStopped()) {
                    removeText = "<a href=\"" + convertContextPath(RemoveJobServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(name, "UTF-8") + "&id=" + id + "\"> Remove </a>";
                } else {
                    removeText = "";
                }
                out.print("<tr>");
                out.print("<td><a href=\"" + convertContextPath(GetJobStatusServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(name, "UTF-8") + "&id=" + id + "\">" + name + "</a></td>");
                out.print("<td>" + id + "</td>");
                out.print("<td>" + status + "</td>");
                out.print("<td>" + (job.getLogDate() == null ? "-" : XMLHandler.date2string(job.getLogDate())) + "</td>");
                out.print("<td>" + removeText + "</td>");
                out.print("</tr>");
            }
            out.print("</table>");
        } catch (Exception ex) {
            out.println("<p>");
            out.println("<pre>");
            ex.printStackTrace(out);
            out.println("</pre>");
        }
        out.println("<p>");
        out.println("<H1>" + BaseMessages.getString(PKG, "GetStatusServlet.ConfigurationDetails.Title") + "</H1><p>");
        out.println("<table border=\"1\">");
        out.print("<tr> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.Parameter.Title") + "</th> <th>" + BaseMessages.getString(PKG, "GetStatusServlet.Value.Title") + "</th> </tr>");
        // The max number of log lines in the back-end
        // 
        SlaveServerConfig serverConfig = getTransformationMap().getSlaveServerConfig();
        if (serverConfig != null) {
            String maxLines = "";
            if (serverConfig.getMaxLogLines() == 0) {
                maxLines = BaseMessages.getString(PKG, "GetStatusServlet.NoLimit");
            } else {
                maxLines = serverConfig.getMaxLogLines() + BaseMessages.getString(PKG, "GetStatusServlet.Lines");
            }
            out.print("<tr> <td>" + BaseMessages.getString(PKG, "GetStatusServlet.Parameter.MaxLogLines") + "</td> <td>" + maxLines + "</td> </tr>");
            // The max age of log lines
            // 
            String maxAge = "";
            if (serverConfig.getMaxLogTimeoutMinutes() == 0) {
                maxAge = BaseMessages.getString(PKG, "GetStatusServlet.NoLimit");
            } else {
                maxAge = serverConfig.getMaxLogTimeoutMinutes() + BaseMessages.getString(PKG, "GetStatusServlet.Minutes");
            }
            out.print("<tr> <td>" + BaseMessages.getString(PKG, "GetStatusServlet.Parameter.MaxLogLinesAge") + "</td> <td>" + maxAge + "</td> </tr>");
            // The max age of stale objects
            // 
            String maxObjAge = "";
            if (serverConfig.getObjectTimeoutMinutes() == 0) {
                maxObjAge = BaseMessages.getString(PKG, "GetStatusServlet.NoLimit");
            } else {
                maxObjAge = serverConfig.getObjectTimeoutMinutes() + BaseMessages.getString(PKG, "GetStatusServlet.Minutes");
            }
            out.print("<tr> <td>" + BaseMessages.getString(PKG, "GetStatusServlet.Parameter.MaxObjectsAge") + "</td> <td>" + maxObjAge + "</td> </tr>");
            // The name of the specified repository
            // 
            String repositoryName;
            try {
                repositoryName = serverConfig.getRepository() != null ? serverConfig.getRepository().getName() : "";
            } catch (Exception e) {
                logError(BaseMessages.getString(PKG, "GetStatusServlet.Parameter.RepositoryName.UnableToConnect", serverConfig.getRepositoryId()), e);
                repositoryName = BaseMessages.getString(PKG, "GetStatusServlet.Parameter.RepositoryName.UnableToConnect", serverConfig.getRepositoryId());
            }
            out.print("<tr> <td>" + BaseMessages.getString(PKG, "GetStatusServlet.Parameter.RepositoryName") + "</td> <td>" + repositoryName + "</td> </tr>");
            out.print("</table>");
            String filename = serverConfig.getFilename();
            if (filename == null) {
                filename = BaseMessages.getString(PKG, "GetStatusServlet.ConfigurationDetails.UsingDefaults");
            }
            out.println("<i>" + BaseMessages.getString(PKG, "GetStatusServlet.ConfigurationDetails.Advice", filename) + "</i><br>");
        }
        out.println("</BODY>");
        out.println("</HTML>");
    }
}
Also used : KettleException(org.pentaho.di.core.exception.KettleException) Date(java.util.Date) ServletException(javax.servlet.ServletException) KettleException(org.pentaho.di.core.exception.KettleException) IOException(java.io.IOException) Comparator(java.util.Comparator) ServletException(javax.servlet.ServletException) Job(org.pentaho.di.job.Job) Trans(org.pentaho.di.trans.Trans) PrintWriter(java.io.PrintWriter)

Example 53 with Job

use of org.pentaho.di.job.Job in project pentaho-kettle by pentaho.

the class StartJobServlet method doGet.

/**
 *  <div id="mindtouch">
 *      <h1>/kettle/startJob</h1>
 *      <a name="GET"></a>
 *      <h2>GET</h2>
 *      <p>Starts the job. If the job cannot be started, an error is returned.</p>
 *
 *      <p><b>Example Request:</b><br />
 *      <pre function="syntax.xml">
 *      GET /kettle/startJob/?name=dummy_job&xml=Y
 *      </pre>
 *
 *      </p>
 *      <h3>Parameters</h3>
 *      <table class="pentaho-table">
 *      <tbody>
 *      <tr>
 *        <th>name</th>
 *        <th>description</th>
 *        <th>type</th>
 *      </tr>
 *      <tr>
 *      <td>name</td>
 *      <td>Name of the job to be executed.</td>
 *      <td>query</td>
 *      </tr>
 *      <tr>
 *      <td>xml</td>
 *      <td>Boolean flag which sets the output format required. Use <code>Y</code> to receive XML response.</td>
 *      <td>boolean, optional</td>
 *      </tr>
 *      <tr>
 *      <td>id</td>
 *      <td>Carte job ID of the job to be executed. This parameter is optional when xml=Y is used.</td>
 *      <td>query, optional</td>
 *      </tr>
 *      </tbody>
 *      </table>
 *
 *    <h3>Response Body</h3>
 *
 *    <table class="pentaho-table">
 *      <tbody>
 *        <tr>
 *          <td align="right">text:</td>
 *          <td>HTML</td>
 *        </tr>
 *        <tr>
 *          <td align="right">media types:</td>
 *          <td>text/xml, text/html</td>
 *        </tr>
 *      </tbody>
 *    </table>
 *      <p>Response XML or HTML containing operation result. When using xml=Y <code>result</code> field indicates whether
 *    operation was successful (<code>OK</code>) or not (<code>ERROR</code>).</p>
 *
 *      <p><b>Example Response:</b></p>
 *    <pre function="syntax.xml">
 *    <?xml version="1.0" encoding="UTF-8"?>
 *    <webresult>
 *      <result>OK</result>
 *      <message>Job &#x5b;dummy_job&#x5d; was started.</message>
 *      <id>abd61143-8174-4f27-9037-6b22fbd3e229</id>
 *    </webresult>
 *    </pre>
 *
 *      <h3>Status Codes</h3>
 *      <table class="pentaho-table">
 *    <tbody>
 *      <tr>
 *        <th>code</th>
 *        <th>description</th>
 *      </tr>
 *      <tr>
 *        <td>200</td>
 *        <td>Request was processed.</td>
 *      </tr>
 *      <tr>
 *        <td>500</td>
 *        <td>Internal server error occurs during request processing.</td>
 *      </tr>
 *    </tbody>
 *  </table>
 *  </div>
 */
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (isJettyMode() && !request.getContextPath().startsWith(CONTEXT_PATH)) {
        return;
    }
    if (log.isDebug()) {
        logDebug(BaseMessages.getString(PKG, "StartJobServlet.Log.StartJobRequested"));
    }
    String jobName = request.getParameter("name");
    String id = request.getParameter("id");
    boolean useXML = "Y".equalsIgnoreCase(request.getParameter("xml"));
    response.setStatus(HttpServletResponse.SC_OK);
    PrintWriter out = response.getWriter();
    if (useXML) {
        response.setContentType("text/xml");
        response.setCharacterEncoding(Const.XML_ENCODING);
        out.print(XMLHandler.getXMLHeader(Const.XML_ENCODING));
    } else {
        response.setContentType("text/html;charset=UTF-8");
        out.println("<HTML>");
        out.println("<HEAD>");
        out.println("<TITLE>Start job</TITLE>");
        out.println("<META http-equiv=\"Refresh\" content=\"2;url=" + convertContextPath(GetStatusServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(jobName, "UTF-8") + "\">");
        out.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
        out.println("</HEAD>");
        out.println("<BODY>");
    }
    try {
        // ID is optional...
        // 
        Job job;
        CarteObjectEntry entry;
        if (Utils.isEmpty(id)) {
            // get the first job that matches...
            // 
            entry = getJobMap().getFirstCarteObjectEntry(jobName);
            if (entry == null) {
                job = null;
            } else {
                id = entry.getId();
                job = getJobMap().getJob(entry);
            }
        } else {
            // Take the ID into account!
            // 
            entry = new CarteObjectEntry(jobName, id);
            job = getJobMap().getJob(entry);
        }
        if (job != null) {
            // 
            if (job.isInitialized() && !job.isActive()) {
                // 
                if (job.getRep() != null && !job.getRep().isConnected()) {
                    if (job.getRep().getUserInfo() != null) {
                        job.getRep().connect(job.getRep().getUserInfo().getLogin(), job.getRep().getUserInfo().getPassword());
                    } else {
                        job.getRep().connect(null, null);
                    }
                }
                cache.remove(job.getLogChannelId());
                // 
                synchronized (this) {
                    JobConfiguration jobConfiguration = getJobMap().getConfiguration(jobName);
                    String carteObjectId = UUID.randomUUID().toString();
                    SimpleLoggingObject servletLoggingObject = new SimpleLoggingObject(CONTEXT_PATH, LoggingObjectType.CARTE, null);
                    servletLoggingObject.setContainerObjectId(carteObjectId);
                    Job newJob = new Job(job.getRep(), job.getJobMeta(), servletLoggingObject);
                    newJob.setLogLevel(job.getLogLevel());
                    // Discard old log lines from the old job
                    // 
                    KettleLogStore.discardLines(job.getLogChannelId(), true);
                    getJobMap().replaceJob(entry, newJob, jobConfiguration);
                    job = newJob;
                }
            }
            runJob(job);
            String message = BaseMessages.getString(PKG, "StartJobServlet.Log.JobStarted", jobName);
            if (useXML) {
                out.println(new WebResult(WebResult.STRING_OK, message, id).getXML());
            } else {
                out.println("<H1>" + Encode.forHtml(message) + "</H1>");
                out.println("<a href=\"" + convertContextPath(GetJobStatusServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(jobName, "UTF-8") + "&id=" + URLEncoder.encode(id, "UTF-8") + "\">" + BaseMessages.getString(PKG, "JobStatusServlet.BackToJobStatusPage") + "</a><p>");
            }
        } else {
            String message = BaseMessages.getString(PKG, "StartJobServlet.Log.SpecifiedJobNotFound", jobName);
            if (useXML) {
                out.println(new WebResult(WebResult.STRING_ERROR, message));
            } else {
                out.println("<H1>" + Encode.forHtml(message) + "</H1>");
                out.println("<a href=\"" + convertContextPath(GetStatusServlet.CONTEXT_PATH) + "\">" + BaseMessages.getString(PKG, "TransStatusServlet.BackToStatusPage") + "</a><p>");
            }
        }
    } catch (Exception ex) {
        if (useXML) {
            out.println(new WebResult(WebResult.STRING_ERROR, BaseMessages.getString(PKG, "StartJobServlet.Error.UnexpectedError", Const.CR + Const.getStackTracker(ex))));
        } else {
            out.println("<p>");
            out.println("<pre>");
            out.println(Encode.forHtml(Const.getStackTracker(ex)));
            out.println("</pre>");
        }
    }
    if (!useXML) {
        out.println("<p>");
        out.println("</BODY>");
        out.println("</HTML>");
    }
}
Also used : Job(org.pentaho.di.job.Job) SimpleLoggingObject(org.pentaho.di.core.logging.SimpleLoggingObject) JobConfiguration(org.pentaho.di.job.JobConfiguration) ServletException(javax.servlet.ServletException) KettleException(org.pentaho.di.core.exception.KettleException) IOException(java.io.IOException) PrintWriter(java.io.PrintWriter)

Example 54 with Job

use of org.pentaho.di.job.Job in project pentaho-kettle by pentaho.

the class StopJobServlet method doGet.

/**
 *  <div id="mindtouch">
 *      <h1>/kettle/stopJob</h1>
 *      <a name="GET"></a>
 *      <h2>GET</h2>
 *      <p>Stops job execution on Carte server.</p>
 *
 *      <p><b>Example Request:</b><br />
 *      <pre function="syntax.xml">
 *      GET /kettle/stopJob/?name=dummy_job&xml=Y
 *      </pre>
 *
 *      </p>
 *      <h3>Parameters</h3>
 *      <table class="pentaho-table">
 *      <tbody>
 *      <tr>
 *        <th>name</th>
 *        <th>description</th>
 *        <th>type</th>
 *      </tr>
 *      <tr>
 *      <td>name</td>
 *      <td>Name of the job to be stopped.</td>
 *      <td>query</td>
 *      </tr>
 *      <tr>
 *      <td>xml</td>
 *      <td>Boolean flag which sets the output format required. Use <code>Y</code> to receive XML response.</td>
 *      <td>boolean, optional</td>
 *      </tr>
 *      <tr>
 *      <td>id</td>
 *      <td>Carte job ID of the job to be stopped. This parameter is optional when xml=Y is used.</td>
 *      <td>query, optional</td>
 *      </tr>
 *      </tbody>
 *      </table>
 *
 *    <h3>Response Body</h3>
 *
 *    <table class="pentaho-table">
 *      <tbody>
 *        <tr>
 *          <td align="right">text:</td>
 *          <td>HTML</td>
 *        </tr>
 *        <tr>
 *          <td align="right">media types:</td>
 *          <td>text/xml, text/html</td>
 *        </tr>
 *      </tbody>
 *    </table>
 *    <p>Response XML or HTML containing operation result. When using xml=Y <code>result</code> field indicates whether
 *    operation was successful (<code>OK</code>) or not (<code>ERROR</code>).</p>
 *
 *      <p><b>Example Response:</b></p>
 *    <pre function="syntax.xml">
 *    <?xml version="1.0" encoding="UTF-8"?>
 *    <webresult>
 *      <result>OK</result>
 *      <message>Job &#x5b;dummy_job&#x5d; stop requested.</message>
 *      <id/>
 *    </webresult>
 *    </pre>
 *
 *      <h3>Status Codes</h3>
 *      <table class="pentaho-table">
 *    <tbody>
 *      <tr>
 *        <th>code</th>
 *        <th>description</th>
 *      </tr>
 *      <tr>
 *        <td>200</td>
 *        <td>Request was processed.</td>
 *      </tr>
 *      <tr>
 *        <td>500</td>
 *        <td>Internal server error occurs during request processing.</td>
 *      </tr>
 *    </tbody>
 *  </table>
 *  </div>
 */
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (isJettyMode() && !request.getContextPath().startsWith(CONTEXT_PATH)) {
        return;
    }
    if (log.isDebug()) {
        logDebug(BaseMessages.getString(PKG, "StopJobServlet.log.StopJobRequested"));
    }
    String jobName = request.getParameter("name");
    String id = request.getParameter("id");
    boolean useXML = "Y".equalsIgnoreCase(request.getParameter("xml"));
    PrintWriter out = response.getWriter();
    try {
        if (useXML) {
            response.setContentType("text/xml");
            response.setCharacterEncoding(Const.XML_ENCODING);
            out.print(XMLHandler.getXMLHeader(Const.XML_ENCODING));
        } else {
            response.setContentType("text/html;charset=UTF-8");
            out.println("<HTML>");
            out.println("<HEAD>");
            out.println("<TITLE>Stop job</TITLE>");
            out.println("<META http-equiv=\"Refresh\" content=\"2;url=" + convertContextPath(GetJobStatusServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(jobName, "UTF-8") + "\">");
            out.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
            out.println("</HEAD>");
            out.println("<BODY>");
        }
        // ID is optional...
        // 
        Job job;
        CarteObjectEntry entry;
        if (Utils.isEmpty(id)) {
            // get the first job that matches...
            // 
            entry = getJobMap().getFirstCarteObjectEntry(jobName);
            if (entry == null) {
                job = null;
            } else {
                id = entry.getId();
                job = getJobMap().getJob(entry);
            }
        } else {
            // Take the ID into account!
            // 
            entry = new CarteObjectEntry(jobName, id);
            job = getJobMap().getJob(entry);
        }
        if (job != null) {
            job.stopAll();
            String message = BaseMessages.getString(PKG, "JobStatusServlet.Log.JobStopRequested", jobName);
            if (useXML) {
                out.println(new WebResult(WebResult.STRING_OK, message).getXML());
            } else {
                out.println("<H1>" + Encode.forHtml(message) + "</H1>");
                out.println("<a href=\"" + convertContextPath(GetJobStatusServlet.CONTEXT_PATH) + "?name=" + URLEncoder.encode(jobName, "UTF-8") + "&id=" + URLEncoder.encode(id, "UTF-8") + "\">" + BaseMessages.getString(PKG, "JobStatusServlet.BackToJobStatusPage") + "</a><p>");
            }
        } else {
            String message = BaseMessages.getString(PKG, "StopJobServlet.Log.CoundNotFindJob", jobName);
            if (useXML) {
                out.println(new WebResult(WebResult.STRING_ERROR, message).getXML());
            } else {
                out.println("<H1>" + Encode.forHtml(message) + "</H1>");
                out.println("<a href=\"" + convertContextPath(GetStatusServlet.CONTEXT_PATH) + ">" + BaseMessages.getString(PKG, "TransStatusServlet.BackToStatusPage") + "</a><p>");
            }
        }
    } catch (Exception ex) {
        if (useXML) {
            out.println(new WebResult(WebResult.STRING_ERROR, Const.getStackTracker(ex)).getXML());
        } else {
            out.println("<p>");
            out.println("<pre>");
            out.println(Encode.forHtml(Const.getStackTracker(ex)));
            out.println("</pre>");
        }
    }
    if (!useXML) {
        out.println("<p>");
        out.println("</BODY>");
        out.println("</HTML>");
    }
}
Also used : Job(org.pentaho.di.job.Job) ServletException(javax.servlet.ServletException) IOException(java.io.IOException) PrintWriter(java.io.PrintWriter)

Example 55 with Job

use of org.pentaho.di.job.Job in project pentaho-kettle by pentaho.

the class JobResource method getJobStatus.

@GET
@Path("/status/{id : .+}")
@Produces({ MediaType.APPLICATION_JSON })
public JobStatus getJobStatus(@PathParam("id") String id) {
    JobStatus status = new JobStatus();
    // find job
    Job job = CarteResource.getJob(id);
    CarteObjectEntry entry = CarteResource.getCarteObjectEntry(id);
    status.setId(entry.getId());
    status.setName(entry.getName());
    status.setStatus(job.getStatus());
    return status;
}
Also used : Job(org.pentaho.di.job.Job) CarteObjectEntry(org.pentaho.di.www.CarteObjectEntry) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Aggregations

Job (org.pentaho.di.job.Job)95 JobMeta (org.pentaho.di.job.JobMeta)44 Test (org.junit.Test)35 Result (org.pentaho.di.core.Result)22 KettleException (org.pentaho.di.core.exception.KettleException)20 PrintWriter (java.io.PrintWriter)17 JobEntryCopy (org.pentaho.di.job.entry.JobEntryCopy)17 Trans (org.pentaho.di.trans.Trans)14 IOException (java.io.IOException)11 Before (org.junit.Before)11 Point (org.pentaho.di.core.gui.Point)11 LogChannelInterface (org.pentaho.di.core.logging.LogChannelInterface)11 JobExecutionConfiguration (org.pentaho.di.job.JobExecutionConfiguration)10 Repository (org.pentaho.di.repository.Repository)10 ArrayList (java.util.ArrayList)9 ServletException (javax.servlet.ServletException)9 HttpServletRequest (javax.servlet.http.HttpServletRequest)9 HttpServletResponse (javax.servlet.http.HttpServletResponse)9 SimpleLoggingObject (org.pentaho.di.core.logging.SimpleLoggingObject)9 JobConfiguration (org.pentaho.di.job.JobConfiguration)9