This is an automated email from the ASF dual-hosted git repository. dimuthuupe pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/airavata-mft.git
commit ee1c556fd3430844b19ba37ad027e9f6db9d6dcc Author: jfcsgthmbvnztjkcfcvjqjr <[email protected]> AuthorDate: Fri Jun 23 22:25:00 2023 -0400 Updated code to check for java run time --- python-cli/mft_cli/airavata_mft_cli/bootstrap.py | 286 +++++++++++++---------- python-cli/mft_cli/venv/pyvenv.cfg | 3 + 2 files changed, 165 insertions(+), 124 deletions(-) diff --git a/python-cli/mft_cli/airavata_mft_cli/bootstrap.py b/python-cli/mft_cli/airavata_mft_cli/bootstrap.py index da704ba..03777f8 100644 --- a/python-cli/mft_cli/airavata_mft_cli/bootstrap.py +++ b/python-cli/mft_cli/airavata_mft_cli/bootstrap.py @@ -20,6 +20,8 @@ import typer import requests import os import zipfile +from subprocess import check_output +from subprocess import STDOUT from subprocess import call from subprocess import Popen from pathlib import Path @@ -27,152 +29,188 @@ from sys import platform import shutil import time -def download_and_unarchive(url, download_path, extract_dir = os.path.join(os.path.expanduser('~'), ".mft/")): - response = requests.get(url, stream=True) - file_size = int(response.headers['Content-Length']) - with typer.progressbar(length=file_size) as progress: - with open(download_path, "wb") as handle: - for data in response.iter_content(chunk_size=8192 * 2): - progress.update(len(data)) - handle.write(data) +def download_and_unarchive(url, download_path, extract_dir=os.path.join(os.path.expanduser('~'), ".mft/")): + response = requests.get(url, stream=True) + file_size = int(response.headers['Content-Length']) + with typer.progressbar(length=file_size) as progress: + with open(download_path, "wb") as handle: + for data in response.iter_content(chunk_size=8192 * 2): + progress.update(len(data)) + handle.write(data) - print("Un archiving ....") - with zipfile.ZipFile(download_path,"r") as zip_ref: - zip_ref.extractall(extract_dir) + print("Un archiving ....") + with zipfile.ZipFile(download_path, "r") as zip_ref: + zip_ref.extractall(extract_dir) + + os.remove(download_path) - os.remove(download_path) def restart_service(bin_path, daemon_script_name): - current_dir = os.getcwd() - try: - os.chdir(bin_path) - os.chmod(daemon_script_name, 0o744) - rc = call(["./" + daemon_script_name, "stop"]) - rc = call(["./" + daemon_script_name, "start"]) - finally: - os.chdir(current_dir) + current_dir = os.getcwd() + try: + os.chdir(bin_path) + os.chmod(daemon_script_name, 0o744) + rc = call(["./" + daemon_script_name, "stop"]) + rc = call(["./" + daemon_script_name, "start"]) + finally: + os.chdir(current_dir) + def stop_service(bin_path, daemon_script_name): - current_dir = os.getcwd() - try: - os.chdir(bin_path) - os.chmod(daemon_script_name, 0o744) - rc = call(["./" + daemon_script_name, "stop"]) - finally: - os.chdir(current_dir) - - -""" - Issue 96: https://github.com/apache/airavata-mft/issues/96 -""" + current_dir = os.getcwd() + try: + os.chdir(bin_path) + os.chmod(daemon_script_name, 0o744) + rc = call(["./" + daemon_script_name, "stop"]) + finally: + os.chdir(current_dir) + + +def check_java_version_method(required_version): + """ + Issue 96: https://github.com/apache/airavata-mft/issues/96 + + References: + --------- + https://stackoverflow.com/questions/31807882/get-java-version-number-from-python + https://stackoverflow.com/questions/1332598/how-to-determine-whether-java-is-installed-on-a-system-through-python + """ + if shutil.which("java"): + res = check_output(['java', '-version'], stderr=STDOUT).decode('utf-8') + system_version = '' + count = 0 + for c in res: + if c == '"' or count == 1: + if (c == '.' or c == '"') and count == 1: + break + if count == 0: + count += 1 + continue + system_version += c + + system_version = int(system_version) + if system_version < required_version: + print("Airavata MFT requires Java version 11 or higher") + print("If you have more than one version of java please set java version 11 or higher to the path") + raise typer.Exit() + else: + print("Java is either not installed or path hasn't been set properly") + raise typer.Exit() + + def start_mft(): - print("Setting up MFT Services") - - if platform == "linux" or platform == "linux2": - consul_url = "https://releases.hashicorp.com/consul/1.7.1/consul_1.7.1_linux_amd64.zip" - elif platform == "darwin": - consul_url = "https://releases.hashicorp.com/consul/1.7.1/consul_1.7.1_darwin_amd64.zip" - elif platform == "win32": - print("Windows support is not avialable yet") - raise typer.Exit() - else: - print("Un supported platform: " + platform) - raise typer.Exit() - - mft_dir = os.path.join(os.path.expanduser('~'), ".mft") - if not os.path.exists(mft_dir): - os.makedirs(mft_dir) - - path = os.path.join(os.path.expanduser('~'), ".mft/consul") - if not os.path.exists(path): - print("Downloading Consul...") - zip_path = os.path.join(os.path.expanduser('~'), ".mft/consul.zip") - download_and_unarchive(consul_url, zip_path, os.path.join(os.path.expanduser('~'), ".mft/")) - - current_dir = os.getcwd() - try: - os.chdir(os.path.join(os.path.expanduser('~'), ".mft")) - os.chmod("consul", 0o744) - - if os.path.exists("consul.pid"): - pid = Path('consul.pid').read_text() - call(["kill", "-9", pid]) - - consul_process = Popen(['nohup', './consul', "agent", "-dev"], - stdout=open('consul.log', 'w'), - stderr=open('consul.err.log', 'a'), - preexec_fn=os.setpgrp) - - print("Consul process id: " + str(consul_process.pid)) - with open("consul.pid", "w") as consul_pid: - consul_pid.write(str(consul_process.pid)) - finally: - os.chdir(current_dir) - - path = os.path.join(os.path.expanduser('~'), ".mft/Standalone-Service-0.01") - if not os.path.exists(path): - url = "https://github.com/apache/airavata-mft/releases/download/v0.0.1/Standalone-Service-0.01-bin.zip" - print("Downloading MFT Server...") - zip_path = os.path.join(os.path.expanduser('~'), ".mft/Standalone-Service-0.01-bin.zip") - download_and_unarchive(url, zip_path) - - restart_service(path + "/bin", "standalone-service-daemon.sh") - - print("MFT Started") + print("Setting up MFT Services") + + required_java_version = 11 + if platform == "linux" or platform == "linux2": + consul_url = "https://releases.hashicorp.com/consul/1.7.1/consul_1.7.1_linux_amd64.zip" + check_java_version_method(required_java_version) + elif platform == "darwin": + consul_url = "https://releases.hashicorp.com/consul/1.7.1/consul_1.7.1_darwin_amd64.zip" + check_java_version_method(required_java_version) + elif platform == "win32": + print("Windows support is not available yet") + raise typer.Exit() + else: + print("Un supported platform: " + platform) + raise typer.Exit() + + + mft_dir = os.path.join(os.path.expanduser('~'), ".mft") + if not os.path.exists(mft_dir): + os.makedirs(mft_dir) + + path = os.path.join(os.path.expanduser('~'), ".mft/consul") + if not os.path.exists(path): + print("Downloading Consul...") + zip_path = os.path.join(os.path.expanduser('~'), ".mft/consul.zip") + download_and_unarchive(consul_url, zip_path, os.path.join(os.path.expanduser('~'), ".mft/")) + + current_dir = os.getcwd() + try: + os.chdir(os.path.join(os.path.expanduser('~'), ".mft")) + os.chmod("consul", 0o744) + + if os.path.exists("consul.pid"): + pid = Path('consul.pid').read_text() + call(["kill", "-9", pid]) + + consul_process = Popen(['nohup', './consul', "agent", "-dev"], + stdout=open('consul.log', 'w'), + stderr=open('consul.err.log', 'a'), + preexec_fn=os.setpgrp) + + print("Consul process id: " + str(consul_process.pid)) + with open("consul.pid", "w") as consul_pid: + consul_pid.write(str(consul_process.pid)) + finally: + os.chdir(current_dir) + + path = os.path.join(os.path.expanduser('~'), ".mft/Standalone-Service-0.01") + if not os.path.exists(path): + url = "https://github.com/apache/airavata-mft/releases/download/v0.0.1/Standalone-Service-0.01-bin.zip" + print("Downloading MFT Server...") + zip_path = os.path.join(os.path.expanduser('~'), ".mft/Standalone-Service-0.01-bin.zip") + download_and_unarchive(url, zip_path) + + restart_service(path + "/bin", "standalone-service-daemon.sh") + + print("MFT Started") def stop_mft(): - print("Stopping MFT Services") + print("Stopping MFT Services") - path = os.path.join(os.path.expanduser('~'), ".mft/consul") - if os.path.exists(path): - current_dir = os.getcwd() - try: - os.chdir(os.path.join(os.path.expanduser('~'), ".mft")) - os.chmod("consul", 0o744) + path = os.path.join(os.path.expanduser('~'), ".mft/consul") + if os.path.exists(path): + current_dir = os.getcwd() + try: + os.chdir(os.path.join(os.path.expanduser('~'), ".mft")) + os.chmod("consul", 0o744) - if os.path.exists("consul.pid"): - pid = Path('consul.pid').read_text() - call(["kill", "-9", pid]) - finally: - os.chdir(current_dir) + if os.path.exists("consul.pid"): + pid = Path('consul.pid').read_text() + call(["kill", "-9", pid]) + finally: + os.chdir(current_dir) - path = os.path.join(os.path.expanduser('~'), ".mft/Standalone-Service-0.01") - if os.path.exists(path): - stop_service(path + "/bin", "standalone-service-daemon.sh") + path = os.path.join(os.path.expanduser('~'), ".mft/Standalone-Service-0.01") + if os.path.exists(path): + stop_service(path + "/bin", "standalone-service-daemon.sh") + + print("MFT Stopped....") - print("MFT Stopped....") def update_mft(): - stop_mft() + stop_mft() - mft_dir = os.path.join(os.path.expanduser('~'), ".mft") - if os.path.exists(mft_dir): - print("Removing .mft directory") - shutil.rmtree(mft_dir) + mft_dir = os.path.join(os.path.expanduser('~'), ".mft") + if os.path.exists(mft_dir): + print("Removing .mft directory") + shutil.rmtree(mft_dir) - database = os.path.join(os.path.expanduser('~'), "mft_db.mv.db") - if os.path.exists(database): - os.remove(database) - start_mft() + database = os.path.join(os.path.expanduser('~'), "mft_db.mv.db") + if os.path.exists(database): + os.remove(database) + start_mft() -def print_log(): - log_file_path = os.path.join(os.path.expanduser('~'), ".mft", "Standalone-Service-0.01", "logs", "airavata.log") - log_file = open(log_file_path,"r") - lines = follow_file(log_file) - for line in lines: - print(line) -def follow_file(file): - #file.seek(0, os.SEEK_END) +def print_log(): + log_file_path = os.path.join(os.path.expanduser('~'), ".mft", "Standalone-Service-0.01", "logs", "airavata.log") + log_file = open(log_file_path, "r") + lines = follow_file(log_file) + for line in lines: + print(line) - while True: - line = file.readline() - if not line: - time.sleep(0.1) - continue - yield line +def follow_file(file): + # file.seek(0, os.SEEK_END) + while True: + line = file.readline() + if not line: + time.sleep(0.1) + continue + yield line diff --git a/python-cli/mft_cli/venv/pyvenv.cfg b/python-cli/mft_cli/venv/pyvenv.cfg new file mode 100644 index 0000000..740014e --- /dev/null +++ b/python-cli/mft_cli/venv/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /Library/Frameworks/Python.framework/Versions/3.10/bin +include-system-site-packages = false +version = 3.10.11
