Giter Club home page Giter Club logo

camel-karavan's Introduction

Build Camel Java Quarkus React Typescript License

Apache Camel Karavan

Apache Camel Karavan is a Low-Code Data Integration Platform It simplifies the Apache Camel experience and accelerates developer performance by visually designing and rapidly deploying integration microservices.

  • Full power of Apache Camel through Visual Tool
  • From Low-code use-cases to Pro-code projects
  • Powered by 10+ years of Community Intelligence

Apache Camel Karavan

Features

Designer

  • Enterprise Integration Patterns
  • 300+ Integration Components
  • REST API designer with OpenAPI to REST DSL generator
  • YAML for Integration and Java custom code

Topology view

Topology

Route designer

Routes

REST API designer

REST

Deployer

  • Simple shell scripts for build and deploy
  • Configuration
  • Predefined customizable scripts for different platforms

Developer Dashboard

  • Hot Reload
  • View live logs during development
  • Tracing Exchange Data

karavan-dashboard

Architecture

Apache Camel Karavan components:

  1. Karavan app acts as the central interface for the platform, allowing users to manage and orchestrate their integration projects.
  2. Build Container started by the Karavan app to run integrations in developer mode (dev-mode), package and deploy integrations.
  3. Integration microservices delivered by the platform.
  4. Git repository stores all essential project files, including integration YAML configurations, application.properties, container configurations, deployment resources, and templates. It is considered the source of truth for the applications.
  5. An Image Registry is used by the Apache Camel Karavan to store container images that are generated during the build process.

architecture

Local

Karavan provides VS Code extension for local developer experience

Documentation

How to install on

Developer guide

Feedback

If you haven't done so yet, please be sure to download Karavan and give it a try. We're excited to receive your feedback and learn about your experiences!

camel-karavan's People

Contributors

0xhexe avatar apupier avatar arheom avatar arnouthoebreckx avatar brunomendola avatar cgballance avatar croway avatar davsclaus avatar dependabot[bot] avatar devcarneiro avatar divyansh1908 avatar dmvolod avatar dpalinic avatar eliefrancis1 avatar f-ambroz avatar hurzelpurzel avatar ia3andy avatar legendartur avatar maxandersen avatar mgubaidullin avatar mrinalsharma avatar mvolf avatar nf3lix avatar oscerd avatar praval791 avatar rafamqrs avatar stefanhuber avatar thomas-gantenbein-tga avatar toonalbers avatar vidhyasagarj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

camel-karavan's Issues

Missing versions of Native

The last version delivered as native is more than 2 months old in the docker repository under entropy1

Unsupported field: when on org.apache.camel.model.WhenDefinition

  1. Integration yaml
apiVersion: camel.apache.org/v1
kind: Integration
metadata:
  name: hello-world
spec:
  flows:
    - from:
        uri: 'kamelet:timer-source'
        parameters:
          period: 3000
          message: Hello World
        steps:
          - choice:
              when:
                - when:
                    steps:
                      - to:
                          uri: 'kamelet:log-sink'
                          parameters:
                            showStreams: true
                    expression:
                      csimple: '${body} == "Hello World"'
              otherwise:
                steps:
                  - log:
                      logName: demo
                      loggingLevel: INFO
                      message: '${body}'
  1. Exception:
