Skip to content
Snippets Groups Projects
Commit e1073567 authored by Charlotte Hausman's avatar Charlotte Hausman
Browse files

CAPO handling for NAASC submission

parent 61c76041
No related branches found
No related tags found
1 merge request!506CAPO handling for NAASC submission
Pipeline #2904 passed
......@@ -17,7 +17,7 @@ describe("workspace-project Test Page Download capability", () => {
expect(splInputTxtBox.isDisplayed());
expect(splInputLabel.getText()).toEqual("Science Product");
splInputTxtBox.getAttribute("value").then((value) => {
expect(value === "uid://evla/image/3d3db489-9331-4e61-aa80-002bc2989b1e");
expect(value === "uid://evla/quicklook_image/f5610635-efe3-49b4-a281-3c0f871e7e5b");
});
});
......
......@@ -24,7 +24,7 @@ export class WorkspacesComponent implements OnInit {
private capabilityRequestService: CapabilityRequestService,
) {
// this is the famous 394 MB 13B-014 execblock, a useful smallish test
this.productLocator = "uid://evla/image/3d3db489-9331-4e61-aa80-002bc2989b1e";
this.productLocator = "uid://evla/quicklook_image/f5610635-efe3-49b4-a281-3c0f871e7e5b";
this.userEmail = null;
}
......
......@@ -31,8 +31,6 @@ edu.nrao.archive.workflow.config.CasaVersions.homeForReprocessing = /home/casa/p
#
# Delivery settings
#
edu.nrao.archive.workflow.config.DeliverySettings.nraoDownloadDirectory = /tmp/delivery_root
edu.nrao.archive.workflow.config.DeliverySettings.nraoDownloadUrl = http://localhost:4444/dl
edu.nrao.workspaces.DeliverySettings.downloadDirectory = /tmp/delivery_root
edu.nrao.workspaces.DeliverySettings.downloadUrl = http://localhost:4444/dl
......
import os
from datetime import datetime
from unittest.mock import patch
......@@ -14,12 +13,14 @@ tests for remote_processing_service.CapoInjector
expected_view = [
"edu.nrao.workspaces.WorkflowSettings.serviceUrl",
"edu.nrao.workspaces.NotificationSettings.serviceUrl",
"edu.nrao.workspaces.UISettings.serviceUrl",
"edu.nrao.workspaces.ProcessingSettings.useCasa",
"edu.nrao.archive.workflow.config.CasaVersions.homeForReprocessing",
]
expected_subspace = [
"edu.nrao.workspaces.WorkflowSettings.serviceUrl = http://workflow:3456",
"edu.nrao.workspaces.NotificationSettings.serviceUrl = http://notification:3458",
"edu.nrao.workspaces.UISettings.serviceUrl = http://localhost:4444/workspaces",
"edu.nrao.workspaces.ProcessingSettings.useCasa = false",
"edu.nrao.archive.workflow.config.CasaVersions.homeForReprocessing = /home/casa/packages/pipeline/current",
]
......@@ -27,7 +28,7 @@ expected_subspace = [
request = WorkflowRequest(
workflow_request_id=-3,
workflow_name="vlass_seci",
argument={},
argument={"remote": True},
state="Created",
results_dir="/i/am/a/path",
created_at=datetime(2021, 1, 1),
......@@ -56,7 +57,7 @@ class TestCapoInjector:
assert abs_file.filename == "docker.properties"
assert (
abs_file.content
== """edu.nrao.workspaces.WorkflowSettings.serviceUrl = http://workflow:3456\nedu.nrao.workspaces.NotificationSettings.serviceUrl = http://notification:3458\nedu.nrao.workspaces.ProcessingSettings.useCasa = false\nedu.nrao.archive.workflow.config.CasaVersions.homeForReprocessing = /home/casa/packages/pipeline/current""".encode()
== """edu.nrao.workspaces.WorkflowSettings.serviceUrl = http://workflow:3456\nedu.nrao.workspaces.NotificationSettings.serviceUrl = http://notification:3458\nedu.nrao.workspaces.UISettings.serviceUrl = http://localhost:4444/workspaces\nedu.nrao.workspaces.ProcessingSettings.useCasa = false\nedu.nrao.archive.workflow.config.CasaVersions.homeForReprocessing = /home/casa/packages/pipeline/current""".encode()
)
@patch("pathlib.Path.write_bytes")
......
......@@ -14,6 +14,7 @@ expected_list = DictView(
"general": [
"edu.nrao.workspaces.WorkflowSettings.serviceUrl",
"edu.nrao.workspaces.NotificationSettings.serviceUrl",
"edu.nrao.workspaces.UISettings.serviceUrl",
],
"casa_requirements": [
"edu.nrao.workspaces.ProcessingSettings.useCasa",
......@@ -47,6 +48,7 @@ class TestViewWorkflowCapoParameters:
assert constructed_view == [
"edu.nrao.workspaces.WorkflowSettings.serviceUrl",
"edu.nrao.workspaces.NotificationSettings.serviceUrl",
"edu.nrao.workspaces.UISettings.serviceUrl",
"edu.nrao.workspaces.ProcessingSettings.useCasa",
"edu.nrao.archive.workflow.config.CasaVersions.homeForReprocessing",
]
......@@ -26,6 +26,8 @@ class RemoteWorkflows(Enum):
"""
SECI = "vlass_seci"
DOWNLOAD = "test_download"
CARTA = "carta"
@classmethod
def values(cls):
......@@ -34,3 +36,16 @@ class RemoteWorkflows(Enum):
@classmethod
def is_remote(cls, wf_name: str):
return wf_name in cls.values()
class RemoteProcessingSites(Enum):
"""
Enum specifying which remote sites are available
"""
NAASC = "remote-cv"
NMT = "remote"
@classmethod
def values(cls):
return cls._value2member_map_
......@@ -7,7 +7,7 @@ from pycapo import CapoConfig
from immutable_views import ListView
from workspaces.system.schema import AbstractFile
from workspaces.system.enums import RemoteWorkflows
from workspaces.system.enums import RemoteWorkflows, RemoteProcessingSites
from workspaces.system.views import ViewWorkflowCapoParameters
from workspaces.workflow.schema_interfaces import WorkflowRequestIF
......@@ -21,18 +21,33 @@ class CapoInjector:
"""
def __init__(self, wf_request: WorkflowRequestIF):
self.profile = CapoConfig().profile
self.request = wf_request
self.profile = self.set_profile()
self.views = ViewWorkflowCapoParameters(wf_request)
self.dir_path = Path(self.request.results_dir)
def set_profile(self):
current = CapoConfig().profile
logger.info(f"current profile: {current}")
if RemoteProcessingSites.NAASC.value in self.request.argument:
system = current.split("-")[1]
remote_profile = "naasc-" + system
return remote_profile
return current
def is_remote_workflow(self) -> bool:
"""
Determine if the provided request is for a workflow that can run remotely
:return: boolean representing if this workflow request is for a remote executing workflow
"""
return RemoteWorkflows.is_remote(wf_name=self.request.workflow_name)
parameters = self.request.argument
remote_types = RemoteProcessingSites.values()
return any([key in remote_types for key in parameters]) and RemoteWorkflows.is_remote(
wf_name=self.request.workflow_name
)
def identify_subspace(self) -> ListView:
"""
......@@ -53,7 +68,7 @@ class CapoInjector:
subspace = []
for item in requirements:
setting = CapoConfig().get(item)
setting = CapoConfig(profile=self.profile).get(item)
subspace.append(item + " = " + setting)
return subspace
......
import logging
from immutable_views import DictView, ListView
from workspaces.system.enums import RemoteWorkflows
from workspaces.system.enums import RemoteWorkflows, RemoteProcessingSites
from workspaces.workflow.schema_interfaces import WorkflowRequestIF
logger = logging.getLogger(__name__)
......@@ -15,11 +15,33 @@ wf_properties_list = DictView(
"general": [
"edu.nrao.workspaces.WorkflowSettings.serviceUrl",
"edu.nrao.workspaces.NotificationSettings.serviceUrl",
"edu.nrao.workspaces.UISettings.serviceUrl",
],
"delivery_requirements": [
"edu.nrao.workspaces.DeliverySettings.downloadDirectory",
"edu.nrao.workspaces.DeliverySettings.downloadUrl",
],
"fetcher_requirements": [
"edu.nrao.workspaces.ProductFetcherSettings.locatorServiceUrlPrefix",
"edu.nrao.workspaces.ProductFetcherSettings.defaultThreadsPerHost",
"edu.nrao.workspaces.ProductFetcherSettings.executionSite",
"almaMetadataDatabase.jdbcUsername",
"almaMetadataDatabase.jdbcPassword",
"almaMetadataDatabase.jdbcUrl",
],
"casa_requirements": [
"edu.nrao.workspaces.ProcessingSettings.useCasa",
"edu.nrao.archive.workflow.config.CasaVersions.homeForReprocessing",
],
"carta_requirements": [
"edu.nrao.workspaces.carta.useCarta",
"edu.nrao.carta.timeoutInMinutes",
"edu.nrao.carta.pathToExecutable",
"edu.nrao.carta.redisHost",
"edu.nrao.carta.redisPort",
"edu.nrao.carta.redisPassword",
"edu.nrao.carta.reverseProxyHost",
],
}
)
......@@ -33,13 +55,32 @@ class ViewWorkflowCapoParameters:
logger.info("Gathering general properties...")
return wf_properties_list["general"]
@staticmethod
def delivery_parameters():
logger.info("Gathering ALMA Download parameters...")
return wf_properties_list["delivery_requirements"]
@staticmethod
def casa_parameters() -> list:
logger.info("Gathering CASA properties...")
return wf_properties_list["casa_requirements"]
@staticmethod
def carta_parameters():
logger.info("Gathering CARTA parameters...")
return wf_properties_list["carta_requirements"]
@staticmethod
def fetcher_parameters():
logger.info("Gathering Product Fetcher parameters...")
return wf_properties_list["fetcher_requirements"]
def construct_view(self) -> ListView:
wf = RemoteWorkflows(self.request.workflow_name)
logger.info(wf)
if wf == RemoteWorkflows.SECI:
return ListView(self.general_parameters() + self.casa_parameters())
if wf == RemoteWorkflows.DOWNLOAD and RemoteProcessingSites.NAASC.value in self.request.argument:
return ListView(self.delivery_parameters() + self.fetcher_parameters())
if wf == RemoteWorkflows.CARTA and RemoteProcessingSites.NAASC.value in self.request.argument:
return ListView(self.general_parameters() + self.carta_parameters())
......@@ -205,9 +205,7 @@ class WorkflowService(WorkflowServiceIF):
"""
logger.info(f"SENDING CARTA MESSAGE to Workspaces for request #{workflow_request_id}!")
wf_request = self.info.lookup_workflow_request(workflow_request_id)
carta_url_msg = WorkflowMessageArchitect(
request=wf_request, carta_url=carta_url
).compose_message("carta_ready")
carta_url_msg = WorkflowMessageArchitect(request=wf_request, carta_url=carta_url).compose_message("carta_ready")
self.messenger.send_message(**carta_url_msg)
def execute(self, request: WorkflowRequest):
......@@ -232,6 +230,7 @@ class WorkflowService(WorkflowServiceIF):
# if remote is true, create a capo subspace file in the request's directory
if remote:
logger.info("Creating Subspace File...")
injector.subspace_to_directory()
request.argument["profile"] = injector.profile
......@@ -250,7 +249,7 @@ class WorkflowService(WorkflowServiceIF):
return request
else:
self.determine_multiple_productfetch(request)
if "remote" in request.argument:
if remote:
request.argument["ramInGb"] = self.processing_settings.ramInGb
templated_files = definition.render_templates(request.argument)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment