| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 register |
| |
| import ( |
| "github.com/apache/servicecomb-mesher/proxy/common" |
| chassisCommon "github.com/go-chassis/go-chassis/v2/core/common" |
| "github.com/go-chassis/go-chassis/v2/core/config" |
| chassisModel "github.com/go-chassis/go-chassis/v2/core/config/model" |
| "github.com/go-chassis/go-chassis/v2/core/registry" |
| "github.com/go-chassis/go-chassis/v2/pkg/util/iputil" |
| "github.com/go-chassis/openlog" |
| "strings" |
| ) |
| |
| // AdaptEndpoints moves http endpoint to rest endpoint |
| func AdaptEndpoints() error { |
| var err error |
| // To be called by services based on CSE SDK, |
| // mesher has to register endpoint with rest://ip:port |
| oldProtoMap := config.GlobalDefinition.ServiceComb.Protocols |
| if _, ok := oldProtoMap[common.HTTPProtocol]; !ok { |
| return nil |
| } |
| if _, ok := oldProtoMap[chassisCommon.ProtocolRest]; ok { |
| return nil |
| } |
| |
| newProtoMap := make(map[string]chassisModel.Protocol) |
| for n, proto := range oldProtoMap { |
| if n == common.HTTPProtocol { |
| continue |
| } |
| newProtoMap[n] = proto |
| } |
| newProtoMap[chassisCommon.ProtocolRest] = oldProtoMap[common.HTTPProtocol] |
| eps, err := registry.MakeEndpointMap(newProtoMap) |
| if err != nil { |
| return err |
| } |
| for protocol, ep := range eps { |
| if ep.Address == "" { |
| port := strings.Split(newProtoMap[protocol].Listen, ":") |
| if len(port) == 2 { //check if port is not specified along with ip address, eventually in case port is not specified, server start will fail in subsequent processing. |
| registry.InstanceEndpoints[protocol] = iputil.GetLocalIP() + ":" + port[1] |
| } |
| } else { |
| registry.InstanceEndpoints[protocol] = ep.Address |
| } |
| } |
| |
| openlog.Debug("adapt endpoints success") |
| return nil |
| } |