Hop Server Web Services Overview

Hop Server has a rich set of web services that can be used to query and manage the server’s status, or to manage pipeline and workflow execution details.

when specified, the id for a workflow or pipeline represents one execution of a workflow or pipeline on the server.

addExport

name

addExport

description

Upload a resources export file. Add a zipped pipeline or workflow to the body payload as a binary file.

endPoint

GET hop/addExport

parameters
  • type: pipeline or workflow

  • load: -

example request

http://localhost:8081/hop/addExport/?type=workflow with zipped workflow as payload

result

A zip file with the export is created on the server’s file system.

<?xml version="1.0" encoding="UTF-8"?>
<webresult>
    <result>OK</result>
    <message>file:///tmp/export_70eb8ef1-9721-4cf5-afa3-940cd0f771d9.zip</message>
    <id/>
</webresult>

addPipeline

name

addPipeline

description

Add a pipeline for execution

endPoint

GET hop/addPipeline

  • Content-Type: text/xml;charset=UTF-8

parameters
  • xml Request body should contain xml containing pipeline_configuration (pipeline and pipeline_execution_configuration wrapped in pipeline_configuration tag).

example request

http://localhost:8081/hop/addPipeline/xml=Y with XML payload

result

-

addWorkflow

name

addWorkflow

description

Add a workflow for execution

endPoint

GET hop/addWorkflow

  • Content-Type: text/xml;charset=UTF-8

parameters
  • xml Request body should contain xml containing workflow_configuration (pipeline and workflow_execution_configuration wrapped in pipeline_configuration tag).

example request

http://localhost:8081/hop/addWorkflow/xml=Y with XML payload

result

-

getPipelineImage

name

getPipelineImage

description

Generate a SVG image of a pipeline

endPoint

GET hop/pipelineImage

parameters
  • name: name of the pipeline to generate the image for

  • id: id of the pipeline to generate the image for

example request

GET http://localhost:8081/hop/pipelineImage/?name=remote-pipeline&id=c1451bfb-b867-4c76-b123-c29d2b05da17

result

an SVG image of the pipeline graph

getPipelineStatus

name

getPipelineStatus

description

Get the status of a pipeline

endPoint

GET hop/pipelineStatus

parameters
  • name: name of the pipeline to get the status for

  • id: id of the pipeline to get the status for

  • xml (optional): return the information as xml (default HTML) use &xml=Y

  • json (optional): return the information as json (default HTML) use &json=Y

example request

GET http://localhost:8081/hop/pipelineStatus/?name=<NAME>>&id=<ID>

result

an HTML response with the execution status, transform details and canvas preview for this pipeline

Status

name

status

description

Get the status of the server

parameters

none

example request

GET http://localhost:8081/hop/status/

result

an HTML page with an overview of the pipelines and workflows on the server, their execution details and the server’s configuration details.

getWorkflowImage

name

getWorkflowImage

description

Generate an SVG image of a workflow

endPoint

GET hop/workflowImage

parameters
  • name: name of the workflow to generate the image for

  • id: id of the workflow to generate the image for

example request

GET http://localhost:8081/hop/workflowImage/?name=<NAME>>&id=<ID>

result

an SVG image of the workflow graph

getWorkflowStatus

name

getWorkflowStatus

description

Get the status of a workflow

endPoint

GET hop/workflowStatus

parameters
  • name: name of the workflow to get the status for

  • id: id of the workflow to get the status for

  • xml (optional): return the information as xml (default HTML) use &xml=Y

  • json (optional): return the information as json (default HTML) use &json=Y

example request

GET http://localhost:8081/hop/workflowStatus/?name=<NAME>&id=<ID>

result

an HTML response with the execution status, action details and canvas preview for this workflow

pausePipeline

name

pausePipeline

description

Pause or continue a pipeline

endPoint

GET /hop/pausePipeline

parameters
  • name: name of the pipeline to pause or restart

  • id: id of the pipeline to pause or restart

example request

GET http://localhost:8081/hop/pausePipeline/?name=<NAME>&id=<ID>

result

HTML page with the request status, e.g.

<HTML>

<HEAD>
	<TITLE>Pause pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>&id=<ID>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H1>Pipeline [tmp] : pause requested.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=<ID>">Back to the pipeline status page</a>
	<p>
		<p>
</BODY>

</HTML>

Prepare Execution

name

prepareExec

description

Prepare the execution of a pipeline

endPoint

GET /hop/prepareExec

parameters
  • xml: use xml, default Y

  • name: the name of the pipeline to prepare execution for

  • id: the id of the pipeline to prepare execution for

example request

GET http://localhost:8081/hop/prepareExec/?xml=Y&name=<NAME>&id=<ID>

result

Example result:

<?xml version="1.0" encoding="UTF-8"?>
<webresult>
    <result>OK</result>
    <message/>
    <id/>
</webresult>

Register Pipeline

name

registerPipeline

description

Register a pipeline for execution

endPoint

GET hop/registerPipeline

  • Content-Type: text/xml;charset=UTF-8

