Пример #1
0
def reschedule(backend_task_id, job_status, sub_ids, backend_ids):
    taskClient = TaskClient()
    jobManager = RPCClient('WorkloadManagement/JobManager')
    if job_status:
        result = taskClient.rescheduleTask(backend_task_id, job_status)
        return result
    elif sub_ids:
        #jsub would match sub_ids with backend_ids to avoid executing codes here.
        pass
    elif backend_ids:
        result = jobManager.rescheduleJob(backend_ids)
        return result

    return {'OK': True, 'Value': []}
Пример #2
0
    def web_getTaskJobInfo(self):
        taskClient = TaskClient()

        jobID = int(self.request.arguments["JobID"][0])

        outFields = ['Info']
        result = yield self.threadTask(taskClient.getJobs, [jobID], outFields)
        if not (result["OK"] and result['Value']):
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        info = json.loads(result['Value'][0][0])

        allInfo = []
        for name, value in sorted(info.iteritems(), key=lambda d: d[0]):
            if type(value) == type([]):
                value = ', '.join(value)
            allInfo.append([name, str(value)])

        callback = {"success": "true", "result": allInfo}
        self.finish(callback)
Пример #3
0
    def web_getTaskData(self):
        taskClient = TaskClient()
        req = self.__request()

        condDict = req
        limit = self.numberOfJobs
        offset = self.pageNumber
        orderAttribute = self.globalSort[0][0] + ':' + self.globalSort[0][1]

        result = yield self.threadTask(taskClient.getTaskCount, condDict)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": [],
                "total": 0,
                "error": result["Message"]
            })
            return
        total = result['Value']

        result = yield self.threadTask(taskClient.listTask, condDict, limit,
                                       offset, orderAttribute)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": [],
                "total": 0,
                "error": result["Message"]
            })
            return

        fields = [
            'TaskID', 'TaskName', 'Status', 'Owner', 'OwnerGroup', 'OwnerDN',
            'Site', 'JobGroup'
        ]
        values = []
        for data in result['Value']:
            value = {}
            for d in data:
                if d in fields:
                    value[d] = data[d]
            value['IconStatus'] = STATUS_ICON_MAP[data['Status']]
            value['CreationTime'] = str(data['CreationTime'])
            value['UpdateTime'] = str(data['UpdateTime'])
            value['Progress'] = data['Progress']

            totalJobs = data['Progress'].get('Total', 0)
            deletedJobs = data['Progress'].get('Deleted', 0)
            value['Total'] = '%s/%s' % (totalJobs - deletedJobs, totalJobs)

            values.append(value)

        callback = {
            "success": "true",
            "result": values,
            "total": total,
            "date": None
        }
        self.finish(callback)
Пример #4
0
    def web_getSelectionData(self):
        sData = self.getSessionData()

        taskClient = TaskClient()

        callback = {}

        user = sData["user"]["username"]
        group = sData["user"]["group"]

        if user == "Anonymous":
            callback["status"] = [["Insufficient rights"]]
        elif 'JobAdministrator' in sData['user']['properties']:
            callback["status"] = [['Init'], ['Ready'], ['Processing'],
                                  ['Finished'], ['Expired'], ['Removed']]
        elif 'NormalUser' in sData['user']['properties']:
            callback["status"] = [['Init'], ['Ready'], ['Processing'],
                                  ['Finished'], ['Expired']]

        if user == "Anonymous":
            callback["owner"] = [["Insufficient rights"]]
        elif 'NormalUser' in sData['user']['properties']:
            owner = [[user]]
        else:
            result = yield self.threadTask(taskClient.getTaskOwners)
            if result["OK"]:
                owner = []
                if len(result["Value"]) > 0:
                    for i in result["Value"]:
                        owner.append([str(i)])
                else:
                    owner = [["Nothing to display"]]
            else:
                gLogger.error("getTaskOwners() return error: %s" %
                              result["Message"])
                owner = [["Error happened on service side"]]
        callback["owner"] = owner

        if user == "Anonymous":
            callback["ownerGroup"] = [["Insufficient rights"]]
        elif 'NormalUser' in sData['user']['properties']:
            ownerGroup = [[group]]
        else:
            result = yield self.threadTask(taskClient.getTaskOwnerGroups)
            if result["OK"]:
                ownerGroup = []
                if len(result["Value"]) > 0:
                    for i in result["Value"]:
                        ownerGroup.append([str(i)])
                else:
                    ownerGroup = [["Nothing to display"]]
            else:
                gLogger.error("getTaskOwnerGroups() return error: %s" %
                              result["Message"])
                ownerGroup = [["Error happened on service side"]]
        callback["ownerGroup"] = ownerGroup

        self.finish(callback)
