123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- package main
- import (
- "context"
- "fmt"
- "github.com/grpc-ecosystem/go-grpc-prometheus"
- "github.com/importcjj/sensitive"
- "github.com/prometheus/client_golang/prometheus"
- "github.com/prometheus/client_golang/prometheus/promhttp"
- "google.golang.org/grpc"
- "google.golang.org/grpc/credentials"
- "gopkg.in/olivere/elastic.v1"
- "gopkg.in/yaml.v3"
- "io/ioutil"
- "log"
- "net/http"
- "sensitiveWords.udp/proto_grpc"
- "sensitiveWords.udp/util"
- "strings"
- )
- /*
- 2021/04/28 14:31:35.755969 data.go:248: 第 0 段 6082579e19a23f9d3f39eff2 60825b1d9ce9fc2e6c8a5b92
- 2021/04/28 14:31:35.756001 data.go:248: 第 1 段 60825b1d9ce9fc2e6c8a5b93 60825e5d9ce9fc2e6ccea709
- 2021/04/28 14:31:35.756008 data.go:248: 第 2 段 60825e5d9ce9fc2e6ccea70a 608261cd9ce9fc2e6c13382e
- 2021/04/28 14:31:35.756014 data.go:248: 第 3 段 608261cd9ce9fc2e6c13382f 6082658c9ce9fc2e6c574971
- 2021/04/28 14:31:35.756021 data.go:248: 第 4 段 6082658c9ce9fc2e6c574972 608269619ce9fc2e6c9c668c
- 2021/04/28 14:31:35.756029 data.go:248: 第 5 段 608269619ce9fc2e6c9c668d 60826d3e9ce9fc2e6ce1c9d8
- 2021/04/28 14:31:35.756039 data.go:248: 第 6 段 60826d3e9ce9fc2e6ce1c9d9 608271559ce9fc2e6c26aca5
- 2021/04/28 14:31:35.756046 data.go:248: 第 7 段 608271559ce9fc2e6c26aca6 608275929ce9fc2e6c6ca1ec
- 2021/04/28 14:31:35.756053 data.go:248: 第 8 段 608275929ce9fc2e6c6ca1ed 608279e19ce9fc2e6cb2ddb8
- 2021/04/28 14:31:35.756060 data.go:248: 第 9 段 608279e19ce9fc2e6cb2ddb9 60827e359ce9fc2e6cf96417
- 2021/04/28 14:31:35.756069 data.go:248: 第 10 段 60827e359ce9fc2e6cf96419 608282299ce9fc2e6c4034ee
- 2021/04/28 14:31:35.756077 data.go:248: 第 11 段 608282299ce9fc2e6c4034ef 608285b09ce9fc2e6c868546
- 2021/04/28 14:31:35.756087 data.go:248: 第 12 段 608285b09ce9fc2e6c868547 608289199ce9fc2e6ccbc72e
- 2021/04/28 14:31:35.756095 data.go:248: 第 13 段 608289199ce9fc2e6ccbc72f 608293f49ce9fc2e6cfdbf7b
- 2021/04/28 14:31:35.756103 data.go:248: 第 14 段 608293f49ce9fc2e6cfdbfa7
- */
- const (
- YAMLFILE = "./server.yaml"
- )
- var YamlConfig YAMLConfig
- var Filter *sensitive.Filter
- var es_type, es_index string
- var Client_Es *elastic.Client
- var MixDataMgo *util.MongodbSim
- var (
- // Create a metrics registry.
- reg = prometheus.NewRegistry()
- // Create some standard server metrics.
- grpcMetrics = grpc_prometheus.NewServerMetrics()
- customizedCounterMetric = prometheus.NewCounterVec(prometheus.CounterOpts{
- Name: "demo_server_search_method_handle_count",
- Help: "Total number of RPCs handled on the server.",
- }, []string{"name"})
- )
- func init() {
- yamlFile, err := ioutil.ReadFile(YAMLFILE)
- if err != nil {
- log.Fatalln("load conf error")
- }
- err = yaml.Unmarshal(yamlFile, &YamlConfig)
- if err != nil {
- fmt.Println(err.Error())
- }
- log.Printf("%#v", YamlConfig)
- MixDataMgo = &util.MongodbSim{
- MongodbAddr: YamlConfig.MixdataMgoAddr,
- Size: YamlConfig.MongodbPoolSize,
- DbName: YamlConfig.DbName,
- UserName: YamlConfig.UserName,
- PassWord: YamlConfig.PassWord,
- }
- MixDataMgo.InitPool()
- //Client_Es ,_= elastic.NewClient(http.DefaultClient, "http://172.17.145.170:9800")
- es_type, es_index = "unique_qy","unique_qy"
- reg.MustRegister(grpcMetrics, customizedCounterMetric)
- }
- func main() {
- if YamlConfig.IsAddTask == 0 {
- initSensitiveWordsData() //初始化敏感词数据
- } else {
- go addTaskSensitiveWordsData() //增量-改配置文件
- }
- mux := http.NewServeMux()
- mux.Handle("/", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
- cred, err := credentials.NewServerTLSFromFile(YamlConfig.CertFile, YamlConfig.KeyFile)
- if err != nil {
- log.Fatalln(err)
- }
- grpcServer := grpc.NewServer(
- grpc.Creds(cred),
- grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()),
- )
- proto_grpc.RegisterSensitiveWordsServer(grpcServer, &server{})
- grpcMetrics.InitializeMetrics(grpcServer)
- log.Println("Listen ",YamlConfig.Port)
- if err = http.ListenAndServeTLS(
- fmt.Sprintf("%s", YamlConfig.Port),
- YamlConfig.CertFile,
- YamlConfig.KeyFile,
- http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- if r.ProtoMajor == 2 && strings.HasPrefix(
- r.Header.Get("Content-Type"), "application/grpc") {
- grpcServer.ServeHTTP(w, r)
- } else {
- mux.ServeHTTP(w, r)
- }
- return
- }),
- );err != nil{
- log.Fatalln(err)
- }
- }
- //协议方法---等
- type server struct {
- proto_grpc.SensitiveWordsServer
- }
- func (s *server) Search(ctx context.Context, in *proto_grpc.Request) (*proto_grpc.ResultSensitiveWords, error) {
- customizedCounterMetric.WithLabelValues("search_server").Inc()
- text := in.GetText()
- //log.Println(text)
- findAll := Filter.FindAll(text)
- rada := strings.Join(findAll, ",")
- return &proto_grpc.ResultSensitiveWords{SensitiveWords: rada}, nil
- }
- type YAMLConfig struct {
- MixdataMgoAddr string `yaml:"mixdataMgoAddr"`
- UserName string `yaml:"userName"`
- PassWord string `yaml:"passWord"`
- DbName string `yaml:"dbName"`
- MongodbPoolSize int `yaml:"mongodbPoolSize"`
- TaskGteId string `yaml:"taskGteId"`
- TaskLteId string `yaml:"taskLteId"`
- IsAddTask int `yaml:"isAddTask"`
- Port string `yaml:"port"`
- CertFile string `yaml:"certFile"`
- KeyFile string `yaml:"keyFile"`
- }
|