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
|
package agent
import (
"context"
"time"
"gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/internal/module/reverse_tunnel"
"gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/internal/module/reverse_tunnel/info"
"gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/pkg/agentcfg"
"google.golang.org/grpc"
)
// connectionFactory helps to inject fake connections for testing.
type connectionFactory func(agentDescriptor *info.AgentDescriptor, onActive, onIdle func(connectionInterface)) connectionInterface
type module struct {
server *grpc.Server
// minIdleConnections is the minimum number of connections that are not streaming a request.
minIdleConnections int32
// maxConnections is the maximum number of connections (idle and active).
maxConnections int32
scaleUpStep int32
// maxIdleTime is the maximum duration of time a connection can stay in an idle state.
maxIdleTime time.Duration
connectionFactory connectionFactory
}
func (m *module) Run(ctx context.Context, cfg <-chan *agentcfg.AgentConfiguration) error {
cm := connectionManager{
connections: make(map[connectionInterface]connectionInfo),
minIdleConnections: m.minIdleConnections,
maxConnections: m.maxConnections,
scaleUpStep: m.scaleUpStep,
maxIdleTime: m.maxIdleTime,
connectionFactory: m.connectionFactory,
agentDescriptor: m.agentDescriptor(),
}
cm.Run(ctx)
return nil
}
func (m *module) DefaultAndValidateConfiguration(config *agentcfg.AgentConfiguration) error {
return nil
}
func (m *module) Name() string {
return reverse_tunnel.ModuleName
}
func (m *module) agentDescriptor() *info.AgentDescriptor {
serverInfo := m.server.GetServiceInfo()
services := make([]*info.Service, 0, len(serverInfo))
for svcName, svcInfo := range serverInfo {
methods := make([]*info.Method, 0, len(svcInfo.Methods))
for _, mInfo := range svcInfo.Methods {
methods = append(methods, &info.Method{
Name: mInfo.Name,
})
}
services = append(services, &info.Service{
Name: svcName,
Methods: methods,
})
}
return &info.AgentDescriptor{
Services: services,
}
}
|