parameters
  • xml Request body should contain xml containing pipeline_configuration (pipeline and pipeline_execution_configuration wrapped in pipeline_configuration tag).

example request

http://localhost:8081/hop/registerPipeline/xml=Y

with XML payload (example):

<pipeline_configuration>
<pipeline>
  <info>
    <name>generate_rows</name>
    <name_sync_with_filename>Y</name_sync_with_filename>
    <description/>
    <extended_description/>
    <pipeline_version/>
    <pipeline_type>Normal</pipeline_type>
    <parameters>
    </parameters>
    <capture_transform_performance>N</capture_transform_performance>
    <transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
    <transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
    <created_user>-</created_user>
    <created_date>2022/02/03 13:47:49.645</created_date>
    <modified_user>-</modified_user>
    <modified_date>2022/02/03 13:47:49.645</modified_date>
    <key_for_session_key>H4sIAAAAAAAA/wMAAAAAAAAAAAA=</key_for_session_key>
    <is_key_private>N</is_key_private>
  </info>
  <notepads>
  </notepads>
  <order>
    <hop>
      <from>Generate rows</from>
      <to>Delay row</to>
      <enabled>Y</enabled>
    </hop>
    <hop>
      <from>Delay row</from>
      <to>result</to>
      <enabled>Y</enabled>
    </hop>
  </order>
  <transform>
    <name>Delay row</name>
    <type>Delay</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <scaletime>seconds</scaletime>
    <timeout>1</timeout>
    <attributes/>
    <GUI>
      <xloc>416</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform>
    <name>Generate rows</name>
    <type>RowGenerator</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <fields>
      <field>
        <length>-1</length>
        <name>value</name>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
        <type>String</type>
        <nullif>test</nullif>
      </field>
    </fields>
    <interval_in_ms>5000</interval_in_ms>
    <last_time_field>FiveSecondsAgo</last_time_field>
    <never_ending>N</never_ending>
    <limit>10000</limit>
    <row_time_field>now</row_time_field>
    <attributes/>
    <GUI>
      <xloc>160</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform>
    <name>result</name>
    <type>Dummy</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <attributes/>
    <GUI>
      <xloc>720</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform_error_handling>
  </transform_error_handling>
  <attributes/>
</pipeline>
  <pipeline_execution_configuration>
    <pass_export>N</pass_export>
    <parameters>
    </parameters>
    <variables>
    <variable><name>HOP_AUDIT_FOLDER</name><value>/Users/hans/config/audit</value></variable>
    <variable><name>HOP_AUTO_CREATE_CONFIG</name><value>Y</value></variable>
    <variable><name>HOP_CONFIG_FOLDER</name><value>/Users/hans/config</value></variable>
    <variable><name>HOP_DATASETS_FOLDER</name><value>/Users/hans/test/datasets</value></variable>
    <variable><name>HOP_ENVIRONMENT_NAME</name><value>test1</value></variable>
    <variable><name>HOP_METADATA_FOLDER</name><value>/Users/hans/test/metadata</value></variable>
    <variable><name>HOP_PIPELINE_PAN_JVM_EXIT_CODE</name><value/></variable>
    <variable><name>HOP_PROJECTS</name><value>/Users/hans/tmp/</value></variable>
    <variable><name>HOP_PROJECT_NAME</name><value>test</value></variable>
    <variable><name>HOP_UNIT_TESTS_FOLDER</name><value>/Users/hans/test</value></variable>
    <variable><name>NEO4J_CONNECTION</name><value>neo4j</value></variable>
    <variable><name>PROJECT_HOME</name><value>/Users/hans/test</value></variable>
    <variable><name>TEST</name><value>TEST</value></variable>
    <variable><name>ftp.nonProxyHosts</name><value>local|*.local|169.254/16|*.169.254/16</value></variable>
    <variable><name>http.nonProxyHosts</name><value>local|*.local|169.254/16|*.169.254/16</value></variable>
    <variable><name>jdk.debug</name><value>release</value></variable>
    <variable><name>native.encoding</name><value>UTF-8</value></variable>
    <variable><name>p1</name><value>a</value></variable>
    <variable><name>socksNonProxyHosts</name><value>local|*.local|169.254/16|*.169.254/16</value></variable>
    </variables>
    <log_level>Basic</log_level>
    <log_file>N</log_file>
    <log_filename/>
    <log_file_append>N</log_file_append>
    <create_parent_folder>N</create_parent_folder>
    <clear_log>Y</clear_log>
    <show_subcomponents>Y</show_subcomponents>
    <run_configuration>local</run_configuration>
</pipeline_execution_configuration>
<metastore_json>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
ljWkYK7zO7toJAlk3Xw8/QVlC+SCFRAAAA==
</metastore_json>
</pipeline_configuration>

The metastore_json is base64 encoded GZip content

result

-

Register Workflow

name

registerWorkflow

description

Register a workflow on the server

endPoint

GET /hop/registerWorkflow

  • Content-Type: text/xml;charset=UTF-8

