main.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/grpc-ecosystem/go-grpc-prometheus"
  6. "github.com/importcjj/sensitive"
  7. "github.com/prometheus/client_golang/prometheus"
  8. "github.com/prometheus/client_golang/prometheus/promhttp"
  9. "google.golang.org/grpc"
  10. "google.golang.org/grpc/credentials"
  11. "gopkg.in/olivere/elastic.v1"
  12. "gopkg.in/yaml.v3"
  13. "io/ioutil"
  14. "log"
  15. "net/http"
  16. "sensitiveWords.udp/proto_grpc"
  17. "sensitiveWords.udp/util"
  18. "strings"
  19. )
  20. const (
  21. YAMLFILE = "./server.yaml"
  22. )
  23. var YamlConfig YAMLConfig
  24. var Filter *sensitive.Filter
  25. var es_type, es_index string
  26. var Client_Es *elastic.Client
  27. var MixDataMgo *util.MongodbSim
  28. var (
  29. // Create a metrics registry.
  30. reg = prometheus.NewRegistry()
  31. // Create some standard server metrics.
  32. grpcMetrics = grpc_prometheus.NewServerMetrics()
  33. customizedCounterMetric = prometheus.NewCounterVec(prometheus.CounterOpts{
  34. Name: "demo_server_search_method_handle_count",
  35. Help: "Total number of RPCs handled on the server.",
  36. }, []string{"name"})
  37. )
  38. func init() {
  39. return
  40. yamlFile, err := ioutil.ReadFile(YAMLFILE)
  41. if err != nil {
  42. log.Fatalln("load conf error")
  43. }
  44. err = yaml.Unmarshal(yamlFile, &YamlConfig)
  45. if err != nil {
  46. fmt.Println(err.Error())
  47. }
  48. log.Printf("%#v", YamlConfig)
  49. MixDataMgo = &util.MongodbSim{
  50. MongodbAddr: YamlConfig.MixdataMgoAddr,
  51. Size: YamlConfig.MongodbPoolSize,
  52. DbName: YamlConfig.DbName,
  53. UserName: YamlConfig.UserName,
  54. PassWord: YamlConfig.PassWord,
  55. }
  56. MixDataMgo.InitPool()
  57. Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://172.17.145.170:9800")
  58. es_type, es_index = "unique_qy","unique_qy"
  59. reg.MustRegister(grpcMetrics, customizedCounterMetric)
  60. }
  61. func main() {
  62. log.Println("1111")
  63. //log.Println(escape("同方知网(北京)技术有限公司"))
  64. dealWithNameScoreRules("同方知网(北京)技术有限公司")
  65. return
  66. //临时测试
  67. MixDataMgo = &util.MongodbSim{
  68. MongodbAddr: "172.17.4.187:27082,172.17.145.163:27083",
  69. Size: 20,
  70. DbName: "mixdata",
  71. UserName: "fengweiqiang",
  72. PassWord: "fwq@123123",
  73. }
  74. MixDataMgo.InitPool()
  75. Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://172.17.145.170:9800")
  76. es_type, es_index = "unique_qy","unique_qy"
  77. temporaryTest()
  78. //单独跑-分段
  79. return
  80. if YamlConfig.IsAddTask == 0 {
  81. initSensitiveWordsData() //初始化敏感词数据
  82. } else {
  83. go addTaskSensitiveWordsData() //增量-改配置文件
  84. }
  85. mux := http.NewServeMux()
  86. mux.Handle("/", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
  87. cred, err := credentials.NewServerTLSFromFile(YamlConfig.CertFile, YamlConfig.KeyFile)
  88. if err != nil {
  89. log.Fatalln(err)
  90. }
  91. grpcServer := grpc.NewServer(
  92. grpc.Creds(cred),
  93. grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()),
  94. )
  95. proto_grpc.RegisterSensitiveWordsServer(grpcServer, &server{})
  96. grpcMetrics.InitializeMetrics(grpcServer)
  97. if err = http.ListenAndServeTLS(
  98. fmt.Sprintf("%s", YamlConfig.Port),
  99. YamlConfig.CertFile,
  100. YamlConfig.KeyFile,
  101. http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  102. if r.ProtoMajor == 2 && strings.HasPrefix(
  103. r.Header.Get("Content-Type"), "application/grpc") {
  104. grpcServer.ServeHTTP(w, r)
  105. } else {
  106. mux.ServeHTTP(w, r)
  107. }
  108. return
  109. }),
  110. );err != nil{
  111. log.Fatalln(err)
  112. }
  113. }
  114. //协议方法---等
  115. type server struct {
  116. proto_grpc.SensitiveWordsServer
  117. }
  118. func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) {
  119. customizedCounterMetric.WithLabelValues("search_server").Inc()
  120. text := in.GetText()
  121. //log.Println(text)
  122. findAll := Filter.FindAll(text)
  123. rada := strings.Join(findAll, ",")
  124. return &proto_grpc.ResultSensitiveWords{SensitiveWords: rada}, nil
  125. }
  126. type YAMLConfig struct {
  127. MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
  128. UserName string `yaml:"userName"`
  129. PassWord string `yaml:"passWord"`
  130. DbName string `yaml:"dbName"`
  131. MongodbPoolSize int `yaml:"mongodbPoolSize"`
  132. TaskGteId string `yaml:"taskGteId"`
  133. TaskLteId string `yaml:"taskLteId"`
  134. IsAddTask int `yaml:"isAddTask"`
  135. Port string `yaml:"port"`
  136. CertFile string `yaml:"certFile"`
  137. KeyFile string `yaml:"keyFile"`
  138. }