java.lang.IllegalArgumentException: Unsupported field: when on org.apache.camel.model.WhenDefinition
	at org.apache.camel.dsl.yaml.common.YamlDeserializerBase.handleUnknownProperty(YamlDeserializerBase.java:110)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerBase.setProperties(YamlDeserializerBase.java:104)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerBase.construct(YamlDeserializerBase.java:51)
	at org.apache.camel.dsl.yaml.common.YamlDeserializationContext$1.construct(YamlDeserializationContext.java:179)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asType(YamlDeserializerSupport.java:339)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asCollection(YamlDeserializerSupport.java:317)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asFlatCollection(YamlDeserializerSupport.java:298)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asFlatList(YamlDeserializerSupport.java:272)
	at org.apache.camel.dsl.yaml.deserializers.ModelDeserializers$ChoiceDefinitionDeserializer.setProperty(ModelDeserializers.java:1534)
	at org.apache.camel.dsl.yaml.deserializers.ModelDeserializers$ChoiceDefinitionDeserializer.setProperty(ModelDeserializers.java:1498)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerBase.setProperties(YamlDeserializerBase.java:103)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerBase.construct(YamlDeserializerBase.java:51)
	at org.apache.camel.dsl.yaml.common.YamlDeserializationContext$2.construct(YamlDeserializationContext.java:221)
	at org.apache.camel.dsl.yaml.deserializers.ProcessorDefinitionDeserializer.construct(ProcessorDefinitionDeserializer.java:36)
	at org.apache.camel.dsl.yaml.common.YamlDeserializationContext$1.construct(YamlDeserializationContext.java:179)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asType(YamlDeserializerSupport.java:339)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asCollection(YamlDeserializerSupport.java:317)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asFlatCollection(YamlDeserializerSupport.java:298)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asFlatList(YamlDeserializerSupport.java:272)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setSteps(YamlDeserializerSupport.java:388)
	at org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinitionDeserializer.setProperties(OutputAwareFromDefinitionDeserializer.java:71)
	at org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinitionDeserializer.setProperties(OutputAwareFromDefinitionDeserializer.java:33)
	at org.apache.camel.dsl.yaml.common.YamlDeserializerBase.construct(YamlDeserializerBase.java:51)
	at org.apache.camel.dsl.yaml.common.YamlDeserializationContext$2.construct(YamlDeserializationContext.java:221)
	at org.apache.camel.dsl.yaml.YamlRoutesBuilderLoader$1.configure(YamlRoutesBuilderLoader.java:49)
	at org.apache.camel.builder.RouteBuilder.checkInitialized(RouteBuilder.java:541)
	at org.apache.camel.builder.RouteBuilder.configureRoutes(RouteBuilder.java:487)
	at org.apache.camel.builder.RouteBuilder.addRoutesToCamelContext(RouteBuilder.java:462)
	at org.apache.camel.impl.engine.AbstractCamelContext.addRoutes(AbstractCamelContext.java:1150)
	at org.apache.camel.main.RoutesConfigurer.configureRoutes(RoutesConfigurer.java:211)
	at org.apache.camel.quarkus.main.CamelMain.configureRoutes(CamelMain.java:70)
	at org.apache.camel.main.BaseMainSupport.postProcessCamelContext(BaseMainSupport.java:555)
	at org.apache.camel.quarkus.main.CamelMain.initCamelContext(CamelMain.java:116)
	at org.apache.camel.quarkus.main.CamelMain.doInit(CamelMain.java:86)
	at org.apache.camel.support.service.BaseService.init(BaseService.java:83)
	at org.apache.camel.quarkus.main.CamelMain.startEngine(CamelMain.java:137)
	at org.apache.camel.quarkus.main.CamelMainRuntime.start(CamelMainRuntime.java:49)
	at org.apache.camel.quarkus.core.CamelBootstrapRecorder.start(CamelBootstrapRecorder.java:45)
	at io.quarkus.deployment.steps.CamelBootstrapProcessor$boot-173480958.deploy_0(CamelBootstrapProcessor$boot-173480958.zig:101)
	at io.quarkus.deployment.steps.CamelBootstrapProcessor$boot-173480958.deploy(CamelBootstrapProcessor$boot-173480958.zig:40)
	at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:581)
	at io.quarkus.runtime.Application.start(Application.java:101)
	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:101)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:66)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:42)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:119)
	at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:48)
	at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:25)

Apache License headers

The source code should have ASF license headers

  • pom.xml
  • java source
  • type script source

And potentially others, such as Dockerfile.

Creating a new flow - CRD what does it mean

When creating a new flow, there is a [x] for CRD.

