|
@@ -65,6 +65,9 @@ func runServe(args []string) {
|
|
|
dbPath := fs.String("db", defaultDBPath, "数据库路径")
|
|
dbPath := fs.String("db", defaultDBPath, "数据库路径")
|
|
|
logFile := fs.String("log-file", "./logs", "日志文件路径(默认 ./logs/monitor.log)")
|
|
logFile := fs.String("log-file", "./logs", "日志文件路径(默认 ./logs/monitor.log)")
|
|
|
logLevel := fs.String("log-level", "info", "日志级别 (debug/info/warn/error)")
|
|
logLevel := fs.String("log-level", "info", "日志级别 (debug/info/warn/error)")
|
|
|
|
|
+ tls := fs.Bool("tls", false, "启用 HTTPS (使用自签名证书)")
|
|
|
|
|
+ tlsCert := fs.String("tls-cert", "./data/tls/cert.pem", "TLS 证书文件路径")
|
|
|
|
|
+ tlsKey := fs.String("tls-key", "./data/tls/key.pem", "TLS 私钥文件路径")
|
|
|
fs.Parse(args)
|
|
fs.Parse(args)
|
|
|
|
|
|
|
|
logger.SetLevel(logger.ParseLevel(*logLevel))
|
|
logger.SetLevel(logger.ParseLevel(*logLevel))
|
|
@@ -84,9 +87,20 @@ func runServe(args []string) {
|
|
|
logger.Info("数据库已连接: %s", *dbPath)
|
|
logger.Info("数据库已连接: %s", *dbPath)
|
|
|
|
|
|
|
|
server := api.New(db, *addr)
|
|
server := api.New(db, *addr)
|
|
|
- logger.Info("API 服务已启动: %s", *addr)
|
|
|
|
|
|
|
|
|
|
- fmt.Printf("API 服务已启动: %s\n", *addr)
|
|
|
|
|
|
|
+ if *tls {
|
|
|
|
|
+ if err := api.EnsureSelfSignedCert(*tlsCert, *tlsKey); err != nil {
|
|
|
|
|
+ logger.Error("生成自签名证书失败: %v", err)
|
|
|
|
|
+ fmt.Printf("生成自签名证书失败: %v\n", err)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ server.EnableTLS(*tlsCert, *tlsKey)
|
|
|
|
|
+ logger.Info("HTTPS 已启用")
|
|
|
|
|
+ fmt.Println("HTTPS 已启用 (自签名证书)")
|
|
|
|
|
+ } else {
|
|
|
|
|
+ fmt.Printf("API 服务已启动: %s\n", *addr)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
fmt.Println("接口文档:")
|
|
fmt.Println("接口文档:")
|
|
|
fmt.Println(" GET /api/health - 健康检查")
|
|
fmt.Println(" GET /api/health - 健康检查")
|
|
|
fmt.Println(" GET /api/mqtt - 获取所有配置")
|
|
fmt.Println(" GET /api/mqtt - 获取所有配置")
|
|
@@ -109,6 +123,9 @@ func runMonitor(args []string) {
|
|
|
intervalFlag := fs.Int("interval", 1, "动态扫描间隔(秒), 默认1")
|
|
intervalFlag := fs.Int("interval", 1, "动态扫描间隔(秒), 默认1")
|
|
|
dbPath := fs.String("db", defaultDBPath, "数据库路径")
|
|
dbPath := fs.String("db", defaultDBPath, "数据库路径")
|
|
|
apiAddr := fs.String("api-addr", "", "API 服务地址 (如: :8080)")
|
|
apiAddr := fs.String("api-addr", "", "API 服务地址 (如: :8080)")
|
|
|
|
|
+ tls := fs.Bool("tls", false, "启用 HTTPS (使用自签名证书)")
|
|
|
|
|
+ tlsCert := fs.String("tls-cert", "./data/tls/cert.pem", "TLS 证书文件路径")
|
|
|
|
|
+ tlsKey := fs.String("tls-key", "./data/tls/key.pem", "TLS 私钥文件路径")
|
|
|
logFile := fs.String("log-file", "./logs", "日志文件路径(默认 ./logs/monitor.log)")
|
|
logFile := fs.String("log-file", "./logs", "日志文件路径(默认 ./logs/monitor.log)")
|
|
|
logLevel := fs.String("log-level", "info", "日志级别 (debug/info/warn/error)")
|
|
logLevel := fs.String("log-level", "info", "日志级别 (debug/info/warn/error)")
|
|
|
fs.Parse(args)
|
|
fs.Parse(args)
|
|
@@ -170,9 +187,21 @@ func runMonitor(args []string) {
|
|
|
var apiServer *api.Server
|
|
var apiServer *api.Server
|
|
|
if *apiAddr != "" {
|
|
if *apiAddr != "" {
|
|
|
apiServer = api.New(db, *apiAddr)
|
|
apiServer = api.New(db, *apiAddr)
|
|
|
|
|
+ if *tls {
|
|
|
|
|
+ if err := api.EnsureSelfSignedCert(*tlsCert, *tlsKey); err != nil {
|
|
|
|
|
+ logger.Error("生成自签名证书失败: %v", err)
|
|
|
|
|
+ fmt.Printf("生成自签名证书失败: %v\n", err)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ apiServer.EnableTLS(*tlsCert, *tlsKey)
|
|
|
|
|
+ }
|
|
|
go func() {
|
|
go func() {
|
|
|
- logger.Info("API 服务已启动: %s", *apiAddr)
|
|
|
|
|
- fmt.Printf("API 服务已启动: %s\n", *apiAddr)
|
|
|
|
|
|
|
+ scheme := "http"
|
|
|
|
|
+ if *tls {
|
|
|
|
|
+ scheme = "https"
|
|
|
|
|
+ }
|
|
|
|
|
+ logger.Info("API 服务已启动: %s://%s", scheme, *apiAddr)
|
|
|
|
|
+ fmt.Printf("API 服务已启动: %s://%s\n", scheme, *apiAddr)
|
|
|
if err := apiServer.Start(); err != nil {
|
|
if err := apiServer.Start(); err != nil {
|
|
|
logger.Error("API 服务失败: %v", err)
|
|
logger.Error("API 服务失败: %v", err)
|
|
|
fmt.Printf("API 服务失败: %v\n", err)
|
|
fmt.Printf("API 服务失败: %v\n", err)
|