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)
}
}
}