private async Task GetMinerInfoAsync(HttpContext context, Match m) { var pool = GetPool(context, m); if (pool == null) { return; } var address = m.Groups["address"]?.Value; if (string.IsNullOrEmpty(address)) { context.Response.StatusCode = 404; return; } var perfMode = context.GetQueryParameter <string>("perfMode", "day"); var statsResult = cf.RunTx((con, tx) => statsRepo.GetMinerStats(con, tx, pool.Id, address), true, IsolationLevel.Serializable); MinerStats stats = null; if (statsResult != null) { stats = mapper.Map <MinerStats>(statsResult); if (stats != null && stats.Performance != null && stats.Performance.Workers != null) { foreach (var worker in stats.Performance.Workers) { try { var lastShareDate = cf.Run(con => shareRepo.GetLastShare(con, pool.Id, address, worker.Key)); worker.Value.LastShare = lastShareDate; } catch { } } } // optional fields if (statsResult.LastPayment != null) { // Set timestamp of last payment stats.LastPayment = statsResult.LastPayment.Created; // Compute info link if (CoinMetaData.TxInfoLinks.TryGetValue(pool.Coin.Type, out var baseUrl)) { stats.LastPaymentLink = string.Format(baseUrl, statsResult.LastPayment.TransactionConfirmationData); } } stats.PerformanceSamples = GetMinerPerformanceInternal(perfMode, pool, address); } await SendJsonAsync(context, stats); }
private async Task GetMinerInfoAsync(HttpContext context, Match m) { var pool = GetPool(context, m); if (pool == null) { return; } var address = m.Groups["address"]?.Value; if (string.IsNullOrEmpty(address)) { context.Response.StatusCode = 404; return; } var perfMode = context.GetQueryParameter <string>("perfMode", "day"); var statsResult = await cf.RunTx((con, tx) => statsRepo.GetMinerStatsAsync(con, tx, pool.Id, address), true, IsolationLevel.Serializable); MinerStats stats = null; if (statsResult != null) { stats = mapper.Map <MinerStats>(statsResult); // optional fields if (statsResult.LastPayment != null) { // Set timestamp of last payment stats.LastPayment = statsResult.LastPayment.Created; // Compute info link var baseUrl = pool.Template.ExplorerTxLink; if (!string.IsNullOrEmpty(baseUrl)) { stats.LastPaymentLink = string.Format(baseUrl, statsResult.LastPayment.TransactionConfirmationData); } } stats.PerformanceSamples = await GetMinerPerformanceInternal(perfMode, pool, address); } await SendJsonAsync(context, stats); }
private async Task GetMinerInfoAsync(HttpContext context, Match m) { var pool = GetPool(context, m); if (pool == null) { return; } var address = m.Groups["address"]?.Value; if (string.IsNullOrEmpty(address)) { context.Response.StatusCode = 404; return; } var statsResult = cf.RunTx((con, tx) => statsRepo.GetMinerStats(con, tx, pool.Id, address), true, IsolationLevel.Serializable); MinerStats stats = null; if (statsResult != null) { stats = mapper.Map <MinerStats>(statsResult); // optional fields if (statsResult.LastPayment != null) { // Set timestamp of last payment stats.LastPayment = statsResult.LastPayment.Created; // Compute info link if (CoinMetaData.TxInfoLinks.TryGetValue(pool.Coin.Type, out var baseUrl)) { stats.LastPaymentLink = string.Format(baseUrl, statsResult.LastPayment.TransactionConfirmationData); } } stats.Performance24H = GetMinerPerformanceInternal("day", pool, address); } await SendJson(context, stats); }
private async Task GetMinerInfoAsync(HttpContext context, Match m) { var pool = GetPool(context, m); if (pool == null) { return; } var address = m.Groups["address"]?.Value; if (string.IsNullOrEmpty(address)) { context.Response.StatusCode = 404; return; } var perfMode = context.GetQueryParameter <string>("perfMode", "day"); var statsResult = cf.RunTx((con, tx) => statsRepo.GetMinerStats(con, tx, pool.Id, address), true, IsolationLevel.Serializable); MinerStats stats = null; if (statsResult != null) { stats = mapper.Map <MinerStats>(statsResult); if (statsResult.LastPayment != null) { stats.LastPayment = statsResult.LastPayment.Created; if (CoinMetaData.TxInfoLinks.TryGetValue(pool.Coin.Type, out var baseUrl)) { stats.LastPaymentLink = string.Format(baseUrl, statsResult.LastPayment.TransactionConfirmationData); } } stats.PerformanceSamples = GetMinerPerformanceInternal(perfMode, pool, address); } await SendJsonAsync(context, stats); }
public Redirector(Socket client, string ip, int port) { thisMiner = new MinerStats(); IPEndPoint remoteEndPoint = client.RemoteEndPoint as IPEndPoint; thisMiner.connectionName = client.RemoteEndPoint.ToString(); thisMiner.connectionStartTime = DateTime.Now; thisMiner.lastCalculatedTime = DateTime.Now; thisMiner.endPoint = remoteEndPoint.Address.ToString() + "_" + remoteEndPoint.Port.ToString(); SetupCoinHandler(); statusUpdateTimer = new Timer(); statusUpdateTimer.Elapsed += new ElapsedEventHandler(OnStatusUpdate); if ((Program.settings.rigStatsIntervalSeconds) > 0 && (Program.settings.rigStatsIntervalSeconds <= 3600)) { statusUpdateTimer.Interval = Program.settings.rigStatsIntervalSeconds * 1000; } else { statusUpdateTimer.Interval = 60000; } statusUpdateTimer.Enabled = true; Logger.LogToConsole(string.Format("Session started: ({0})", thisMiner.connectionName), thisMiner.endPoint, ConsoleColor.DarkGreen); thisMiner.connectionAlive = false; MinerManager.SetConnectionAlive(thisMiner.displayName, thisMiner.connectionAlive); m_client = new Session(client); m_client.OnDataReceived = OnClientPacket; m_client.OnDisconnected = Dispose; m_client.ip = remoteEndPoint.Address.ToString(); m_client.port = remoteEndPoint.Port.ToString(); var outSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); outSocket.BeginConnect(ip, port, EndConnect, outSocket); }