github.com/qiniu/go-sdk/v7@v7.27.0/examples/sandbox_metrics_logs/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  	"time"
     9  
    10  	"github.com/qiniu/go-sdk/v7/sandbox"
    11  )
    12  
    13  func main() {
    14  	apiKey := os.Getenv("QINIU_API_KEY")
    15  	if apiKey == "" {
    16  		log.Fatal("请设置 QINIU_API_KEY 环境变量")
    17  	}
    18  
    19  	apiURL := os.Getenv("QINIU_SANDBOX_API_URL")
    20  
    21  	c, err := sandbox.NewClient(&sandbox.Config{
    22  		APIKey:   apiKey,
    23  		Endpoint: apiURL,
    24  	})
    25  	if err != nil {
    26  		log.Fatalf("创建客户端失败: %v", err)
    27  	}
    28  
    29  	ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
    30  	defer cancel()
    31  
    32  	// 1. 创建沙箱
    33  	templateID := "base"
    34  	timeout := int32(120)
    35  	sb, _, err := c.CreateAndWait(ctx, sandbox.CreateParams{
    36  		TemplateID: templateID,
    37  		Timeout:    &timeout,
    38  	}, sandbox.WithPollInterval(2*time.Second))
    39  	if err != nil {
    40  		log.Fatalf("创建沙箱失败: %v", err)
    41  	}
    42  	fmt.Printf("沙箱已就绪: %s\n", sb.ID())
    43  	defer func() {
    44  		_ = sb.Kill(context.Background())
    45  		fmt.Println("沙箱已终止")
    46  	}()
    47  
    48  	// 等待一段时间让沙箱产生指标数据
    49  	fmt.Println("等待 5 秒收集指标...")
    50  	time.Sleep(5 * time.Second)
    51  
    52  	// 2. 获取指标
    53  	metrics, err := sb.GetMetrics(ctx, nil)
    54  	if err != nil {
    55  		log.Fatalf("获取指标失败: %v", err)
    56  	}
    57  	fmt.Printf("指标数据 (%d 条):\n", len(metrics))
    58  	for _, m := range metrics {
    59  		fmt.Printf("  - 时间: %s, CPU: %.1f%%, 内存: %d/%d bytes\n",
    60  			m.Timestamp.Format(time.RFC3339), m.CPUUsedPct, m.MemUsed, m.MemTotal)
    61  	}
    62  
    63  	// 3. 获取日志
    64  	logs, err := sb.GetLogs(ctx, nil)
    65  	if err != nil {
    66  		fmt.Printf("\n获取日志失败(服务端可能暂不支持): %v\n", err)
    67  	} else {
    68  		fmt.Printf("\n日志 (%d 条):\n", len(logs.Logs))
    69  		for _, entry := range logs.Logs {
    70  			fmt.Printf("  [%s] %s\n", entry.Timestamp.Format(time.RFC3339), entry.Line)
    71  		}
    72  	}
    73  }