func main()

in example/context/context_sample.go [52:136]


func main() {
	sls.GlobalForceUsingHTTP = true
	fmt.Println(util.AccessKeyID)
	client := sls.CreateNormalInterface(util.Endpoint, util.AccessKeyID, util.AccessKeySecret, "")
	project, err := client.GetProject(util.ProjectName)
	panicCheck(err, "GetProject")
	logstore, err := sls.NewLogStore(util.LogStoreName, project)
	panicCheck(err, "NewLogStore")

	beginTime := time.Now()

	// Write several log groups with same pack prefix. PackID format: {PackPrefix}-{HexSequenceID}.
	packagePrefix := generatePackIDPrefix()
	for seqID := 0; seqID <= 10; seqID++ {
		postLogGroup(20, fmt.Sprintf("%v-%X", packagePrefix, seqID), logstore)
	}
	time.Sleep(time.Second * 5)

	// Use GetLogs to acquire packMeta by querying packID.
	queriedPackID := fmt.Sprintf("%v-%X", packagePrefix, 8)
	from := beginTime.Unix() - 120
	to := time.Now().Unix() + 60
	resp, err := logstore.GetLogs("", from, to,
		fmt.Sprintf("__tag__:__pack_id__:%v|with_pack_meta", queriedPackID),
		20, 0, false)
	panicCheck(err, "GetLogs")
	fmt.Println("GetLogs response", resp.Count)
	middleLog := resp.Logs[resp.Count/2]
	packID := middleLog["__tag__:__pack_id__"]
	packMeta := middleLog["__pack_meta__"]
	fmt.Println(packID, packMeta)

	// Get context logs from both directions.
	contextResp, err := logstore.GetContextLogs(30, 30, packID, packMeta)
	panicCheck(err, "GetContextLogs")
	fmt.Println("GetContextLogs response", contextResp.TotalLines)
	fmt.Println("back lines", contextResp.BackLines)
	fmt.Println("forward lines", contextResp.ForwardLines)
	fmt.Println("oldest context log", contextResp.Logs[0])
	fmt.Println("newest context log", contextResp.Logs[contextResp.TotalLines-1])

	// Use the first log to fetch backward.
	fmt.Println("fetch context logs backward...")
	{
		log := contextResp.Logs[0]
		for loopIdx := 0; loopIdx < 5; loopIdx++ {
			packID := log["__tag__:__pack_id__"]
			packMeta := log["__pack_meta__"]
			fmt.Printf("[Loop %v] ID: %v, meta: %v\n", loopIdx, packID, packMeta)
			resp, err := logstore.GetContextLogs(30, 0, packID, packMeta)
			panicCheck(err, fmt.Sprintf("GetContextLogs backward %v", loopIdx))
			fmt.Printf("[Loop %v] backward total lines: %v, back lines: %v\n",
				loopIdx, resp.TotalLines, resp.BackLines)
			if resp.TotalLines == 0 {
				fmt.Println("No more log backward")
				break
			}
			log = resp.Logs[0]
			fmt.Printf("[Loop %v] log: %v\n", loopIdx, log)
			time.Sleep(time.Second)
		}
	}

	// Use the last log to fetch forward.
	fmt.Println("fetch context logs forward...")
	{
		log := contextResp.Logs[contextResp.TotalLines-1]
		for loopIdx := 0; loopIdx < 5; loopIdx++ {
			packID := log["__tag__:__pack_id__"]
			packMeta := log["__pack_meta__"]
			fmt.Printf("[Loop %v] ID: %v, meta: %v\n", loopIdx, packID, packMeta)
			resp, err := logstore.GetContextLogs(0, 30, packID, packMeta)
			panicCheck(err, fmt.Sprintf("GetContextLogs backward %v", loopIdx))
			fmt.Printf("[Loop %v] forward total lines: %v, lines: %v\n",
				loopIdx, resp.TotalLines, resp.ForwardLines)
			if resp.TotalLines == 0 {
				fmt.Println("No more log forward")
				break
			}
			log = resp.Logs[resp.TotalLines-1]
			fmt.Printf("[Loop %v] log: %v\n", loopIdx, log)
			time.Sleep(time.Second)
		}
	}
}