All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.pentaho.di.www.CleanupTransServlet Maven / Gradle / Ivy

The newest version!
/*! ******************************************************************************
 *
 * Pentaho Data Integration
 *
 * Copyright (C) 2002-2018 by Hitachi Vantara : http://www.pentaho.com
 *
 *******************************************************************************
 *
 * 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.
 *
 ******************************************************************************/

package org.pentaho.di.www;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.owasp.encoder.Encode;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.util.Utils;
import org.pentaho.di.core.xml.XMLHandler;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.trans.Trans;


public class CleanupTransServlet extends BaseHttpServlet implements CartePluginInterface {
  private static Class PKG = CleanupTransServlet.class; // i18n

  private static final long serialVersionUID = -5879200987669847357L;

  public static final String CONTEXT_PATH = "/kettle/cleanupTrans";

  public CleanupTransServlet() {
  }

  public CleanupTransServlet( TransformationMap transformationMap ) {
    super( transformationMap );
  }

  /**

/kettle/cleanupTrans

GET

Cleans up transformation on Carte server. Method is used for cleaning previously uploaded transformation by its name on Carte server. There are two modes for this method: 1) Clean the server sockets only or 2) Clean everything, including the transformation.

Example Request:

    GET /kettle/cleanupTrans/?name=dummy-trans2&xml=Y
    

Parameters

name description type
name Name of the transformation to be cleaned. query
xml Boolean flag which sets the output format required. Use Y to receive XML response. boolean, optional
id Carte transformation ID of the transformation to be cleaned. query, optional
sockets Boolean flag which indicates if full clean up or sockets only is required. Use Y to clean just sockets. boolean, optional

Response Body

text: HTML
media types: text/xml, text/html

Response XML or HTML containing operation result. When using xml=Y result field indicates whether operation was successful (OK) or not (ERROR).

Example Response:

  
  
    OK
    All server sockets ports for transformation [dummy-trans2] were deallocated. 
Transformation [dummy-trans2] was cleaned up.
    
  
  

Status Codes

code description
200 Request was processed.
500 Internal server error occurs during request processing.
*/ 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, "TransStatusServlet.Log.TransCleanupRequested" ) ); } String transName = request.getParameter( "name" ); String id = request.getParameter( "id" ); boolean useXML = "Y".equalsIgnoreCase( request.getParameter( "xml" ) ); boolean onlySockets = "Y".equalsIgnoreCase( request.getParameter( "sockets" ) ); 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( "" ); out.println( "" ); out.println( "Transformation cleanup" ); out.println( "" ); out.println( "" ); out.println( "" ); out.println( "" ); } try { String message = ""; boolean error = false; getTransformationMap().deallocateServerSocketPorts( transName, id ); message = BaseMessages.getString( PKG, "TransStatusServlet.Log.TransServerSocketPortsReleased", transName ); if ( !onlySockets ) { // ID is optional... // Trans trans; CarteObjectEntry entry; if ( Utils.isEmpty( id ) ) { // get the first transformation that matches... // entry = getTransformationMap().getFirstCarteObjectEntry( transName ); if ( entry == null ) { trans = null; } else { id = entry.getId(); trans = getTransformationMap().getTransformation( entry ); } } else { // Take the ID into account! // entry = new CarteObjectEntry( transName, id ); trans = getTransformationMap().getTransformation( entry ); } // Also clean up the transformation itself (anything left to do for the API) // if ( trans != null ) { trans.cleanup(); message += Const.CR + BaseMessages.getString( PKG, "TransStatusServlet.Log.TransCleanednup", transName ); } else { error = true; message = "The specified transformation [" + transName + "] with id [" + Const.NVL( id, "" ) + "] could not be found"; if ( useXML ) { out.println( new WebResult( WebResult.STRING_ERROR, message ) ); } else { out.println( "

" + Encode.forHtml( message ) + "

" ); out.println( "" + BaseMessages.getString( PKG, "TransStatusServlet.BackToStatusPage" ) + "

" ); response.setStatus( HttpServletResponse.SC_BAD_REQUEST ); } } } if ( !error ) { if ( useXML ) { out.println( new WebResult( WebResult.STRING_OK, message ).getXML() ); } else { out.println( "

" + Encode.forHtml( message ) + "

" ); out.println( "" + BaseMessages.getString( PKG, "TransStatusServlet.BackToStatusPage" ) + "

" ); } } } catch ( Exception ex ) { if ( useXML ) { out.println( new WebResult( WebResult.STRING_ERROR, "Unexpected error during transformations cleanup:" + Const.CR + Const.getStackTracker( ex ) ) ); } else { out.println( "

" ); out.println( "

" );
        out.println( Encode.forHtml( Const.getStackTracker( ex ) ) );
        out.println( "
" ); response.setStatus( HttpServletResponse.SC_BAD_REQUEST ); } } if ( !useXML ) { out.println( "

" ); out.println( "" ); out.println( "" ); } } public String toString() { return "Transformation cleanup"; } public String getService() { return CONTEXT_PATH + " (" + toString() + ")"; } public String getContextPath() { return CONTEXT_PATH; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy