main.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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. yamlFile, err := ioutil.ReadFile(YAMLFILE)
  40. if err != nil {
  41. log.Fatalln("load conf error")
  42. }
  43. err = yaml.Unmarshal(yamlFile, &YamlConfig)
  44. if err != nil {
  45. fmt.Println(err.Error())
  46. }
  47. log.Printf("%#v", YamlConfig)
  48. MixDataMgo = &util.MongodbSim{
  49. MongodbAddr: YamlConfig.MixdataMgoAddr,
  50. Size: YamlConfig.MongodbPoolSize,
  51. DbName: YamlConfig.DbName,
  52. UserName: YamlConfig.UserName,
  53. PassWord: YamlConfig.PassWord,
  54. }
  55. MixDataMgo.InitPool()
  56. Client_Es, _ = elastic.NewClient(http.DefaultClient, "http://192.168.3.11:9800")
  57. es_type, es_index = "azktest", "azktest"
  58. reg.MustRegister(grpcMetrics, customizedCounterMetric)
  59. }
  60. func main() {
  61. /*
  62. MixDataMgo = &util.MongodbSim{
  63. MongodbAddr: "192.168.3.207:27092",
  64. Size: 20,
  65. DbName: "zhengkun",
  66. UserName: "",
  67. PassWord: "",
  68. }
  69. MixDataMgo.InitPool()
  70. Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://192.168.3.11:9800")
  71. es_type, es_index = "azktest","azktest"
  72. temporaryTest()
  73. return
  74. */
  75. //淡赌跑断
  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:%v",
  90. YamlConfig.LogPort),
  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. type YAMLConfig struct {
  121. MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
  122. UserName string `yaml:"userName"`
  123. PassWord string `yaml:"passWord"`
  124. DbName string `yaml:"dbName"`
  125. MongodbPoolSize int `yaml:"mongodbPoolSize"`
  126. TaskGteId string `yaml:"taskGteId"`
  127. TaskLteId string `yaml:"taskLteId"`
  128. IsAddTask int `yaml:"isAddTask"`
  129. Port string `yaml:"port"`
  130. LogPort string `yaml:"log_port"`
  131. }