diff --git a/miners/bosminer.py b/miners/bosminer.py index 72eaaa55..7eb21c3a 100644 --- a/miners/bosminer.py +++ b/miners/bosminer.py @@ -10,28 +10,30 @@ class BOSminer(BaseMiner): api = BOSMinerAPI(ip) super().__init__(ip, api) self.config = None + self.uname = 'root' + self.pwd = 'admin' def __repr__(self) -> str: return f"BOSminer: {str(self.ip)}" - async def get_ssh_connection(self, username: str, password: str) -> asyncssh.connect: + async def _get_ssh_connection(self) -> asyncssh.connect: """Create a new asyncssh connection""" - conn = await asyncssh.connect(str(self.ip), known_hosts=None, username=username, password=password, + conn = await asyncssh.connect(str(self.ip), known_hosts=None, username=self.uname, password=self.pwd, server_host_key_algs=['ssh-rsa']) # return created connection return conn async def send_ssh_command(self, cmd: str) -> None: result = None - conn = await self.get_ssh_connection('root', 'admin') - for i in range(3): - try: - result = await conn.run(cmd) - except Exception as e: - print(f"{cmd} error: {e}") - if i == 3: - return - continue + async with self._get_ssh_connection() as conn: + for i in range(3): + try: + result = await conn.run(cmd) + except Exception as e: + print(f"{cmd} error: {e}") + if i == 3: + return + continue # let the user know the result of the command if result is not None: if result.stdout != "": diff --git a/miners/cgminer.py b/miners/cgminer.py index e21056a1..42fdfc6f 100644 --- a/miners/cgminer.py +++ b/miners/cgminer.py @@ -15,9 +15,9 @@ class CGMiner(BaseMiner): return f"CGMiner: {str(self.ip)}" async def send_config(self): - return None # ignore for now + return None # ignore for now - async def get_ssh_connection(self) -> asyncssh.connect: + async def _get_ssh_connection(self) -> asyncssh.connect: conn = await asyncssh.connect(str(self.ip), known_hosts=None, username=self.uname, @@ -25,7 +25,31 @@ class CGMiner(BaseMiner): server_host_key_algs=['ssh-rsa']) return conn - async def result_handler(self, result: asyncssh.process.SSHCompletedProcess) -> None: + async def send_ssh_command(self, cmd): + result = None + async with self._get_ssh_connection() as conn: + for i in range(3): + try: + result = await conn.run(cmd) + except Exception as e: + print(f"{cmd} error: {e}") + if i == 3: + return + continue + # handle result + self._result_handler(result) + if result is not None: + if result.stdout != "": + print(result.stdout) + if result.stderr != "": + print("ERROR: " + result.stderr) + elif result.stderr != "": + print("ERROR: " + result.stderr) + else: + print(cmd) + + @staticmethod + def _result_handler(result: asyncssh.process.SSHCompletedProcess) -> None: if result is not None: if len(result.stdout) > 0: print("ssh stdout: \n" + result.stdout) @@ -33,53 +57,38 @@ class CGMiner(BaseMiner): print("ssh stderr: \n" + result.stderrr) if len(result.stdout) <= 0 and len(result.stderr) <= 0: print("ssh stdout stderr empty") - return None async def restart_cgminer(self) -> None: - async with get_ssh_connection() as conn: - commands = ['cgminer-api restart', - '/usr/bin/cgminer-monitor >/dev/null 2>&1'] - commands = ';'.join(commands) - result = await conn.run(commands, check=True) - result_handler(result) - return None + commands = ['cgminer-api restart', + '/usr/bin/cgminer-monitor >/dev/null 2>&1'] + commands = ';'.join(commands) + await self.send_ssh_command(commands) async def reboot(self) -> None: - async with get_ssh_connection() conn: - commands = ['reboot'] - commands = ';'.join(commands) - result = await conn.run(commands, check=True) - result_handler(result) - return None + commands = ['reboot'] + commands = ';'.join(commands) + await self.send_ssh_command(commands) async def start_cgminer(self) -> None: - async with get_ssh_connection() conn: - commands = ['mkdir -p /etc/tmp/', - 'echo \"*/3 * * * * /usr/bin/cgminer-monitor\" > /etc/tmp/root', - 'crontab -u root /etc/tmp/root', - '/usr/bin/cgminer-monitor >/dev/null 2>&1'] - commands = ';'.join(commands) - result = await conn.run(commands, check=True) - result_handler(result) - return None + commands = ['mkdir -p /etc/tmp/', + 'echo \"*/3 * * * * /usr/bin/cgminer-monitor\" > /etc/tmp/root', + 'crontab -u root /etc/tmp/root', + '/usr/bin/cgminer-monitor >/dev/null 2>&1'] + commands = ';'.join(commands) + await self.send_ssh_command(commands) async def stop_cgminer(self) -> None: - async with get_ssh_connection() conn: - commands = ['mkdir -p /etc/tmp/', - 'echo \"\" > /etc/tmp/root', - 'crontab -u root /etc/tmp/root', - 'killall cgminer'] - commands = ';'.join(commands) - result = await conn.run(commands, check=True) - result_handler(result) - return None + commands = ['mkdir -p /etc/tmp/', + 'echo \"\" > /etc/tmp/root', + 'crontab -u root /etc/tmp/root', + 'killall cgminer'] + commands = ';'.join(commands) + await self.send_ssh_command(commands) async def get_config(self) -> None: - async with get_ssh_connection() as conn: - commands = ['cat /etc/config/cgminer'] - commands = ';'.join(commands) - result = await conn.run(commands, check=True) - result_handler(result) + async with self._get_ssh_connection() as conn: + command = 'cat /etc/config/cgminer' + result = await conn.run(command, check=True) + self._result_handler(result) self.config = result.stdout print(str(self.config)) - return None \ No newline at end of file