Пример #5
0
def status(backend_task_id, job_status):
    taskClient = TaskClient()
    jobMonitor = RPCClient('WorkloadManagement/JobMonitoring')

    if not job_status:
        result = taskClient.getTaskProgress(backend_task_id)
        if 'Value' in result:
            result['njobs'] = result['Value']
        return result
    else:
        jobs = taskClient.getTaskJobs(backend_task_id)['Value']
        job_list = {status: [] for status in job_status}
        for job in jobs:
            try:
                status = jobMonitor.getJobStatus(int(job))['Value']
                if status in job_status:
                    job_list[status].append(int(job))
            except:
                pass
        return {'OK': True, 'jobIDs': job_list}
Пример #6
0
    def web_getTaskJobsStatistics(self):
        taskClient = TaskClient()

        taskID = int(self.request.arguments["TaskID"][0])

        statistics = []

        statistics.append(['==== Status ====', ''])
        result = yield self.threadTask(taskClient.getTaskJobsStatistics,
                                       taskID, 'Status')
        if result["OK"]:
            for s in result['Value']:
                statistics.append([s, result['Value'].get(s, 0)])

        statistics.append(['', ''])

        statistics.append(['==== Minor Status ====', ''])
        result = yield self.threadTask(taskClient.getTaskJobsStatistics,
                                       taskID, 'MinorStatus')
        if result["OK"]:
            for s in result['Value']:
                statistics.append([s, result['Value'].get(s, 0)])

        statistics.append(['', ''])

        statistics.append(['==== Application Status ====', ''])
        result = yield self.threadTask(taskClient.getTaskJobsStatistics,
                                       taskID, 'ApplicationStatus')
        if result["OK"]:
            for s in result['Value']:
                statistics.append([s, result['Value'].get(s, 0)])

        statistics.append(['', ''])

        statistics.append(['==== Site ====', ''])
        result = yield self.threadTask(taskClient.getTaskJobsStatistics,
                                       taskID, 'Site')
        if result["OK"]:
            for s in result['Value']:
                statistics.append([s, result['Value'].get(s, 0)])

        statistics.append(['', ''])

        statistics.append(['==== Job Group ====', ''])
        result = yield self.threadTask(taskClient.getTaskJobsStatistics,
                                       taskID, 'JobGroup')
        if result["OK"]:
            for s in result['Value']:
                statistics.append([s, result['Value'].get(s, 0)])

        callback = {"success": "true", "result": statistics}
        self.finish(callback)
Пример #7
0
    def web_getTaskJobs(self):
        taskClient = TaskClient()

        taskID = int(self.request.arguments["TaskID"][0])

        result = yield self.threadTask(taskClient.getTaskJobs, taskID)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        callback = {"success": "true", "result": result['Value']}
        self.finish(callback)
Пример #8
0
    def web_renameTask(self):
        taskClient = TaskClient()

        taskID = int(self.request.arguments["TaskID"][0])
        newName = self.request.arguments["NewName"][0]

        result = yield self.threadTask(taskClient.renameTask, taskID, newName)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        callback = {"success": "true", "result": result['Value']}
        self.finish(callback)
