main.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. "gopkg.in/olivere/elastic.v1"
  11. "gopkg.in/yaml.v3"
  12. "io/ioutil"
  13. "log"
  14. "net"
  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://192.168.3.11:9800")
  58. es_type, es_index = "unique_qy","unique_qy"
  59. reg.MustRegister(grpcMetrics, customizedCounterMetric)
  60. }
  61. func main() {
  62. //临时测试
  63. MixDataMgo = &util.MongodbSim{
  64. MongodbAddr: "172.17.4.187:27082,172.17.145.163:27083",
  65. Size: 20,
  66. DbName: "mixdata",
  67. UserName: "fengweiqiang",
  68. PassWord: "fwq@123123",
  69. }
  70. MixDataMgo.InitPool()
  71. Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://172.17.145.170:9800")
  72. es_type, es_index = "unique_qy","unique_qy"
  73. temporaryTest()
  74. //单独跑-分段
  75. return
  76. if YamlConfig.IsAddTask == 0 {
  77. initSensitiveWordsData() //初始化敏感词数据
  78. } else {
  79. go addTaskSensitiveWordsData() //增量-改配置文件
  80. }
  81. lis, err := net.Listen("tcp", YamlConfig.Port)
  82. if err != nil {
  83. log.Fatalf("failed to listen: %v", err)
  84. }
  85. defer lis.Close()
  86. // Create a HTTP server for prometheus.
  87. httpServer := &http.Server{
  88. Handler: promhttp.HandlerFor(reg, promhttp.HandlerOpts{}),
  89. Addr: fmt.Sprintf("0.0.0.0:%d",
  90. 2092),
  91. }
  92. grpcServer := grpc.NewServer(
  93. grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()),
  94. )
  95. proto_grpc.RegisterSensitiveWordsServer(grpcServer, &server{})
  96. grpcMetrics.InitializeMetrics(grpcServer)
  97. // Start your http server for prometheus.
  98. go func() {
  99. if err := httpServer.ListenAndServe(); err != nil {
  100. log.Fatal("Unable to start a http server.")
  101. }
  102. }()
  103. log.Println("server start:", YamlConfig.Port)
  104. if err := grpcServer.Serve(lis); err != nil {
  105. log.Fatalf("failed to serve: %v", err)
  106. }
  107. }
  108. //协议方法---等
  109. type server struct {
  110. proto_grpc.SensitiveWordsServer
  111. }
  112. func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) {
  113. customizedCounterMetric.WithLabelValues("search_server").Inc()
  114. text := in.GetText()
  115. //log.Println(text)
  116. findAll := Filter.FindAll(text)
  117. rada := strings.Join(findAll, ",")
  118. return &proto_grpc.ResultSensitiveWords{SensitiveWords: rada}, nil
  119. }
  120. func (s *server) Registration(ctx context.Context, in *proto_grpc.NumberOfRegistrations) (*proto_grpc.RequestComplete, error) {
  121. customizedCounterMetric.WithLabelValues("Registration").Inc()
  122. return &proto_grpc.RequestComplete{Text: "ok"}, nil
  123. }
  124. type YAMLConfig struct {
  125. MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
  126. UserName string `yaml:"userName"`
  127. PassWord string `yaml:"passWord"`
  128. DbName string `yaml:"dbName"`
  129. MongodbPoolSize int `yaml:"mongodbPoolSize"`
  130. TaskGteId string `yaml:"taskGteId"`
  131. TaskLteId string `yaml:"taskLteId"`
  132. IsAddTask int `yaml:"isAddTask"`
  133. Port string `yaml:"port"`
  134. }