Skip to content

Commit c21dbb0

Browse files
committed
feat: 新增日志上报
1 parent 8905097 commit c21dbb0

5 files changed

Lines changed: 161 additions & 39 deletions

File tree

internal/client/cert_deploy.go

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"time"
1616

1717
"github.com/https-cert/deploy/internal/config"
18+
"github.com/https-cert/deploy/pkg/logger"
1819
)
1920

2021
const (
@@ -57,7 +58,7 @@ func (cd *CertDeployer) DeployCertificate(domain, url string) error {
5758
return fmt.Errorf("下载证书失败: %w", err)
5859
}
5960

60-
fmt.Printf("证书下载完成: %s\n", zipFile)
61+
logger.Info("证书下载完成", "file", zipFile)
6162

6263
// 确保下载失败时清理
6364
defer func() {
@@ -73,7 +74,7 @@ func (cd *CertDeployer) DeployCertificate(domain, url string) error {
7374
apachePath := sslConfig.ApachePath
7475

7576
if nginxPath == "" && apachePath == "" {
76-
fmt.Println("未配置SSL目录,证书已下载到: ", zipFile)
77+
logger.Info("未配置SSL目录,证书已下载", "file", zipFile)
7778
return nil
7879
}
7980

@@ -109,33 +110,33 @@ func (cd *CertDeployer) DeployCertificate(domain, url string) error {
109110
if nginxPath != "" && cd.isNginxAvailable() {
110111
// 测试nginx配置
111112
if err := cd.testNginxConfig(); err != nil {
112-
fmt.Printf("警告: nginx配置测试失败: %v\n", err)
113+
logger.Warn("nginx配置测试失败", "error", err)
113114
} else {
114115
// 配置测试通过才尝试重新加载
115116
if err := cd.reloadNginx(); err != nil {
116-
fmt.Printf("警告: nginx重新加载失败: %v (证书已部署成功,请手动重启nginx)\n", err)
117+
logger.Warn("nginx重新加载失败,请手动重启nginx", "error", err)
117118
}
118119
}
119120
} else if nginxPath != "" {
120-
fmt.Println("nginx未安装或不在PATH中,跳过nginx相关操作")
121+
logger.Info("nginx未安装或不在PATH中,跳过nginx相关操作")
121122
}
122123

123124
// 5. 检查apache是否存在,如果存在则测试配置和重新加载
124125
if apachePath != "" && cd.isApacheAvailable() {
125126
// 测试apache配置
126127
if err := cd.testApacheConfig(); err != nil {
127-
fmt.Printf("警告: apache配置测试失败: %v\n", err)
128+
logger.Warn("apache配置测试失败", "error", err)
128129
} else {
129130
// 配置测试通过才尝试重新加载
130131
if err := cd.reloadApache(); err != nil {
131-
fmt.Printf("警告: apache重新加载失败: %v (证书已部署成功,请手动重启apache)\n", err)
132+
logger.Warn("apache重新加载失败,请手动重启apache", "error", err)
132133
}
133134
}
134135
} else if apachePath != "" {
135-
fmt.Println("apache未安装或不在PATH中,跳过apache相关操作")
136+
logger.Info("apache未安装或不在PATH中,跳过apache相关操作")
136137
}
137138

138-
fmt.Printf("自动部署流程完成: %s\n", domain)
139+
logger.Info("自动部署流程完成", "domain", domain)
139140
return nil
140141
}
141142

@@ -162,7 +163,7 @@ func (cd *CertDeployer) DeployCertificateToNginx(domain, url string) error {
162163
return fmt.Errorf("下载证书失败: %w", err)
163164
}
164165

165-
fmt.Printf("证书下载完成: %s\n", zipFile)
166+
logger.Info("证书下载完成", "file", zipFile)
166167

167168
defer func() {
168169
if _, err := os.Stat(zipFile); err == nil {
@@ -187,17 +188,17 @@ func (cd *CertDeployer) DeployCertificateToNginx(domain, url string) error {
187188
// 重新加载 nginx
188189
if cd.isNginxAvailable() {
189190
if err := cd.testNginxConfig(); err != nil {
190-
fmt.Printf("警告: nginx配置测试失败: %v\n", err)
191+
logger.Warn("nginx配置测试失败", "error", err)
191192
} else {
192193
if err := cd.reloadNginx(); err != nil {
193-
fmt.Printf("警告: nginx重新加载失败: %v (证书已部署成功,请手动重启nginx)\n", err)
194+
logger.Warn("nginx重新加载失败,请手动重启nginx", "error", err)
194195
}
195196
}
196197
} else {
197-
fmt.Println("nginx未安装或不在PATH中,跳过nginx相关操作")
198+
logger.Info("nginx未安装或不在PATH中,跳过nginx相关操作")
198199
}
199200

200-
fmt.Printf("Nginx证书部署完成: %s\n", domain)
201+
logger.Info("Nginx证书部署完成", "domain", domain)
201202
return nil
202203
}
203204

@@ -224,7 +225,7 @@ func (cd *CertDeployer) DeployCertificateToApache(domain, url string) error {
224225
return fmt.Errorf("下载证书失败: %w", err)
225226
}
226227

227-
fmt.Printf("证书下载完成: %s\n", zipFile)
228+
logger.Info("证书下载完成", "file", zipFile)
228229

229230
defer func() {
230231
if _, err := os.Stat(zipFile); err == nil {
@@ -250,18 +251,18 @@ func (cd *CertDeployer) DeployCertificateToApache(domain, url string) error {
250251
if cd.isApacheAvailable() {
251252
// 测试apache配置
252253
if err := cd.testApacheConfig(); err != nil {
253-
fmt.Printf("警告: apache配置测试失败: %v\n", err)
254+
logger.Warn("apache配置测试失败", "error", err)
254255
} else {
255256
// 配置测试通过才尝试重新加载
256257
if err := cd.reloadApache(); err != nil {
257-
fmt.Printf("警告: apache重新加载失败: %v (证书已部署成功,请手动重启apache)\n", err)
258+
logger.Warn("apache重新加载失败,请手动重启apache", "error", err)
258259
}
259260
}
260261
} else {
261-
fmt.Println("apache未安装或不在PATH中,跳过apache相关操作")
262+
logger.Info("apache未安装或不在PATH中,跳过apache相关操作")
262263
}
263264

264-
fmt.Printf("Apache证书部署完成: %s\n", domain)
265+
logger.Info("Apache证书部署完成", "domain", domain)
265266
return nil
266267
}
267268

@@ -297,7 +298,7 @@ func (cd *CertDeployer) deployToApache(sourceDir, apachePath, folderName, safeDo
297298
return fmt.Errorf("复制证书到Apache目录失败: %w", err)
298299
}
299300

300-
fmt.Printf("证书已部署到Apache目录: %s\n", targetDir)
301+
logger.Info("证书已部署到Apache目录", "path", targetDir)
301302

302303
// 生成 Apache SSL 配置文件
303304
if err := cd.generateApacheSSLConfig(apachePath, folderName, safeDomain); err != nil {
@@ -342,8 +343,8 @@ ssl_session_tickets off;
342343
return fmt.Errorf("写入SSL配置文件失败: %w", err)
343344
}
344345

345-
fmt.Printf("Nginx SSL配置文件已生成: %s\n", configFile)
346-
fmt.Printf("使用方法: 在nginx server块中添加 include %s;\n", configFile)
346+
logger.Info("Nginx SSL配置文件已生成", "file", configFile)
347+
logger.Info("使用方法: 在nginx server块中添加 include", "path", configFile)
347348
return nil
348349
}
349350

@@ -388,8 +389,8 @@ SSLSessionTickets off
388389
return fmt.Errorf("写入Apache SSL配置文件失败: %w", err)
389390
}
390391

391-
fmt.Printf("Apache SSL配置文件已生成: %s\n", configFile)
392-
fmt.Printf("使用方法: 在Apache VirtualHost块中添加 Include %s\n", configFile)
392+
logger.Info("Apache SSL配置文件已生成", "file", configFile)
393+
logger.Info("使用方法: 在Apache VirtualHost块中添加 Include", "path", configFile)
393394
return nil
394395
}
395396

@@ -500,7 +501,7 @@ func (cd *CertDeployer) moveCertificates(sourceDir, sslPath, folderName string)
500501
}
501502
}
502503

503-
fmt.Printf("证书文件夹已更新: %s\n", targetDir)
504+
logger.Info("证书文件夹已更新", "path", targetDir)
504505
return nil
505506
}
506507

@@ -535,7 +536,7 @@ func (cd *CertDeployer) reloadNginx() error {
535536
return fmt.Errorf("%w\n%s", err, string(output))
536537
}
537538

538-
fmt.Println("nginx重新加载成功")
539+
logger.Info("nginx重新加载成功")
539540
return nil
540541
}
541542

