| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /*
- Copyright 2020 Docker, Inc.
- 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 server
- import (
- "context"
- "net"
- "strings"
- "google.golang.org/grpc"
- "google.golang.org/grpc/health"
- "google.golang.org/grpc/health/grpc_health_v1"
- "github.com/docker/compose-cli/metrics"
- )
- // New returns a new GRPC server.
- func New(ctx context.Context) *grpc.Server {
- s := grpc.NewServer(
- grpc.ChainUnaryInterceptor(
- unaryServerInterceptor(ctx),
- metricsServerInterceptor(ctx, metrics.NewClient()),
- ),
- grpc.StreamInterceptor(streamServerInterceptor(ctx)),
- )
- hs := health.NewServer()
- grpc_health_v1.RegisterHealthServer(s, hs)
- return s
- }
- // CreateListener creates a listener either on tcp://, or local listener,
- // supporting unix:// for unix socket or npipe:// for named pipes on windows
- func CreateListener(address string) (net.Listener, error) {
- if strings.HasPrefix(address, "tcp://") {
- return net.Listen("tcp", strings.TrimPrefix(address, "tcp://"))
- }
- return createLocalListener(address)
- }
|