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);
        }
Exemple #3
0
        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);
        }