Exemplo n.º 1
0
        public static async Task <IEnumerable <LogInfo> > PullLogs(ILogServiceClient client)
        {
            // 获取ShardId
            var listShardsResponse = await client.ListShardsAsync(LogStoreName);

            var listShardsResult = listShardsResponse.EnsureSuccess().Result;
            var shardId          = listShardsResult.First().ShardId;

            // 获取游标
            var getCursorRsponse = await client.GetCursorAsync(LogStoreName, shardId, "begin");

            var getCursorResult = getCursorRsponse.EnsureSuccess().Result;
            var cursor          = getCursorResult.Cursor;

            // 在指定分片(shard)上从游标(cursor)开始位置获取100条日志
            var response = await client.PullLogsAsync(LogStoreName, shardId, cursor, 100);

            var result = response.EnsureSuccess().Result;

            // 获取Header上的下一条游标(cursor)位置
            var nextCursor = response.GetLogCursor();

            return(result.LogGroups
                   .SelectMany(x => x.Logs));
        }
 /// <summary>
 /// 根据时间获得游标(cursor)。
 /// </summary>
 /// <param name="client">client实例。</param>
 /// <param name="logstoreName">日志库名称</param>
 /// <param name="shardId">Shard ID</param>
 /// <param name="from">时间点(UNIX下秒数),或 begin,end</param>
 /// <param name="project">项目名,此参数将覆盖 client 中默认设置。</param>
 /// <returns>异步响应结果。</returns>
 /// <seealso cref="ILogServiceClient.GetCursorAsync"/>
 public static Task <IResponse <GetCursorResult> > GetCursorAsync(this ILogServiceClient client,
                                                                  String logstoreName, Int32 shardId, String from,
                                                                  String project = null)
 => client.GetCursorAsync(new GetCursorRequest(logstoreName, shardId, from)
 {
     ProjectName = project
 });