コード例 #1
0
        public override void Run(List <AntminerStatus> antminerStatuses)
        {
            foreach (var ant in antminerStatuses.Where(x => x.Status.Equals("Alive") && x.AsicStatus.Contains("x") && !AlertedAntIds.Contains(x.Id)))
            {
                var restartMessage = "Miner was successfully restarted. You will be notified if restart removes Xs.";
                try
                {
                    AntminerConnector.Restart(IPAddress.Parse(ant.IpAddress));
                }
                catch (Exception ex)
                {
                    restartMessage = string.Format("An error occured while attempting to restart miner: {0}", ex.Message);
                }

                EmailService.SendAlertEmail(string.Format(EmailSubject, ant.Name, ant.IpAddress),
                                            string.Format(EmailMessage, ant.Name, ant.IpAddress, DateTime.Now.ToString("h:mm:ss tt"), restartMessage));
                AlertedAntIds.Add(ant.Id);
            }

            foreach (var ant in antminerStatuses.Where(ant => ant.Status.Equals("Alive") && AlertedAntIds.Contains(ant.Id) && !ant.AsicStatus.Contains("x")))
            {
                EmailService.SendAlertEmail(string.Format(UpEmailSubject, ant.Name, ant.IpAddress), string.Format(UpEmailMessage, ant.Name, ant.IpAddress, DateTime.Now.ToString("h:mm:ss tt")));
                AlertedAntIds.Remove(ant.Id);
            }
        }
コード例 #2
0
 void _antMinerBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     try
     {
         _antMinerData = AntminerConnector.GetStats(Ip);
     }
     catch (Exception)
     {
     }
 }
コード例 #3
0
 void _poolBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     try
     {
         _poolData = AntminerConnector.GetPools(Ip);
     }
     catch (Exception)
     {
     }
 }
コード例 #4
0
 void _summaryBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     try
     {
         _summaryData = AntminerConnector.GetSummary(Ip);
     }
     catch (Exception)
     {
     }
 }
コード例 #5
0
        void _scanBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            var sn = ddlScanIpRange.SelectedItem.Value;

            for (var i = 1; i < 255; i++)
            {
                var ipAddress = IPAddress.Parse(string.Format("192.168.{0}.{1}", sn, i));

                pgbScan.Text = ipAddress.ToString();

                try
                {
                    if (AntminerConnector.Exists(ipAddress))
                    {
                        var antminer = new API.Antminer.Antminer
                        {
                            Id          = Guid.NewGuid(),
                            Name        = ipAddress.ToString(),
                            IpAddress   = ipAddress.ToString(),
                            SshUsername = txtSshUsername.Text,
                            SshPassword = txtSshPassword.Text
                        };

                        Antminers.Antminer.Add(antminer);
                    }
                }
                catch (Exception)
                {
                }

                var progress = (((double)i) / 255) * 100;

                var backgroundWorker = sender as BackgroundWorker;
                if (backgroundWorker != null)
                {
                    backgroundWorker.ReportProgress((int)progress);
                }
            }

            PopulateAntminers();
        }
コード例 #6
0
        void mobileMinerBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            var mobileMinerStatus = (from status in _antminerStatuses
                                     let pools = AntminerConnector.GetPools(IPAddress.Parse(status.IpAddress))
                                                 let devs = AntminerConnector.GetDev(IPAddress.Parse(status.IpAddress))
                                                            select new MiningStatistics
            {
                Index = 0,
                DeviceID = Convert.ToInt32(devs["ID"]),
                AcceptedShares = Convert.ToInt32(devs["Accepted"]),
                Algorithm = "SHA-256", Kind = "ASC",
                Appliance = false,
                AverageHashrate = Convert.ToDouble(devs["MHS av"]),
                CurrentHashrate = Convert.ToDouble(devs["MHS 5s"]),
                Enabled = true,
                FanSpeed = status.FanSpeed,
                FullName = status.Name,
                HardwareErrors = Convert.ToInt32(devs["Hardware Errors"]),
                HardwareErrorsPercent = status.HardwareErrorPercentage,
                MachineName = status.Name,
                MinerName = "Spiceminer's Ant Viewer",
                Name = status.Name,
                RejectedShares = Convert.ToInt32(devs["Rejected"]),
                RejectedSharesPercent = status.RejectPercentage,
                Status = status.Status,
                Temperature = GetHighestTemp(status.Temps),
                Utility = status.WorkUtility,
                FanPercent = 0,
                GpuActivity = 0,
                GpuClock = 0,
                GpuVoltage = 0,
                Intensity = "0",
                MemoryClock = 0,
                PoolIndex = 0,
                PoolName = pools[0]["URL"].ToString(),
                PowerTune = 0,
            }).ToList();

            e.Result = mobileMinerStatus;
        }