parameters
  • xml:

example request

-

result

-

Remove Pipeline

name

removePipeline

description

Remove a pipeline from the server

endPoint

GET /hop/removePipeline

parameters
  • name: the name of the pipeline to remove

  • id: the id of the pipeline to remove

example request

GET http://localhost:8081/hop/removePipeline/?name=<NAME>&id=<ID>

result

Example result:

<HTML>

<HEAD>
	<TITLE>The pipeline was removed</TITLE>
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H3>The pipeline with name [<NAME>] and hopServer object id <ID> was removed from Hop
		Server.</H3>
	<a href="/hop/status">Back to the status page</a><br>
	<p>
</BODY>

Remove Workflow

name

removeWorkflow

description

Remove a workflow from the server

endPoint

GET /hop/removeWorkflow

parameters
  • name: the name of the workflow to remove

  • id: the id of the workflow to remove

example request

GET http://localhost:8081/hop/removeWorkflow/?name=<NAME>&id=<ID>

result

Example result:

<HTML>

<HEAD>
	<TITLE>The workflow was removed</TITLE>
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H3>The workflow with name [<NAME>] and hopServer object id <ID> was removed from Hop
		Server.</H3>
	<a href="/hop/status">Back to the status page</a><br>
	<p>
</BODY>

Sniff Transform

name

sniffTransform

description

Sniff test a pipeline transform

endPoint

GET /hop/sniffTransform

parameters
  • xml: use XML (default: Y)

  • pipeline: name of the pipeline to sniff

  • id: id of the pipeline to sniff

  • transform: name of the transform to sniff

  • type: (input/output) sniff input or output

  • lines: number of lines to wait for

  • copynr: when using multiple copies you can specify the copynr

following parameters are required
  • xml

  • id or pipeline

  • transform

example request

GET http://localhost:8081/hop/sniffTransform/?xml=Y&pipeline=<NAME>&id=<ID>&transform=<TRANSFORMNAME>&type=output&lines=100

result

Example result (empty):

<row-buffer>
<row-meta/>
</row-buffer>

Start Pipeline Execution

name

startExec

description

Start the execution of a pipeline

endPoint

GET /hop/startExec

parameters
  • name: the name of the pipeline to start

example request

GET http://localhost:8081/hop/startExec?name=<NAME>

result

Example result:

<HTML>

<HEAD>
	<TITLE>Start of pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H1>Pipeline [<NAME>] was started.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=8bea27db-de97-4bd0-a210-d9bba3aacac2">Back to the status page</a>
	<p>
		<p>
</BODY>

</HTML>

Start Pipeline

name

startPipeline

description

Prepare and start the execution of a pipeline

endPoint

GET /hop/startPipeline

parameters
  • name: the name of the pipeline to start

example request

GET http://localhost:8081/hop/startPipeline?name=<NAME>

result

Example result:

<HTML>

<HEAD>
	<TITLE>Start of pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H1>Pipeline [<NAME>] was started.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=8bea27db-de97-4bd0-a210-d9bba3aacac2">Back to the status page</a>
	<p>
		<p>
</BODY>

</HTML>

Start Workflow

name

startWorkflow

description

Prepare and start the execution of a workflow

endPoint

GET /hop/startPipeline

parameters
  • name: the name of the workflow to start

example request

GET http://localhost:8081/hop/startWorkflow?name=<NAME>

result

Example result:

<HTML>

<HEAD>
	<TITLE>Start of workflow</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/startWorkflow?name=<NAME>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H1>Workflow [<NAME>] was started.</H1>
	<a href="/hop/workflowStatus?name=<NAME>&id=8bea27db-de97-4bd0-a210-d9bba3aacac2">Back to the status page</a>
	<p>
		<p>
</BODY>

</HTML>

Stop Pipeline

name

stopPipeline

description

Stop a pipeline

endPoint

GET /hop/stopPipeline

parameters
  • name: the name of the pipeline to stop

  • id: the id of the pipeline to stop

example request

GET http://localhost:8081/hop/stopPipeline?name=<NAME>&id=<ID>

result

Example Result:

<HTML>

<HEAD>
	<TITLE>Stop pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H1>Pipeline [<NAME>] stop requested.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=<ID>">Back to the pipeline status page</a>
	<p>
		<p>
</BODY>

</HTML>

Stop Workflow

name

stopWorkflow

description

Stop a workflow

endPoint

GET /hop/stopWorkflow

parameters
  • name: the name of the workflow to stop

  • id: the id of the workflow to stop

example request

GET http://localhost:8081/hop/stopWorkflow?name=<NAME>&id=<ID>

result

Example Result:

<HTML>

<HEAD>
	<TITLE>Stop workflow</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/workflowStatus?name=<NAME>>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>

<BODY>
	<H1>Workflow [<NAME>] stop requested.</H1>
	<a href="/hop/workflowStatus?name=<NAME>&id=<ID>">Back to the pipeline status page</a>
	<p>
		<p>
</BODY>

</HTML>