-
Notifications
You must be signed in to change notification settings - Fork 524
/
handler.go
82 lines (60 loc) · 2.4 KB
/
handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
Copyright 2023 The Nuclio Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package golang
import (
"github.com/nuclio/nuclio/pkg/functionconfig"
"github.com/nuclio/nuclio/pkg/processor/runtime"
"github.com/nuclio/logger"
"github.com/nuclio/nuclio-sdk-go"
)
// entrypoint is the function which receives events
type entrypoint func(*nuclio.Context, nuclio.Event) (interface{}, error)
// context initializer is the function which is called per runtime to initialize context
type contextInitializer func(*nuclio.Context) error
type handler interface {
// load will load a handler, given a runtime configuration
load(*runtime.Configuration) error
// getEntrypoint returns the entrypoint of the handler
getEntrypoint() entrypoint
// getContextInitializer returns the context initializer (if applicable) of the handler
getContextInitializer() contextInitializer
}
type abstractHandler struct {
logger logger.Logger
entrypoint entrypoint
contextInitializer contextInitializer
}
func (ah *abstractHandler) load(configuration *runtime.Configuration) error {
// if configured, use the built-in handler
if configuration.Spec.Build.Path == "nuclio:builtin" || configuration.Spec.Handler == "nuclio:builtin" {
ah.logger.WarnWith("Using built in handler, as configured")
ah.entrypoint = builtInHandler
ah.contextInitializer = InitContext
}
return nil
}
// getEntrypoint returns the entrypoint of the handler
func (ah *abstractHandler) getEntrypoint() entrypoint {
return ah.entrypoint
}
// getContextInitializer returns the context initializer (if applicable) of the handler
func (ah *abstractHandler) getContextInitializer() contextInitializer {
return ah.contextInitializer
}
func (ah *abstractHandler) parseName(handlerName string) (string, string, error) {
// if handler is empty, replace with default
if handlerName == "" {
handlerName = "main:Handler"
}
return functionconfig.ParseHandler(handlerName)
}