This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch release-1.4.x
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 39744e4c3ea9b3c6da87d0091ab477005dc97b09
Author: Pasquale Congiusti <pasquale.congiu...@gmail.com>
AuthorDate: Wed Apr 21 17:09:24 2021 +0200

    feat(trait): error handler advanced configuration
---
 .../kamelet-binding-error-handler.yaml             |  5 +++-
 pkg/controller/kameletbinding/common.go            |  3 ++-
 pkg/resources/resources.go                         |  4 +--
 pkg/trait/error_handler.go                         | 30 ++++++++++++++++++----
 4 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml 
b/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml
index ae8eb78..457b173 100644
--- a/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml
+++ b/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml
@@ -38,5 +38,8 @@ spec:
         apiVersion: camel.apache.org/v1alpha1
         name: error-handler
       properties:
-        message: "ERROR!"   
+        message: "ERROR!"
+    configuration:
+      maximumRedeliveries: 3
+      redeliveryDelay: 2000
     
diff --git a/pkg/controller/kameletbinding/common.go 
b/pkg/controller/kameletbinding/common.go
index 06b5b76..c4d4641 100644
--- a/pkg/controller/kameletbinding/common.go
+++ b/pkg/controller/kameletbinding/common.go
@@ -166,7 +166,8 @@ func createIntegrationFor(ctx context.Context, c 
client.Client, kameletbinding *
 
 func setIntegrationErrorHandler(it *v1.IntegrationSpec, errorHandlerURI 
string, errorHandlerSpec v1alpha1.ErrorHandler) error {
        it.ErrorHandler = v1.ErrorHandlerSpec{
-               Type: string(errorHandlerSpec.Type),
+               Type:          string(errorHandlerSpec.Type),
+               Configuration: 
&v1.ErrorHandlerConfiguration{errorHandlerSpec.Configuration.RawMessage},
        }
 
        if errorHandlerURI != "" {
diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go
index 856af4b..2108e19 100644
--- a/pkg/resources/resources.go
+++ b/pkg/resources/resources.go
@@ -113,9 +113,9 @@ var assets = func() http.FileSystem {
                "/crd/bases/camel.apache.org_kameletbindings.yaml": 
&vfsgen۰CompressedFileInfo{
                        name:             
"camel.apache.org_kameletbindings.yaml",
                        modTime:          time.Time{},
-                       uncompressedSize: 68634,
+                       uncompressedSize: 55181,
 
-                       compressedContent: 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5d\xff\x6f\xdb\x38\xb2\xff\x3d\x7f\xc5\x20\x39\xa0\x2d\x10\xd9\x71\x92\x76\x77\xfd\x7e\x28\xb2\xc9\xf6\xce\xaf\xdd\x34\xc8\x97\x3b\xdc\x6b\x7b\x00\x2d\x8d\x6d\x5e\x24\x52\x47\x52\x71\xfc\xb6\xfd\xdf\x1f\x48\x4a\xb2\xfc\x45\x12\xe5\xd8\xdd\xf4\x41\x04\x8a\xc6\x16\x35\x9c\x19\x0e\x87\xdf\xe6\x33\x3e\x00\x6f\x7b\x65\xef\x00\x3e\x50\x1f\x99\xc4\x00\x14\x07\x35\x41\x38\x8b\x89\x3f\x41\xb8\xe1\x23\x35\x25\x02\xe1\x1d\x
 [...]
+                       compressedContent: 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xf1\x6f\xdb\x38\xf2\xef\xef\xf9\x2b\x06\xc9\x01\x6d\x01\x4b\x8e\xe3\xb4\xbb\xeb\xf7\x43\x91\x26\xdb\x7b\x7e\xed\xa6\x45\x92\xde\xe1\x5e\xdb\x03\x68\x69\x6c\xf3\x22\x91\x3a\x92\x8a\xe3\xef\xb6\xff\xfb\x17\x24\x25\x59\x76\x2c\x99\x72\xec\x6e\x0a\x88\xc0\x62\x6b\x8b\x1a\xce\x0c\x87\xc3\x99\x21\x3f\xce\x11\x78\xbb\x6b\x07\x47\xf0\x9e\x06\xc8\x24\x86\xa0\x38\xa8\x29\xc2\x59\x42\x82\x29\xc2\x35\x1f\xab\x19\x11\x08\x
 [...]
                },
                "/crd/bases/camel.apache.org_kamelets.yaml": 
&vfsgen۰CompressedFileInfo{
                        name:             "camel.apache.org_kamelets.yaml",
diff --git a/pkg/trait/error_handler.go b/pkg/trait/error_handler.go
index ef93d67..2b57738 100644
--- a/pkg/trait/error_handler.go
+++ b/pkg/trait/error_handler.go
@@ -18,6 +18,7 @@ limitations under the License.
 package trait
 
 import (
+       "encoding/json"
        "fmt"
 
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
@@ -67,7 +68,7 @@ func (t *errorHandlerTrait) Apply(e *Environment) error {
 }
 
 func addErrorHandlerAsSource(e *Environment) error {
-       errorHandlerStatement, err := 
parseErrorHandler(e.Integration.Spec.ErrorHandler.URI, 
e.Integration.Spec.ErrorHandler.Type)
+       errorHandlerStatement, err := 
parseErrorHandler(e.Integration.Spec.ErrorHandler)
        if err != nil {
                return err
        }
@@ -104,15 +105,34 @@ func addErrorHandlerAsSource(e *Environment) error {
        return nil
 }
 
-func parseErrorHandler(errHandlURI string, errHandlType string) (string, 
error) {
-       switch errHandlType {
+func parseErrorHandler(errorHandlerSpec v1.ErrorHandlerSpec) (string, error) {
+       switch errorHandlerSpec.Type {
        case "no":
                return `errorHandler(noErrorHandler());`, nil
        case "default":
                return `errorHandler(defaultErrorHandler());`, nil
        case "dead-letter-channel":
-               return fmt.Sprintf(`errorHandler(deadLetterChannel("%v"));`, 
errHandlURI), nil
+               errorHandlerConfiguration, err := 
parseErrorHandlerConfiguration(errorHandlerSpec.Configuration)
+               if err != nil {
+                       return "", err
+               }
+
+               return fmt.Sprintf(`errorHandler(deadLetterChannel("%v")%v);`, 
errorHandlerSpec.URI, errorHandlerConfiguration), nil
+       }
+
+       return "", fmt.Errorf("Cannot recognize any error handler of type %s", 
errorHandlerSpec.Type)
+}
+
+func parseErrorHandlerConfiguration(conf *v1.ErrorHandlerConfiguration) 
(string, error) {
+       javaPropertiesBuilder := ""
+       var properties map[string]interface{}
+       err := json.Unmarshal(conf.RawMessage, &properties)
+       if err != nil {
+               return "", err
+       }
+       for method, value := range properties {
+               javaPropertiesBuilder = javaPropertiesBuilder + 
fmt.Sprintf(".%s(%v)\n", method, value)
        }
 
-       return "", fmt.Errorf("Cannot recognize any error handler of type %s", 
errHandlType)
+       return javaPropertiesBuilder, nil
 }

Reply via email to