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" "google.golang.org/grpc/credentials" "gopkg.in/olivere/elastic.v1" "gopkg.in/yaml.v3" "io/ioutil" "log" "net/http" "sensitiveWords.udp/proto_grpc" "sensitiveWords.udp/util" "strings" ) /* 2021/04/28 14:31:35.755969 data.go:248: 第 0 段 6082579e19a23f9d3f39eff2 60825b1d9ce9fc2e6c8a5b92 2021/04/28 14:31:35.756001 data.go:248: 第 1 段 60825b1d9ce9fc2e6c8a5b93 60825e5d9ce9fc2e6ccea709 2021/04/28 14:31:35.756008 data.go:248: 第 2 段 60825e5d9ce9fc2e6ccea70a 608261cd9ce9fc2e6c13382e 2021/04/28 14:31:35.756014 data.go:248: 第 3 段 608261cd9ce9fc2e6c13382f 6082658c9ce9fc2e6c574971 2021/04/28 14:31:35.756021 data.go:248: 第 4 段 6082658c9ce9fc2e6c574972 608269619ce9fc2e6c9c668c 2021/04/28 14:31:35.756029 data.go:248: 第 5 段 608269619ce9fc2e6c9c668d 60826d3e9ce9fc2e6ce1c9d8 2021/04/28 14:31:35.756039 data.go:248: 第 6 段 60826d3e9ce9fc2e6ce1c9d9 608271559ce9fc2e6c26aca5 2021/04/28 14:31:35.756046 data.go:248: 第 7 段 608271559ce9fc2e6c26aca6 608275929ce9fc2e6c6ca1ec 2021/04/28 14:31:35.756053 data.go:248: 第 8 段 608275929ce9fc2e6c6ca1ed 608279e19ce9fc2e6cb2ddb8 2021/04/28 14:31:35.756060 data.go:248: 第 9 段 608279e19ce9fc2e6cb2ddb9 60827e359ce9fc2e6cf96417 2021/04/28 14:31:35.756069 data.go:248: 第 10 段 60827e359ce9fc2e6cf96419 608282299ce9fc2e6c4034ee 2021/04/28 14:31:35.756077 data.go:248: 第 11 段 608282299ce9fc2e6c4034ef 608285b09ce9fc2e6c868546 2021/04/28 14:31:35.756087 data.go:248: 第 12 段 608285b09ce9fc2e6c868547 608289199ce9fc2e6ccbc72e 2021/04/28 14:31:35.756095 data.go:248: 第 13 段 608289199ce9fc2e6ccbc72f 608293f49ce9fc2e6cfdbf7b 2021/04/28 14:31:35.756103 data.go:248: 第 14 段 608293f49ce9fc2e6cfdbfa7 */ 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() { 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() { if YamlConfig.IsAddTask == 0 { initSensitiveWordsData() //初始化敏感词数据 } else { go addTaskSensitiveWordsData() //增量-改配置文件 } mux := http.NewServeMux() mux.Handle("/", promhttp.HandlerFor(reg, promhttp.HandlerOpts{})) cred, err := credentials.NewServerTLSFromFile(YamlConfig.CertFile, YamlConfig.KeyFile) if err != nil { log.Fatalln(err) } grpcServer := grpc.NewServer( grpc.Creds(cred), grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()), ) proto_grpc.RegisterSensitiveWordsServer(grpcServer, &server{}) grpcMetrics.InitializeMetrics(grpcServer) log.Println("Listen ",YamlConfig.Port) if err = http.ListenAndServeTLS( fmt.Sprintf("%s", YamlConfig.Port), YamlConfig.CertFile, YamlConfig.KeyFile, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.ProtoMajor == 2 && strings.HasPrefix( r.Header.Get("Content-Type"), "application/grpc") { grpcServer.ServeHTTP(w, r) } else { mux.ServeHTTP(w, r) } return }), );err != nil{ log.Fatalln(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"` CertFile string `yaml:"certFile"` KeyFile string `yaml:"keyFile"` }