private API.Client CreateApi() { return(ApiFab.CreateNodeApi(Network.GetById(RouteData.Values["network"].ToString()).Ip)); }
private API.Client CreateApi() { return(ApiFab.CreateNodeApi(Network.GetById(Net).Ip)); }
private void OnCacheTimer(object state) { var tpState = (IndexServiceState)state; try { if (tpState.Net.Api.EndsWith("/Api")) { using (var client = ApiFab.CreateNodeApi(tpState.Net.Ip)) { // Service available if (tpState.Net.Updating) { tpState.Net.Updating = false; } // Request blocks if ((!tpState.PoolsOut.Any() && !tpState.PoolsIn.Any())) { var result = client.PoolListGet(0, SizeOut); tpState.PoolsOut = result.Pools.Select(p => new PoolInfo(p)).ToList(); } else { var result = client.PoolListGet(0, 20); lock (tpState.PoolsLock) { var firstPoolNum = tpState.PoolsIn.Any() ? tpState.PoolsIn[0].Number : tpState.PoolsOut[0].Number; var nPools = result.Pools.TakeWhile(p => (p.PoolNumber > firstPoolNum) || (p.PoolNumber < firstPoolNum - 1000)).Select(p => new PoolInfo(p)).ToList(); tpState.PoolsIn = nPools.Concat(tpState.PoolsIn).ToList(); } } // Request stats if (tpState.StatRequestCounter == 0) { var stats = client.StatsGet(); if (stats != null && stats.Stats.Count >= 4) { var statsSorted = stats.Stats.OrderBy(s => s.PeriodDuration).ToList(); var statData = new StatData(); for (var i = 0; i < 4; i++) { statData.Pdata[i] = new PeriodData(statsSorted[i]); } tpState.StatData = statData; } } } } else if (tpState.Net.Api.EndsWith("/TestApi")) { using (var client = ApiFab.CreateTestApi(tpState.Net.Ip)) { // Service available if (tpState.Net.Updating) { tpState.Net.Updating = false; } // Request blocks if ((!tpState.PoolsOut.Any() && !tpState.PoolsIn.Any())) { var result = client.PoolListGet(0, SizeOut); tpState.PoolsOut = result.Pools.Where(p => p.PoolNumber > 0).Select(p => new PoolInfo(p)).ToList(); } else { var result = client.PoolListGet(0, 20); lock (tpState.PoolsLock) { var firstPoolNum = tpState.PoolsIn.Any() ? tpState.PoolsIn[0].Number : tpState.PoolsOut[0].Number; var nPools = result.Pools.Where(p => p.PoolNumber > 0).TakeWhile(p => (p.PoolNumber > firstPoolNum) || (p.PoolNumber < firstPoolNum - 1000)).Select(p => new PoolInfo(p)).ToList(); tpState.PoolsIn = nPools.Concat(tpState.PoolsIn).ToList(); } } // Request stats if (tpState.StatRequestCounter == 0) { var stats = client.StatsGet(); if (stats != null && stats.Stats.Count >= 4) { var statsSorted = stats.Stats.OrderBy(s => s.PeriodDuration).ToList(); var statData = new StatData(); for (var i = 0; i < 4; i++) { statData.Pdata[i] = new PeriodData(statsSorted[i]); } tpState.StatData = statData; } } } } else if (tpState.Net.Api.EndsWith("/ReleaseApi")) { using (var client = ApiFab.CreateReleaseApi(tpState.Net.Ip)) { // Service available if (tpState.Net.Updating) { tpState.Net.Updating = false; } // Request blocks if ((!tpState.PoolsOut.Any() && !tpState.PoolsIn.Any())) { var result = client.PoolListGet(0, SizeOut); tpState.PoolsOut = result.Pools.Where(p => p.PoolNumber > 0).Select(p => new PoolInfo(p)).ToList(); } else { var result = client.PoolListGet(0, 20); var firstPoolNum = tpState.PoolsIn.Any() ? tpState.PoolsIn[0].Number : tpState.PoolsOut[0].Number; var newPools = result.Pools .Where(p => p.PoolNumber > 0) .TakeWhile(p => p.PoolNumber > firstPoolNum || p.PoolNumber < firstPoolNum - 1000) .Select(p => new PoolInfo(p)).ToList(); lock (tpState.PoolsLock) tpState.PoolsIn = newPools.Concat(tpState.PoolsIn).ToList(); } // Request stats if (tpState.StatRequestCounter == 0) { var stats = client.StatsGet(); if (stats != null && stats.Stats.Count >= 4) { var statsSorted = stats.Stats.OrderBy(s => s.PeriodDuration).ToList(); var statData = new StatData(); for (var i = 0; i < 4; i++) { statData.Pdata[i] = new PeriodData(statsSorted[i]); } tpState.StatData = statData; } } } } if (tpState.StatRequestCounter < Settings.UpdStatsPeriodSec * 1000 / Period) { tpState.StatRequestCounter++; } else { tpState.StatRequestCounter = 0; } } catch (Thrift.Transport.TTransportException e) { tpState.Net.Updating = true; _logger.LogError(e, ""); } catch (Exception e) { _logger.LogError(e, ""); } tpState.TimerForCache.Change(Period, 0); }
private void OnTimer(object state) { var tpState = (TpsServiceState)state; try { using (var client = ApiFab.CreateNodeApi(tpState.Net.Ip)) { List <PoolInfo> lastPools; if (tpState.Points == null) { var points = GetPoints(client, 1000, out lastPools); if (points.Length > 2) { tpState.Points = new ConcurrentQueue <Point>(points.Skip(1).Take(points.Length - 2)); } } else { while (tpState.Points.Count > 100) { tpState.Points.TryDequeue(out _); } var points = GetPoints(client, 100, out lastPools); var lasttime = tpState.Points.Last().X; if (points.Length > 1) { foreach (var point in points.Take(points.Length - 1).Where(p => p.X > lasttime)) { tpState.Points.Enqueue(point); } } } var indexData = new IndexData { LastBlocks = lastPools }; if (lastPools.Any()) { var lastPool = lastPools.First(); indexData.LastBlock = lastPool.Number; indexData.LastTime = lastPool.Age.Equals("0") ? DateTime.Now.ToString("G") : lastPool.Time.ToString("G"); indexData.LastBlockTxCount = lastPool.TxCount; var last10Pools = lastPools.Take(10).ToList(); if ((DateTime.Now - last10Pools.First().Time).TotalSeconds < 2) { var time10Pools = (last10Pools.First().Time - last10Pools.Last().Time).TotalSeconds; indexData.Pps = (int)(time10Pools > 0 ? last10Pools.Count / time10Pools : 4); } } if (tpState.StatRequestCounter == 0) { var stats = client.StatsGet(); if (stats != null && stats.Stats.Count >= 4) { var statsSorted = stats.Stats.OrderBy(s => s.PeriodDuration).ToArray(); for (var i = 0; i < 4; i++) { indexData.SetPData(i, new PeriodData(statsSorted[i])); } //indexData.CorrectTotal(); } } else if (tpState.IndexData != null) { indexData.Pdata = tpState.IndexData.Pdata; } tpState.IndexData = indexData; if (tpState.StatRequestCounter < 100) { tpState.StatRequestCounter++; } else { tpState.StatRequestCounter = 0; } } } catch (Exception e) { _logger.LogError(e, "Exception in TpsSource"); try { if (tpState.IndexData != null) { tpState.IndexData.Pps = 0; var now = DateTime.Now; foreach (var block in tpState.IndexData.LastBlocks) { block.RefreshAge(now); } } } catch (Exception ex) { _logger.LogError(ex, "Secondary Exception in TpsSource"); } } tpState.Timer.Change(Period, 0); }