diff --git a/src/DIRAC/MonitoringSystem/Service/WebAppHandler.py b/src/DIRAC/MonitoringSystem/Service/WebAppHandler.py index b7090a1e3a6..09762aeb044 100644 --- a/src/DIRAC/MonitoringSystem/Service/WebAppHandler.py +++ b/src/DIRAC/MonitoringSystem/Service/WebAppHandler.py @@ -6,7 +6,6 @@ from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations from DIRAC.ConfigurationSystem.Client.Helpers.Resources import getSites from DIRAC.Core.DISET.RequestHandler import RequestHandler -from DIRAC.Core.Utilities.JEncode import strToIntDict from DIRAC.Core.Utilities.ObjectLoader import ObjectLoader from DIRAC.RequestManagementSystem.Client.Operation import Operation from DIRAC.RequestManagementSystem.Client.Request import Request @@ -334,6 +333,74 @@ def export_getSiteSummarySelectors(cls): return S_OK(resultDict) + types_getApplicationStates = [] + + @classmethod + def export_getApplicationStates(cls, condDict=None, older=None, newer=None): + """Return Distinct Values of ApplicationStatus job Attribute in WMS""" + return cls.jobDB.getDistinctJobAttributes("ApplicationStatus", condDict, older, newer) + + types_getJobTypes = [] + + @classmethod + def export_getJobTypes(cls, condDict=None, older=None, newer=None): + """Return Distinct Values of JobType job Attribute in WMS""" + return cls.jobDB.getDistinctJobAttributes("JobType", condDict, older, newer) + + types_getOwners = [] + + @classmethod + def export_getOwners(cls, condDict=None, older=None, newer=None): + """ + Return Distinct Values of Owner job Attribute in WMS + """ + return cls.jobDB.getDistinctJobAttributes("Owner", condDict, older, newer) + + types_getOwnerGroup = [] + + @classmethod + def export_getOwnerGroup(cls): + """ + Return Distinct Values of OwnerGroup from the JobDB + """ + return cls.jobDB.getDistinctJobAttributes("OwnerGroup") + + types_getJobGroups = [] + + @classmethod + def export_getJobGroups(cls, condDict=None, older=None, cutDate=None): + """ + Return Distinct Values of ProductionId job Attribute in WMS + """ + return cls.jobDB.getDistinctJobAttributes("JobGroup", condDict, older, newer=cutDate) + + types_getSites = [] + + @classmethod + def export_getSites(cls, condDict=None, older=None, newer=None): + """ + Return Distinct Values of Site job Attribute in WMS + """ + return cls.jobDB.getDistinctJobAttributes("Site", condDict, older, newer) + + types_getStates = [] + + @classmethod + def export_getStates(cls, condDict=None, older=None, newer=None): + """ + Return Distinct Values of Status job Attribute in WMS + """ + return cls.jobDB.getDistinctJobAttributes("Status", condDict, older, newer) + + types_getMinorStates = [] + + @classmethod + def export_getMinorStates(cls, condDict=None, older=None, newer=None): + """ + Return Distinct Values of Minor Status job Attribute in WMS + """ + return cls.jobDB.getDistinctJobAttributes("MinorStatus", condDict, older, newer) + ############################################################################## # Transformations ############################################################################## diff --git a/src/DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py b/src/DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py index 55e1e85b062..ad4f7c6c8dc 100644 --- a/src/DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py +++ b/src/DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py @@ -7,21 +7,20 @@ In case you want to further extend it you are required to follow the note on the initialize method and on the _getClients method. """ -import time -import datetime import concurrent.futures +import datetime +import time -from DIRAC import S_OK - +from DIRAC import S_OK, gConfig +from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations from DIRAC.Core.Base.AgentModule import AgentModule from DIRAC.Core.Security.ProxyInfo import getProxyInfo -from DIRAC.Core.Utilities.List import breakListIntoChunks from DIRAC.Core.Utilities.Dictionaries import breakDictionaryIntoChunks -from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations +from DIRAC.Core.Utilities.List import breakListIntoChunks +from DIRAC.TransformationSystem.Agent.TransformationAgentsUtilities import TransformationAgentsUtilities from DIRAC.TransformationSystem.Client.FileReport import FileReport -from DIRAC.TransformationSystem.Client.WorkflowTasks import WorkflowTasks from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient -from DIRAC.TransformationSystem.Agent.TransformationAgentsUtilities import TransformationAgentsUtilities +from DIRAC.TransformationSystem.Client.WorkflowTasks import WorkflowTasks from DIRAC.WorkloadManagementSystem.Client import JobStatus from DIRAC.WorkloadManagementSystem.Client.JobManagerClient import JobManagerClient @@ -193,11 +192,9 @@ def execute(self): else: # Get the transformations which should be submitted self.tasksPerLoop = self.am_getOption("TasksPerLoop", self.tasksPerLoop) - res = self.jobManagerClient.getMaxParametricJobs() - if not res["OK"]: - self.log.warn("Could not get the maxParametricJobs from JobManager", res["Message"]) - else: - self.maxParametricJobs = res["Value"] + self.maxParametricJobs = gConfig.getValue( + "/Systems/WorkloadManagement/Services/JobManager/MaxParametricJobs", self.maxParametricJobs + ) self._addOperationForTransformations( self.operationsOnTransformationDict, diff --git a/src/DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py b/src/DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py index 064e3f97416..2d9f815262e 100644 --- a/src/DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py +++ b/src/DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py @@ -16,14 +16,12 @@ # # from DIRAC from DIRAC import S_ERROR, S_OK -from DIRAC.ConfigurationSystem.Client.ConfigurationData import gConfigurationData from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations from DIRAC.Core.Base.AgentModule import AgentModule from DIRAC.Core.Utilities.DErrno import cmpError from DIRAC.Core.Utilities.List import breakListIntoChunks from DIRAC.Core.Utilities.Proxy import executeWithUserProxy from DIRAC.Core.Utilities.ReturnValues import returnSingleResult -from DIRAC.DataManagementSystem.Client.DataManager import DataManager from DIRAC.RequestManagementSystem.Client.File import File from DIRAC.RequestManagementSystem.Client.Operation import Operation from DIRAC.RequestManagementSystem.Client.ReqClient import ReqClient @@ -36,6 +34,7 @@ from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient from DIRAC.WorkloadManagementSystem.Client.JobMonitoringClient import JobMonitoringClient from DIRAC.WorkloadManagementSystem.Client.WMSClient import WMSClient +from DIRAC.WorkloadManagementSystem.DB.JobDB import JobDB # # agent's name AGENT_NAME = "Transformation/TransformationCleaningAgent" @@ -65,6 +64,8 @@ def __init__(self, *args, **kwargs): self.reqClient = None # # file catalog client self.metadataClient = None + # # JobDB + self.jobDB = None # # transformations types self.transformationTypes = None @@ -127,6 +128,8 @@ def initialize(self): self.metadataClient = FileCatalogClient() # # job monitoring client self.jobMonitoringClient = JobMonitoringClient() + # # job DB + self.jobDB = JobDB() return S_OK() @@ -224,7 +227,7 @@ def finalize(self): So, we should just clean from time to time. What I added here is done only when the agent finalize, and it's quite light-ish operation anyway. """ - res = self.jobMonitoringClient.getJobGroups(None, datetime.utcnow() - timedelta(days=365)) + res = self.jobDB.getDistinctJobAttributes("JobGroup", None, datetime.utcnow() - timedelta(days=365)) if not res["OK"]: self.log.error("Failed to get job groups", res["Message"]) return res diff --git a/src/DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py b/src/DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py index e0eda68d8e7..33fc1be1003 100755 --- a/src/DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py +++ b/src/DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py @@ -38,15 +38,6 @@ def getJobParameters(self, jobIDs, parName=None): res["Value"] = strToIntDict(res["Value"]) return res - @ignoreEncodeWarning - def getJobsParameters(self, jobIDs, parameters): - res = self._getRPC().getJobsParameters(jobIDs, parameters) - - # Cast the str keys to int - if res["OK"]: - res["Value"] = strToIntDict(res["Value"]) - return res - @ignoreEncodeWarning def getJobsMinorStatus(self, jobIDs): res = self._getRPC().getJobsMinorStatus(jobIDs) diff --git a/src/DIRAC/WorkloadManagementSystem/DB/JobDB.py b/src/DIRAC/WorkloadManagementSystem/DB/JobDB.py index 0d82be10fd6..829bda4a2c0 100755 --- a/src/DIRAC/WorkloadManagementSystem/DB/JobDB.py +++ b/src/DIRAC/WorkloadManagementSystem/DB/JobDB.py @@ -1190,64 +1190,6 @@ def rescheduleJob(self, jobID): return retVal - ############################################################################# - def getSiteSummary(self): - """Get the summary of jobs in a given status on all the sites""" - - waitingList = ['"Submitted"', '"Assigned"', '"Waiting"', '"Matched"'] - waitingString = ",".join(waitingList) - - result = self.getDistinctJobAttributes("Site") - if not result["OK"]: - return result - - siteList = result["Value"] - siteDict = {} - totalDict = { - JobStatus.WAITING: 0, - JobStatus.RUNNING: 0, - JobStatus.STALLED: 0, - JobStatus.DONE: 0, - JobStatus.FAILED: 0, - } - - for site in siteList: - if site == "ANY": - continue - # Waiting - siteDict[site] = {} - ret = self._escapeString(site) - if not ret["OK"]: - return ret - e_site = ret["Value"] - - req = f"SELECT COUNT(JobID) FROM Jobs WHERE Status IN ({waitingString}) AND Site={e_site}" - result = self._query(req) - if result["OK"]: - count = result["Value"][0][0] - else: - return S_ERROR("Failed to get Site data from the JobDB") - siteDict[site][JobStatus.WAITING] = count - totalDict[JobStatus.WAITING] += count - # Running,Stalled,Done,Failed - for status in [ - f'"{JobStatus.RUNNING}"', - f'"{JobStatus.STALLED}"', - f'"{JobStatus.DONE}"', - f'"{JobStatus.FAILED}"', - ]: - req = f"SELECT COUNT(JobID) FROM Jobs WHERE Status={status} AND Site={e_site}" - result = self._query(req) - if result["OK"]: - count = result["Value"][0][0] - else: - return S_ERROR("Failed to get Site data from the JobDB") - siteDict[site][status.replace('"', "")] = count - totalDict[status.replace('"', "")] += count - - siteDict["Total"] = totalDict - return S_OK(siteDict) - ################################################################################# def getSiteSummaryWeb(self, selectDict, sortList, startItem, maxItems): """Get the summary of jobs in a given status on all the sites in the standard Web form""" diff --git a/src/DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py b/src/DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py index cce2d879129..2a02bdade9a 100755 --- a/src/DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py +++ b/src/DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py @@ -105,16 +105,6 @@ def __sendJobsToOptimizationMind(self, jids): return self.log.info("Optimize msg sent", f"for {len(jids)} jobs") - ########################################################################### - types_getMaxParametricJobs = [] - - def export_getMaxParametricJobs(self): - """Get the maximum number of parametric jobs - - :return: S_OK()/S_ERROR() - """ - return S_OK(self.maxParametricJobs) - types_submitJob = [str] def export_submitJob(self, jobDesc): diff --git a/src/DIRAC/WorkloadManagementSystem/Service/JobMonitoringHandler.py b/src/DIRAC/WorkloadManagementSystem/Service/JobMonitoringHandler.py index bfae2bdefd4..9743c91db94 100755 --- a/src/DIRAC/WorkloadManagementSystem/Service/JobMonitoringHandler.py +++ b/src/DIRAC/WorkloadManagementSystem/Service/JobMonitoringHandler.py @@ -10,7 +10,6 @@ from DIRAC.Core.Utilities.DEncode import ignoreEncodeWarning from DIRAC.Core.Utilities.JEncode import strToIntDict from DIRAC.Core.Utilities.ObjectLoader import ObjectLoader -from DIRAC.WorkloadManagementSystem.Client.PilotManagerClient import PilotManagerClient from DIRAC.WorkloadManagementSystem.Utilities.JobParameters import getJobParameters @@ -37,7 +36,6 @@ def initializeHandler(cls, svcInfoDict): return result cls.elasticJobParametersDB = result["Value"](parentLogger=cls.log) - cls.pilotManager = PilotManagerClient() return S_OK() def initializeRequest(self): @@ -52,82 +50,6 @@ def getJobsAttributes(cls, *args, **kwargs): return res return S_OK(strToIntDict(res["Value"])) - ############################################################################## - types_getApplicationStates = [] - - @classmethod - def export_getApplicationStates(cls, condDict=None, older=None, newer=None): - """Return Distinct Values of ApplicationStatus job Attribute in WMS""" - return cls.jobDB.getDistinctJobAttributes("ApplicationStatus", condDict, older, newer) - - ############################################################################## - types_getJobTypes = [] - - @classmethod - def export_getJobTypes(cls, condDict=None, older=None, newer=None): - """Return Distinct Values of JobType job Attribute in WMS""" - return cls.jobDB.getDistinctJobAttributes("JobType", condDict, older, newer) - - ############################################################################## - types_getOwners = [] - - @classmethod - def export_getOwners(cls, condDict=None, older=None, newer=None): - """ - Return Distinct Values of Owner job Attribute in WMS - """ - return cls.jobDB.getDistinctJobAttributes("Owner", condDict, older, newer) - - ############################################################################## - types_getOwnerGroup = [] - - @classmethod - def export_getOwnerGroup(cls): - """ - Return Distinct Values of OwnerGroup from the JobDB - """ - return cls.jobDB.getDistinctJobAttributes("OwnerGroup") - - ############################################################################## - types_getJobGroups = [] - - @classmethod - def export_getJobGroups(cls, condDict=None, older=None, cutDate=None): - """ - Return Distinct Values of ProductionId job Attribute in WMS - """ - return cls.jobDB.getDistinctJobAttributes("JobGroup", condDict, older, newer=cutDate) - - ############################################################################## - types_getSites = [] - - @classmethod - def export_getSites(cls, condDict=None, older=None, newer=None): - """ - Return Distinct Values of Site job Attribute in WMS - """ - return cls.jobDB.getDistinctJobAttributes("Site", condDict, older, newer) - - ############################################################################## - types_getStates = [] - - @classmethod - def export_getStates(cls, condDict=None, older=None, newer=None): - """ - Return Distinct Values of Status job Attribute in WMS - """ - return cls.jobDB.getDistinctJobAttributes("Status", condDict, older, newer) - - ############################################################################## - types_getMinorStates = [] - - @classmethod - def export_getMinorStates(cls, condDict=None, older=None, newer=None): - """ - Return Distinct Values of Minor Status job Attribute in WMS - """ - return cls.jobDB.getDistinctJobAttributes("MinorStatus", condDict, older, newer) - ############################################################################## types_getJobs = [] @@ -148,20 +70,6 @@ def export_getJobs(cls, attrDict=None, cutDate=None): return cls.jobDB.selectJobs(attrDict, newer=cutDate) - ############################################################################## - types_getJobOwner = [int] - - @classmethod - def export_getJobOwner(cls, jobID): - return cls.jobDB.getJobAttribute(jobID, "Owner") - - ############################################################################## - types_getJobSite = [int] - - @classmethod - def export_getJobSite(cls, jobID): - return cls.jobDB.getJobAttribute(jobID, "Site") - ############################################################################## types_getJobJDL = [int, bool] @@ -176,14 +84,6 @@ def export_getJobJDL(cls, jobID, original): def export_getJobLoggingInfo(cls, jobID): return cls.jobLoggingDB.getJobLoggingInfo(jobID) - ############################################################################## - types_getJobsParameters = [[str, int, list], list] - - @classmethod - @ignoreEncodeWarning - def export_getJobsParameters(cls, jobIDs, parameters): - return cls.getJobsAttributes(jobIDs, parameters) - ############################################################################## types_getJobsStates = [[str, int, list]] @@ -252,13 +152,6 @@ def export_getJobParameter(self, jobID, parName): return res return S_OK(res["Value"].get(int(jobID), {})) - ############################################################################## - types_getJobOptParameters = [int] - - @classmethod - def export_getJobOptParameters(cls, jobID): - return cls.jobDB.getJobOptParameters(jobID) - ############################################################################## types_getJobParameters = [[str, int, list]] @@ -274,15 +167,6 @@ def export_getJobParameters(self, jobIDs, parName=None): return getJobParameters(jobIDs, parName, self.vo or "") - ############################################################################## - types_getAtticJobParameters = [int] - - @classmethod - def export_getAtticJobParameters(cls, jobID, parameters=None, rescheduleCycle=-1): - if not parameters: - parameters = [] - return cls.jobDB.getAtticJobParameters(jobID, parameters, rescheduleCycle) - ############################################################################## types_getJobAttributes = [int] @@ -307,13 +191,6 @@ def export_getJobAttribute(cls, jobID, attribute): return cls.jobDB.getJobAttribute(jobID, attribute) - ############################################################################## - types_getSiteSummary = [] - - @classmethod - def export_getSiteSummary(cls): - return cls.jobDB.getSiteSummary() - ############################################################################## types_getJobHeartBeatData = [int] @@ -330,9 +207,6 @@ def export_getInputData(cls, jobID): return cls.jobDB.getInputData(jobID) -############################################################################## - - class JobMonitoringHandler(JobMonitoringHandlerMixin, RequestHandler): def initialize(self): return self.initializeRequest() diff --git a/tests/Integration/FutureClient/WorkloadManagement/Test_JobMonitoring.py b/tests/Integration/FutureClient/WorkloadManagement/Test_JobMonitoring.py index e83f5ca3439..5eaaac673df 100644 --- a/tests/Integration/FutureClient/WorkloadManagement/Test_JobMonitoring.py +++ b/tests/Integration/FutureClient/WorkloadManagement/Test_JobMonitoring.py @@ -12,18 +12,6 @@ TEST_JOB_IDS = [TEST_JOBS] + TEST_JOBS + [str(x) for x in TEST_JOBS] -def test_getApplicationStates(): - # JobMonitoringClient().getApplicationStates(condDict = None, older = None, newer = None) - method = JobMonitoringClient().getApplicationStates - pytest.skip() - - -def test_getAtticJobParameters(): - # JobMonitoringClient().getAtticJobParameters(jobID: int, parameters = None, rescheduleCycle = -1) - method = JobMonitoringClient().getAtticJobParameters - pytest.skip() - - def test_getCounters(): # JobMonitoringClient().getCounters(attrList: list, attrDict = None, cutDate = ) method = JobMonitoringClient().getCounters @@ -48,12 +36,6 @@ def test_getJobAttributes(): pytest.skip() -def test_getJobGroups(): - # JobMonitoringClient().getJobGroups(condDict = None, older = None, cutDate = None) - method = JobMonitoringClient().getJobGroups - pytest.skip() - - def test_getJobHeartBeatData(): # JobMonitoringClient().getJobHeartBeatData(jobID: int) method = JobMonitoringClient().getJobHeartBeatData @@ -72,18 +54,6 @@ def test_getJobLoggingInfo(): pytest.skip() -def test_getJobOptParameters(): - # JobMonitoringClient().getJobOptParameters(jobID: int) - method = JobMonitoringClient().getJobOptParameters - pytest.skip() - - -def test_getJobOwner(): - # JobMonitoringClient().getJobOwner(jobID: int) - method = JobMonitoringClient().getJobOwner - pytest.skip() - - def test_getJobPageSummaryWeb(): # JobMonitoringClient().getJobPageSummaryWeb(self: dict, selectDict: list, sortList: int, startItem: int, maxItems, selectJobs = True) method = JobMonitoringClient().getJobPageSummaryWeb @@ -102,24 +72,12 @@ def test_getJobParameters(): pytest.skip() -def test_getJobSite(): - # JobMonitoringClient().getJobSite(jobID: int) - method = JobMonitoringClient().getJobSite - pytest.skip() - - def test_getJobSummary(): # JobMonitoringClient().getJobSummary(jobID: int) method = JobMonitoringClient().getJobSummary pytest.skip() -def test_getJobTypes(): - # JobMonitoringClient().getJobTypes(condDict = None, older = None, newer = None) - method = JobMonitoringClient().getJobTypes - pytest.skip() - - def test_getJobs(): # JobMonitoringClient().getJobs(attrDict = None, cutDate = None) method = JobMonitoringClient().getJobs @@ -140,12 +98,6 @@ def test_getJobsMinorStatus(jobIDs): compare_results(partial(method, jobIDs)) -def test_getJobsParameters(): - # JobMonitoringClient().getJobsParameters(jobIDs: str | int | list, parameters: list) - method = JobMonitoringClient().getJobsParameters - pytest.skip() - - @pytest.mark.parametrize("jobIDs", TEST_JOB_IDS) def test_getJobsSites(jobIDs): # JobMonitoringClient().getJobsSites(jobIDs: str | int | list) @@ -171,39 +123,3 @@ def test_getJobsSummary(): # JobMonitoringClient().getJobsSummary(jobIDs: list) method = JobMonitoringClient().getJobsSummary pytest.skip() - - -def test_getMinorStates(): - # JobMonitoringClient().getMinorStates(condDict = None, older = None, newer = None) - method = JobMonitoringClient().getMinorStates - pytest.skip() - - -def test_getOwnerGroup(): - # JobMonitoringClient().getOwnerGroup() - method = JobMonitoringClient().getOwnerGroup - pytest.skip() - - -def test_getOwners(): - # JobMonitoringClient().getOwners(condDict = None, older = None, newer = None) - method = JobMonitoringClient().getOwners - pytest.skip() - - -def test_getSiteSummary(): - # JobMonitoringClient().getSiteSummary() - method = JobMonitoringClient().getSiteSummary - pytest.skip() - - -def test_getSites(): - # JobMonitoringClient().getSites(condDict = None, older = None, newer = None) - method = JobMonitoringClient().getSites - pytest.skip() - - -def test_getStates(): - # JobMonitoringClient().getStates(condDict = None, older = None, newer = None) - method = JobMonitoringClient().getStates - pytest.skip() diff --git a/tests/Integration/Monitoring/Test_WebAppClient.py b/tests/Integration/Monitoring/Test_WebAppClient.py index 7743354017d..aa76003fdb6 100644 --- a/tests/Integration/Monitoring/Test_WebAppClient.py +++ b/tests/Integration/Monitoring/Test_WebAppClient.py @@ -1,5 +1,7 @@ # pylint: disable=invalid-name, missing-docstring +import datetime + import DIRAC DIRAC.initialize() # Initialize configuration @@ -8,10 +10,45 @@ from DIRAC.MonitoringSystem.Client.WebAppClient import WebAppClient -def test_WMSAdministratorClient(): +def test_WebAppClient(): res = WebAppClient().getSiteSummaryWeb({}, [], 0, 100) assert res["OK"], res["Message"] assert res["Value"]["TotalRecords"] in [0, 1, 2, 34] res = WebAppClient().getSiteSummarySelectors() assert res["OK"], res["Message"] + + res = WebAppClient().getApplicationStates() + assert res["OK"], res["Message"] + + res = WebAppClient().getJobTypes() + assert res["OK"], res["Message"] + + res = WebAppClient().getOwners() + assert res["OK"], res["Message"] + + res = WebAppClient().getOwnerGroup() + assert res["OK"], res["Message"] + + res = WebAppClient().getJobGroups() + assert res["OK"], res["Message"] + resJG_empty = res["Value"] + + res = WebAppClient().getJobGroups(None, datetime.datetime.utcnow()) + assert res["OK"], res["Message"] + resJG_olderThanNow = res["Value"] + assert resJG_empty == resJG_olderThanNow + + res = WebAppClient().getJobGroups(None, datetime.datetime.utcnow() - datetime.timedelta(days=365)) + assert res["OK"], res["Message"] + resJG_olderThanOneYear = res["Value"] + assert set(resJG_olderThanOneYear).issubset(set(resJG_olderThanNow)) + + res = WebAppClient().getSites() + assert res["OK"], res["Message"] + + res = WebAppClient().getStates() + assert res["OK"], res["Message"] + + res = WebAppClient().getMinorStates() + assert res["OK"], res["Message"] diff --git a/tests/Integration/WorkloadManagementSystem/Test_Client_WMS.py b/tests/Integration/WorkloadManagementSystem/Test_Client_WMS.py index 09a00772234..0c76f900e19 100644 --- a/tests/Integration/WorkloadManagementSystem/Test_Client_WMS.py +++ b/tests/Integration/WorkloadManagementSystem/Test_Client_WMS.py @@ -181,17 +181,8 @@ def test_submitJob_parametricJob() -> None: res = dirac.submitJob(job) assert res["OK"], res["Message"] jobIDList = res["Value"] - - try: - assert len(jobIDList) == 3 - - res = jobMonitoringClient.getJobsParameters(jobIDList, ["JobName"]) - assert res["OK"], res["Message"] - jobNames = [res["Value"][jobID]["JobName"] for jobID in res["Value"]] - assert set(jobNames) == {f"parametric_helloWorld_{nJob}" for nJob in range(3)} - - finally: - jobManagerClient.removeJob(jobIDList) + assert len(jobIDList) == 3 + jobManagerClient.removeJob(jobIDList) def test_WMSClient_rescheduleJob() -> None: @@ -216,11 +207,6 @@ def test_WMSClient_rescheduleJob() -> None: assert jobDescription.lookupAttribute("Priority") is True assert jobDescription.lookupAttribute("JobID") is True - # Check that the owner - res = jobMonitoringClient.getJobOwner(jobID) - assert res["OK"], res["Message"] - assert res["Value"] == jobDescription.getAttributeString("Owner") - # resourceDescription = { # "OwnerGroup": jobDescription.getAttributeString("OwnerGroup"), # "VirtualOrganization": jobDescription.getAttributeString("VirtualOrganization"), @@ -295,9 +281,7 @@ def test_JobStateUpdateAndJobMonitoring() -> None: assert res["OK"], res["Message"] res = jobMonitoringClient.getJobJDL(jobID, False) assert res["OK"], res["Message"] - res = jobMonitoringClient.getJobsParameters([jobID], []) - assert res["OK"], res["Message"] - res = jobMonitoringClient.getJobOwner(jobID) + res = jobMonitoringClient.getJobParameters(jobID, []) assert res["OK"], res["Message"] # Adding stuff @@ -368,9 +352,6 @@ def test_JobStateUpdateAndJobMonitoring() -> None: res = jobMonitoringClient.getJobSummary(jobID) assert res["OK"], res["Message"] - res = jobMonitoringClient.getAtticJobParameters(jobID) - assert res["OK"], res["Message"] - res = jobStateUpdateClient.setJobStatus(jobID, JobStatus.DONE, "MinorStatus", "Unknown") assert res["OK"], res["Message"] @@ -406,38 +387,6 @@ def test_JobStateUpdateAndJobMonitoringMultiple(lfn: str) -> None: jobIDs.append(jobID) try: - res = jobMonitoringClient.getSites() - assert res["OK"], res["Message"] - assert set(res["Value"]) <= {"ANY", "DIRAC.Jenkins.ch", "Site"} - - res = jobMonitoringClient.getJobTypes() - assert res["OK"], res["Message"] - - res = jobMonitoringClient.getApplicationStates() - assert res["OK"], res["Message"] - assert "Unknown" in res["Value"] - - res = jobMonitoringClient.getOwners() - assert res["OK"], res["Message"] - res = jobMonitoringClient.getOwnerGroup() - assert res["OK"], res["Message"] - res = jobMonitoringClient.getJobGroups() - assert res["OK"], res["Message"] - resJG_empty = res["Value"] - res = jobMonitoringClient.getJobGroups(None, datetime.datetime.utcnow()) - assert res["OK"], res["Message"] - resJG_olderThanNow = res["Value"] - assert resJG_empty == resJG_olderThanNow - res = jobMonitoringClient.getJobGroups(None, datetime.datetime.utcnow() - datetime.timedelta(days=365)) - assert res["OK"], res["Message"] - resJG_olderThanOneYear = res["Value"] - assert set(resJG_olderThanOneYear).issubset(set(resJG_olderThanNow)) - - res = jobMonitoringClient.getStates() - assert res["OK"], res["Message"] - res = jobMonitoringClient.getMinorStates() - assert res["OK"], res["Message"] - res = jobMonitoringClient.getJobs() assert res["OK"], res["Message"] assert {str(x) for x in jobIDs} <= set(res["Value"]) @@ -464,7 +413,6 @@ def test_JobStateUpdateAndJobMonitoringMultiple(lfn: str) -> None: res = jobMonitoringClient.getJobSummary(int(jobID)) assert res["OK"], res["Message"] assert res["Value"]["Status"] in (JobStatus.CHECKING, JobStatus.WAITING) - assert res["Value"]["MinorStatus"] == "MinorStatus" res = jobStateUpdateClient.setJobStatusBulk( jobID,