org.pentaho.di.www.CleanupTransServlet Maven / Gradle / Ivy
Show all versions of kettle-engine Show documentation
/*! ******************************************************************************
*
* 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;
}
}