Skip to content

The titan Flow Manager

The titan Flow Manager is in charge of storing and providing flow configurations. It can be reached via a REST API that serves under the port number HOST:9002.

UseCaseDiagram

Building/ running

To run the service simply use go run ./cmd/flowmanager

or to create an executable file go build ./cmd/flowmanager

The FlowManager has the following configurable options:

- CommandLine Flag Environment Variable Configuration File Default Value Description
Configuration File --config-file TITAN_FM_CONFIG_FILE "./config.yaml" Path to a configuration file for the Flowmanager
Port --port TITAN_FM_PORT Port "9002" The port on which to serve the API
Log Level --log-level TITAN_FM_LOG_LEVEL LogLevel "warning" Only show log information equal or above to the given level ("error" > "warning" > "info" > "debug")
Flag: use kafka hook for logging --log-to-kafka TITAN_FM_LOG_TO_KAFKA LogToKafak (false) Enable to send INFO and ERROR logs to kafak topic
Host:port of kafka broker --kafka TITAN_FM_KAFKA Kafka (10.14.0.23:9092) Kafka broker adddress
Kafka topic for logs --service-topic TITAN_FM_SERVICE_TOPIC ServiceTopic (titan.servicelogs) Kafka topic for Flowmanager logs
Database --database TITAN_FM_DATABASE Database "localhost:27017" Database provider as
User Manager --user-manager TITAN_FM_USER_MANAGER UserManager "localhost:9000" UserManager address as :
Package Manager --pacakge-manager TITAN_FM_PACKAGE_MANAGER PackageManager "localhost:8087" PackageManager address as :
Allowed Request Origins --allowed-origins TITAN_FM_ALLOWED_ORIGINS AllowOrigins "http://localhost:5000" "http://localhost:8080" "http://localhost:8081" "http://localhost:8082" List of allowed request origins (CORS)
secret key for encryption --secret-key TITAN_FM_SECRET_KEY SecretKey - secret key for encryption
Allowed Service IDs --service-ids TITAN_FM_SERVICE_IDS ServiceIds no default set, add id of Endpointprovider, UserService
Service id --service-id TITAN_FM_SERVICE_ID ServiceId no default set, set id to allow for communication with UserService
Flag: Licencing --licencing TITAN_FM_LICENCING Licencing true switch for limiting number of workspaces/user, flows,members/workspace, bricks/flow
Workspaces per user --workspaces-per-user TITAN_FM_WORKSPACES_PER_USER WorkspacesPerUser 3 maximum number of workspaces per user when licencing is set
Members per workspace --members-per-workspace TITAN_FM_MEMBERS_PER_WORKSPACE MembersPerWorkspace 5 maximum number of members per workspace when licencing is set
Flows per workspace --flows-per-workspace TITAN_FM_FLOWS_PER_WORKSPACE FlowsPerWorkspace 10 maximum number of flows per workspace when licencing is set
Bricks per flow --bricks-per-flow TITAN_FM_BRICKS-PER-FLOW BricksPerFlow 15 maximum number of bricks per flow when licencing is set
Service ids --service-ids TITAN_FM_SERVICE_IDS ServiceIds no default set list of ids of services allowed to access the FlowManager

Usage

List a flow

API function:

/flowmanager/flows/<string:FlowId> Type: GET

Request data: No data needs to be sent.

Response data: flow object of the flow with the given name. A complete flow with bricks and connections is returned. A flow can only be fetched by workspace members and the workspace owner.

Copy a flow

API function:

/flowmanager/flows/copy Type: POST

Request data: A list of two flow objects. The first flow must contain the flowID and the workspaceId, the second the new flow name. A flow can only be copied by workspace members and the workspace owner.

Response data: flow object of the new flow without the config.

Create a flow

API function:

/flowmanager/flows/ Type: POST

Request data: A flow object with name and workspaceId set.

Response data: flow object of the new flow without the config, the owner is set to the user creating the flow. A flow can only be created by workspace members and the workspace owner.

Delete a flow

API function:

/flowmanager/flows/<string:FlowID> Type: DELETE

Request data: No data needs to be sent.

Response data: No data is returned.

A flow can only be deleted by workspace members and the workspace owner.

Update a flow

API function:

