Skip to content

Commit

Permalink
Refer to blob storage in inspection result message
Browse files Browse the repository at this point in the history
when sending over MQTT

Co-authored-by: Mariana R. Santos <[email protected]>
  • Loading branch information
tsundvoll and mrica-equinor committed Mar 13, 2024
1 parent bd78423 commit 4fb4039
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 11 deletions.
16 changes: 12 additions & 4 deletions src/isar/storage/blob_storage.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import logging
from pathlib import Path
from typing import Union

from azure.core.exceptions import ResourceExistsError
from azure.storage.blob import BlobClient, BlobServiceClient, ContainerClient
from injector import inject

from isar.config.keyvault.keyvault_service import Keyvault
from isar.config.settings import settings
from robot_interface.models.mission.mission import Mission
from isar.storage.storage_interface import StorageException, StorageInterface
from isar.storage.utilities import construct_metadata_file, construct_paths
from robot_interface.models.inspection.inspection import Inspection
from robot_interface.models.mission.mission import Mission


class BlobStorage(StorageInterface):
Expand All @@ -31,7 +32,7 @@ def __init__(

self.logger = logging.getLogger("uploader")

def store(self, inspection: Inspection, mission: Mission) -> str:
def store(self, inspection: Inspection, mission: Mission) -> Union[str, dict]:
data_path, metadata_path = construct_paths(
inspection=inspection, mission=mission
)
Expand All @@ -43,7 +44,7 @@ def store(self, inspection: Inspection, mission: Mission) -> str:
self._upload_file(path=metadata_path, data=metadata_bytes)
return self._upload_file(path=data_path, data=inspection.data)

def _upload_file(self, path: Path, data: bytes) -> str:
def _upload_file(self, path: Path, data: bytes) -> Union[str, dict]:
blob_client = self._get_blob_client(path)
try:
blob_properties = blob_client.upload_blob(data=data)
Expand All @@ -55,7 +56,14 @@ def _upload_file(self, path: Path, data: bytes) -> str:
except Exception as e:
self.logger.error("An unexpected error occurred while uploading blob")
raise StorageException from e
return blob_properties["etag"]

absolute_inspection_path = {
"source": "blob",
"blob_storage_account_url": settings.BLOB_STORAGE_ACCOUNT_URL,
"blob_container": settings.BLOB_CONTAINER,
"blob_name": blob_client.blob_name,
}
return absolute_inspection_path

def _get_blob_service_client(self) -> BlobServiceClient:
try:
Expand Down
5 changes: 3 additions & 2 deletions src/isar/storage/storage_interface.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
from abc import ABCMeta, abstractmethod
from typing import Union

from robot_interface.models.mission.mission import Mission
from robot_interface.models.inspection.inspection import Inspection
from robot_interface.models.mission.mission import Mission


class StorageInterface(metaclass=ABCMeta):
@abstractmethod
def store(self, inspection: Inspection, mission: Mission) -> str:
def store(self, inspection: Inspection, mission: Mission) -> Union[str, dict]:
"""
Parameters
----------
Expand Down
8 changes: 4 additions & 4 deletions src/isar/storage/uploader.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from dataclasses import dataclass
from datetime import datetime, timedelta
from queue import Empty, Queue
from typing import List
from typing import List, Union

from injector import inject

Expand Down Expand Up @@ -100,8 +100,8 @@ def run(self) -> None:
except Empty:
continue

def _upload(self, upload_item: UploaderQueueItem) -> str:
inspection_path = ""
def _upload(self, upload_item: UploaderQueueItem) -> Union[str, dict]:
inspection_path: Union[str, dict] = ""
try:
inspection_path = upload_item.storage_handler.store(
inspection=upload_item.inspection, mission=upload_item.mission
Expand Down Expand Up @@ -140,7 +140,7 @@ def _process_upload_queue(self) -> None:
)

def _publish_inspection_result(
self, inspection: Inspection, inspection_path: str
self, inspection: Inspection, inspection_path: Union[str, dict]
) -> None:
"""Publishes the reference of the inspection result to the MQTT Broker
along with the analysis type
Expand Down
3 changes: 2 additions & 1 deletion src/isar/storage/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,5 @@ def get_filename(


def get_foldername(mission: Mission) -> str:
return f"{datetime.utcnow().date()}__{settings.PLANT_SHORT_NAME}__{mission.name}__{mission.id}"
mission_name: str = mission.name.replace(" ", "-")
return f"{datetime.utcnow().date()}__{settings.PLANT_SHORT_NAME}__{mission_name}__{mission.id}"

0 comments on commit 4fb4039

Please sign in to comment.