示例#1
0
文件: mine.py 项目: iweave/two1
def _mine(config, dashboard=False):
    if has_bitcoinkit():
        if not is_minerd_running():
            start_minerd(config, dashboard)
        elif dashboard:
            show_minertop(dashboard)
        # if minerd is running and we have not specified a dashboard flag
        # do a cpu mine
        else:
            start_cpu_mining(config)
    else:
        config.log(UxString.buy_ad, fg="magenta")
        start_cpu_mining(config)
示例#2
0
def _mine(config, dashboard=False):
    if has_bitcoinkit():
        if not is_minerd_running():
            start_minerd(config, dashboard)
        elif dashboard:
            show_minertop(dashboard)
        # if minerd is running and we have not specified a dashboard flag
        # do a cpu mine
        else:
            start_cpu_mining(config)
    else:
        config.log(UxString.buy_ad, fg="magenta")
        start_cpu_mining(config)
示例#3
0
文件: mine.py 项目: erikvold/two1
def _mine(config, dashboard=False):
    """ Starts the mining ASIC if not mining and cpu mines if already mining

    Args:
        config (Config): config object used for getting .two1 information
        dashboard (bool): shows minertop dashboard if True
    """

    if has_bitcoinkit():
        if not is_minerd_running():
            start_minerd(config, dashboard)
        elif dashboard:
            show_minertop(dashboard)
        # if minerd is running and we have not specified a dashboard flag
        # do a cpu mine
        else:
            start_cpu_mining(config)
    else:
        config.log(UxString.buy_ad, fg="magenta")
        start_cpu_mining(config)
