main.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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. "go.mongodb.org/mongo-driver/bson/primitive"
  10. "google.golang.org/grpc"
  11. "gopkg.in/olivere/elastic.v1"
  12. "gopkg.in/yaml.v2"
  13. "io/ioutil"
  14. "log"
  15. "math/big"
  16. "net"
  17. "net/http"
  18. "regexp"
  19. "sensitiveWords.udp/proto_grpc"
  20. "sensitiveWords.udp/util"
  21. "strconv"
  22. "strings"
  23. )
  24. const (
  25. YAMLFILE = "./server.yaml"
  26. )
  27. var reg_alias = regexp.MustCompile("(税务局|工商行政管理局|文化广播电视新闻出版局|外国专家局|" +
  28. "中医药管理局|市场监督管理局|广播电视局|医疗保障局|机关事务管理局|粮食和物资储备局|" +
  29. "监狱管理局|畜牧兽医局|食品药品监督管理局|城市管理行政执法局|城市管理局|国家保密局|密码管理局|" +
  30. "地方金融监督管理局|住房保障和房屋管理局|质量技术监督局|人力资源与社会保障局|公路管理局|国土资源局|" +
  31. "卫生和计划生育局|民事政务局|公众安全局|交通管理局|人力资源和社会保障局|劳动和社会保障局|" +
  32. "住房和城乡建设局|就业服务局|文物管理局|环境保护局|粮食和物资储备局|教育体育局|" +
  33. "体育局|教育局|招商局|农业局|农机局|水务局|林业局|财政局|审计局|统计局|商务局)$")
  34. var reglen *regexp.Regexp = regexp.MustCompile("^(.{1,5}|.{40,})$")
  35. var strReg *regexp.Regexp = regexp.MustCompile("^(.{0,3}工程队|.{0,3}总公司|_+|.{0,2}设备安装公司|.{0,2}装[饰修潢]公司|.{0,2}开发公司|.{0,4}有限公司|.{0,4}有限责任公司|.{0,4}设计院|建筑设计研?究?院|省文物考古研究所|经济开发区|省.*|镇人民政府|.{0,2}服务公司|" +
  36. ".{0,2}工程质量监督站|.{0,3}经[营销]部|.{0,3}事务所|.{0,4}工程公司|.{0,4}责任公司|.*勘测|.{0,4}研究院|.*能源建|.{0,2}安装工程|.*[市省]{1}|.{0,4}中心|.*区.?|" +
  37. ".{0,3}税务局|.{0,3}财政局|.{0,3}商行|.{0,2}公安处|.{0,2}测绘院|.{0,3}开发|.{0,2}建设局|.{0,2}经销部|.{0,3}委员会|.{0,2}分公司|.{0,2}管理站|.{0,2}事务管理局|" +
  38. ".*资料|.{0,2}办公用品.{1,2}|.*唯亭|.*设备|.+安装|.{0,2}技术服务|市.+[台院社局司]|城?区.+[府局室院]|县.+[院台局]|.{0,2}发展公司|经济技术开发|" +
  39. "发展和改革局|贵州有色地质|铝塑门窗加工|生产力促进中心|特殊普通合伙|工业集团公司|人民调解协会|人民政府办公厅|机电设备公司|房地产开发有限公司|.{0,4}商店|中等专业学校|" +
  40. "农村信用联社|.{0,4}经营部|.{0,4}销售部|驾驶员培训学校|.{2}县.{2}镇|保安服务总公司|住房和城乡建设局|地产评估事务所|生产资料门市部|×+|.{0,3}[0-9]{15}|.*[0-9]+|.*路|.*无字号名称.*|.*车|.*[,,]{1}.*|.*个体工商户|.*运输户)$")
  41. //非中文开头...
  42. var unstart_strReg *regexp.Regexp = regexp.MustCompile("^([\u4e00-\u9fa5])")
  43. //开头
  44. var start_strReg *regexp.Regexp = regexp.MustCompile("^([a-zA-Z]{1,2}[\u4e00-\u9fa5]{6,}|省|市|县|区|业绩|资格|中标|项目|预算单位)")
  45. //结尾
  46. var end_strReg *regexp.Regexp = regexp.MustCompile("(\\.|\\.\\.|餐馆|店|腻子|肉庄|画社|美发屋|发廊|网吧|网咖|零售点|新街|包子铺|奶茶铺|(株)|先生|女士|小姐|" +
  47. "资格|业绩|中标|项目|预算单位|摊位号|号|厅|室|部|点|馆|场|厂|床|所|处|站|行|中心|合作社|ATMS|" +
  48. "吧|楼|摊|摊位|廊|茶社|坊|圃|汤锅|园|民宿|美容院|房|排挡|府|庄|栈|队|批发|苑|养殖户|棋牌|农家乐|货运|" +
  49. "城|社|基地|会|服务|娱乐|种植|百货|汽修|农家菜|亭|小吃|快餐|粮库|卫生院|书画院|面|门窗|鸡排|屋|橱|堂|肉铺|服务|服饰|/*)$")
  50. //包含
  51. var con_strReg *regexp.Regexp = regexp.MustCompile("(\\?|?|%|代码标识|删除|错误|吊销|注销|发起人|待清理|&#|护照号|身份证号|" +
  52. "法人|&nbsp|国家拨入|借款|积累资金|单位自有|认股人|--|、|&|`|美元|[\u4e00-\u9fa5]{2,6}·[\u4e00-\u9fa5]{2,6})|" +
  53. "[a-zA-Z]{5,}")
  54. var uncon_strReg *regexp.Regexp = regexp.MustCompile("(园|政府|集团|公司|有限|合伙|企|院|学|局|处)")
  55. var YamlConfig YAMLConfig
  56. var MixDataMgo *util.MongodbSim
  57. var Filter *sensitive.Filter
  58. var es_type, es_index string
  59. var Client_Es *elastic.Client
  60. var data_mgo *MongodbSim
  61. func init() {
  62. yamlFile, err := ioutil.ReadFile(YAMLFILE)
  63. if err != nil {
  64. log.Fatalln("load conf error")
  65. }
  66. err = yaml.Unmarshal(yamlFile, &YamlConfig)
  67. if err != nil {
  68. fmt.Println(err.Error())
  69. }
  70. log.Printf("%#v", YamlConfig)
  71. MixDataMgo = &util.MongodbSim{
  72. MongodbAddr: YamlConfig.MixdataMgoAddr,
  73. Size: YamlConfig.MongodbPoolSize,
  74. DbName: YamlConfig.DbName,
  75. UserName: YamlConfig.UserName,
  76. PassWord: YamlConfig.PassWord,
  77. }
  78. MixDataMgo.InitPool()
  79. data_mgo = &MongodbSim{
  80. MongodbAddr: "192.168.3.207:27092",
  81. DbName: "zhengkun",
  82. Size: 10,
  83. UserName: "",
  84. Password: "",
  85. }
  86. data_mgo.InitPool()
  87. Client_Es, _ = elastic.NewClient(http.DefaultClient, "http://192.168.3.11:9800")
  88. es_type, es_index = "azktest", "azktest"
  89. reg.MustRegister(grpcMetrics, customizedCounterMetric)
  90. }
  91. var (
  92. // Create a metrics registry.
  93. reg = prometheus.NewRegistry()
  94. // Create some standard server metrics.
  95. grpcMetrics = grpc_prometheus.NewServerMetrics()
  96. customizedCounterMetric = prometheus.NewCounterVec(prometheus.CounterOpts{
  97. Name: "demo_server_search_method_handle_count",
  98. Help: "Total number of RPCs handled on the server.",
  99. }, []string{"name"})
  100. )
  101. func main() {
  102. //淡赌跑断
  103. if YamlConfig.IsAddTask == 0 {
  104. initSensitiveWordsData() //初始化敏感词数据
  105. } else {
  106. go addTaskSensitiveWordsData() //增量-改配置文件
  107. }
  108. lis, err := net.Listen("tcp", YamlConfig.Port)
  109. if err != nil {
  110. log.Fatalf("failed to listen: %v", err)
  111. }
  112. defer lis.Close()
  113. // Create a HTTP server for prometheus.
  114. httpServer := &http.Server{
  115. Handler: promhttp.HandlerFor(reg, promhttp.HandlerOpts{}),
  116. Addr: fmt.Sprintf("0.0.0.0:%d",
  117. 2092),
  118. }
  119. grpcServer := grpc.NewServer(
  120. //grpc.StreamInterceptor(grpcMetrics.StreamServerInterceptor()),
  121. grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()))
  122. proto_grpc.RegisterSensitiveWordsServer(grpcServer, &server{})
  123. // Initialize all metrics.
  124. grpcMetrics.InitializeMetrics(grpcServer)
  125. // Start your http server for prometheus.
  126. go func() {
  127. if err := httpServer.ListenAndServe(); err != nil {
  128. log.Fatal("Unable to start a http server.")
  129. }
  130. }()
  131. log.Println("server start:", YamlConfig.Port)
  132. if err := grpcServer.Serve(lis); err != nil {
  133. log.Fatalf("failed to serve: %v", err)
  134. }
  135. }
  136. //协议方法---等
  137. type server struct {
  138. proto_grpc.SensitiveWordsServer
  139. }
  140. func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) {
  141. customizedCounterMetric.WithLabelValues("search_server").Inc()
  142. text := in.GetText()
  143. //log.Println(text)
  144. findAll := Filter.FindAll(text)
  145. rada := strings.Join(findAll, ",")
  146. return &proto_grpc.ResultSensitiveWords{SensitiveWords: rada}, nil
  147. }
  148. func (s *server) Registration(ctx context.Context, in *proto_grpc.NumberOfRegistrations) (*proto_grpc.RequestComplete, error) {
  149. customizedCounterMetric.WithLabelValues("Registration").Inc()
  150. return &proto_grpc.RequestComplete{Text: "ok"}, nil
  151. }
  152. type YAMLConfig struct {
  153. MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
  154. UserName string `yaml:"userName"`
  155. PassWord string `yaml:"passWord"`
  156. DbName string `yaml:"dbName"`
  157. MongodbPoolSize int `yaml:"mongodbPoolSize"`
  158. TaskGteId string `yaml:"taskGteId"`
  159. TaskLteId string `yaml:"taskLteId"`
  160. IsAddTask int `yaml:"isAddTask"`
  161. Port string `yaml:"port"`
  162. }