/flowmanager/flows/<string:FLowID> Type: PUT

Request data: A flow object. The flow must exist for this operation.

Response data: flow object of the updated flow without bricks/connections.

A flow can only be updated by workspace members and the workspace owner.

Create Port JSON

API function:

/flowmanager/ports/create_json Type: POST

Request data: A port object.

Response data: port object with new JSON schema.

Update a flow name

API function:

/flowmanager/flows/editname Type: PUT

Request data: A flow object with name, id, and workspaceId set.

Response data: A Object {id, name} of the updated flow. A flow can only be updated by workspace members and the workspace owner.

Update a flow Description

API function:

/flowmanager/flows/editdescription Type: PUT

Request data: A flow object with description, id, and workspaceId set.

Response data: A Object {id, description} of the updated flow. A flow can only be updated by workspace members and the workspace owner.

Get a decrypted value of a secret parameter

API function:

/flowmanager/flows/<string:FlowID>/decrypt_parameter/<string:BrickID> /<string:ParameterName> Type: GET

Request data: No data needs to be sent.

Response data: Decrypted parameter name.

Only flow owners can decrypt secret parameter values.

Get a flow with service key

API function:

/flowmanager/flow/<string:FlowId> Type: GET

Request data: No data needs to be sent. Request Header: Required "service" key to authenticate the service for accessing the endpoint

Response data: flow object of the flow with the given name if the flow is owned by the one requesting or public.

Create a connection

API function:

/flowmanager/connections/<string:connectionConfigID> Type: POST

Request data: A connection object.

Response data: connection object with an added buffer based on buffers of upstream connections.

A connection can only be created if the flow is public and not ReadOnly or if it is owned by the user.

Delete a connection

API function:

/flowmanager/connections/<string:connectionConfigID>/<string:connectionID> Type: DELETE

Request data: No data needs to be sent.

Response data: list of connection objects.

Buffer elements originally added at this connection will be deleted from downstream connections.

A connection can only be deleted if the flow is public and not ReadOnly or if it is owned by the user.

Update a connection

API function:

/flowmanager/connections/<string:connectionConfigID> Type: PUT

Request data: A connection object.

Response data: list of connection objects. Buffers of downstream connections in the flow will be updated if the connections buffer was changed (elements added or deleted).

A connection can only be updated if the flow is public and not ReadOnly or if it is owned by the user.

Add a brick

API function:

/flowmanager/bricks Type: POST

Request data: A brick object.

Response data: brick object of the new brick.

Update a brick

API function:

/flowmanager/bricks Type: PUT

Request data: A brick object.

Response data: brick object of the new brick.

Configure an APIBrick

API function:

/flowmanager/bricks/<brickId:string>/configure Type: PUT

Request data:

{
  "apiId": "the API ID",
  "endpointId": "the Endpoint ID",
}

Response data: brick object of the configured brick.

Delete a brick

API function:

/flowmanager/bricks/<brickid string> Type: DELETE

Request data: none.

Response : only status.

Get users workspaces

API function

/flowmanager/users/<userId:string>/workspaces Type: GET

Request data: none

Response data: list of workspaces.

Delete a users workspaces and memberships

API function

/flowmanager/users/<userId:string> Type: DELETE

Request data: none

Response data: status

Delete a users package

API function

/flowmanager/users/<userId:string>/packages/<packageId:string> Type: DELETE

Request data: none

Response data: status

Get a workspace

API function

/flowmanager/workspaces/<workspaceId:string> Type: GET

Request data: none

Response data: a workspace.

Create a workspace

API function

/flowmanager/workspaces/ Type: POST

Request data: a workspace with owner, name.

Response data: a workspace.

Delete a workspace

API function

/flowmanager/workspaces/<workspaceId:string> Type: DELETE

Request data: none

Response data: a workspace.

Only workspace owners can delete a workspace.

List a workspaces flows

API function:

/flowmanager/workspaces/<workspaceID:string>/flows Type: GET

Request data: No data needs to be sent.

Response data: List of flow objects that contains public and owned flows, without configs.

Only workspaces members and the workspace owner can list the flows.

Add a member to a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/members Type: POST

Request data: A member object with the email property set.

Response data: A member object.

Only workspaces members and the workspace owner can add new members to a workspace.

Update a workspace