示例#4
0
def _doctor(config):
    def assertEqual(checker, name, val, expected_val):
        if val == expected_val:
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(name, val, DoctorStatus.Fail,
                             "{} != {}.".format(val, expected_val))

    def assertTrue(checker, name, val, success_msg="Exists", error_msg=None):
        if val == True or val == "Yes":
            checker.addCheck(name, success_msg, DoctorStatus.OK)
        else:
            if error_msg == None:
                error_msg = "{} is not True.".format(val)
            checker.addCheck(name, "No", DoctorStatus.Fail, error_msg)

    def assertAny(checker, name, val):
        if val != None and val != "":
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(name, val, DoctorStatus.Fail,
                             "{} cannot be None.".format(name))

    def assertIn(checker, name, val, expected_val_array):
        if val in expected_val_array:
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(
                name, val, DoctorStatus.Fail,
                "{} must be one of {}".format(val, expected_val_array))

    def assertGte(checker, name, val, min_val):
        if val >= min_val:
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(name, val, DoctorStatus.Fail,
                             "{} must be >= {}".format(val, min_val))

    def assertVersionGte(checker, name, version, min_version):
        ok = True
        version_str = "{}.{}.{}".format(version[0], version[1], version[2])
        # compare major
        if int(version[0]) > min_version[0]:
            ok = True
        elif int(version[0]) < min_version[0]:
            ok = False
        else:
            # compare minor
            if int(version[1]) > min_version[1]:
                ok = True
            elif int(version[1]) < min_version[1]:
                ok = False
            else:
                # compare revision
                rev = int(version[2].split('-')[0])
                if rev >= min_version[2]:
                    ok = True
                elif rev < min_version[2]:
                    ok = False
        if ok:
            checker.addCheck(name, version_str, DoctorStatus.OK)
        else:
            checker.addCheck(
                name, version_str, DoctorStatus.Fail,
                "Version must be >= {}.{}.{}. Your version is {}.{}.{}.".
                format(min_version[0], min_version[1], min_version[2],
                       version[0], version[1], version[2]))

    def assertHTTPStatusCode(checker,
                             name,
                             url,
                             method="get",
                             expected_status_code=402):
        try:
            request_method = getattr(requests, method)
            r = request_method(url, timeout=SOCKET_TIMEOUT)
            if r.status_code == expected_status_code:
                checker.addCheck("{} {}".format(method.upper(), name),
                                 r.status_code, DoctorStatus.OK)
            else:
                checker.addCheck(
                    "{} {}".format(method.upper(),
                                   name), r.status_code, DoctorStatus.Fail,
                    "Expected status code '{}'".format(expected_status_code))
        except requests.exceptions.ConnectionError:
            checker.addCheck("{} {}".format(method.upper(),
                                            name), "Failed", DoctorStatus.Fail,
                             "Could not connect to '{}'".format(url))
        except Exception as e:
            checker.addCheck("{} {}".format(method.upper(), name), "Failed",
                             DoctorStatus.Fail, str(e))

    def assertSocket(checker, name, url):
        protocol = "http"
        port = 80
        hostname = ""

        url_components = url.split("://")
        if len(url_components) >= 2:
            protocol = url_components[0]
            hostname = url_components[1]
            host_components = hostname.split(":")
            if len(host_components) == 2:
                hostname = host_components[0]
                port = int(host_components[1])
        else:
            checker.addCheck(name, url, DoctorStatus.Fail,
                             "Invalid url " + url)
            return

        if protocol == "https":
            port = 443

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(SOCKET_TIMEOUT)
        try:
            result = s.connect_ex((hostname, port))
            s.close()
            if result > 0:
                checker.addCheck(name, url, DoctorStatus.Fail,
                                 errno.errorcode[result])
            else:
                checker.addCheck(name, "{}:{}".format(hostname, port),
                                 DoctorStatus.OK)
        except Exception as e:
            s.close()
            checker.addCheck(name, url, DoctorStatus.Fail, str(e))

    def assertCommandExists(checker, name, cmd, error_msg=None):
        cmd_path = None
        try:
            cmd_path = shutil.which(cmd)
        except Exception as e:
            pass
        if error_msg == None:
            error_msg = "'{}' does not exist.".format(cmd)
        assertTrue(check_dependencies,
                   name,
                   cmd_path != None,
                   error_msg=error_msg)

    def assertPathExists(checker, name, path):
        return assertTrue(checker,
                          name,
                          os.path.exists(path),
                          error_msg="'{}' does not exist.".format(path))

    # doctor code start
    config.log(UxString.doctor_start)

    # Checking OS
    config.log(UxString.doctor_general)
    check_general = DoctorCheck(config)
    assertVersionGte(check_general, "21 Tool version", TWO1_VERSION.split('.'),
                     MIN_VERSION_21)
    assertIn(check_general, "OS System", platform.system(),
             ["Windows", "Linux", "Darwin"])
    assertVersionGte(check_general, "OS Release",
                     platform.release().split('.'), MIN_VERSION_OS)
    assertVersionGte(check_general, "Python version",
                     platform.python_version_tuple(), MIN_VERSION_PYTHON)
    assertTrue(check_general,
               "Has Bitcoin kit",
               has_bitcoinkit(),
               success_msg="Yes",
               error_msg="Bitcoin kit not detected.")
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        assertAny(check_general, "IP Address", s.getsockname()[0])
    except Exception as e:
        assertTrue(check_general,
                   "IP Address",
                   False,
                   error_msg="No Internet Connectivity Found.")
    check_general.generateSummary()

    # Checking dependencies
    config.log(UxString.doctor_dependencies)
    check_dependencies = DoctorCheck(config)
    assertTrue(check_dependencies,
               "two1 python library",
               'two1' in sys.modules,
               error_msg="two1 lib does not exist.")
    cli_path = None
    try:
        cli_path = shutil.which('21')
    except Exception as e:
        pass
    assertCommandExists(check_dependencies,
                        "21 CLI",
                        cmd="21",
                        error_msg="21 CLI not bound to '21'.")
    assertCommandExists(check_dependencies,
                        "Zerotier CLI",
                        cmd="zerotier-cli",
                        error_msg="Zerotier CLI not bound.")
    assertCommandExists(check_dependencies, "apt-get", cmd="apt-get")
    assertCommandExists(check_dependencies, "minerd", cmd="minerd")
    assertCommandExists(check_dependencies, "wallet", cmd="wallet")

    assertPathExists(check_dependencies, ".two1 folder", TWO1_USER_FOLDER)
    assertPathExists(check_dependencies, ".two1 config file", TWO1_CONFIG_FILE)
    check_dependencies.generateSummary()

    # Checking demo endpoints
    config.log(UxString.doctor_demo_endpoints)
    check_demos = DoctorCheck(config)
    for demo_endpoint in DEMO_ENDPOINTS:
        assertHTTPStatusCode(check_demos,
                             name=demo_endpoint["url"],
                             url=(TWO1_MERCHANT_HOST + demo_endpoint["url"]),
                             method=demo_endpoint["method"],
                             expected_status_code=402)
    check_demos.generateSummary()

    # Check servers
    config.log(UxString.doctor_servers)
    check_servers = DoctorCheck(config)
    assertSocket(check_servers, "Pool2 Api", TWO1_HOST)
    assertSocket(check_servers, "Pool2 Tcp", TWO1_POOL_URL)
    assertSocket(check_servers, "Log server", TWO1_LOGGER_SERVER)
    assertSocket(check_servers, "Merchant", TWO1_MERCHANT_HOST)
    assertSocket(check_servers, "Blockchain", TWO1_PROVIDER_HOST)
    assertSocket(check_servers, "PyPi Host", TWO1_PYPI_HOST)
    assertHTTPStatusCode(check_servers,
                         name="21co slack",
                         url="https://slack.21.co",
                         expected_status_code=200)
    assertHTTPStatusCode(check_servers,
                         name="Raspbian package repo",
                         url="http://mirrordirector.raspbian.org/raspbian",
                         expected_status_code=200)
    assertHTTPStatusCode(check_servers,
                         name="Chain.com API",
                         url="https://api.chain.com",
                         expected_status_code=401)

    check_servers.generateSummary()

    config.log(UxString.doctor_total)
    DoctorCheck.printSummary(config, \
        check_general.summary, \
        check_dependencies.summary, \
        check_demos.summary, \
        check_servers.summary)

    result = {
        "general": check_general.json(),
        "dependencies": check_dependencies.json(),
        "demo": check_demos.json(),
        "servers": check_servers.json()
    }

    if all([
            doctor_check['summary']['total'] == doctor_check['summary']
        ['passed'] for doctor_check in result.values()
    ]):
        return result
    else:
        raise TwoOneError("21 doctor failed some checks.", result)