I think end users will not understand what it means. We should have a description what it means to turn this on or off.

No advanced options

When there are no advanced options, then maybe we should remove that blue "Advanced parameter
Screenshot 2021-11-16 at 11 16 49
s"

Move Add Flow button to top menu bar

I think its a little bit confusing that "Add flow" button is soo prominent on the screen that you think you need to click this button to add a new step. Instead you need to however the mouse at the EIP and then the + sign appears.

Should we move "Add flow" to the top right where the other buttons are "Copy" and "Save".

And it can be named "Add new flow" then you better understands its a new flow (route) and not a ste
Screenshot 2021-11-16 at 09 30 15
p

VS Code: Create a karavan integration through new file

In VS Code a new Karavan integration is created with right-click on a folder in the explorer.

As an alternative this could be by creating a new file.

For example:

A) Create new file

  1. Ctrl+N
  2. File --> New File

B) A new file opens and user have the possibility to 'select a language'

C) YAML (Karavan integration) (note: similar to create for example Docker (dockerfile))

Standalone loads all YAML file from directory

When using the Standalone application in LOCAL mode, it reads all the YAML files in the integrations folder as Integrations even if those files represent something else.

Maybe we need a validation that the Kind: is correct, or parse a schema perhaps?

[VS Code] Message "File is not Camel-K Integration!" can be erroenous

in case of minimal Camel K files, the message is displayed. the message shoudl be more precise and mention that it is not a (?) Kubernetes Camel K file?

fo risntance with file https://github.com/apache/camel-k/blob/main/examples/languages/routes.yaml :

- from:
    uri: "timer:tick"
    parameters:
      period: "5000"
    steps:
      - set-body:
          constant: "Hello Yaml !!!"
      - transform:
          simple: "${body.toUpperCase()}"
      - to: "log:info"

Right-click and click "Karavan: Open in Designer"

JBang run mode

We should get this working. After installing jbang (such as via sdk) then we should make jbang run via its alias

Today it runs as

~/workspace/camel-k/examples/languages main ❯ CamelJBang run routes.yaml --max-messages=10 --debug-level=info
zsh: command not found: CamelJBang

But that does not work. You have then to copy the CamelJBang.java source file to same dir, rename to not have .java and make it executable. And fix the RELEASE to say 3.13.0.

But if we run via the alias then it should run with the latest release

jbang CamelJBang@apache/camel run routes.yaml --max-messages=10 --debug-level=info

Add the option to save/export only the routes and not the integration for standalone

Add an option to export the yaml flow without the surrounding metadata related to the integration.

Instead of

apiVersion: camel.apache.org/v1
kind: Integration
metadata:
  name: integration1
spec:
  flows:
    - from:
        parameters:
          period: 3000
        steps:
          - log:
              logName: result
              loggingLevel: INFO
              message: '${body}'
        uri: 'kamelet:chuck-norris-source'

just this:

# camel-k: language=yaml

- from:
    uri: 'kamelet:chuck-norris-source'
    parameters:
      period: 3000
    steps:
      - to: "log:info"```

no such file or directory

After creating of a karavan yaml file in VSCode I get the following message:

Error: ENOENT: no such file or directory, open 'C:\c:\Users\me\Documents\workspace\test\test.yaml'

The file is editable, but doesn't seem to save (because of the double drive letter). After restart the yaml is gone.

OS: Windows 10 (Windows_NT x64 10.0.19043)
Version: 1.61.2 (user setup)
Commit: 6cba118ac49a1b88332f312a8f67186f7f3c1643
Date: 2021-10-19T14:57:20.575Z
Electron: 13.5.1
Chrome: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0

Configuring boolean values and problem with default values

If you use

kamel init foo.yaml

And want to turn off show-body-type and show-exchange-pattern on the log endpoint, then you have to

  • turn it on
  • turn it off

The issues is that they are on by default, but the UI do not represent this, as the UI shows it as off.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.