From e66b19b8c2b82569e065e69dd39829e2c8ff632e Mon Sep 17 00:00:00 2001 From: Halyna Romanyshyn <30292604+halyna1995@users.noreply.github.com> Date: Wed, 10 Jun 2026 21:36:45 +0200 Subject: [PATCH] Complete week 6 Azure assignment --- AI_ASSIST.md | 17 +++---- Dockerfile | 9 ++-- README.md | 22 ++++----- docs/execution_history.png | Bin 0 -> 73508 bytes requirements.txt | 8 ++-- src/pipeline.py | 93 ++++++++++++++++++++++++++++++++++--- 6 files changed, 113 insertions(+), 36 deletions(-) create mode 100644 docs/execution_history.png diff --git a/AI_ASSIST.md b/AI_ASSIST.md index 9b31b94..215a103 100644 --- a/AI_ASSIST.md +++ b/AI_ASSIST.md @@ -6,20 +6,21 @@ ## The prompt I gave - - -TODO: paste your prompt here. +I used ChatGPT to help me understand Azure Blob Storage, Azure PostgreSQL, Docker images, and Azure Container App Jobs. I also asked for help troubleshooting deployment errors, Docker package issues, Azure CLI commands, and job execution failures. ## The code or suggestion it returned - - ```text -TODO: paste the AI output here. +ChatGPT explained Azure concepts, suggested debugging steps, helped interpret error messages, explained missing Python package errors, and provided examples of Azure CLI commands for deployment, verification, and troubleshooting. ``` ## What I changed after reviewing it - +I verified: -TODO: describe your review here. +- the required Python packages were installed correctly; +- the Docker image built successfully; +- the image was pushed to Azure Container Registry; +- the Azure Container App Job was created and executed successfully; +- a JSON file was uploaded to Azure Blob Storage; +- the execution history showed a successful run. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index ee3c978..4afdb01 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,11 +11,10 @@ FROM python:3.11-slim WORKDIR /app -# TODO Task 4: copy requirements.txt (must appear before any COPY src command) +COPY requirements.txt . -# TODO Task 4: install dependencies with pip +RUN pip install --no-cache-dir -r requirements.txt -# TODO Task 4: copy the src/ folder +COPY src/ ./src/ -# TODO Task 4: set the CMD to run the pipeline (python -m src.pipeline) -CMD ["python", "-c", "raise SystemExit('Dockerfile not finished: Task 4 still pending')"] +CMD ["python", "-m", "src.pipeline"] diff --git a/README.md b/README.md index fa94600..02c3ff4 100644 --- a/README.md +++ b/README.md @@ -58,18 +58,16 @@ set -a && source .env && set +a python -m src.pipeline ``` -## Verifying your deployment (Task 5) - -After deploying the Container App Job and triggering a run, capture proof: - -1. Open the Azure portal, find your Container App Job, open the **Execution - history** blade. -2. Screenshot the most recent successful run. -3. Save the screenshot to `docs/`. -4. Replace this whole section with one called `## Verification` and embed - your screenshot using a Markdown image link. The grader looks for the - `## Verification` heading and a `![alt](docs/your-file.png)` reference - pointing at the image you committed. +## Verification + +![Execution history](docs/execution_history.png) + +Verification commands: + +```bash +az containerapp job execution list --name halyna1995-job --resource-group rg-hyf-data --output table + +az storage blob list --account-name hyfstoragedev --container-name raw --auth-mode login --output table ## Check your score locally diff --git a/docs/execution_history.png b/docs/execution_history.png new file mode 100644 index 0000000000000000000000000000000000000000..74017a452007960b4b9764599713077944e6a5fa GIT binary patch literal 73508 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 m>*N1uJ`4PW8V|yMl(EodKWF!?|ls dict: Raise RuntimeError with a clear message if a required variable is missing. """ - raise NotImplementedError( - "Task 3: read POSTGRES_URL and AZURE_STORAGE_CONNECTION_STRING from os.environ" - ) + + postqres_url = os.environ.get("POSTGRES_URL") + storage_connection = os.environ.get("AZURE_STORAGE_CONNECTION_STRING") + source_name = os.environ.get("SOURCE_NAME", "weather") + + missing = [] + if not postqres_url: + missing.append("POSTGRES_URL") + if not storage_connection: + missing.append("AZURE_STORAGE_CONNECTION_STRING") + if missing: + raise RuntimeError(f"Missing environment variables: {', '.join(missing)}") + + return { + "postgres_url": postqres_url, + "azure_storage_connection": storage_connection, + "source_name": source_name, + } def fetch_records() -> list[dict]: @@ -49,7 +78,14 @@ def fetch_records() -> list[dict]: one dict with a stable key set (for example: station, timestamp, temperature_c, humidity_pct). """ - raise NotImplementedError("Task 3: return a list of at least one record") + return [ + { + "station": "Eindhoven", + "timestamp": f"{date.today().isoformat()}T6:00:00Z", + "temperature_c": 18.5, + "humidity_pct": 72, + } + ] def upload_raw_to_blob(records: list[dict], blob_conn_str: str, source: str) -> str: @@ -62,7 +98,15 @@ def upload_raw_to_blob(records: list[dict], blob_conn_str: str, source: str) -> teacher has pre-created it). Overwrite if the blob already exists so same-day reruns succeed. """ - raise NotImplementedError("Task 1 + Task 3: upload records to blob storage") + blob_name = f"raw/{source}/{date.today().isoformat()}.json" + client = BlobServiceClient.from_connection_string(blob_conn_str) + container_client = client.get_container_client("raw") + + data = json.dumps(records, indent=2).encode("utf-8") + + container_client.upload_blob(blob_name, data, overwrite=True) + + return blob_name def write_to_postgres(records: list[dict], postgres_url: str) -> int: @@ -78,17 +122,52 @@ def write_to_postgres(records: list[dict], postgres_url: str) -> int: See Chapter 4 for the connection-and-cursor pattern this is based on. """ - raise NotImplementedError("Task 2 + Task 3: insert rows into Azure Postgres") + with closing(psycopg2.connect(postgres_url)) as conn: + with conn.cursor() as cursor: + cursor.execute( + """ + CREATE TABLE IF NOT EXISTS weather ( + station TEXT, + timestamp TIMESTAMPTZ, + temperature_c REAL, + humidity_pct REAL, + PRIMARY KEY (station, timestamp) + ) + """ + ) + + for record in records: + cursor.execute( + """ + INSERT INTO weather ( + station, timestamp, temperature_c, humidity_pct + ) + VALUES (%s, %s, %s, %s) + ON CONFLICT (station, timestamp) DO UPDATE + SET temperature_c = EXCLUDED.temperature_c, + humidity_pct = EXCLUDED.humidity_pct + """, + ( + record["station"], + record["timestamp"], + record["temperature_c"], + record["humidity_pct"], + ), + ) + + conn.commit() + return len(records) def run() -> None: + """Run the pipeline end to end.""" config = get_config() logger.info("starting pipeline") records = fetch_records() blob_name = upload_raw_to_blob( records, - config["azure_storage_connection_string"], + config["azure_storage_connection"], config["source_name"], ) logger.info("uploaded blob %s", blob_name)