|
|
@@ -1,75 +1,33 @@
|
|
1
|
1
|
package main
|
|
2
|
2
|
|
|
3
|
3
|
import (
|
|
4
|
|
- "database/sql"
|
|
5
|
4
|
"fmt"
|
|
6
|
5
|
"log"
|
|
7
|
6
|
"net/http"
|
|
8
|
7
|
"strings"
|
|
9
|
8
|
"time"
|
|
10
|
9
|
|
|
|
10
|
+ "git.x2erp.com/qdy/go-base/config"
|
|
11
|
11
|
"git.x2erp.com/qdy/go-base/types"
|
|
12
|
12
|
"git.x2erp.com/qdy/go-db/factory"
|
|
13
|
13
|
"git.x2erp.com/qdy/go-service-agent/auth"
|
|
14
|
|
- "git.x2erp.com/qdy/go-service-agent/routes"
|
|
|
14
|
+ "git.x2erp.com/qdy/go-service-agent/functions"
|
|
15
|
15
|
"github.com/gin-gonic/gin"
|
|
16
|
16
|
)
|
|
17
|
17
|
|
|
18
|
|
-// 单例实例
|
|
19
|
|
-var (
|
|
20
|
|
- dbFactory *factory.DBFactory
|
|
21
|
|
- db *sql.DB
|
|
22
|
|
-)
|
|
23
|
|
-
|
|
24
|
|
-// initDB 初始化数据库连接(单例)
|
|
25
|
|
-func initDB() error {
|
|
26
|
|
- var err error
|
|
27
|
|
-
|
|
28
|
|
- // 创建数据库工厂(单例)
|
|
29
|
|
- if dbFactory == nil {
|
|
30
|
|
- dbFactory, err = factory.NewDBFactory()
|
|
31
|
|
- if err != nil {
|
|
32
|
|
- return fmt.Errorf("failed to create DB factory: %v", err)
|
|
33
|
|
- }
|
|
34
|
|
- }
|
|
35
|
|
-
|
|
36
|
|
- // 创建数据库连接(单例)
|
|
37
|
|
- if db == nil {
|
|
38
|
|
- db, err = dbFactory.CreateDB()
|
|
39
|
|
- if err != nil {
|
|
40
|
|
- return fmt.Errorf("failed to create database connection: %v", err)
|
|
41
|
|
- }
|
|
42
|
|
- }
|
|
43
|
|
-
|
|
44
|
|
- // 测试连接
|
|
45
|
|
- config := dbFactory.GetConfig()
|
|
46
|
|
- if err := factory.TestConnection(db, config.GetDatabase().Type); err != nil {
|
|
47
|
|
- return fmt.Errorf("database connection test failed: %v", err)
|
|
48
|
|
- }
|
|
49
|
|
-
|
|
50
|
|
- return nil
|
|
51
|
|
-}
|
|
52
|
|
-
|
|
53
|
18
|
func main() {
|
|
54
|
|
- // 1. 初始化数据库(单例)
|
|
55
|
|
- if err := initDB(); err != nil {
|
|
56
|
|
- log.Fatalf("Database initialization failed: %v", err)
|
|
57
|
|
- }
|
|
58
|
19
|
|
|
59
|
|
- // 2. 显示基础信息
|
|
60
|
|
- drivers := dbFactory.GetAvailableDrivers()
|
|
61
|
|
- config := dbFactory.GetConfig()
|
|
|
20
|
+ cfg := config.GetConfig()
|
|
62
|
21
|
|
|
63
|
|
- log.Printf("Service Port: %d", config.GetService().Port)
|
|
64
|
|
- log.Printf("Service IdleTimeout: %d", config.GetService().IdleTimeout)
|
|
65
|
|
- log.Printf("Service ReadTimeout: %d", config.GetService().ReadTimeout)
|
|
66
|
|
- log.Printf("Service WriteTimeout: %d", config.GetService().WriteTimeout)
|
|
67
|
|
- log.Printf("Service TrustedProxies: %s", config.GetService().TrustedProxies)
|
|
|
22
|
+ log.Printf("Service Port: %d", cfg.GetService().Port)
|
|
|
23
|
+ log.Printf("Service IdleTimeout: %d", cfg.GetService().IdleTimeout)
|
|
|
24
|
+ log.Printf("Service ReadTimeout: %d", cfg.GetService().ReadTimeout)
|
|
|
25
|
+ log.Printf("Service WriteTimeout: %d", cfg.GetService().WriteTimeout)
|
|
|
26
|
+ log.Printf("Service TrustedProxies: %s", cfg.GetService().TrustedProxies)
|
|
68
|
27
|
|
|
69
|
|
- log.Printf("Available database drivers: %v", drivers)
|
|
70
|
|
- log.Printf("Using database type: %s", config.GetDatabase().Type)
|
|
71
|
|
- log.Printf("Database host: %s:%d", config.GetDatabase().Host, config.GetDatabase().Port)
|
|
72
|
|
- log.Printf("Database name: %s", config.GetDatabase().Database)
|
|
|
28
|
+ log.Printf("Using database type: %s", cfg.GetDatabase().Type)
|
|
|
29
|
+ log.Printf("Database host: %s:%d", cfg.GetDatabase().Host, cfg.GetDatabase().Port)
|
|
|
30
|
+ log.Printf("Database name: %s", cfg.GetDatabase().Database)
|
|
73
|
31
|
log.Println("Database connection test passed!")
|
|
74
|
32
|
|
|
75
|
33
|
// 3. 启动Gin HTTP服务
|
|
|
@@ -80,14 +38,19 @@ func main() {
|
|
80
|
38
|
func startHTTPServer() {
|
|
81
|
39
|
//建立路由
|
|
82
|
40
|
router := gin.Default()
|
|
83
|
|
- config := dbFactory.GetConfig()
|
|
84
|
|
- serviceConfig := config.GetService()
|
|
|
41
|
+ cfg := config.GetConfig()
|
|
|
42
|
+ serviceConfig := cfg.GetService()
|
|
|
43
|
+
|
|
|
44
|
+ dbFactory, err := factory.GetDBFactory()
|
|
|
45
|
+ if err != nil {
|
|
|
46
|
+ log.Fatalf("Failed to create DB factory: %v", err)
|
|
|
47
|
+ }
|
|
85
|
48
|
|
|
86
|
49
|
// 核心路由
|
|
87
|
|
- router.GET("/api/health", routes.HealthHandler(db, config.GetDatabase().Type))
|
|
88
|
|
- router.POST("/api/query", auth.AuthMiddleware(), withQueryRequest(routes.QueryHandler(db)))
|
|
89
|
|
- router.POST("/api/query/csv", auth.AuthMiddleware(), withQueryRequest(routes.QueryHandlerCSV(db)))
|
|
90
|
|
- router.GET("/api/info", routes.InfoHandler(dbFactory))
|
|
|
50
|
+ router.GET("/api/health", functions.HealthHandler(dbFactory, cfg.GetDatabase().Type))
|
|
|
51
|
+ router.POST("/api/query", auth.AuthMiddleware(), withQueryRequest(functions.QueryToJSON(dbFactory)))
|
|
|
52
|
+ router.POST("/api/query/csv", auth.AuthMiddleware(), withQueryRequest(functions.QueryToCSV(dbFactory)))
|
|
|
53
|
+ router.GET("/api/info", functions.InfoHandler(dbFactory))
|
|
91
|
54
|
|
|
92
|
55
|
// 日志输出配置信息
|
|
93
|
56
|
log.Printf("Service Port: %d", serviceConfig.Port)
|