package main import ( "context" "fmt" "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/importcjj/sensitive" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "google.golang.org/grpc" "gopkg.in/olivere/elastic.v1" "gopkg.in/yaml.v3" "io/ioutil" "log" "net" "net/http" "sensitiveWords.udp/proto_grpc" "sensitiveWords.udp/util" "strings" ) const ( YAMLFILE = "./server.yaml" ) var YamlConfig YAMLConfig var Filter *sensitive.Filter var es_type, es_index string var Client_Es *elastic.Client var MixDataMgo *util.MongodbSim var ( // Create a metrics registry. reg = prometheus.NewRegistry() // Create some standard server metrics. grpcMetrics = grpc_prometheus.NewServerMetrics() customizedCounterMetric = prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "demo_server_search_method_handle_count", Help: "Total number of RPCs handled on the server.", }, []string{"name"}) ) func init() { return yamlFile, err := ioutil.ReadFile(YAMLFILE) if err != nil { log.Fatalln("load conf error") } err = yaml.Unmarshal(yamlFile, &YamlConfig) if err != nil { fmt.Println(err.Error()) } log.Printf("%#v", YamlConfig) MixDataMgo = &util.MongodbSim{ MongodbAddr: YamlConfig.MixdataMgoAddr, Size: YamlConfig.MongodbPoolSize, DbName: YamlConfig.DbName, UserName: YamlConfig.UserName, PassWord: YamlConfig.PassWord, } MixDataMgo.InitPool() Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://172.17.145.170:9800") es_type, es_index = "unique_qy","unique_qy" reg.MustRegister(grpcMetrics, customizedCounterMetric) } func main() { log.Println("1111") //log.Println(escape("同方知网(北京)技术有限公司")) dealWithNameScoreRules("同方知网(北京)技术有限公司") return //临时测试 MixDataMgo = &util.MongodbSim{ MongodbAddr: "172.17.4.187:27082,172.17.145.163:27083", Size: 20, DbName: "mixdata", UserName: "fengweiqiang", PassWord: "fwq@123123", } MixDataMgo.InitPool() Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://172.17.145.170:9800") es_type, es_index = "unique_qy","unique_qy" temporaryTest() //单独跑-分段 return if YamlConfig.IsAddTask == 0 { initSensitiveWordsData() //初始化敏感词数据 } else { go addTaskSensitiveWordsData() //增量-改配置文件 } lis, err := net.Listen("tcp", YamlConfig.Port) if err != nil { log.Fatalf("failed to listen: %v", err) } defer lis.Close() // Create a HTTP server for prometheus. httpServer := &http.Server{ Handler: promhttp.HandlerFor(reg, promhttp.HandlerOpts{}), Addr: fmt.Sprintf("0.0.0.0:%v", YamlConfig.LogPort), } grpcServer := grpc.NewServer( grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()), ) proto_grpc.RegisterSensitiveWordsServer(grpcServer, &server{}) grpcMetrics.InitializeMetrics(grpcServer) // Start your http server for prometheus. go func() { if err := httpServer.ListenAndServe(); err != nil { log.Fatal("Unable to start a http server.") } }() log.Println("server start:", YamlConfig.Port) if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } } //协议方法---等 type server struct { proto_grpc.SensitiveWordsServer } func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) { customizedCounterMetric.WithLabelValues("search_server").Inc() text := in.GetText() //log.Println(text) findAll := Filter.FindAll(text) rada := strings.Join(findAll, ",") return &proto_grpc.ResultSensitiveWords{SensitiveWords: rada}, nil } type YAMLConfig struct { MixdataMgoAddr string `yaml:"mixdataMgoAddr"` UserName string `yaml:"userName"` PassWord string `yaml:"passWord"` DbName string `yaml:"dbName"` MongodbPoolSize int `yaml:"mongodbPoolSize"` TaskGteId string `yaml:"taskGteId"` TaskLteId string `yaml:"taskLteId"` IsAddTask int `yaml:"isAddTask"` Port string `yaml:"port"` LogPort string `yaml:"log_port"` }