示例#5
0
def _doctor(config):
    def assertEqual(checker, name, val, expected_val):
        if val == expected_val:
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(name, val, DoctorStatus.Fail, "{} != {}.".format(val, expected_val))

    def assertTrue(checker, name, val, success_msg="Exists", error_msg = None):
        if val == True or val == "Yes":
            checker.addCheck(name, success_msg, DoctorStatus.OK)
        else:
            if error_msg == None:
                error_msg = "{} is not True.".format(val)
            checker.addCheck(name, "No", DoctorStatus.Fail, error_msg)


    def assertAny(checker, name, val):
        if val != None and val != "":
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(name, val, DoctorStatus.Fail, "{} cannot be None.".format(name))

    def assertIn(checker, name, val, expected_val_array):
        if val in expected_val_array:
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(name, val, DoctorStatus.Fail, "{} must be one of {}".format(val, expected_val_array)) 

    def assertGte(checker, name, val, min_val):
        if val >= min_val:
            checker.addCheck(name, val, DoctorStatus.OK)
        else:
            checker.addCheck(name, val, DoctorStatus.Fail, "{} must be >= {}".format(val, min_val))

    def assertVersionGte(checker, name, version, min_version):
        ok = True
        version_str = "{}.{}.{}".format(version[0],version[1],version[2])
        # compare major
        if int(version[0]) > min_version[0]:
            ok = True
        elif int(version[0]) < min_version[0]:
            ok = False
        else:
            # compare minor
            if int(version[1]) > min_version[1]:
                ok = True
            elif int(version[1]) < min_version[1]:
                ok = False
            else:
                # compare revision
                rev = int(version[2].split('-')[0])
                if rev >= min_version[2]:
                    ok = True
                elif rev < min_version[2]:
                    ok = False
        if ok:
            checker.addCheck(name, version_str, DoctorStatus.OK)
        else:
            checker.addCheck(name, version_str, DoctorStatus.Fail, "Version must be >= {}.{}.{}. Your version is {}.{}.{}.".format(min_version[0], min_version[1], min_version[2], version[0],version[1],version[2]))

    def assertHTTPStatusCode(checker, name, url, method="get", expected_status_code=402):
      try:
          request_method = getattr(requests, method)
          r  = request_method(url, timeout=SOCKET_TIMEOUT)
          if r.status_code == expected_status_code:
              checker.addCheck("{} {}".format(method.upper(), name), r.status_code, DoctorStatus.OK)
          else:
              checker.addCheck("{} {}".format(method.upper(), name), r.status_code, DoctorStatus.Fail, "Expected status code '{}'".format(expected_status_code))
      except requests.exceptions.ConnectionError:
          checker.addCheck("{} {}".format(method.upper(), name), "Failed", DoctorStatus.Fail, "Could not connect to '{}'".format(url))
      except Exception as e:
          checker.addCheck("{} {}".format(method.upper(), name), "Failed", DoctorStatus.Fail, str(e))
    
    def assertSocket(checker, name, url):
        protocol = "http"
        port = 80
        hostname = ""

        url_components = url.split("://")
        if len(url_components) >= 2:
            protocol = url_components[0]
            hostname = url_components[1]
            host_components = hostname.split(":")
            if len(host_components) == 2:
                hostname = host_components[0]
                port = int(host_components[1])
        else:
            checker.addCheck(name, url, DoctorStatus.Fail, "Invalid url " + url)
            return

        if protocol == "https":
            port = 443

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(SOCKET_TIMEOUT)
        try:
            result = s.connect_ex((hostname, port))
            s.close()
            if result > 0:
                checker.addCheck(name, url, DoctorStatus.Fail, errno.errorcode[result])
            else:
                checker.addCheck(name, "{}:{}".format(hostname, port), DoctorStatus.OK)
        except Exception as e:
            s.close()
            checker.addCheck(name, url, DoctorStatus.Fail, str(e))

    def assertCommandExists(checker, name, cmd, error_msg=None):
        cmd_path = None
        try:
            cmd_path = shutil.which(cmd)
        except Exception as e:
            pass
        if error_msg == None:
          error_msg = "'{}' does not exist.".format(cmd)
        assertTrue(check_dependencies, name, cmd_path != None, error_msg=error_msg)

    def assertPathExists(checker, name, path):
        return assertTrue(checker, name, os.path.exists(path), error_msg="'{}' does not exist.".format(path))

    # doctor code start
    config.log(UxString.doctor_start)

    # Checking OS
    config.log(UxString.doctor_general)
    check_general = DoctorCheck(config)
    assertVersionGte(check_general, "21 Tool version", TWO1_VERSION.split('.'), MIN_VERSION_21)
    assertIn(check_general, "OS System", platform.system(), ["Windows", "Linux", "Darwin"])
    assertVersionGte(check_general, "OS Release", platform.release().split('.'), MIN_VERSION_OS)
    assertVersionGte(check_general, "Python version", platform.python_version_tuple(), MIN_VERSION_PYTHON)
    assertTrue(check_general, "Has Bitcoin kit", has_bitcoinkit(), success_msg="Yes", error_msg="Bitcoin kit not detected.")
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        assertAny(check_general, "IP Address", s.getsockname()[0])
    except Exception as e: 
        assertTrue(check_general, "IP Address", False, error_msg="No Internet Connectivity Found.")
    check_general.generateSummary()

    # Checking dependencies
    config.log(UxString.doctor_dependencies)
    check_dependencies = DoctorCheck(config)
    assertTrue(check_dependencies, "two1 python library", 'two1' in sys.modules, error_msg="two1 lib does not exist.")
    cli_path = None
    try:
        cli_path = shutil.which('21')
    except Exception as e:
        pass
    assertCommandExists(check_dependencies, "21 CLI", cmd="21", error_msg="21 CLI not bound to '21'.")
    assertCommandExists(check_dependencies, "Zerotier CLI", cmd="zerotier-cli", error_msg="Zerotier CLI not bound.")
    assertCommandExists(check_dependencies, "apt-get", cmd="apt-get")
    assertCommandExists(check_dependencies, "minerd", cmd="minerd")
    assertCommandExists(check_dependencies, "wallet", cmd="wallet")

    assertPathExists(check_dependencies, ".two1 folder", TWO1_USER_FOLDER)
    assertPathExists(check_dependencies, ".two1 config file", TWO1_CONFIG_FILE)
    check_dependencies.generateSummary()

    # Checking demo endpoints
    config.log(UxString.doctor_demo_endpoints)
    check_demos = DoctorCheck(config)
    for demo_endpoint in DEMO_ENDPOINTS:
        assertHTTPStatusCode(check_demos, name=demo_endpoint["url"], url=(TWO1_MERCHANT_HOST + demo_endpoint["url"]), method=demo_endpoint["method"], expected_status_code=402)
    check_demos.generateSummary()

    # Check servers
    config.log(UxString.doctor_servers)
    check_servers = DoctorCheck(config)
    assertSocket(check_servers, "Pool2 Api", TWO1_HOST)
    assertSocket(check_servers, "Pool2 Tcp", TWO1_POOL_URL)
    assertSocket(check_servers, "Log server", TWO1_LOGGER_SERVER)
    assertSocket(check_servers, "Merchant", TWO1_MERCHANT_HOST)
    assertSocket(check_servers, "Blockchain", TWO1_PROVIDER_HOST)
    assertSocket(check_servers, "PyPi Host", TWO1_PYPI_HOST)
    assertHTTPStatusCode(check_servers, name="21co slack", url="https://slack.21.co", expected_status_code=200)
    assertHTTPStatusCode(check_servers, name="Raspbian package repo", url="http://mirrordirector.raspbian.org/raspbian", expected_status_code=200)
    assertHTTPStatusCode(check_servers, name="Chain.com API", url="https://api.chain.com", expected_status_code=401)
    
    check_servers.generateSummary()

    config.log(UxString.doctor_total)
    DoctorCheck.printSummary(config, \
        check_general.summary, \
        check_dependencies.summary, \
        check_demos.summary, \
        check_servers.summary)

    result =  {
        "general": check_general.json(),
        "dependencies": check_dependencies.json(),
        "demo": check_demos.json(),
        "servers": check_servers.json()
    }

    if all([doctor_check['summary']['total'] == doctor_check['summary']['passed'] for doctor_check in result.values()]):
        return result
    else:
        raise TwoOneError("21 doctor failed some checks.", result)