main.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/importcjj/sensitive"
  6. "go.mongodb.org/mongo-driver/bson/primitive"
  7. "google.golang.org/grpc"
  8. "gopkg.in/yaml.v3"
  9. "io/ioutil"
  10. "log"
  11. "net"
  12. "sensitiveWords.udp/proto_grpc"
  13. "sensitiveWords.udp/util"
  14. "strings"
  15. )
  16. const (
  17. PORT = ":50051"
  18. YAMLFILE = "./server.yaml"
  19. )
  20. var YamlConfig YAMLConfig
  21. var MixDataMgo *util.MongodbSim
  22. var Filter *sensitive.Filter
  23. func init() {
  24. yamlFile, err := ioutil.ReadFile(YAMLFILE)
  25. if err != nil {
  26. log.Fatalln("load conf error")
  27. }
  28. err = yaml.Unmarshal(yamlFile, &YamlConfig)
  29. if err != nil {
  30. fmt.Println(err.Error())
  31. }
  32. log.Printf("%#v", YamlConfig)
  33. MixDataMgo = &util.MongodbSim{
  34. MongodbAddr: YamlConfig.MixdataMgoAddr,
  35. Size: YamlConfig.MongodbPoolSize,
  36. DbName: YamlConfig.DbName,
  37. UserName: YamlConfig.UserName,
  38. PassWord: YamlConfig.PassWord,
  39. }
  40. MixDataMgo.InitPool()
  41. gteid, err := primitive.ObjectIDFromHex(YamlConfig.TaskGteId)
  42. if err != nil {
  43. log.Fatalln(err)
  44. }
  45. lteid, err := primitive.ObjectIDFromHex(YamlConfig.TaskLteId)
  46. if err != nil {
  47. log.Fatalln(err)
  48. }
  49. iter := MixDataMgo.GetMgoConn().C("unique_qyxy").Find(map[string]interface{}{
  50. "_id": map[string]interface{}{
  51. "$gte": gteid,
  52. "$lte": lteid,
  53. },
  54. }).Sort("_id").Iter()
  55. Filter = sensitive.New()
  56. var initnum uint
  57. start_id,endid:="",""
  58. for tmp := map[string]interface{}{}; iter.Next(&tmp); tmp = map[string]interface{}{} {
  59. if start_id=="" {
  60. start_id = BsonTOStringId(tmp["_id"])
  61. }
  62. Filter.AddWord(tmp["qy_name"].(string))
  63. initnum++
  64. //Filter = sensitive.New()
  65. //runtime.GC()
  66. }
  67. log.Println("init ok", initnum)
  68. }
  69. func main() {
  70. lis, err := net.Listen("tcp", PORT)
  71. if err != nil {
  72. log.Fatalf("failed to listen: %v", err)
  73. }
  74. s := grpc.NewServer()
  75. proto_grpc.RegisterSensitiveWordsServer(s, &server{})
  76. log.Println("server start:", PORT)
  77. if err := s.Serve(lis); err != nil {
  78. log.Fatalf("failed to serve: %v", err)
  79. }
  80. }
  81. type server struct {
  82. proto_grpc.SensitiveWordsServer
  83. }
  84. func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) {
  85. text := in.GetText()
  86. log.Println(text)
  87. findAll := Filter.FindAll(text)
  88. return &proto_grpc.ResultSensitiveWords{SensitiveWords: strings.Join(findAll, ",")}, nil
  89. }
  90. type YAMLConfig struct {
  91. MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
  92. UserName string `yaml:"userName"`
  93. PassWord string `yaml:"passWord"`
  94. DbName string `yaml:"dbName"`
  95. MongodbPoolSize int `yaml:"mongodbPoolSize"`
  96. TaskGteId string `yaml:"taskGteId"`
  97. TaskLteId string `yaml:"taskLteId"`
  98. }
  99. func StringTOBsonId(id string) primitive.ObjectID {
  100. objectId, _ := primitive.ObjectIDFromHex(id)
  101. return objectId
  102. }
  103. func BsonTOStringId(id interface{}) string {
  104. return id.(primitive.ObjectID).Hex()
  105. }