public override async Task <HeartBeatData> GetDataAsync(CancellationToken cancellation = default) { var httpClient = new HttpClient(); var stopWatch = new Stopwatch(); stopWatch.Start(); try { using var request = CreateHttpRequest(); using var response = await httpClient.SendAsync(request, cancellation); stopWatch.Stop(); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); var webJobResponse = JsonSerializer.Deserialize <AzureWebJobStatusResponseDto>(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); if (webJobResponse.Status == "Running") { return(new HeartBeatData((int)stopWatch.ElapsedMilliseconds, Status.OK)); } } return(new HeartBeatData(0, Status.OK)); } catch (Exception ex) { return(HeartBeatData.Error(ex.Message + ex.InnerException?.Message)); } }
public async Task RecordDataAsync(string tileName, int responseInMs, string appVersion, CancellationToken cancellationToken) { var heartBeatData = new HeartBeatData(responseInMs, appVersion, DateTimeOffsetProvider.Now); await TilesRepository.InsertData(tileName, TileType.HeartBeat, heartBeatData.ToBsonDocument(), cancellationToken); await _eventDispatcher.PublishAsync(new NewDataEvent(new TileId(tileName, TileType.HeartBeat), new { heartBeatData.ResponseTimeInMs, heartBeatData.AppVersion, heartBeatData.AddedOn }), cancellationToken); }
private byte[] GetSerializedHeartBeatData() { HeartBeatData heartBeatData = new HeartBeatData() { IPAddress = TcpHelper.SelfIPAddress.GetAddressBytes(), ServicePort = _servicePort, NodeState = this.NodeState //whatever beat kind is currently mentioned }; BinaryFormatter formatter = new BinaryFormatter(); MemoryStream memStream = new MemoryStream(); formatter.Serialize(memStream, heartBeatData); return(memStream.ToArray()); }
public override async Task <HeartBeatData> GetDataAsync(CancellationToken cancellationToken = default) { var httpClient = new HttpClient(); var stopwatcher = new Stopwatch(); stopwatcher.Start(); try { var response = await httpClient.GetAsync($"{ConfigProvider.GetConfigEntry($"{RootConfig}:HeartBeatAddress")}", cancellationToken); stopwatcher.Stop(); if (response.IsSuccessStatusCode) { return(new HeartBeatData((int)stopwatcher.ElapsedMilliseconds, Status.OK)); } return(new HeartBeatData(0, Status.OK)); } catch (Exception ex) { return(HeartBeatData.Error(ex.Message + ex.InnerException.Message)); } }
public async Task <HeartBeatData> GetLasterDataAsync(int recentMinutes, Application application) { int pollSeconds = 20; int length = recentMinutes * 60 / pollSeconds; //确定多少区段 TimeSection[] times = new TimeSection[length]; for (int i = length - 1; i >= 0; i--) { if (i == length - 1) { TimeSection firsSection = new TimeSection { EndTime = DateTime.Now }; firsSection.StartTime = firsSection.EndTime.AddSeconds(-1 * pollSeconds); times[i] = firsSection; } else { TimeSection timeSection = new TimeSection(); timeSection.EndTime = times[i + 1].StartTime; timeSection.StartTime = timeSection.EndTime.AddSeconds(-1 * pollSeconds); times[i] = timeSection; } } StringBuilder sql = new StringBuilder(); sql.Append($" SELECT logged FROM `log` WHERE LEVEL='Info' AND message='心跳检测' AND Application='{application.GetDescription().ToString()}' AND "); List <string> timeList = new List <string>(); for (int i = 0; i < times.Length; i++) { timeList.Add($" (logged >'{times[i].StartTime}' AND logged <= '{times[i].EndTime}') "); } string skipsql = timeList.Join(" OR "); sql.Append(" ( " + skipsql + " ) "); sql.Append(" ORDER BY logged DESC "); var loggedlist = Connection.Query <DateTime>(sql.ToString(), null).ToList(); HeartBeatData data = new HeartBeatData(); data.XData = new string[times.Length + 1]; data.YData = new decimal[times.Length + 1]; for (int i = 0; i < times.Length; i++) { var item = times[i]; var first = loggedlist.FirstOrDefault(m => m > item.StartTime && m <= item.EndTime); data.XData[i] = item.StartTime.ToString("HH:mm:ss"); if (first != null) { if ((i + 1) % 2 == 1) { data.YData[i] = 1; } else { data.YData[i] = -1; } } else { data.YData[i] = 0; } } data.XData[times.Length] = times.Last().EndTime.ToString("HH:mm:ss"); data.YData[times.Length] = data.YData[times.Length - 1] * -1; return(data); }