Пример #9
0
    def web_deleteTask(self):
        taskClient = TaskClient()

        taskIDs = self.request.arguments["TaskID"][0].split(',')
        if '' in taskIDs:
            taskIDs.remove('')
        taskIDs = [int(taskID) for taskID in taskIDs]

        for taskID in taskIDs:
            result = yield self.threadTask(taskClient.deleteTask, taskID)
            if not result["OK"]:
                self.finish({
                    "success": "false",
                    "result": '',
                    "error": result["Message"]
                })
                return

        callback = {"success": "true", "result": taskIDs}
        self.finish(callback)
Пример #10
0
    def web_getTaskHistory(self):
        taskClient = TaskClient()

        taskID = int(self.request.arguments["TaskID"][0])

        result = yield self.threadTask(taskClient.getTaskHistories, taskID)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        histories = []
        for status, statusTime, description in result['Value']:
            histories.append([status, str(statusTime), description])

        callback = {"success": "true", "result": histories}
        self.finish(callback)
Пример #11
0
    def web_getTaskProgress(self):
        taskClient = TaskClient()

        taskID = int(self.request.arguments["TaskID"][0])

        result = yield self.threadTask(taskClient.getTaskProgress, taskID)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        statuses = ['Total', 'Done', 'Failed', 'Running', 'Waiting', 'Deleted']

        allProgress = []
        for status in statuses:
            allProgress.append([status, result['Value'].get(status, 0)])

        callback = {"success": "true", "result": allProgress}
        self.finish(callback)
Пример #12
0
    def web_getTaskInfo(self):
        taskClient = TaskClient()

        taskID = int(self.request.arguments["TaskID"][0])

        result = yield self.threadTask(taskClient.getTaskInfo, taskID)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        allInfo = []
        for name, value in sorted(result['Value'].iteritems(),
                                  key=lambda d: d[0]):
            if type(value) == type([]):
                value = ', '.join(value)
            allInfo.append([name, str(value)])

        callback = {"success": "true", "result": allInfo}
        self.finish(callback)
Пример #13
0
    def web_getTaskJobList(self):
        taskClient = TaskClient()

        taskID = int(self.request.arguments["TaskID"][0])

        result = yield self.threadTask(taskClient.getTaskJobs, taskID)
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        jobIDs = result['Value']

        RPC = RPCClient("WorkloadManagement/JobMonitoring")
        result = RPC.getJobsStatus(result['Value'])
        if not result["OK"]:
            self.finish({
                "success": "false",
                "result": '',
                "error": result["Message"]
            })
            return

        jobStatuses = result['Value']
        jobList = []
        for jobID in jobIDs:
            if jobID in jobStatuses:
                jobList.append([jobID, jobStatuses[jobID]['Status']])
            else:
                jobList.append([jobID, 'Deleted'])

        callback = {"success": "true", "result": jobList}
        self.finish(callback)
Пример #14
0
)
Script.registerSwitch("w", "whole", "List all the fields")
Script.registerSwitch("l:", "limit=", "Task number limit")
Script.registerSwitch("e", "expired", "Include expired tasks")
Script.registerSwitch("r", "removed", "Include removed tasks (only for admin)")
Script.registerSwitch("u", "users",
                      "Include other users' tasks (only for admin)")
Script.registerSwitch("a", "all", "Show all tasks")

Script.parseCommandLine(ignoreErrors=False)
options = Script.getUnprocessedSwitches()
args = Script.getPositionalArgs()

from DIRAC.Core.Security.ProxyInfo import getProxyInfo
from IHEPDIRAC.WorkloadManagementSystem.Client.TaskClient import TaskClient
taskClient = TaskClient()

fieldTitle = {
    'TaskID': 'TaskID',
    'TaskName': 'TaskName',
    'Status': 'Status',
    'Owner': 'Owner',
    'OwnerDN': 'OwnerDN',
    'OwnerGroup': 'OwnerGroup',
    'CreationTime': 'CreationTime',
    'UpdateTime': 'UpdateTime',
    'Progress': 'Progress(T/(D|F|R|W|O))',
    'Site': 'Site',
    'JobGroup': 'JobGroup',
}
Пример #15
0
def delete(backend_task_id, job_status):
    taskClient = TaskClient()
    result = taskClient.deleteTask(backend_task_id, job_status)

    return result