public async Task <ApiResponse <ChartResponse> > GetLogStats() { var response = new ApiResponse <ChartResponse>(); try { var request = new LogGrpcRequest { Days = 14, Logger = "all", MinLevel = 3 }; var logResponse = await _logGrpcService.GetLogsAsync(request); if (logResponse.IsOk) { logResponse.Logs = logResponse.Logs ?? new List <LaobianLog>(); var groupedLogs = logResponse.Logs.GroupBy(x => x.TimeStamp.Date).OrderBy(x => x.Key); var chartResponse = new ChartResponse { Title = "# Warning/Error logs", Type = "bar" }; foreach (var item in groupedLogs) { chartResponse.Labels.Add(item.Key.ToRelativeDaysHuman()); chartResponse.Data.Add(item.Count()); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = logResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, "Get logs stats failed."); } return(response); }
public async Task <ApiResponse <ChartResponse> > GetPostAccessChart([FromRoute] string postLink) { var response = new ApiResponse <ChartResponse>(); try { _blogGrpcRequest.ExtractRuntime = true; _blogGrpcRequest.Link = postLink; var blogResponse = await _blogGrpcService.GetPostAsync(_blogGrpcRequest); if (blogResponse.IsOk) { var chartResponse = new ChartResponse { Title = "当天的访问量", Type = "line" }; for (var i = 14; i >= 0; i--) { var date = DateTime.Now.Date.AddDays(-i); blogResponse.PostRuntime.Accesses ??= new List <BlogAccess>(); var item = blogResponse.PostRuntime.Accesses.FirstOrDefault(x => x.Date == date); chartResponse.Data.Add(item?.Count ?? 0); chartResponse.Labels.Add(date.ToRelativeDaysHuman()); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = blogResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, $"Get post {postLink} access stats failed."); } return(response); }
public async Task <ApiResponse <ChartResponse> > GetChartForCountPerMonth() { var response = new ApiResponse <ChartResponse>(); try { var request = new DiaryGrpcRequest { Year = DateTime.Now.Year }; var diaryResponse = await _diaryGrpcService.GetDiaryDatesAsync(request); if (diaryResponse.IsOk) { var chart = new ChartResponse { Title = "当月的日记数", Type = "line" }; diaryResponse.DiaryDates ??= new List <DateTime>(); foreach (var item in diaryResponse.DiaryDates.GroupBy(x => x.Month).OrderBy(x => x.Key)) { chart.Data.Add(item.Count()); chart.Labels.Add($"{item.Key}月"); } response.Content = chart; } else { response.IsOk = false; response.Message = diaryResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, "Get chart for count per month failed."); } return(response); }
public async Task <ApiResponse <ChartResponse> > GetChartForWordsPerYear() { var response = new ApiResponse <ChartResponse>(); try { var request = new DiaryGrpcRequest { ExtractRuntime = true }; var diaryResponse = await _diaryGrpcService.GetDiariesAsync(request); if (diaryResponse.IsOk) { var chart = new ChartResponse { Title = "当年的日记字数", Type = "line" }; diaryResponse.DiaryRuntimeList ??= new List <DiaryRuntime>(); foreach (var item in diaryResponse.DiaryRuntimeList.GroupBy(x => x.Raw.Date.Year).OrderBy(x => x.Key)) { chart.Data.Add(item.Sum(x => x.Raw.MarkdownContent.Length)); chart.Labels.Add($"{item.Key}年"); } response.Content = chart; } else { response.IsOk = false; response.Message = diaryResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, "Get chart for words per year failed."); } return(response); }
public async Task <ApiResponse <ChartResponse> > GetPostsWordsCountStats() { var response = new ApiResponse <ChartResponse>(); try { _blogGrpcRequest.ExtractRuntime = true; var blogResponse = await _blogGrpcService.GetPostsAsync(_blogGrpcRequest); if (blogResponse.IsOk) { blogResponse.Posts ??= new List <BlogPostRuntime>(); var items = blogResponse.Posts.GroupBy(x => x.Raw.CreateTime.Year).OrderBy(x => x.Key); var chartResponse = new ChartResponse { Title = "当年文章的总字数", Type = "bar" }; foreach (var item in items) { chartResponse.Data.Add(item.Sum(x => x.Raw.MdContent.Length)); chartResponse.Labels.Add(item.Key.ToString()); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = blogResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, "Get posts stats for words count failed."); } return(response); }
public async Task <ApiResponse <ChartResponse> > GetPostsAccess([FromQuery] int days) { var response = new ApiResponse <ChartResponse>(); try { _blogGrpcRequest.ExtractRuntime = true; var blogResponse = await _blogGrpcService.GetPostsAsync(_blogGrpcRequest); if (blogResponse.IsOk) { blogResponse.Posts ??= new List <BlogPostRuntime>(); var access = blogResponse.Posts.SelectMany(x => x.Accesses) .Where(x => x.Date >= DateTime.Now.AddDays(-days) && x.Date <= DateTime.Now).GroupBy(x => x.Date) .OrderBy(x => x.Key); var chartResponse = new ChartResponse { Title = "访问量", Type = "line" }; foreach (var item in access) { chartResponse.Data.Add(item.Sum(x => x.Count)); chartResponse.Labels.Add(item.Key.ToRelativeDaysHuman()); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = blogResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, $"Get posts access failed for {days} days."); } return(response); }
public async Task <ApiResponse <ChartResponse> > GetWordsPerYearChart() { var response = new ApiResponse <ChartResponse>(); try { var noteResponse = await _noteGrpcService.GetStatWordsPerYearAsync(_request); if (noteResponse.IsOk) { noteResponse.Data ??= new Dictionary <string, int>(); var chartResponse = new ChartResponse { Title = "当年文章的总字数", Type = "line" }; foreach (var item in noteResponse.Data) { chartResponse.Data.Add(item.Value); chartResponse.Labels.Add(item.Key); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = noteResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, $"{nameof(GetWordsPerYearChart)} failed."); } return(response); }
public async Task <ApiResponse <ChartResponse> > GetReadStats() { var response = new ApiResponse <ChartResponse>(); try { var request = new ReadGrpcRequest(); var itemsResponse = await _readGrpcService.GetReadItemsAsync(request); if (itemsResponse.IsOk) { itemsResponse.ReadItems ??= new List <ReadItemRuntime>(); var chartResponse = new ChartResponse { Title = "当年阅读数", Type = "bar" }; foreach (var item in itemsResponse.ReadItems.GroupBy(x => x.Raw.StartTime.Year).OrderBy(x => x.Key)) { chartResponse.Data.Add(item.Count()); chartResponse.Labels.Add(item.Key.ToString()); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = itemsResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, "Get read stats failed."); } return(response); }
private IEnumerator CommunicateWithServer() { string url = BASE_URL + "debug/temperature/"; ChartRequest chartRequest = new ChartRequest(); string jsonString = JsonUtility.ToJson(chartRequest); UnityWebRequest request = UnityWebRequest.Post(url, jsonString); request.SetRequestHeader("Content-Type", "application/json"); request.SetRequestHeader("Accept", "application/json"); yield return(request.SendWebRequest()); if (!request.isNetworkError && request.responseCode == 200) { Debug.Log("Success."); Debug.Log(request.downloadHandler.text); string stringResponse = request.downloadHandler.text; chartResponse = JsonConvert.DeserializeObject <ChartResponse>( stringResponse); } else { Debug.Log("Fail"); Debug.Log(request.responseCode); Debug.Log(request.error); chartResponse = new ChartResponse { success = false, errorMsg = request.error, }; } UpdateUI(); }
public string ConvertCandlesPolygon(string symbol, string timeFrame, decimal utcTime) { List <GetCandlesResponse> candles = new List <GetCandlesResponse>(); List <List <decimal?> > hloc = new List <List <decimal?> >(); List <long?> v1 = new List <long?>(); List <long?> xSeries = new List <long?>(); string from = DateTime.UtcNow.AddMinutes((long)utcTime).AddDays(-10).ToString("yyyy/MM/dd").Replace("/", "-"); string to = DateTime.UtcNow.AddMinutes((long)utcTime).AddDays(1).ToString("yyyy/MM/dd").Replace("/", "-"); var candlesPolygon = _uow.MarketRates.GetCandlesPolygon(UtilityMethods.convertSymbolPolygon(symbol), from, to, timeFrame); for (var k = 0; k < candlesPolygon.results.Count; k++) { hloc.Add(new List <decimal?> { candlesPolygon.results[k].h, candlesPolygon.results[k].l, candlesPolygon.results[k].o, candlesPolygon.results[k].c }); v1.Add((long)candlesPolygon.results[k].v); xSeries.Add(candlesPolygon.results[k].t / 1000); } try { var startTime = 0; if (xSeries.Count >= 25) { startTime = xSeries.Count - 25; } else { startTime = 0; } var endTime = xSeries.Count - 1; DateTime mFromDateTime = UnixTimeStampToDateTime(xSeries[startTime].Value).AddMinutes((-1 * (double)(utcTime))); DateTime mToDateTime = UnixTimeStampToDateTime(xSeries[endTime].Value).AddMinutes(((-1 * (double)(utcTime)))); ChartResponse chart = new ChartResponse() { data = new Data() { HLOC = new HLOC() { LKOH = hloc }, V1 = new V1() { LKOH = v1 }, XSeries = new XSeries() { LKOH = xSeries } }, dataSettings = new DataSetting() { useHash = false, dateFrom = mFromDateTime.Day.ToString("D2") + "." + mFromDateTime.Month.ToString("D2") + "." + mFromDateTime.Year.ToString("D4") + " " + mFromDateTime.Hour.ToString("D2") + ":" + mFromDateTime.Minute.ToString("D2") + ":" + mFromDateTime.Second.ToString("D2"), dateTo = mToDateTime.Day.ToString("D2") + "." + mToDateTime.Month.ToString("D2") + "." + mToDateTime.Year.ToString("D4") + " " + mToDateTime.Hour.ToString("D2") + ":" + mToDateTime.Minute.ToString("D2") + ":" + mToDateTime.Second.ToString("D2"), start = mFromDateTime.Day.ToString("D2") + "." + mFromDateTime.Month.ToString("D2") + "." + mFromDateTime.Year.ToString("D4") + " " + mFromDateTime.Hour.ToString("D2") + ":" + mFromDateTime.Minute.ToString("D2") + ":" + mFromDateTime.Second.ToString("D2"), end = mToDateTime.Day.ToString("D2") + "." + mToDateTime.Month.ToString("D2") + "." + mToDateTime.Year.ToString("D4") + " " + mToDateTime.Hour.ToString("D2") + ":" + mToDateTime.Minute.ToString("D2") + ":" + mToDateTime.Second.ToString("D2"), graphicIndicator = "", hash = "", id = "LKOH", interval = "I15", timeFrame = 1440 } }; var call = JsonConvert.SerializeObject(chart); var call2 = call.Remove((call.Length - 1), 1).Remove(0, 2); call2 = call2.Remove(4, 1); for (var i = 0; i < call2.Length; i++) { if (call2[i].Equals('d') && call2[i + 4].Equals('S')) { call2 = call2.Remove((i - 1), 1).Remove((i + 11), 1); break; } } return(call2); } catch (Exception ex) { return(null); } }
public string ConvertCandles(string symbol, string timeFrame, decimal utcTime) { List <GetCandlesResponse> candles = new List <GetCandlesResponse>(); List <List <decimal?> > hloc = new List <List <decimal?> >(); List <long?> v1 = new List <long?>(); List <long?> xSeries = new List <long?>(); var candlesBinance = (object[][])_uow.MarketRates.GetTestCandles(UtilityMethods.convertSymbol(symbol), timeFrame, 700); if (candlesBinance != null) { for (var val = 0; val < candlesBinance.Length; val++) { hloc.Add(new List <decimal?> { decimal.Parse(candlesBinance[val][2].ToString()), decimal.Parse(candlesBinance[val][3].ToString()), decimal.Parse(candlesBinance[val][1].ToString()), decimal.Parse(candlesBinance[val][4].ToString()) }); v1.Add((long)decimal.Parse(candlesBinance[val][9].ToString())); xSeries.Add((long)candlesBinance[val][0] / 1000); } try { var startTime = xSeries.Count - 25; var endTime = xSeries.Count - 1; DateTime mFromDateTime = UnixTimeStampToDateTime(xSeries[startTime].Value).AddMinutes((-1 * (double)(utcTime))); DateTime mToDateTime = UnixTimeStampToDateTime(xSeries[endTime].Value).AddMinutes(((-1 * (double)(utcTime)))); ChartResponse chart = new ChartResponse() { data = new Data() { HLOC = new HLOC() { LKOH = hloc }, V1 = new V1() { LKOH = v1 }, XSeries = new XSeries() { LKOH = xSeries } }, dataSettings = new DataSetting() { useHash = false, dateFrom = mFromDateTime.Day.ToString("D2") + "." + mFromDateTime.Month.ToString("D2") + "." + mFromDateTime.Year.ToString("D4") + " " + mFromDateTime.Hour.ToString("D2") + ":" + mFromDateTime.Minute.ToString("D2") + ":" + mFromDateTime.Second.ToString("D2"), dateTo = mToDateTime.Day.ToString("D2") + "." + mToDateTime.Month.ToString("D2") + "." + mToDateTime.Year.ToString("D4") + " " + mToDateTime.Hour.ToString("D2") + ":" + mToDateTime.Minute.ToString("D2") + ":" + mToDateTime.Second.ToString("D2"), start = mFromDateTime.Day.ToString("D2") + "." + mFromDateTime.Month.ToString("D2") + "." + mFromDateTime.Year.ToString("D4") + " " + mFromDateTime.Hour.ToString("D2") + ":" + mFromDateTime.Minute.ToString("D2") + ":" + mFromDateTime.Second.ToString("D2"), end = mToDateTime.Day.ToString("D2") + "." + mToDateTime.Month.ToString("D2") + "." + mToDateTime.Year.ToString("D4") + " " + mToDateTime.Hour.ToString("D2") + ":" + mToDateTime.Minute.ToString("D2") + ":" + mToDateTime.Second.ToString("D2"), graphicIndicator = "", hash = "", id = "LKOH", interval = "I15", timeFrame = 1440 } }; var call = JsonConvert.SerializeObject(chart); var call2 = call.Remove((call.Length - 1), 1).Remove(0, 2); call2 = call2.Remove(4, 1); for (var i = 0; i < call2.Length; i++) { if (call2[i].Equals('d') && call2[i + 4].Equals('S')) { call2 = call2.Remove((i - 1), 1).Remove((i + 11), 1); break; } } return(call2); } catch (Exception ex) { return(null); } } return(null); }