예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }