-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathplugin_base.go
More file actions
88 lines (76 loc) · 2.5 KB
/
Copy pathplugin_base.go
File metadata and controls
88 lines (76 loc) · 2.5 KB
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
83
84
85
86
87
88
/*
Copyright 2022 The Katanomi 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 plugin
import (
"context"
"fmt"
"net/http"
"os"
"time"
"github.com/katanomi/pkg/plugin/client"
"github.com/katanomi/pkg/plugin/config"
"k8s.io/apimachinery/pkg/api/errors"
"knative.dev/pkg/apis"
"knative.dev/pkg/network"
"knative.dev/pkg/system"
)
// PluginBase is the base struct for all plugins
type PluginBase struct {
DefaultPluginAddresser
}
// DefaultPluginAddresser provides default methods implementing client.PluginAddressable
type DefaultPluginAddresser struct{}
// CheckAlive request the tool service with get method to check if it is alive
func (p PluginBase) CheckAlive(ctx context.Context) error {
meta := client.ExtraMeta(ctx)
if meta == nil {
return errors.NewBadRequest("missing meta")
}
// Use http request to check whether the network is connected,
// and ignore the http response.
ctx, cancel := context.WithTimeout(ctx, time.Second*2)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, meta.BaseURL, nil)
_, err := http.DefaultClient.Do(req)
if err != nil {
return errors.NewInternalError(err)
}
return nil
}
// GetAddressURL get the access url of the plugin service(not tool service)
func (p DefaultPluginAddresser) GetAddressURL() *apis.URL {
if addr := os.Getenv(config.EnvServiceAddress); addr != "" {
if url, _ := apis.ParseURL(addr); url != nil {
return url
}
}
svcNamespace := system.Namespace()
svcName := os.Getenv(config.EnvServiceName)
svcMethod := os.Getenv(config.EnvServiceMethod)
if svcMethod == "" {
svcMethod = "http"
}
urlStr := fmt.Sprintf("%s://%s", svcMethod, network.GetServiceHostname(svcName, svcNamespace))
url, _ := apis.ParseURL(urlStr)
return url
}
// GetWebhookURL get the webhook url
// used to receive events from the tool service
func (p PluginBase) GetWebhookURL() (*apis.URL, bool) {
webhookAddr := os.Getenv(config.EnvWebhookAddress)
var url *apis.URL
if webhookAddr != "" {
url, _ = apis.ParseURL(webhookAddr)
}
return url, url != nil
}