示例#1
0
        /// <summary>
        /// Retrieves log entries that match the specified search criteria.
        /// </summary>
        /// <param name="request">Specifies criteria to use when querying logs.</param>
        /// <param name="pagination">Specifies pagination info to use when requesting paged results.</param>
        /// <returns>An <see cref="IPagedList{LogEntry}"/> containing the list of log entries.</returns>
        public Task <IPagedList <LogEntry> > GetAllAsync(GetLogsRequest request, PaginationInfo pagination)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (pagination == null)
            {
                throw new ArgumentNullException(nameof(pagination));
            }

            return(Connection.GetAsync <IPagedList <LogEntry> >(BuildUri("logs",
                                                                         new Dictionary <string, string>
            {
                { "sort", request.Sort },
                { "fields", request.Fields },
                { "include_fields", request.IncludeFields?.ToString().ToLower() },
                { "from", request.From },
                { "take", request.Take?.ToString().ToLower() },
                { "q", request.Query },
                { "page", pagination.PageNo.ToString() },
                { "per_page", pagination.PerPage.ToString() },
                { "include_totals", pagination.IncludeTotals.ToString().ToLower() }
            }), DefaultHeaders, converters));
        }
示例#2
0
        // GET: Log

        public JsonResult GetLogs(uint from, uint to, int lines, int offset)
        {
            if (lines < 1)
            {
                lines = 1;
            }
            if (lines > 100)
            {
                lines = 100;
            }
            if (offset < 0)
            {
                offset = 0;
            }
            LogClient      client    = new LogClient("cn-hangzhou.log.aliyuncs.com", "LTAIk45GEzpqUxg6", "jcLHPKpmTSU3yjh5quANAHMbqaW3xt");
            GetLogsRequest getLogReq = new GetLogsRequest("weapp-api",
                                                          "cvs_log",
                                                          from,
                                                          to,
                                                          "",
                                                          "",
                                                          lines,
                                                          offset,
                                                          false);
            GetLogsResponse getLogResp = client.GetLogs(getLogReq);
            IList <string>  msgs       = (from queriedLog in getLogResp.Logs from content in queriedLog.Contents where content.Key.Equals("message", StringComparison.InvariantCultureIgnoreCase) select content.Value).ToList();

            return(Json(getLogResp.Count > 0 ? JsonConvert.SerializeObject(msgs) : "", JsonRequestBehavior.AllowGet));
        }
示例#3
0
        public async Task <IActionResult> GetLogs([FromQuery] GetLogsRequest request)
        {
            var response = await mediator.Send(request);

            Log.Information($"User #{HttpContext.GetCurrentUserId()} fetched logs");

            return(this.CreateResponse(response));
        }
示例#4
0
        public async Task <IActionResult> GetLogs([FromQuery] GetLogsRequest request)
        {
            var response = await mediator.Send(request);

            logger.LogResponse($"Admin #{HttpContext.GetCurrentUserId()} filtered logs", response.Error);

            return(response.IsSucceeded ? (IActionResult)Ok(response) : BadRequest(response));
        }
示例#5
0
 public IEnumerable <LogDto> GetLogs([FromQuery] GetLogsRequest request = null)
 {
     if (request.Limit > 200)
     {
         request.Limit = 200;
     }
     return(this.logsService.GetLogs(request).Take(request.Limit));
 }
示例#6
0
        public async Task <GetLogsResponse> GetLogs(GetLogsRequest o)
        {
            var result = new GetLogsResponse(o.RequestId);

            result.Logs.AddRange(await Server.GetLogEntries(o.Application, o.From, o.To));

            return(result);
        }
