github.com/erda-project/erda-infra@v1.0.9/base/servicehub/provider.go (about) 1 // Copyright (c) 2021 Terminus, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package servicehub 16 17 import ( 18 "context" 19 "fmt" 20 "os" 21 "reflect" 22 23 "github.com/erda-project/erda-infra/base/logs" 24 ) 25 26 // Creator . 27 type Creator func() Provider 28 29 // ProviderDefine . 30 type ProviderDefine interface { 31 Creator() Creator 32 } 33 34 // ProviderService deprecated, use ProviderServices instead. 35 type ProviderService interface { 36 Service() []string 37 } 38 39 // ProviderServices . 40 type ProviderServices interface { 41 Services() []string 42 } 43 44 // ServiceTypes . 45 type ServiceTypes interface { 46 Types() []reflect.Type 47 } 48 49 // ProviderUsageSummary . 50 type ProviderUsageSummary interface { 51 Summary() string 52 } 53 54 // ProviderUsage . 55 type ProviderUsage interface { 56 Description() string 57 } 58 59 // FixedServiceDependencies deprecated, use ServiceDependencies instead. 60 type FixedServiceDependencies interface { 61 Dependencies() []string 62 } 63 64 // OptionalServiceDependencies deprecated, use ServiceDependencies instead. 65 type OptionalServiceDependencies interface { 66 OptionalDependencies(h *Hub) []string 67 } 68 69 // ServiceDependencies . 70 type ServiceDependencies interface { 71 Dependencies(*Hub) []string 72 } 73 74 // ConfigCreator . 75 type ConfigCreator interface { 76 Config() interface{} 77 } 78 79 // serviceProviders . 80 var serviceProviders = map[string]ProviderDefine{} 81 82 // RegisterProvider . 83 func RegisterProvider(name string, define ProviderDefine) { 84 if _, ok := serviceProviders[name]; ok { 85 fmt.Printf("provider %s already exist\n", name) 86 os.Exit(-1) 87 } 88 serviceProviders[name] = define 89 } 90 91 // Provider . 92 type Provider interface{} 93 94 // Context . 95 type Context interface { 96 context.Context 97 Hub() *Hub 98 Config() interface{} 99 Logger() logs.Logger 100 Service(name string, options ...interface{}) interface{} 101 AddTask(task func(context.Context) error, options ...TaskOption) 102 Key() string 103 Label() string 104 Provider() Provider 105 } 106 107 // TaskOption . 108 type TaskOption func(*task) 109 110 // ProviderRunner . 111 type ProviderRunner interface { 112 Start() error 113 Close() error 114 } 115 116 // ProviderRunnerWithContext . 117 type ProviderRunnerWithContext interface { 118 Run(context.Context) error 119 } 120 121 // ProviderInitializer . 122 type ProviderInitializer interface { 123 Init(ctx Context) error 124 } 125 126 // DependencyContext . 127 type DependencyContext interface { 128 Type() reflect.Type 129 Tags() reflect.StructTag 130 Service() string 131 Key() string 132 Label() string 133 Caller() string 134 } 135 136 // DependencyProvider . 137 type DependencyProvider interface { 138 Provide(ctx DependencyContext, options ...interface{}) interface{} 139 }