blob: 3fdfb83fbda483870b699545cf6b0f6b9e89bb32 [file] [log] [blame]
import sys,random,time
import threading
from expcatalog.expcatalog import ExpCatalog
from appcatalog.appcatalog import AppCatalog
VERSION = "0.0.1"
BANNER = """
Welcome to Airavata CLI v%s - Wirtten in python
""" % VERSION
exitMsg = "Bye, See you soon :)"
cli_prompt = "=> "
class AiravataCLI:
def __init__(self, hostName, port):
self.exit = False
self.expCatalog = ExpCatalog(hostName, port)
self.AppCatalog = AppCatalog(hostName, port)
self.experimentState = "Hukarz"
self.jobStateMapper = {
0: "SUBMITTED",
1: "QUEUED",
2: "ACTIVE",
3: "COMPLETE",
4: "CANCELED",
5: "FAILED",
6: "SUSPENDED",
7: "UNKNOWN"
}
self.experimentStateMapper = {
0: "CREATED",
1: "VALIDATED",
2: "SCHEDULED",
3: "LAUNCHED",
4: "EXECUTING",
5: "CANCELLING",
6: "CANCELED",
7: "COMPLETED",
8: "FAILED"
}
# set initial properties
def printVersion(self):
print (BANNER)
def start(self):
command ='expid gaussianfromclient11_62221967-646d-475c-9c46-ed093d09c610'
while not self.exit:
cInputs = command.split(" ")
if cInputs[0] == 'q' or cInputs[0] == 'quit':
print (exitMsg)
self.exit = True
elif cInputs[0] == 'expid':
self.monitorExperiment(cInputs[1])
else:
print ("not yet implemented")
if not self.exit:
command = raw_input(cli_prompt)
def monitorExperiment(self, expId):
experimentSum = self.expCatalog.getExperimentSummary(expId) ## get experiment id from input and pass it to this
self.experimentState = self.experimentStateMapper.get(experimentSum.status.state, "Hukarz")
indent = " |- "
print (indent + "name :" + experimentSum.name)
print (indent + "Id :" + experimentSum.id)
print (indent + "status :" + self.experimentState)
indent = " " + indent
for job in experimentSum.jobs:
print (indent + "jobId :" + job.jobId)
print (indent + "jobStatus :" + self.jobStateMapper.get(job.jobStatus.jobState, "Hukarz"))
print (indent + " ---- ")
return self.experimentState
def createExperiment(self, applicationName):
return self.expCatalog.createExperiment(applicationName)
def cancelExperiment(self, expId):
return self.expCatalog.cancelExperiment(expId)
def computer_resources(self):
return self.AppCatalog.computer_resources()
def list_of_applications(self, gatewayId):
return self.AppCatalog.list_of_applications(gatewayId)
def application_deployments(self, applicationInterfaceId):
return self.AppCatalog.application_deployments(applicationInterfaceId)
def module_descriptions(self,gatewayId):
return self.AppCatalog.module_descriptions(gatewayId)
def get_gatewaylist(self):
return self.AppCatalog.get_gatewaylist()
def launchExperiment(self, expId):
self.expCatalog.launchExperiment(expId)
# while True:
# self.monitorExperiment(expId)
def monitorStatus(self, expId):
self.sendCancel = False
delay = 7
while True:
state = (self.monitorExperiment(expId))
if (state == "EXECUTING"):
if (not self.sendCancel):
if delay == 0:
print ("sending cancel request for " + expId)
self.cancelExperiment(expId)
print ("sent cancel request for " + expId)
self.sendCancel = True
else:
delay -= 1
if (state == "COMPLETED" or state == "FAILED" or state == "CANCELLED"):
return
# airavata_cli.monitorExperiment("Einstein_c33d855b-8c10-4d2a-961a-4b55aff807f7")
time.sleep(2)
def experiment_statistics(self, gatewayId, fromTime, toTime):
return self.expCatalog.experiment_statistics(gatewayId,fromTime,toTime)
def createExperiment1(self,authzToken,gatewayId,experiment):
return self.expCatalog.create_experiment1(authzToken,gatewayId,experiment)