@@ -602,7 +603,7 @@ func (cd *CertDeployer) reloadApache() error {
602603
}
603604
}
604605

605-
fmt.Println("apache重新加载成功")
606+
logger.Info("apache重新加载成功")
606607
return nil
607608
}
608609

internal/client/client.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,14 @@ func NewClient(ctx context.Context) (*Client, error) {
113113
// 创建 connect client
114114
client.connectClient = deployPBconnect.NewDeployServiceClient(httpClient, config.URL)
115115

116-
// 启动连接通知
117-
go client.StartConnectNotify()
118-
119116
return client, nil
120117
}
121118

119+
// Start 启动客户端连接
120+
func (c *Client) Start() {
121+
go c.StartConnectNotify()
122+
}
123+
122124
// getSystemInfo 获取系统信息(带缓存)
123125
func (c *Client) getSystemInfo() (*system.SystemInfo, error) {
124126
var err error
@@ -133,6 +135,21 @@ func (c *Client) SetHTTPServer(httpServer *server.HTTPServer) {
133135
c.httpServer = httpServer
134136
}
135137

138+
// GetServerURL 获取服务器URL
139+
func (c *Client) GetServerURL() string {
140+
return c.serverURL
141+
}
142+
143+
// GetClientID 获取客户端ID
144+
func (c *Client) GetClientID() string {
145+
return c.clientId
146+
}
147+
148+
// GetAccessKey 获取访问密钥
149+
func (c *Client) GetAccessKey() string {
150+
return c.accessKey
151+
}
152+
136153
// StartConnectNotify 启动连接通知 - 建立持久连接并通过心跳保持
137154
func (c *Client) StartConnectNotify() {
138155
reconnectDelay := minReconnectDelay

internal/scheduler/scheduler.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scheduler
22

33
import (
44
"context"
5+
"strings"
56
"time"
67

78
"github.com/https-cert/deploy/internal/client"
@@ -24,6 +25,19 @@ func NewScheduler(ctx context.Context) (*Scheduler, error) {
2425
return nil, err
2526
}
2627

28+
// 设置日志上报器
29+
// 日志接口在 /api/logs,需要使用基础 URL(去掉 /deploy 后缀)
30+
serverURL := client.GetServerURL()
31+
baseURL := strings.TrimSuffix(serverURL, "/deploy")
32+
logger.SetReporter(&logger.LogReporter{
33+
ServerURL: baseURL,
34+
ClientID: client.GetClientID(),
35+
AccessKey: client.GetAccessKey(),
36+
})
37+
38+
// 启动客户端连接
39+
client.Start()
40+
2741
// 创建 HTTP-01 验证服务器
2842
httpServer := server.NewHTTPServer()
2943

internal/system/info.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"path/filepath"
1111
"runtime"
1212
"time"
13+
14+
"github.com/https-cert/deploy/pkg/logger"
1315
)
1416

1517
const cacheRelPath = "anssl/client-id"
@@ -48,7 +50,7 @@ func GetSystemInfo() (*SystemInfo, error) {
4850
func ValidateSystemRequirements() error {
4951
// 检查nginx是否安装(可选)
5052
if _, err := exec.LookPath("nginx"); err != nil {
51-
fmt.Println("警告: nginx未安装或不在PATH中,将跳过nginx相关操作")
53+
logger.Warn("nginx未安装或不在PATH中,将跳过nginx相关操作")
5254
return nil
5355
}
5456

@@ -58,7 +60,7 @@ func ValidateSystemRequirements() error {
5860

5961
cmd := exec.CommandContext(ctx, "nginx", "-t")
6062
if err := cmd.Run(); err != nil {
61-
fmt.Printf("警告: 无法执行nginx命令,请检查权限: %v\n", err)
63+
logger.Warn("无法执行nginx命令,请检查权限", "error", err)
6264
return nil
6365
}
6466

@@ -88,7 +90,7 @@ func GetUniqueClientId(ctx context.Context) (string, error) {
8890
// 缓存结果,确保下次启动时使用相同的ID
8991
if err := writeCachedID(id); err != nil {
9092
// 缓存失败不影响主流程,仅记录错误
91-
fmt.Fprintf(os.Stderr, "警告: 缓存客户端ID失败: %v\n", err)
93+
logger.Warn("缓存客户端ID失败", "error", err)
9294
}
9395

9496
return id, nil

0 commit comments

Comments
 (0)