main.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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. /*
  21. 2021/04/28 14:31:35.755969 data.go:248: 第 0 段 6082579e19a23f9d3f39eff2 60825b1d9ce9fc2e6c8a5b92
  22. 2021/04/28 14:31:35.756001 data.go:248: 第 1 段 60825b1d9ce9fc2e6c8a5b93 60825e5d9ce9fc2e6ccea709
  23. 2021/04/28 14:31:35.756008 data.go:248: 第 2 段 60825e5d9ce9fc2e6ccea70a 608261cd9ce9fc2e6c13382e
  24. 2021/04/28 14:31:35.756014 data.go:248: 第 3 段 608261cd9ce9fc2e6c13382f 6082658c9ce9fc2e6c574971
  25. 2021/04/28 14:31:35.756021 data.go:248: 第 4 段 6082658c9ce9fc2e6c574972 608269619ce9fc2e6c9c668c
  26. 2021/04/28 14:31:35.756029 data.go:248: 第 5 段 608269619ce9fc2e6c9c668d 60826d3e9ce9fc2e6ce1c9d8
  27. 2021/04/28 14:31:35.756039 data.go:248: 第 6 段 60826d3e9ce9fc2e6ce1c9d9 608271559ce9fc2e6c26aca5
  28. 2021/04/28 14:31:35.756046 data.go:248: 第 7 段 608271559ce9fc2e6c26aca6 608275929ce9fc2e6c6ca1ec
  29. 2021/04/28 14:31:35.756053 data.go:248: 第 8 段 608275929ce9fc2e6c6ca1ed 608279e19ce9fc2e6cb2ddb8
  30. 2021/04/28 14:31:35.756060 data.go:248: 第 9 段 608279e19ce9fc2e6cb2ddb9 60827e359ce9fc2e6cf96417
  31. 2021/04/28 14:31:35.756069 data.go:248: 第 10 段 60827e359ce9fc2e6cf96419 608282299ce9fc2e6c4034ee
  32. 2021/04/28 14:31:35.756077 data.go:248: 第 11 段 608282299ce9fc2e6c4034ef 608285b09ce9fc2e6c868546
  33. 2021/04/28 14:31:35.756087 data.go:248: 第 12 段 608285b09ce9fc2e6c868547 608289199ce9fc2e6ccbc72e
  34. 2021/04/28 14:31:35.756095 data.go:248: 第 13 段 608289199ce9fc2e6ccbc72f 608293f49ce9fc2e6cfdbf7b
  35. 2021/04/28 14:31:35.756103 data.go:248: 第 14 段 608293f49ce9fc2e6cfdbfa7
  36. */
  37. const (
  38. YAMLFILE = "./server.yaml"
  39. )
  40. var YamlConfig YAMLConfig
  41. var Filter *sensitive.Filter
  42. var es_type, es_index string
  43. var Client_Es *elastic.Client
  44. var MixDataMgo *util.MongodbSim
  45. var (
  46. // Create a metrics registry.
  47. reg = prometheus.NewRegistry()
  48. // Create some standard server metrics.
  49. grpcMetrics = grpc_prometheus.NewServerMetrics()
  50. customizedCounterMetric = prometheus.NewCounterVec(prometheus.CounterOpts{
  51. Name: "demo_server_search_method_handle_count",
  52. Help: "Total number of RPCs handled on the server.",
  53. }, []string{"name"})
  54. )
  55. func init() {
  56. yamlFile, err := ioutil.ReadFile(YAMLFILE)
  57. if err != nil {
  58. log.Fatalln("load conf error")
  59. }
  60. err = yaml.Unmarshal(yamlFile, &YamlConfig)
  61. if err != nil {
  62. fmt.Println(err.Error())
  63. }
  64. log.Printf("%#v", YamlConfig)
  65. MixDataMgo = &util.MongodbSim{
  66. MongodbAddr: YamlConfig.MixdataMgoAddr,
  67. Size: YamlConfig.MongodbPoolSize,
  68. DbName: YamlConfig.DbName,
  69. UserName: YamlConfig.UserName,
  70. PassWord: YamlConfig.PassWord,
  71. }
  72. MixDataMgo.InitPool()
  73. //Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://172.17.145.170:9800")
  74. es_type, es_index = "unique_qy","unique_qy"
  75. reg.MustRegister(grpcMetrics, customizedCounterMetric)
  76. }
  77. func main() {
  78. if YamlConfig.IsAddTask == 0 {
  79. initSensitiveWordsData() //初始化敏感词数据
  80. } else {
  81. go addTaskSensitiveWordsData() //增量-改配置文件
  82. }
  83. mux := http.NewServeMux()
  84. mux.Handle("/", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
  85. cred, err := credentials.NewServerTLSFromFile(YamlConfig.CertFile, YamlConfig.KeyFile)
  86. if err != nil {
  87. log.Fatalln(err)
  88. }
  89. grpcServer := grpc.NewServer(
  90. grpc.Creds(cred),
  91. grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()),
  92. )
  93. proto_grpc.RegisterSensitiveWordsServer(grpcServer, &server{})
  94. grpcMetrics.InitializeMetrics(grpcServer)
  95. log.Println("Listen ",YamlConfig.Port)
  96. if err = http.ListenAndServeTLS(
  97. fmt.Sprintf("%s", YamlConfig.Port),
  98. YamlConfig.CertFile,
  99. YamlConfig.KeyFile,
  100. http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  101. if r.ProtoMajor == 2 && strings.HasPrefix(
  102. r.Header.Get("Content-Type"), "application/grpc") {
  103. grpcServer.ServeHTTP(w, r)
  104. } else {
  105. mux.ServeHTTP(w, r)
  106. }
  107. return
  108. }),
  109. );err != nil{
  110. log.Fatalln(err)
  111. }
  112. }
  113. //协议方法---等
  114. type server struct {
  115. proto_grpc.SensitiveWordsServer
  116. }
  117. func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) {
  118. customizedCounterMetric.WithLabelValues("search_server").Inc()
  119. text := in.GetText()
  120. //log.Println(text)
  121. findAll := Filter.FindAll(text)
  122. rada := strings.Join(findAll, ",")
  123. return &proto_grpc.ResultSensitiveWords{SensitiveWords: rada}, nil
  124. }
  125. type YAMLConfig struct {
  126. MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
  127. UserName string `yaml:"userName"`
  128. PassWord string `yaml:"passWord"`
  129. DbName string `yaml:"dbName"`
  130. MongodbPoolSize int `yaml:"mongodbPoolSize"`
  131. TaskGteId string `yaml:"taskGteId"`
  132. TaskLteId string `yaml:"taskLteId"`
  133. IsAddTask int `yaml:"isAddTask"`
  134. Port string `yaml:"port"`
  135. CertFile string `yaml:"certFile"`
  136. KeyFile string `yaml:"keyFile"`
  137. }