diff --git a/README.md b/README.md index 2a194cde5cca2ac12726abc0e9020fecc4ca7912..a141402c30f1fe7ccd1c48365bd71ebea1802916 100644 --- a/README.md +++ b/README.md @@ -162,25 +162,34 @@ Initialize swarm & stack: ```bash docker swarm init # initialize swarm -# build images +``` + +Build images: +``` docker build core/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_core -t registry.gitlab.eox.at/esa/prism/vs/pvs_core docker build cache/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_cache -t registry.gitlab.eox.at/esa/prism/vs/pvs_cache docker build preprocessor/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_preprocessor -t registry.gitlab.eox.at/esa/prism/vs/pvs_preprocessor docker build client/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_client -t registry.gitlab.eox.at/esa/prism/vs/pvs_client -#or - docker login -u {DOCKER_USER} -p {DOCKER_PASSWORD} registry.gitlab.eox.at - docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_core - docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_cache - docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_preprocessor - docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_client + +Or pull them from the registry: +``` +docker login -u {DOCKER_USER} -p {DOCKER_PASSWORD} registry.gitlab.eox.at +docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_core +docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_cache +docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_preprocessor +docker pull registry.gitlab.eox.at/esa/prism/vs/pvs_client +``` + +Deploy the stack: +``` docker stack deploy -c docker-compose.vhr18.yml -c docker-compose.vhr18.dev.yml vhr18-pvs # start VHR_IMAGE_2018 stack in dev mode, for example to use local sources docker stack deploy -c docker-compose.emg.yml -c docker-compose.emg.dev.yml emg-pvs # start Emergency stack in dev mode, for example to use local sources docker exec -it $(docker ps -qf "name=vhr18-pvs_renderer") /bin/bash cd /var/www/pvs/dev/pvs_instance python manage.py runserver 0.0.0.0:8080 - ``` + Tear town stack including data: ```bash @@ -191,15 +200,3 @@ docker volume rm vhr18-pvs_traefik-data docker volume rm vhr18-pvs_cache-db docker volume rm vhr18-pvs_instance-data ``` - -Generate mapcache.sqlite - -```bash -docker exec -it $(docker ps -qf "name=vhr18-pvs_renderer") python3 /var/www/pvs/dev/pvs_instance/manage.py mapcache sync -f -docker exec -it $(docker ps -qf "name=vhr18-pvs_renderer") mv VHR_IMAGE_2018.sqlite /cache-db/vhr18_mapcache_cache.sqlite - -docker exec -it $(docker ps -qf "name=emg-pvs_renderer") python3 /var/www/pvs/dev/pvs_instance/manage.py mapcache sync -f -docker exec -it $(docker ps -qf "name=emg-pvs_renderer") mv Emergency.sqlite /cache-db/emg_mapcache_cache.sqlite -``` - - diff --git a/core/registrar.py b/core/registrar.py index dee575790794cd4be5298e2a9551f821b1ef31df..be32759d43acc862299587ecfb7afa82d31f922b 100644 --- a/core/registrar.py +++ b/core/registrar.py @@ -52,6 +52,7 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pvs_instance.settings") django.setup() from eoxserver.backends import access +from eoxserver.backends import models as backends from eoxserver.resources.coverages import models from eoxserver.resources.coverages.registration.product import ( ProductRegistrator @@ -104,26 +105,39 @@ def add_mask(product): ) -def get_product_level(product): +def get_product_type_and_level(metadata_item): + with access.vsi_open(metadata_item) as f: + tree = lxml.etree.parse(f) + root = tree.getroot() + try: - metadata_item = product.metadata_items.all()[0] - with access.vsi_open(metadata_item) as f: - tree = lxml.etree.parse(f) - root = tree.getroot() - xp = '/gsc:report/gsc:opt_metadata/gml:metaDataProperty/gsc:EarthObservationMetaData/eop:parentIdentifier/text()' + xp = '//gml:using/eop:EarthObservationEquipment/eop:platform/eop:Platform/eop:shortName/text()' product_type_name = tree.xpath(xp, namespaces=root.nsmap)[0] - if product_type_name.endswith('Level_1'): - return 'Level_1' - if product_type_name.endswith('Level_3'): - return 'Level_3' + except Exception as e: + logger.warning( + 'Failed to determine product type of %s, error was %s' + % (metadata_item.location, e) + ) + + try: + xp = '//gml:metaDataProperty/gsc:EarthObservationMetaData/eop:parentIdentifier/text()' + parent_identifier = tree.xpath(xp, namespaces=root.nsmap)[0] + + print("parent identifier --->", parent_identifier) + if parent_identifier.endswith('Level_1'): + level = 'Level_1' + if parent_identifier.endswith('Level_3'): + level = 'Level_3' else: - raise Exception('Invalid product type name %s' % product_type_name) + raise Exception('Invalid parent identifier type name %s' % parent_identifier) except Exception as e: logger.warning( - 'Failed to determine product level for product %s, error was %s' - % (product.identifier, e) + 'Failed to determine product level of %s, error was %s' + % (metadata_item.location, e) ) + return product_type_name, level + class RegistrationError(Exception): pass @@ -173,7 +187,10 @@ def registrar( % objects_prefix ) - product_type = data_package.split("/")[2] + storage = backends.Storage.objects.get(name=upload_container) + metadata_item = models.MetaDataItem(storage=storage, location=metadata_package) + + product_type, level = get_product_type_and_level(metadata_item) product, replaced = ProductRegistrator().register( metadata_locations=[[upload_container, @@ -185,12 +202,12 @@ def registrar( package_path=None, overrides={}, ) + collection = models.Collection.objects.get( identifier=collection ) models.collection_insert_eo_object(collection, product) - level = get_product_level(product) if level == 'Level_1': collection_level_1 = models.Collection.objects.get( identifier="%s_Level_1" % collection diff --git a/docker-compose.emg.yml b/docker-compose.emg.yml index 739eeb4a9763093d19521fb5c792fe0858ef0015..9f31b3a6c7b1d0b9779e33c62257bbf7f7cf64f2 100644 --- a/docker-compose.emg.yml +++ b/docker-compose.emg.yml @@ -62,6 +62,7 @@ services: target: /cache-db env_file: - env/emg.env + - env/emg_db.env - env/emg_obs.env environment: INSTANCE_ID: "prism-view-server_cache"