cmd.go 2.88 KB
Newer Older
qiuqunfeng's avatar
qiuqunfeng committed
1 2 3
package app

import (
qiuqunfeng's avatar
fix  
qiuqunfeng committed
4
	"encoding/base64"
qiuqunfeng's avatar
config  
qiuqunfeng committed
5
	"fmt"
qiuqunfeng's avatar
qiuqunfeng committed
6
	"os"
7
	"time"
qiuqunfeng's avatar
qiuqunfeng committed
8

qiuqunfeng's avatar
qiuqunfeng committed
9
	"github.com/rs/zerolog/log"
qiuqunfeng's avatar
qiuqunfeng committed
10 11
	"github.com/spf13/cobra"
	"gitlab.com/tensorsecurity-rd/waf-console/api"
12
	"gitlab.com/tensorsecurity-rd/waf-console/cmd/config"
13 14
	"gitlab.com/tensorsecurity-rd/waf-console/internal/service"
	es "gitlab.com/tensorsecurity-rd/waf-console/internal/store"
qiuqunfeng's avatar
qiuqunfeng committed
15
	"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
qiuqunfeng's avatar
config  
qiuqunfeng committed
16 17
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
qiuqunfeng's avatar
qiuqunfeng committed
18 19 20 21 22 23 24 25
)

func NewRootCommand() *cobra.Command {
	return &cobra.Command{
		Use:   "waf-console",
		Short: "Start waf-console service.",
		Args:  cobra.ExactArgs(0),
		RunE: func(cmd *cobra.Command, args []string) error {
26
			config := config.LoadConfig()
qiuqunfeng's avatar
qiuqunfeng committed
27
			debugMode := os.Getenv("DEBUG_MODE")
qiuqunfeng's avatar
qiuqunfeng committed
28
			log.Info().Msgf("DEBUG_MODE: %s", debugMode)
qiuqunfeng's avatar
qiuqunfeng committed
29
			if debugMode == "true" {
qiuqunfeng's avatar
config  
qiuqunfeng committed
30 31 32 33 34 35 36 37
				config.Debug = true
				// config.Conf.Debug = true
			}
			dbConfig := config.DBConfig
			var db *gorm.DB
			var err error
			if dbConfig != nil {
				dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Database)
qiuqunfeng's avatar
qiuqunfeng committed
38
				log.Info().Msgf("dns: %s", dns)
qiuqunfeng's avatar
config  
qiuqunfeng committed
39 40 41 42 43 44
				db, err = gorm.Open(mysql.Open(dns), &gorm.Config{})
				if err != nil {
					panic(err)
				}
			} else {
				panic("dbConfig is nil")
qiuqunfeng's avatar
qiuqunfeng committed
45 46
			}

qiuqunfeng's avatar
qiuqunfeng committed
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
			clusterClientManager := utils.NewClusterClientManager()
			for _, regionConfig := range config.RegionConfigs {
				var caData []byte
				var clientCertData []byte
				var clientKeyData []byte
				if regionConfig.CAData != "" {
					caData, err = base64.StdEncoding.DecodeString(regionConfig.CAData)
					if err != nil {
						panic(err)
					}
				}
				if regionConfig.ClientCertData != "" {
					clientCertData, err = base64.StdEncoding.DecodeString(regionConfig.ClientCertData)
					if err != nil {
						panic(err)
					}
				}
				if regionConfig.ClientKeyData != "" {
					clientKeyData, err = base64.StdEncoding.DecodeString(regionConfig.ClientKeyData)
					if err != nil {
						panic(err)
					}
				}
70 71
				kubeClient := utils.NewKubeClient(regionConfig.ApiServer, caData, clientCertData, clientKeyData, regionConfig.Insecure)
				clusterClientManager.AddClient(regionConfig.RegionCode, kubeClient)
qiuqunfeng's avatar
fix  
qiuqunfeng committed
72
			}
qiuqunfeng's avatar
fix  
qiuqunfeng committed
73

74
			esClient, err := es.CreateEsClientFromConfig(config.ElasticsearchConfig)
75 76 77
			if err != nil {
				panic(err)
			}
78 79 80 81 82
			regionUrlMap := make(map[string]string)
			for _, regionConfig := range config.RegionConfigs {
				regionUrlMap[regionConfig.RegionCode] = regionConfig.ApiServer
			}
			e := api.SetRouters(db, clusterClientManager, config.GatewayUrl, config.SSOUrl, esClient, config.Debug, regionUrlMap)
83 84 85 86 87 88
			esStore := es.NewESStore(es.Config{
				ESBatchSize:   100,
				ESConcurrency: 10,
				ESTimeout:     10 * time.Second,
			}, esClient)
			esStore.Init()
89
			logConsumerService := service.NewLogConsumerService(db, esStore, config.KafkaConfig)
90
			go logConsumerService.Consume()
qiuqunfeng's avatar
qiuqunfeng committed
91 92 93 94
			return e.Run(":8080")
		},
	}
}