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 }