public APIData GetSummary() { string resp; string aname = null; APIData ad = new APIData(); if (AlgoNameIs("daggerhashimoto")) { try { FillAlgorithm("daggerhashimoto", ref ad); if (ER.GetIsRunning() && ER.GetDAGprogress() != 100 && ER.GetSpeed() < 1) { ad.AlgorithmName = "Creating DAG " + ER.GetDAGprogress().ToString() + "%"; aname = "Creating DAG File"; ad.Speed = 0; } else { double time = 10; if (ER.GetIsRunning()) { time = 30; } if ((DateTime.Now.Subtract(ER.GetLastActiveTime())).TotalSeconds > time) { Helpers.ConsolePrint(MinerDeviceName, "ethminer is not running.. restarting.."); Restart(); return(null); } ad.Speed = ER.GetSpeed() * 1000 * 1000; } } catch (Exception e) { Helpers.ConsolePrint(MinerDeviceName, "GetSummary: " + e.Message); return(null); } } else { resp = GetAPIData(APIPort, "summary"); if (resp == null) { return(null); } try { string[] resps; if (!MinerDeviceName.Equals("AMD_OpenCL")) { resps = resp.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < resps.Length; i++) { string[] optval = resps[i].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (optval.Length != 2) { continue; } if (optval[0] == "ALGO") { aname = optval[1]; } else if (optval[0] == "KHS") { ad.Speed = double.Parse(optval[1], CultureInfo.InvariantCulture) * 1000; // HPS } } } else { // Checks if all the GPUs are Alive first string resp2 = GetAPIData(APIPort, "devs"); if (resp2 == null) { return(null); } string[] checkGPUStatus = resp2.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 1; i < checkGPUStatus.Length - 1; i++) { if (!checkGPUStatus[i].Contains("Status=Alive")) { Helpers.ConsolePrint(MinerDeviceName, "GPU " + i + ": Sick/Dead/NoStart/Initialising/Disabled/Rejecting/Unknown"); return(null); } } resps = resp.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); if (resps[1].Contains("SUMMARY")) { string[] data = resps[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); // Get miner's current total speed string[] speed = data[4].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); // Get miner's current total MH double total_mh = Double.Parse(data[18].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries)[1], new CultureInfo("en-US")); ad.Speed = Double.Parse(speed[1]) * 1000; aname = SupportedAlgorithms[CurrentAlgo].MinerName; if (total_mh <= PreviousTotalMH) { Helpers.ConsolePrint(MinerDeviceName, "SGMiner might be stuck as no new hashes are being produced"); Helpers.ConsolePrint(MinerDeviceName, "Prev Total MH: " + PreviousTotalMH + " .. Current Total MH: " + total_mh); return(null); } PreviousTotalMH = total_mh; } else { ad.Speed = 0; } } } catch { return(null); } FillAlgorithm(aname, ref ad); } return(ad); }