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); } }
void _antMinerBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { try { _antMinerData = AntminerConnector.GetStats(Ip); } catch (Exception) { } }
void _poolBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { try { _poolData = AntminerConnector.GetPools(Ip); } catch (Exception) { } }
void _summaryBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { try { _summaryData = AntminerConnector.GetSummary(Ip); } catch (Exception) { } }
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(); }
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; }
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(); } }
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(); } }
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; }