main.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  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.v2"
  9. "io/ioutil"
  10. "log"
  11. "math/big"
  12. "net"
  13. "net/http"
  14. "sensitiveWords.udp/proto_grpc"
  15. "sensitiveWords.udp/util"
  16. "strconv"
  17. "strings"
  18. "gopkg.in/olivere/elastic.v1"
  19. )
  20. const (
  21. YAMLFILE = "./server.yaml"
  22. )
  23. var YamlConfig YAMLConfig
  24. var MixDataMgo *util.MongodbSim
  25. var Filter *sensitive.Filter
  26. var es_type, es_index string
  27. var Client_Es *elastic.Client
  28. func init() {
  29. yamlFile, err := ioutil.ReadFile(YAMLFILE)
  30. if err != nil {
  31. log.Fatalln("load conf error")
  32. }
  33. err = yaml.Unmarshal(yamlFile, &YamlConfig)
  34. if err != nil {
  35. fmt.Println(err.Error())
  36. }
  37. log.Printf("%#v", YamlConfig)
  38. MixDataMgo = &util.MongodbSim{
  39. MongodbAddr: YamlConfig.MixdataMgoAddr,
  40. Size: YamlConfig.MongodbPoolSize,
  41. DbName: YamlConfig.DbName,
  42. UserName: YamlConfig.UserName,
  43. PassWord: YamlConfig.PassWord,
  44. }
  45. MixDataMgo.InitPool()
  46. Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://192.168.3.11:9800")
  47. es_type, es_index = "azktest","azktest"
  48. }
  49. func main() {
  50. //淡赌跑断
  51. if YamlConfig.IsAddTask==0{
  52. initSensitiveWordsData() //初始化敏感词数据
  53. }else {
  54. go addTaskSensitiveWordsData() //增量
  55. }
  56. lis, err := net.Listen("tcp", YamlConfig.Port)
  57. if err != nil {
  58. log.Fatalf("failed to listen: %v", err)
  59. }
  60. s := grpc.NewServer()
  61. proto_grpc.RegisterSensitiveWordsServer(s, &server{})
  62. log.Println("server start:", YamlConfig.Port)
  63. if err := s.Serve(lis); err != nil {
  64. log.Fatalf("failed to serve: %v", err)
  65. }
  66. }
  67. //协议方法---等
  68. type server struct {
  69. proto_grpc.SensitiveWordsServer
  70. }
  71. func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) {
  72. text := in.GetText()
  73. log.Println(text)
  74. findAll := Filter.FindAll(text)
  75. return &proto_grpc.ResultSensitiveWords{SensitiveWords: strings.Join(findAll, ",")}, nil
  76. }
  77. type YAMLConfig struct {
  78. MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
  79. UserName string `yaml:"userName"`
  80. PassWord string `yaml:"passWord"`
  81. DbName string `yaml:"dbName"`
  82. MongodbPoolSize int `yaml:"mongodbPoolSize"`
  83. TaskGteId string `yaml:"taskGteId"`
  84. TaskLteId string `yaml:"taskLteId"`
  85. IsAddTask int `yaml:"isAddTask"`
  86. Port string `yaml:"port"`
  87. }
  88. //其他方法
  89. func StringTOBsonId(id string) primitive.ObjectID {
  90. objectId, _ := primitive.ObjectIDFromHex(id)
  91. return objectId
  92. }
  93. func BsonTOStringId(id interface{}) string {
  94. return id.(primitive.ObjectID).Hex()
  95. }
  96. func toMegaBytes(bytes uint64) float64 {
  97. return float64(bytes) / 1024 / 1024
  98. }
  99. func IntAll(num interface{}) int {
  100. return IntAllDef(num, 0)
  101. }
  102. func Int64All(num interface{}) int64 {
  103. if i, ok := num.(int64); ok {
  104. return int64(i)
  105. } else if i0, ok0 := num.(int32); ok0 {
  106. return int64(i0)
  107. } else if i1, ok1 := num.(float64); ok1 {
  108. return int64(i1)
  109. } else if i2, ok2 := num.(int); ok2 {
  110. return int64(i2)
  111. } else if i3, ok3 := num.(float32); ok3 {
  112. return int64(i3)
  113. } else if i4, ok4 := num.(string); ok4 {
  114. i64, _ := strconv.ParseInt(i4, 10, 64)
  115. //in, _ := strconv.Atoi(i4)
  116. return i64
  117. } else if i5, ok5 := num.(int16); ok5 {
  118. return int64(i5)
  119. } else if i6, ok6 := num.(int8); ok6 {
  120. return int64(i6)
  121. } else if i7, ok7 := num.(*big.Int); ok7 {
  122. in, _ := strconv.ParseInt(fmt.Sprint(i7), 10, 64)
  123. return int64(in)
  124. } else if i8, ok8 := num.(*big.Float); ok8 {
  125. in, _ := strconv.ParseInt(fmt.Sprint(i8), 10, 64)
  126. return int64(in)
  127. } else {
  128. return 0
  129. }
  130. }
  131. func Float64All(num interface{}) float64 {
  132. if i, ok := num.(float64); ok {
  133. return float64(i)
  134. } else if i0, ok0 := num.(int32); ok0 {
  135. return float64(i0)
  136. } else if i1, ok1 := num.(int64); ok1 {
  137. return float64(i1)
  138. } else if i2, ok2 := num.(int); ok2 {
  139. return float64(i2)
  140. } else if i3, ok3 := num.(float32); ok3 {
  141. return float64(i3)
  142. } else if i4, ok4 := num.(string); ok4 {
  143. in, _ := strconv.ParseFloat(i4, 64)
  144. return in
  145. } else if i5, ok5 := num.(int16); ok5 {
  146. return float64(i5)
  147. } else if i6, ok6 := num.(int8); ok6 {
  148. return float64(i6)
  149. } else if i6, ok6 := num.(uint); ok6 {
  150. return float64(i6)
  151. } else if i6, ok6 := num.(uint8); ok6 {
  152. return float64(i6)
  153. } else if i6, ok6 := num.(uint16); ok6 {
  154. return float64(i6)
  155. } else if i6, ok6 := num.(uint32); ok6 {
  156. return float64(i6)
  157. } else if i6, ok6 := num.(uint64); ok6 {
  158. return float64(i6)
  159. } else if i7, ok7 := num.(*big.Float); ok7 {
  160. in, _ := strconv.ParseFloat(fmt.Sprint(i7), 64)
  161. return float64(in)
  162. } else if i8, ok8 := num.(*big.Int); ok8 {
  163. in, _ := strconv.ParseFloat(fmt.Sprint(i8), 64)
  164. return float64(in)
  165. } else {
  166. return 0
  167. }
  168. }
  169. func IntAllDef(num interface{}, defaultNum int) int {
  170. if i, ok := num.(int); ok {
  171. return int(i)
  172. } else if i0, ok0 := num.(int32); ok0 {
  173. return int(i0)
  174. } else if i1, ok1 := num.(float64); ok1 {
  175. return int(i1)
  176. } else if i2, ok2 := num.(int64); ok2 {
  177. return int(i2)
  178. } else if i3, ok3 := num.(float32); ok3 {
  179. return int(i3)
  180. } else if i4, ok4 := num.(string); ok4 {
  181. in, _ := strconv.Atoi(i4)
  182. return int(in)
  183. } else if i5, ok5 := num.(int16); ok5 {
  184. return int(i5)
  185. } else if i6, ok6 := num.(int8); ok6 {
  186. return int(i6)
  187. } else if i7, ok7 := num.(*big.Int); ok7 {
  188. in, _ := strconv.Atoi(fmt.Sprint(i7))
  189. return int(in)
  190. } else if i8, ok8 := num.(*big.Float); ok8 {
  191. in, _ := strconv.Atoi(fmt.Sprint(i8))
  192. return int(in)
  193. } else {
  194. return defaultNum
  195. }
  196. }
  197. func ObjToString(old interface{}) string {
  198. if nil == old {
  199. return ""
  200. } else {
  201. r, _ := old.(string)
  202. return r
  203. }
  204. }
  205. func ObjToStringDef(old interface{}, defaultstr string) string {
  206. if nil == old {
  207. return defaultstr
  208. } else {
  209. r, _ := old.(string)
  210. if r == "" {
  211. return defaultstr
  212. }
  213. return r
  214. }
  215. }
  216. //对象数组转成string数组
  217. func ObjArrToStringArr(old []interface{}) []string {
  218. if old != nil {
  219. new := make([]string, len(old))
  220. for i, v := range old {
  221. new[i] = v.(string)
  222. }
  223. return new
  224. } else {
  225. return nil
  226. }
  227. }
  228. //对象数组转成map数组
  229. func ObjArrToMapArr(old []interface{}) []map[string]interface{} {
  230. if old != nil {
  231. new := make([]map[string]interface{}, len(old))
  232. for i, v := range old {
  233. new[i] = v.(map[string]interface{})
  234. }
  235. return new
  236. } else {
  237. return nil
  238. }
  239. }
  240. //map数组转成对象数组
  241. func MapArrToObjArr(old []map[string]interface{}) []interface{} {
  242. if old != nil {
  243. new := make([]interface{}, len(old))
  244. for i, v := range old {
  245. new[i] = v
  246. }
  247. return new
  248. } else {
  249. return nil
  250. }
  251. }