mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-11-04 19:32:17 +08:00 
			
		
		
		
	* Code adaptation k8s: service discovery and registration adaptation, configuration adaptation * Initial submission of the help charts script for openim API * change the help charts script * change the help charts script * change helm chart codes * change dockerfiles script * change chart script:add configmap mounts * change chart script:change repository * change chart script:msggateway add one service * change config.yaml * roll back some config values * change chart script:change Ingress rule with a rewrite annotation * add mysql charts scrible * change chart script:add mysql.config.yaml * add nfs provisioner charts * change chart script:add nfs.config.yaml * add ingress-nginx charts * change chart script:add ingress-nginx.config.yaml * add redis &mongodb charts * add kafka&minio charts * change chart script:change redis.values.yaml * change chart script:add redis.config.yaml * change chart script:change redis.config.yaml * change chart script:change mongodb.value.yaml * change chart script:change mongodb.value.yaml * change chart script:add mongodb.config.yaml * change chart script:change minio.values.yaml * change chart script:add minio.config.yaml * change chart script:change kafka.values.yaml * change chart script:add kafka.config.yaml * change chart script:change services.config.yaml * bug fix:Delete websocket's Port restrictions * bug fix:change port value * change chart script:Submit a stable version script * fix bug:Implement option interface * fix bug:change K8sDR.Register * change config.yaml * change chats script:minio service add ingress * change chats script:minio service add ingress * change chats script:kafka.replicaCount=3& change minio.api ingress * delete change chats script * change config.yaml * change openim.yaml * merge go.sum * Add monitoring function and struct for Prometheus on gin and GRPC * Add GRPC and gin server monitoring logic * Add GRPC and gin server monitoring logic2 * Add GRPC and gin server monitoring logic3 * Add GRPC and gin server monitoring logic4 * Add GRPC and gin server monitoring logic5 * Add GRPC and gin server monitoring logic6 * Add GRPC and gin server monitoring logic7 * delete:old monitoring code * add for test * fix bug:change packname * fix bug:delete getPromPort funciton * fix bug:delete getPromPort funciton * fix bug:change logs * fix bug:change registerName logic in GetGrpcCusMetrics function * add getPrometheus url api * fix:config path logic * fix:prometheus enable function * fix:prometheus enable function * fix:transfer Multi process monitoring logic * del:del not using manifest * fix:openim-msgtransfer.sh * fix:openim-msgtransfer.sh --------- Co-authored-by: lin.huang <lin.huang@apulis.com> Co-authored-by: Xinwei Xiong <3293172751@qq.com>
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright © 2023 OpenIM. All rights reserved.
 | 
						|
//
 | 
						|
// 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 startrpc
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"github.com/openimsdk/open-im-server/v3/pkg/common/prom_metrics"
 | 
						|
	"github.com/prometheus/client_golang/prometheus"
 | 
						|
	"github.com/prometheus/client_golang/prometheus/promhttp"
 | 
						|
	"log"
 | 
						|
	"net"
 | 
						|
	"net/http"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	"github.com/openimsdk/open-im-server/v3/pkg/common/config"
 | 
						|
	"github.com/openimsdk/open-im-server/v3/pkg/common/discovery_register"
 | 
						|
 | 
						|
	grpcprometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
 | 
						|
	"google.golang.org/grpc"
 | 
						|
	"google.golang.org/grpc/credentials/insecure"
 | 
						|
 | 
						|
	"github.com/OpenIMSDK/tools/discoveryregistry"
 | 
						|
	"github.com/OpenIMSDK/tools/mw"
 | 
						|
	"github.com/OpenIMSDK/tools/network"
 | 
						|
	"github.com/OpenIMSDK/tools/utils"
 | 
						|
)
 | 
						|
 | 
						|
// Start rpc server.
 | 
						|
func Start(
 | 
						|
	rpcPort int,
 | 
						|
	rpcRegisterName string,
 | 
						|
	prometheusPort int,
 | 
						|
	rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error,
 | 
						|
	options ...grpc.ServerOption,
 | 
						|
) error {
 | 
						|
	fmt.Printf("start %s server, port: %d, prometheusPort: %d, OpenIM version: %s\n",
 | 
						|
		rpcRegisterName, rpcPort, prometheusPort, config.Version)
 | 
						|
	listener, err := net.Listen(
 | 
						|
		"tcp",
 | 
						|
		net.JoinHostPort(network.GetListenIP(config.Config.Rpc.ListenIP), strconv.Itoa(rpcPort)),
 | 
						|
	)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	defer listener.Close()
 | 
						|
	client, err := discovery_register.NewDiscoveryRegister(config.Config.Envs.Discovery)
 | 
						|
	if err != nil {
 | 
						|
		return utils.Wrap1(err)
 | 
						|
	}
 | 
						|
	defer client.Close()
 | 
						|
	client.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials()))
 | 
						|
	registerIP, err := network.GetRpcRegisterIP(config.Config.Rpc.RegisterIP)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	var reg *prometheus.Registry
 | 
						|
	var metric *grpcprometheus.ServerMetrics
 | 
						|
	// ctx 中间件
 | 
						|
	if config.Config.Prometheus.Enable {
 | 
						|
		//////////////////////////
 | 
						|
		cusMetrics := prom_metrics.GetGrpcCusMetrics(rpcRegisterName)
 | 
						|
		reg, metric, err = prom_metrics.NewGrpcPromObj(cusMetrics)
 | 
						|
		options = append(options, mw.GrpcServer(), grpc.StreamInterceptor(metric.StreamServerInterceptor()),
 | 
						|
			grpc.UnaryInterceptor(metric.UnaryServerInterceptor()))
 | 
						|
	} else {
 | 
						|
		options = append(options, mw.GrpcServer())
 | 
						|
	}
 | 
						|
	srv := grpc.NewServer(options...)
 | 
						|
	defer srv.GracefulStop()
 | 
						|
	err = rpcFn(client, srv)
 | 
						|
	if err != nil {
 | 
						|
		return utils.Wrap1(err)
 | 
						|
	}
 | 
						|
	err = client.Register(
 | 
						|
		rpcRegisterName,
 | 
						|
		registerIP,
 | 
						|
		rpcPort,
 | 
						|
		grpc.WithTransportCredentials(insecure.NewCredentials()),
 | 
						|
	)
 | 
						|
	if err != nil {
 | 
						|
		return utils.Wrap1(err)
 | 
						|
	}
 | 
						|
	go func() {
 | 
						|
		if config.Config.Prometheus.Enable && prometheusPort != 0 {
 | 
						|
			metric.InitializeMetrics(srv)
 | 
						|
			// Create a HTTP server for prometheus.
 | 
						|
			httpServer := &http.Server{Handler: promhttp.HandlerFor(reg, promhttp.HandlerOpts{}), Addr: fmt.Sprintf("0.0.0.0:%d", prometheusPort)}
 | 
						|
			if err := httpServer.ListenAndServe(); err != nil {
 | 
						|
				log.Fatal("Unable to start a http server.")
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}()
 | 
						|
 | 
						|
	return utils.Wrap1(srv.Serve(listener))
 | 
						|
}
 |