API function:

/flowmanager/workspaces/<workspaceID:string> Type: PUT

Request data: A workspace object

Response data: A workspace object

Only workspaces members and the workspace owner can update a workspace.

Remove a member from a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/members/{userID:String} Type: DELETE

Request data: No data

Response data: A status.

Only workspaces members and the workspace owner can remove members from a workspace.

Add a TypeDefinition to a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/types Type: POST

Request data: A NestedTypeDefinition

Response data: The NestedTypeDefinition

Only workspace members and the workspace owner can add Types to a workspace.

List all TypeDefinitions within a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/types Type: GET

Response data: Array of NestedTypeDefinition

Resolve all TypeDefinitions within a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/types_resolved Type: GET

Response data: Array of NestedTypeDefinition

List one TypeDefinition within a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/types/<typeid:string> Type: GET

Response data: The NestedTypeDefinition

Resolve one TypeDefinition within a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/types/<typeid:string>/resolved Type: GET

Response data: The NestedTypeDefinition

Update a TypeDefinition in a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/types/<typeid:string> Type: PUT

Request data: A NestedTypeDefinition

Response data: The NestedTypeDefinition

Only workspace members and the workspace owner can change Types of a workspace.

Delete a TypeDefinition in a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/types/<typeid:string> Type: DELETE

Response data: HTTP Status OK

Only workspace members and the workspace owner can delete Types in a workspace.

Get APIs of a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/apis Type: GET

Request data: no data

Response data: A list of API objects

Only workspaces members and the workspace owner can access APIs of workspaces.

Add an API to a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/apis Type: POST

Request data: An API object

Response data: An API object

Only workspaces members and the workspace owner can add APIs to workspaces.

Get APIs of a workspace

API function:

/flowmanager/workspaces/<workspaceID:string>/apis Type: GET

Request data: no data

Response data: A list of API objects

Only workspaces members and the workspace owner can access APIs of workspaces.

Delete an API from a a worksapce

API function:

/flowmanager/workspaces/<workspaceID:string>/apis/<apiId:string> Type: DELETE

Request data: no data

Response data: A status

Only workspaces members and the workspace owner can access APIs of workspaces. If the one of the endpoints of the API is used in a flow, the API can not be deleted (response code 500).

Update an API

API function:

/flowmanager/workspaces/<workspaceID:string>/apis Type: PUT

Request data: An API object

Response data: An API object

Only workspaces members and the workspace owner can add APIs to workspaces.

Add an endpoint to an API

API function:

/flowmanager/workspaces/<workspaceID:string>/apis/<apiId:string>/endpoints Type: POST

Request data: An Endpoint object

Response data: An Endpoint object

Only workspaces members and the workspace owner can add APIs to workspaces.

Delete an endpoint from an API

API function:

/flowmanager/workspaces/<workspaceID:string>/apis/<apiId:string>/endpoints/<string:endpointId> Type: DELETE

Request data: No data

Response data: A status (200, 501, 400)

Only workspaces members and the workspace owner can add APIs to workspaces.

Update endpoint

API function:

/flowmanager/workspaces/<workspaceID:string>/apis/<apiId:string>/endpoints Type: PUT

Request data: An Endpoint object

Response data: An Endpoint object

Only workspaces members and the workspace owner can add APIs to workspaces.

Update member data (email, username) in all workspaces

API function:

/flowmanager/users Type: PUT

Request data: A member object with the email property set.

Response data: A status.

Only services can update member data in all workspaces.

Installing a brick package from the brick store to the user space

API function:

endpoint: /flowmanager/users/<userId:string>/packages/<packageId:string> Type: POST

Request data: No data

Response data: List of Available Bricks in json format

Uploading a brick package to a user space

API function:

endpoint: /flowmanager/users/<userId:string>/packages Type: POST

Request data: A brick package as multipart form data with the key "package"

Response data: List of Available Bricks in json format

Users with upload rights can post brick packages.

Get a users installed bricks

API function:

endpoint: /flowmanager/users/<userId:string>/bricks Type: GET

Request data: no data

Response data: List of Available Bricks in json format

Get a users installed packages

API function:

endpoint: /flowmanager/users/<userId:string>/packages Type: GET

Request data: no data

Response data: List of Package Metadata in json format