コード例 #7
0
        void restart_Click(object sender, EventArgs e)
        {
            var id       = (Guid)grdAntminers.CurrentRow.Tag;
            var antminer = _antminers.Antminer.SingleOrDefault(x => x.Id.Equals(id));

            if (antminer == null)
            {
                return;
            }

            try
            {
                AntminerConnector.Restart(IPAddress.Parse(antminer.IpAddress));
                new InfoDialog {
                    InfoSubject = "Restarting...", InfoMessage = "Restart Successful"
                }.ShowDialog();
            }
            catch (Exception ex)
            {
                new ErrorDialog {
                    ErrorMessage = ex.Message, ErrorSubject = "Error restarting miner"
                }.ShowDialog();
            }
        }
コード例 #8
0
        void massRebootToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var result = new ConfirmDialog {
                ConfirmSubject = "Mass Restart", ConfirmMessage = "Are you sure you want to restart all miners?"
            }.ShowDialog();

            if (!result.Equals(DialogResult.OK))
            {
                return;
            }

            var errors = new List <string>();

            _antminers = AntminerService.GetAntminers();
            foreach (var ant in _antminers.Antminer)
            {
                try
                {
                    AntminerConnector.Restart(IPAddress.Parse(ant.IpAddress));
                }
                catch (Exception ex)
                {
                    errors.Add(string.Format("{0}: {1}", ant.IpAddress, ex.Message));
                }
            }

            if (errors.Count > 0)
            {
                new ErrorDialog
                {
                    ErrorSubject     = "Error restarting miner(s)",
                    ErrorMessage     = "Some miners error when trying to restart. Hover to see error messages.",
                    LongErrorMessage = errors.Aggregate((w, j) => string.Format("{0}\r\n{1}", w, j))
                }.ShowDialog();
            }
        }
コード例 #9
0
        void antminerStatusBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            var ant = e.Argument as Antminer;

            if (ant == null)
            {
                return;
            }

            _inProgressCount++;

            var status = new AntminerStatus
            {
                Id        = ant.Id,
                IpAddress = ant.IpAddress,
                Name      = ant.Name
            };

            var updatingRow = grdAntminers.Rows.SingleOrDefault(x => x.Tag.Equals(status.Id));

            if (updatingRow != null)
            {
                grdAntminers.Invoke(new MethodInvoker(() =>
                {
                    updatingRow.Cells[2].Value = "-------------";
                }));
            }

            try
            {
                var summary = AntminerConnector.GetSummary(IPAddress.Parse(ant.IpAddress));
                var stats   = AntminerConnector.GetStats(IPAddress.Parse(ant.IpAddress));

                var hwError = Convert.ToInt32(summary["Hardware Errors"].ToString());
                var diffA   = Convert.ToDouble(summary["Difficulty Accepted"].ToString());
                var diffR   = Convert.ToDouble(summary["Difficulty Rejected"].ToString());

                var rejects  = Convert.ToDouble(summary["Rejected"].ToString());
                var accepted = Convert.ToDouble(summary["Accepted"].ToString());
                var stale    = Convert.ToDouble(summary["Stale"].ToString());

                status.Status = "Alive";
                status.Ghs5S  = Convert.ToDouble(summary["GHS 5s"].ToString());
                status.GhsAv  = Convert.ToDouble(summary["GHS av"].ToString());
                status.Blocks = summary["Found Blocks"].ToString();
                status.HardwareErrorPercentage = Math.Round(hwError / (diffA + diffR) * 100, 2);
                status.RejectPercentage        = (Math.Round(rejects / accepted) * 100);
                status.StalePercentage         = (Math.Round(stale / accepted) * 100);
                status.BestShare   = Convert.ToDouble(summary["Best Share"].ToString());
                status.Fans        = string.Format("{0}, {1}", stats["fan1"], stats["fan2"]);
                status.FanSpeed    = Convert.ToInt32(stats["fan1"]);
                status.Temps       = string.Format("{0}, {1}", stats["temp1"], stats["temp2"]);
                status.Freq        = stats["frequency"].ToString();
                status.AsicStatus  = string.Format("{0} - {1}", stats["chain_acs1"], stats["chain_acs2"]);
                status.WorkUtility = Convert.ToDouble(summary["Work Utility"]);
            }
            catch (Exception)
            {
                status.Status = "Dead";
                status.Ghs5S  = 0;
                status.GhsAv  = 0;
                status.Blocks = "-";
                status.HardwareErrorPercentage = 0;
                status.RejectPercentage        = 0;
                status.StalePercentage         = 0;
                status.Fans       = "-";
                status.Temps      = "-";
                status.Freq       = "-";
                status.AsicStatus = "-";
            }

            e.Result = status;
        }