示例#7
0
 public async Task <IActionResult> Get(GetLogsRequest request)
 {
     return(await ProcessGetRequest <
                GetLogsRequest,
                GetLogsResponse,
                GetLogsRequestValidator,
                IEnumerable <LogModel> >(request));
 }
        public override async Task <GetLogsReply> GetLogs(GetLogsRequest request, ServerCallContext context)
        {
            var userList = await _logService.GetLogsAsync();

            return(new GetLogsReply()
            {
                LogList = { _mapper.Map <IEnumerable <LogMessage> >(userList) }
            });
        }
 public async Task <IResponse <GetLogsResult> > GetLogsAsync(GetLogsRequest request)
 => (await this.SendRequestAsync <IList <IDictionary <String, String> > >(
         new HttpRequestMessageBuilder(HttpMethod.Get, $"/logstores/{request.Logstorename}")
         .Query("type", "log")
         .Query("from", request.From.ToString())
         .Query("to", request.To.ToString())
         .Query("topic", request.Topic)
         .Query("query", request.Query)
         .Query("line", request.Line.ToString())
         .Query("offset", request.Offset.ToString())
         .Query("reverse", request.Reverse.ToString()),
         project: request.ProjectName))
 .Transform((httpHeaders, data) =>
示例#10
0
        private static IEnumerable <LogModel> FilterLogs(GetLogsRequest request, IEnumerable <LogModel> logs)
        {
            if (!string.IsNullOrEmpty(request.Message))
            {
                logs = logs.Where(l => l.Message != null && l.Message.ToLower().Contains(request.Message.ToLower()));
            }

            if (!string.IsNullOrEmpty(request.Level))
            {
                logs = logs.Where(l => l.Level != null && l.Level.ToUpper().Contains(request.Level.ToUpper()));
            }

            if (!string.IsNullOrEmpty(request.RequestMethod))
            {
                logs = logs.Where(l =>
                                  l.RequestMethod != null && l.RequestMethod.ToLower().Contains(request.RequestMethod.ToLower()));
            }

            if (!string.IsNullOrEmpty(request.RequestPath))
            {
                logs = logs.Where(l =>
                                  l.RequestPath != null && l.RequestPath.ToLower().Contains(request.RequestPath.ToLower()));
            }

            if (request.StatusCode != null)
            {
                logs = logs.Where(l => l.StatusCode == request.StatusCode);
            }

            if (!string.IsNullOrEmpty(request.Exception))
            {
                logs = logs.Where(l => l.Exception != null && l.Exception.ToLower().Contains(request.Exception.ToLower()));
            }

            if (request.MinTime != null)
            {
                logs = logs.Where(l => l.Date >= request.MinTime);
            }

            if (request.MaxTime != null)
            {
                logs = logs.Where(l => l.Date <= request.MaxTime);
            }

            logs = LogSortTypeSmartEnum.FromValue((int)request.SortType).Sort(logs);

            return(logs);
        }
示例#11
0
        public IEnumerable <LogDto> GetLogs(GetLogsRequest request)
        {
            foreach (var filePath in Directory.GetFiles("logs").Where(x => Path.GetExtension(x) == ".json"))
            {
                using var stream       = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                using var streamReader = new StreamReader(stream);

                var content           = streamReader.ReadToEnd();
                var normalizedContent = "[" + content.Trim(",[]".ToCharArray()) + "]";
                var logs = JsonConvert.DeserializeObject <IEnumerable <LogDto> >(normalizedContent);

                foreach (var log in logs.Where(x => this.ShouldReturn(request, x)))
                {
                    yield return(log);
                }
            }
        }
示例#12
0
        /// <inheritdoc />
        public Task <IPagedList <LogEntry> > GetAllAsync(GetLogsRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            return(Connection.GetAsync <IPagedList <LogEntry> >("logs", null,
                                                                new Dictionary <string, string>
            {
                { "sort", request.Sort },
                { "fields", request.Fields },
                { "include_fields", request.IncludeFields?.ToString().ToLower() },
                { "from", request.From },
                { "take", request.Take?.ToString().ToLower() },
                { "q", request.Query }
            }, null, new PagedListConverter <LogEntry>("logs")));
        }
示例#13
0
        public async Task <PagedList <LogModel> > GetLogsFromFile(GetLogsRequest request)
        {
            var logsFilePath = BuildLogFilesPath(request.Date);

            if (!filesManager.FileExists(logsFilePath))
            {
                return(new List <LogModel>().ToPagedList <LogModel>(request.PageNumber, request.PageSize));
            }

            string[] logsJson = await filesManager.ReadFileLines(logsFilePath);

            ReplaceKeyWordsInJson(ref logsJson);

            var logs = ConvertLogsFileIntoList(logsJson);

            logs = FilterLogs(request, logs);

            return(logs.ToPagedList <LogModel>(request.PageNumber, request.PageSize));
        }
示例#14
0
 public GetLogsResponse Get(GetLogsRequest request)
 {
     try
     {
         if (request.PageSize == 0)
         {
             request.PageSize = 10;
         }
         return Mapper.Map<GetLogsResponse>(_logger.GetLogs(Mapper.Map<PagedRequest>(request)));
     }
     catch (Exception ex)
     {
         return new GetLogsResponse
         {
             ErrorLevel = ErrorLevel.Critical,
             Message = ex.ToString()
         };
     }
 }
示例#15
0
        public async Task <IResponse <GetLogsResult> > GetLogsAsync(GetLogsRequest request)
        {
            return((await SendRequestAsync <IList <IDictionary <string, string> > >(
                        new HttpRequestMessageBuilder(HttpMethod.Get, $"/logstores/{request.Logstorename}")
                        .Query("type", "log")
                        .Query("from", request.From.ToString())
                        .Query("to", request.To.ToString())
                        .Query("topic", request.Topic)
                        .Query("query", request.Query)
                        .Query("line", request.Line.ToString())
                        .Query("offset", request.Offset.ToString())
                        .Query("reverse", request.Reverse.ToString()),
                        project: request.ProjectName))
                   .Transform((httpHeaders, data) =>
            {
                var newResult = new GetLogsResult(data)
                {
                    Count = Convert.ToInt32(httpHeaders.GetValueOrDefault(LogHeaders.Count)),
                    ProcessedRows = Convert.ToInt32(httpHeaders.GetValueOrDefault(LogHeaders.ProcessedRows)),
                    ElapsedMillisecond =
                        Convert.ToInt32(httpHeaders.GetValueOrDefault(LogHeaders.ElapsedMillisecond)),
                    HasSql = Convert.ToBoolean(httpHeaders.GetValueOrDefault(LogHeaders.HasSql)),
                    AggQuery = httpHeaders.GetValueOrDefault(LogHeaders.AggQuery),
                    WhereQuery = httpHeaders.GetValueOrDefault(LogHeaders.WhereQuery)
                };

                // Parse Progress
                if (Enum.TryParse <LogProgressState>(httpHeaders.GetValueOrDefault(LogHeaders.Progress), true,
                                                     out var progress))
                {
                    newResult.Progress = progress;
                }

                // Parse QueryInfo
                if (httpHeaders.TryGetValue(LogHeaders.QueryInfo, out var queryInfoValue))
                {
                    newResult.QueryInfo = JsonConvert.DeserializeObject <LogQueryInfo>(queryInfoValue);
                }

                return newResult;
            }));
        }
        public void TestGetLogs()
        {
            LogClient client = new LogClient(ClientTestData.TEST_ENDPOINT, ClientTestData.TEST_ACCESSKEYID, ClientTestData.TEST_ACCESSKEY);

            client.SetWebSend(MockSend);
            GetLogsRequest request = new GetLogsRequest();

            request.Project  = ClientTestData.TEST_PROJECT;
            request.Logstore = "testlogstore";
            request.Query    = "error";
            request.Topic    = "mockTopic";
            request.From     = 1000;
            request.To       = 2000;
            request.Lines    = 200;
            request.Offset   = 0;
            GetLogsResponse response = client.GetLogs(request);

            Assert.IsTrue(DicToString(Headers).CompareTo("[x-sls-apiversion:0.4.0][x-sls-bodyrawsize:0][x-sls-signaturemethod:hmac-sha1][User-Agent:aliyun-sdk-dotnet/1.0.0.0]") == 0);
            Assert.IsTrue(response != null && response.Count == 2);
            Assert.IsTrue(Host.CompareTo("mock_project.mockhost.aliyuncs.com") == 0);
            Assert.IsTrue(RequestUri.CompareTo("http://mock_project.mockhost.aliyuncs.com/logstores/testlogstore?type=log&topic=mockTopic&from=1000&to=2000&query=error&line=200&offset=0") == 0);
        }
示例#17
0
        private void GetAliyunLog()
        {
            LogClient _client = new LogClient(endpoint, accesskey, accessecret);

            StringBuilder sb = new StringBuilder();
            DateTime      unixTimestampZeroPoint = new DateTime(1970, 01, 01, 0, 0, 0, DateTimeKind.Utc);
            DateTime      fromStamp = DateTime.UtcNow.AddDays(-1);
            DateTime      toStamp   = DateTime.UtcNow;

            sb.Append("beginTime:" + fromStamp + "--" + "endTime" + toStamp + "\n\n");

            uint from = (uint)((fromStamp - unixTimestampZeroPoint).TotalSeconds);
            uint to   = (uint)((toStamp - unixTimestampZeroPoint).TotalSeconds);

            try
            {
                GetLogsRequest  req = new GetLogsRequest(projectName, logstore, from, to, "", "ActivityLogTypeName:网站商品PV |  select  ActivityLogTypeName, Comment, count(1) as count  group by Comment,ActivityLogTypeName order by count  desc limit 100", int.MaxValue, 0, true);
                GetLogsResponse res = _client.GetLogs(req);


                if (res != null && res.IsCompleted())
                {
                    foreach (QueriedLog log in res.Logs)
                    {
                        foreach (var item in log.Contents)
                        {
                            sb.Append(item.Key + ";" + item.Value + "\n");
                        }
                    }
                }
                MessageBox.Show(sb.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
示例#18
0
 private bool ShouldReturn(GetLogsRequest request, LogDto log)
 {
     if (request.FromTime.HasValue && request.FromTime < log.Timestamp)
     {
         return(false);
     }
     if (request.ToTime.HasValue && request.ToTime > log.Timestamp)
     {
         return(false);
     }
     if (request.AcceptedLevels != null)
     {
         if (request.AcceptedLevels.All(x => x != log.Level))
         {
             return(false);
         }
     }
     if (!string.IsNullOrEmpty(request.Template) && !log.MessageTemplate.Contains(request.Template))
     {
         return(false);
     }
     if (request.SearchPhrases != null)
     {
         if (log.Properties == null || !log.Properties.Any())
         {
             return(false);
         }
         foreach (var searchPhrase in request.SearchPhrases.Where(x => !string.IsNullOrWhiteSpace(x)))
         {
             if (log.Properties.All(x => !x.Key.Contains(searchPhrase) && !x.Value.Contains(searchPhrase)))
             {
                 return(false);
             }
         }
     }
     return(true);
 }
示例#19
0
 /// <summary>
 ///  扫描日志
 /// </summary>
 /// <param name="request">请求参数信息</param>
 /// <returns>请求结果信息</returns>
 public async Task <GetLogsResponse> GetLogs(GetLogsRequest request)
 {
     return(await new GetLogsExecutor().Client(this).Execute <GetLogsResponse, GetLogsResult, GetLogsRequest>(request).ConfigureAwait(false));
 }
示例#20
0
 /// <summary>
 ///  扫描日志
 /// </summary>
 /// <param name="request">请求参数信息</param>
 /// <returns>请求结果信息</returns>
 public GetLogsResponse GetLogs(GetLogsRequest request)
 {
     return(new GetLogsExecutor().Client(this).Execute <GetLogsResponse, GetLogsResult, GetLogsRequest>(request));
 }
示例#21
0
        static void Main(string[] args)
        {
            // select you endpoint https://help.aliyun.com/document_detail/29008.html
            String endpoint    = "cn-shanghai.log.aliyuncs.com",
                   accesskeyId = "",
                   accessKey   = "",
                   project     = "microex-test1",
                   logstore    = "test";
            LogClient client   = new LogClient(endpoint, accesskeyId, accessKey);

            //init http connection timeout
            client.ConnectionTimeout = client.ReadWriteTimeout = 10000;
            //list logstores
            foreach (String l in client.ListLogstores(new ListLogstoresRequest(project)).Logstores)
            {
                Console.WriteLine(l);
            }
            //put logs
            PutLogsRequest putLogsReqError = new PutLogsRequest();

            putLogsReqError.Project  = project;
            putLogsReqError.Topic    = "dotnet_topic";
            putLogsReqError.Logstore = logstore;
            putLogsReqError.LogItems = new List <LogItem>();
            for (int i = 1; i <= 10; ++i)
            {
                LogItem logItem = new LogItem();
                logItem.Time = DateUtils.TimeSpan();
                for (int k = 0; k < 10; ++k)
                {
                    logItem.PushBack("error_" + i.ToString(), "invalid operation");
                }
                putLogsReqError.LogItems.Add(logItem);
            }
            PutLogsResponse putLogRespError = client.PutLogs(putLogsReqError);

            Thread.Sleep(5000);

            //query logs, if query string is "", it means query all data
            GetLogsRequest getLogReq = new GetLogsRequest(project,
                                                          logstore,
                                                          DateUtils.TimeSpan() - 100,
                                                          DateUtils.TimeSpan(),
                                                          "dotnet_topic",
                                                          "",
                                                          100,
                                                          0,
                                                          false);
            GetLogsResponse getLogResp = client.GetLogs(getLogReq);

            Console.WriteLine("Log count : " + getLogResp.Logs.Count.ToString());
            for (int i = 0; i < getLogResp.Logs.Count; ++i)
            {
                var log = getLogResp.Logs[i];
                Console.WriteLine("Log time : " + DateUtils.GetDateTime(log.Time));
                for (int j = 0; j < log.Contents.Count; ++j)
                {
                    Console.WriteLine("\t" + log.Contents[j].Key + " : " + log.Contents[j].Value);
                }
                Console.WriteLine("");
            }

            //query histogram
            GetHistogramsResponse getHisResp = client.GetHistograms(new GetHistogramsRequest(project,
                                                                                             logstore,
                                                                                             DateUtils.TimeSpan() - 100,
                                                                                             DateUtils.TimeSpan(),
                                                                                             "dotnet_topic",
                                                                                             ""));

            Console.WriteLine("Histograms total count : " + getHisResp.TotalCount.ToString());

            //list shards
            ListShardsResponse listResp = client.ListShards(new ListShardsRequest(project, logstore));

            Console.WriteLine("Shards count : " + listResp.Shards.Count.ToString());

            //batch get logs
            for (int i = 0; i < listResp.Shards.Count; ++i)
            {
                //get cursor
                String cursor = client.GetCursor(new GetCursorRequest(project, logstore, listResp.Shards[i], ShardCursorMode.BEGIN)).Cursor;
                Console.WriteLine("Cursor : " + cursor);
                BatchGetLogsResponse batchGetResp = client.BatchGetLogs(new BatchGetLogsRequest(project, logstore, listResp.Shards[i], cursor, 10));
                Console.WriteLine("Batch get log, shard id : " + listResp.Shards[i].ToString() + ", log count : " + batchGetResp.LogGroupList.LogGroupList_Count.ToString());
            }
        }
示例#22
0
        /// <summary>
        ///  Get The sub set of logs data from sls server which match input
        ///  parameters.
        /// </summary>
        /// <param name="request">The get logs request</param>
        /// <exception>LogException</exception>
        /// <returns>The get Logs response</returns>
        public GetLogsResponse GetLogs(GetLogsRequest request)
        {
            using (ServiceRequest sReq = new ServiceRequest())
            {
                sReq.Method   = HttpMethod.Get;
                sReq.Endpoint = BuildReqEndpoint(request);

                //use empty string to replace Logstore if not set by user explicitly
                string logstore = request.IsSetLogstore() ? request.Logstore : String.Empty;
                sReq.ResourcePath = LogConsts.RESOURCE_LOGSTORES + LogConsts.RESOURCE_SEPARATOR + logstore;

                FillCommonHeaders(sReq);
                FillCommonParameters(sReq);

                sReq.Parameters.Add(LogConsts.PARAMETER_TYPE, LogConsts.VALUE_TYPE_CONTENT);

                if (request.IsSetTopic())
                {
                    sReq.Parameters.Add(LogConsts.PARAMETER_TOPIC, request.Topic);
                }

                if (request.IsSetFrom())
                {
                    sReq.Parameters.Add(LogConsts.PARAMETER_FROM, request.From.ToString());
                }

                if (request.IsSetTo())
                {
                    sReq.Parameters.Add(LogConsts.PARAMETER_TO, request.To.ToString());
                }

                if (request.IsSetQuery())
                {
                    sReq.Parameters.Add(LogConsts.PARAMETER_QUERY, request.Query);
                }

                if (request.IsSetLines())
                {
                    sReq.Parameters.Add(LogConsts.PARAMETER_LINES, request.Lines.ToString());
                }

                if (request.IsSetOffset())
                {
                    sReq.Parameters.Add(LogConsts.PARAMETER_OFFSET, request.Offset.ToString());
                }

                if (request.IsSetReverse())
                {
                    sReq.Parameters.Add(LogConsts.PARAMETER_REVERSE, request.Reverse.ToString());
                }

                ExecutionContext context = new ExecutionContext();
                context.Signer      = new LogRequestSigner(sReq.ResourcePath, HttpMethod.Get);
                context.Credentials = new ServiceCredentials(this.AccessKeyId, this.AccessKey);

                using (ServiceResponse response = serviceClient.Send(sReq, context))
                {
                    LogClientTools.ResponseErrorCheck(response, context.Credentials);
                    JArray          body = LogClientTools.ParserResponseToJArray(response.Content);
                    GetLogsResponse res  = new GetLogsResponse(response.Headers, body);
                    return(res);
                }
            }
        }
示例#23
0
        public async Task <ActionResult <GetLogsResult> > GetLogs([FromRoute] int id, [FromQuery] GetLogsRequest request)
        {
            if (!await _accessTokenRepository.IsScopeAsync(_authManager.ApiToken, Constants.ScopeUsers))
            {
                return(Unauthorized());
            }

            var user = await _userRepository.GetByUserIdAsync(id);

            if (user == null)
            {
                return(NotFound());
            }

            var top = request.Top;

            if (top <= 0)
            {
                top = 20;
            }
            var skip = request.Skip;

            var logs = await _logRepository.GetUserLogsAsync(user.Id, skip, top);

            return(new GetLogsResult
            {
                Count = await _userRepository.GetCountAsync(),
                Logs = logs
            });
        }
示例#24
0
 public GetLogsResponse GetLogs(GetLogsRequest request)
 {
     return(Execute(() => InternalService.GetLogs(request)));
 }
 public GetLogsResponse GetLogs(GetLogsRequest request)
 {
     return(ExecuteAction <GetLogsResponse>(request));
 }
        public void FT()
        {
            LogClient client = new LogClient("sls-failover.alibaba-inc.com", "", "");
            uint      topicFlag = DateUtils.TimeSpan();
            int       PUT_COUNT = 20, TOPIC_COUNT = 10, LOGITEM_COUNT = 20, CONTENT_COUNT = 10, SLEEP_INTERVAL = 2, SLEEP_TIME = 500;

            for (int j = 1; j <= PUT_COUNT; ++j)
            {
                PutLogsRequest putLogsReqError = new PutLogsRequest();
                putLogsReqError.Project  = "ali-winlogtail-project";
                putLogsReqError.Topic    = "dotnet_topic_" + topicFlag + "_" + (j % TOPIC_COUNT);
                putLogsReqError.Logstore = "sls-logstore-002";
                putLogsReqError.LogItems = new List <LogItem>();
                for (int i = 1; i <= LOGITEM_COUNT; ++i)
                {
                    LogItem logItem = new LogItem();
                    logItem.Time = (uint)(topicFlag + j);
                    for (int k = 0; k < CONTENT_COUNT; ++k)
                    {
                        logItem.PushBack("error_" + (j % TOPIC_COUNT) + "_" + k, "invalid operation: " + i * j);
                    }
                    putLogsReqError.LogItems.Add(logItem);
                }
                PutLogsResponse putLogRespError = client.PutLogs(putLogsReqError);
                if (j % SLEEP_INTERVAL == 0)
                {
                    Thread.Sleep(SLEEP_TIME);
                }
            }
            Thread.Sleep(50 * 1000);

            ListLogstoresRequest req = new ListLogstoresRequest();

            req.Project = "ali-winlogtail-project";
            ListLogstoresResponse res          = client.ListLogstores(req);
            HashSet <String>      logstoresSet = new HashSet <string>(res.Logstores);

            Assert.IsTrue(logstoresSet.Contains("sls-logstore-002"));


            ListTopicsRequest topicReq = new ListTopicsRequest();

            topicReq.Project  = "ali-winlogtail-project";
            topicReq.Logstore = "sls-logstore-002";
            topicReq.Lines    = TOPIC_COUNT;
            topicReq.Token    = "dotnet_topic_" + topicFlag + "_";
            ListTopicsResponse lstTopicsRequest = client.ListTopics(topicReq);

            Assert.IsTrue(lstTopicsRequest.Count >= TOPIC_COUNT);
            HashSet <String> topicSet = new HashSet <string>(lstTopicsRequest.Topics);

            for (int i = 0; i < TOPIC_COUNT; ++i)
            {
                Assert.IsTrue(topicSet.Contains("dotnet_topic_" + topicFlag + "_" + i));
            }
            Thread.Sleep(SLEEP_TIME);
            for (int i = 0; i < TOPIC_COUNT; ++i)
            {
                GetHistogramsRequest histReq = new GetHistogramsRequest();
                histReq.Project  = "ali-winlogtail-project";
                histReq.Logstore = "sls-logstore-002";
                histReq.Topic    = "dotnet_topic_" + topicFlag + "_" + i;
                histReq.To       = (uint)(topicFlag + PUT_COUNT + 1);
                histReq.From     = (uint)topicFlag;
                GetHistogramsResponse histResp = client.GetHistograms(histReq);
                Assert.IsTrue(histResp.TotalCount == (PUT_COUNT / TOPIC_COUNT) * LOGITEM_COUNT);
                if ((i + 1) % SLEEP_INTERVAL == 0)
                {
                    Thread.Sleep(SLEEP_TIME);
                }
            }
            Thread.Sleep(SLEEP_TIME);
            for (int i = 0; i < TOPIC_COUNT; ++i)
            {
                for (int k = 0; k < 2; ++k)
                {
                    GetHistogramsRequest histReq = new GetHistogramsRequest();
                    histReq.Project  = "ali-winlogtail-project";
                    histReq.Logstore = "sls-logstore-002";
                    histReq.Topic    = "dotnet_topic_" + topicFlag + "_" + i;
                    histReq.Query    = "error_" + i + "_" + k;
                    histReq.To       = (uint)(topicFlag + PUT_COUNT + 1);
                    histReq.From     = (uint)topicFlag;
                    GetHistogramsResponse histResp = client.GetHistograms(histReq);
                    Assert.IsTrue(histResp.TotalCount == (PUT_COUNT / TOPIC_COUNT) * LOGITEM_COUNT);
                    if ((k + 1) * (i + 1) % SLEEP_INTERVAL == 0)
                    {
                        Thread.Sleep(SLEEP_TIME);
                    }
                }
            }
            Thread.Sleep(SLEEP_TIME);
            for (int i = 0; i < TOPIC_COUNT; ++i)
            {
                GetLogsRequest getLogsReq = new GetLogsRequest();
                getLogsReq.Project  = "ali-winlogtail-project";
                getLogsReq.Logstore = "sls-logstore-002";
                getLogsReq.Topic    = "dotnet_topic_" + topicFlag + "_" + i;
                getLogsReq.Lines    = 120;
                getLogsReq.To       = (uint)(topicFlag + PUT_COUNT + 1);
                getLogsReq.From     = (uint)topicFlag;
                GetLogsResponse getLogsResp = client.GetLogs(getLogsReq);
                Assert.IsTrue(getLogsResp.Count == (PUT_COUNT / TOPIC_COUNT) * LOGITEM_COUNT);
                String logs = getLogsResp.Print();
                for (int m = 0; m < CONTENT_COUNT; ++m)
                {
                    String dstStr = "error_" + i + "_" + m;
                    Assert.IsTrue(ChildStringOccurTimes(logs, dstStr) == getLogsResp.Count);
                }
                if ((i + 1) % SLEEP_INTERVAL == 0)
                {
                    Thread.Sleep(SLEEP_TIME);
                }
            }
            Thread.Sleep(SLEEP_TIME);
            for (int i = 0; i < TOPIC_COUNT; ++i)
            {
                for (int k = 0; k < 2; ++k)
                {
                    GetLogsRequest getLogsReq = new GetLogsRequest();
                    getLogsReq.Project  = "ali-winlogtail-project";
                    getLogsReq.Logstore = "sls-logstore-002";
                    getLogsReq.Topic    = "dotnet_topic_" + topicFlag + "_" + i;
                    getLogsReq.Query    = "error_" + i + "_" + k;
                    getLogsReq.Lines    = 120;
                    getLogsReq.To       = (uint)(topicFlag + PUT_COUNT + 1);
                    getLogsReq.From     = (uint)topicFlag;
                    GetLogsResponse getLogsResp = client.GetLogs(getLogsReq);
                    Assert.IsTrue(getLogsResp.Count == (PUT_COUNT / TOPIC_COUNT) * LOGITEM_COUNT);
                    String logs = getLogsResp.Print();
                    for (int m = 0; m < CONTENT_COUNT; ++m)
                    {
                        String dstStr = "error_" + i + "_" + m;
                        Assert.IsTrue(ChildStringOccurTimes(logs, dstStr) == getLogsResp.Count);
                    }
                    if ((k + 1) * (i + 1) % SLEEP_INTERVAL == 0)
                    {
                        Thread.Sleep(SLEEP_TIME);
                    }
                }
            }
            Console.WriteLine();
        }
        public void TestException()
        {
            LogClient client = new LogClient(ClientTestData.TEST_ENDPOINT, ClientTestData.TEST_ACCESSKEYID, ClientTestData.TEST_ACCESSKEY);

            client.SetWebSend(MockSend);
            //server error
            try
            {
                GetLogsRequest request = new GetLogsRequest();
                request.Project  = ClientTestData.TEST_PROJECT;
                request.Logstore = "server_error_return";
                request.Query    = "error";
                request.Topic    = "mockTopic";
                request.From     = 1000;
                request.To       = 2000;
                request.Lines    = 200;
                request.Offset   = 0;
                GetLogsResponse response = null;
                response = client.GetLogs(request);
                Assert.Fail("server exception is not triggered");
            }
            catch (LogException exp)
            {
                Assert.IsTrue(exp.ErrorCode.CompareTo("SLSServerErrorTest") == 0);
            }
            //json error
            try
            {
                GetLogsRequest request = new GetLogsRequest();
                request.Project  = ClientTestData.TEST_PROJECT;
                request.Logstore = "response_json_error_field";
                request.Query    = "error";
                request.Topic    = "mockTopic";
                request.From     = 1000;
                request.To       = 2000;
                request.Lines    = 200;
                request.Offset   = 0;
                GetLogsResponse response = null;
                response = client.GetLogs(request);
                Assert.Fail("json exception is not triggered");
            }
            catch (LogException exp)
            {
                Assert.IsTrue(exp.ErrorCode.CompareTo("SLSBadResponse") == 0);
            }
            try
            {
                GetLogsRequest request = new GetLogsRequest();
                request.Project  = ClientTestData.TEST_PROJECT;
                request.Logstore = "response_json_error_format";
                request.Query    = "error";
                request.Topic    = "mockTopic";
                request.From     = 1000;
                request.To       = 2000;
                request.Lines    = 200;
                request.Offset   = 0;
                GetLogsResponse response = null;
                response = client.GetLogs(request);
                Assert.Fail("json exception is not triggered");
            }
            catch (LogException exp)
            {
                Assert.IsTrue(exp.ErrorCode.CompareTo("SLSBadResponse") == 0);
            }
            //response stream error
            try
            {
                GetLogsRequest request = new GetLogsRequest();
                request.Project  = ClientTestData.TEST_PROJECT;
                request.Logstore = "response_stream_error";
                request.Query    = "error";
                request.Topic    = "mockTopic";
                request.From     = 1000;
                request.To       = 2000;
                request.Lines    = 200;
                request.Offset   = 0;
                GetLogsResponse response = null;
                response = client.GetLogs(request);
                Assert.Fail("io exception is not triggered");
            }
            catch (LogException exp)
            {
                Assert.IsTrue(exp.ErrorCode.CompareTo("SLSBadResponse") == 0);
            }
        }
示例#28
0
        static void Main(string[] args)
        {
            // select you endpoint https://help.aliyun.com/document_detail/29008.html
            String endpoint    = "http://cn-hangzhou.log.aliyuncs.com",
                   accesskeyId = "", //阿里云授权id
                   accessKey   = "", //阿里云授权Key
                   project     = "", //项目名称,每个项目可以创建10个日志库
                   logstore    = ""; //日志库
            //int shardId = 0;//分区id
            LogClient client = new LogClient(endpoint, accesskeyId, accessKey);

            //init http connection timeout
            client.ConnectionTimeout = client.ReadWriteTimeout = 10000;
            //list logstores
            foreach (String l in client.ListLogstores(new ListLogstoresRequest(project)).Logstores)
            {
                Console.WriteLine(l);
            }
            //put logs
            PutLogsRequest putLogsReqError = new PutLogsRequest
            {
                Project  = project,
                Topic    = "dotnet_topic",
                Logstore = logstore,
                LogItems = new List <LogItem>()
            };

            for (int i = 1; i <= 10; ++i)
            {
                LogItem logItem = new LogItem {
                    Time = DateUtils.TimeSpan()
                };
                for (int k = 0; k < 10; ++k)
                {
                    logItem.PushBack("info", "GetLogs 接口查询指定 Project 下某个 Logstore 中的日志数据。还可以通过指定相关参数仅查询符合指定条件的日志数据。");
                }
                putLogsReqError.LogItems.Add(logItem);
            }
            PutLogsResponse putLogRespError = client.PutLogs(putLogsReqError);

            Thread.Sleep(5000);

            //query logs, if query string is "", it means query all data
            GetLogsRequest getLogReq = new GetLogsRequest(project,
                                                          logstore,
                                                          DateUtils.TimeSpan() - 100,
                                                          DateUtils.TimeSpan(),
                                                          "dotnet_topic",
                                                          "",
                                                          100,
                                                          0,
                                                          false);
            GetLogsResponse getLogResp = client.GetLogs(getLogReq);

            Console.WriteLine("Log count : " + getLogResp.Logs.Count.ToString());
            for (int i = 0; i < getLogResp.Logs.Count; ++i)
            {
                var log = getLogResp.Logs[i];
                Console.WriteLine("Log time : " + DateUtils.GetDateTime(log.Time));
                for (int j = 0; j < log.Contents.Count; ++j)
                {
                    Console.WriteLine("\t" + log.Contents[j].Key + " : " + log.Contents[j].Value);
                }
                Console.WriteLine("");
            }

            //query histogram
            GetHistogramsResponse getHisResp = client.GetHistograms(new GetHistogramsRequest(project,
                                                                                             logstore,
                                                                                             DateUtils.TimeSpan() - 100,
                                                                                             DateUtils.TimeSpan(),
                                                                                             "dotnet_topic",
                                                                                             ""));

            Console.WriteLine("Histograms total count : " + getHisResp.TotalCount.ToString());

            //list shards
            ListShardsResponse listResp = client.ListShards(new ListShardsRequest(project, logstore));

            Console.WriteLine("Shards count : " + listResp.Shards.Count.ToString());

            //batch get logs
            for (int i = 0; i < listResp.Shards.Count; ++i)
            {
                //get cursor
                String cursor = client.GetCursor(new GetCursorRequest(project, logstore, listResp.Shards[i], ShardCursorMode.BEGIN)).Cursor;
                Console.WriteLine("Cursor : " + cursor);
                BatchGetLogsResponse batchGetResp = client.BatchGetLogs(new BatchGetLogsRequest(project, logstore, listResp.Shards[i], cursor, 10));
                Console.WriteLine("Batch get log, shard id : " + listResp.Shards[i].ToString() + ", log count : " + batchGetResp.LogGroupList.LogGroupList_Count.ToString());
            }

            Console.ReadKey();
        }