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

Reply via email to