From 53956bfb96c14d86dd5c1a14b5b35d80c02d05a0 Mon Sep 17 00:00:00 2001 From: Chris Christiansen Date: Tue, 26 May 2026 05:28:59 +0000 Subject: [PATCH] auto: sync --- docs/OSVAUCO_OPAX_SESSION_LOG.md | 2 + infrastructure/terraform/main.tf | 40 ++++ infrastructure/terraform/terraform.tfstate | 194 +++++++++++++++- .../terraform/terraform.tfstate.backup | 209 +----------------- 4 files changed, 236 insertions(+), 209 deletions(-) diff --git a/docs/OSVAUCO_OPAX_SESSION_LOG.md b/docs/OSVAUCO_OPAX_SESSION_LOG.md index 39f0c59..5a05e89 100644 --- a/docs/OSVAUCO_OPAX_SESSION_LOG.md +++ b/docs/OSVAUCO_OPAX_SESSION_LOG.md @@ -197,3 +197,5 @@ bash infrastructure/08-memorybank-setup.sh # A5 — sjekk om allerede kjørt - Gjort : y - Uløst : n - Slutt : 2026-05-26 04:02 UTC + 05:10:26 ✔ opax + 05:10:40 ✘[127] g diff --git a/infrastructure/terraform/main.tf b/infrastructure/terraform/main.tf index c46c44f..93b99c6 100644 --- a/infrastructure/terraform/main.tf +++ b/infrastructure/terraform/main.tf @@ -92,3 +92,43 @@ resource "google_artifact_registry_repository" "repo" { # role = "roles/run.invoker" # member = "user:chris.christiansen@vauco.no" # } + +# BigQuery — Cloud Run structured logs +resource "google_bigquery_dataset" "logs" { + dataset_id = "osvauco_logs" + friendly_name = "OSVauco Logs" + location = var.region + default_table_expiration_ms = 7776000000 # 90 dager +} + +resource "google_bigquery_table" "cloud_run_logs" { + dataset_id = google_bigquery_dataset.logs.dataset_id + table_id = "cloud_run_logs" + deletion_protection = false + + time_partitioning { + type = "DAY" + field = "timestamp" + expiration_ms = 7776000000 + } + + schema = jsonencode([ + { name = "timestamp", type = "TIMESTAMP", mode = "REQUIRED" }, + { name = "severity", type = "STRING", mode = "NULLABLE" }, + { name = "service_name", type = "STRING", mode = "NULLABLE" }, + { name = "revision", type = "STRING", mode = "NULLABLE" }, + { name = "http_method", type = "STRING", mode = "NULLABLE" }, + { name = "http_url", type = "STRING", mode = "NULLABLE" }, + { name = "http_status", type = "INTEGER", mode = "NULLABLE" }, + { name = "latency_ms", type = "FLOAT", mode = "NULLABLE" }, + { name = "message", type = "STRING", mode = "NULLABLE" }, + { name = "trace", type = "STRING", mode = "NULLABLE" }, + { name = "labels", type = "JSON", mode = "NULLABLE" } + ]) +} + +resource "google_project_iam_member" "bq_log_writer" { + project = var.project_id + role = "roles/bigquery.dataEditor" + member = "serviceAccount:${google_service_account.agent_sa.email}" +} diff --git a/infrastructure/terraform/terraform.tfstate b/infrastructure/terraform/terraform.tfstate index d860d92..a4326f8 100644 --- a/infrastructure/terraform/terraform.tfstate +++ b/infrastructure/terraform/terraform.tfstate @@ -1,7 +1,7 @@ { "version": 4, "terraform_version": "1.15.4", - "serial": 41, + "serial": 45, "lineage": "88d46b78-a06c-f64f-5e21-905b6f0583d9", "outputs": { "artifact_registry_url": { @@ -69,6 +69,173 @@ } ] }, + { + "mode": "managed", + "type": "google_bigquery_dataset", + "name": "logs", + "provider": "provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "access": [ + { + "condition": [], + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "OWNER", + "routine": [], + "special_group": "", + "user_by_email": "chris.christiansen@vauco.no", + "view": [] + }, + { + "condition": [], + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "OWNER", + "routine": [], + "special_group": "projectOwners", + "user_by_email": "", + "view": [] + }, + { + "condition": [], + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "READER", + "routine": [], + "special_group": "projectReaders", + "user_by_email": "", + "view": [] + }, + { + "condition": [], + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "WRITER", + "routine": [], + "special_group": "projectWriters", + "user_by_email": "", + "view": [] + } + ], + "creation_time": 1779773249328, + "dataset_id": "osvauco_logs", + "default_collation": "", + "default_encryption_configuration": [], + "default_partition_expiration_ms": 0, + "default_table_expiration_ms": 7776000000, + "delete_contents_on_destroy": false, + "deletion_policy": "DELETE", + "description": "", + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "etag": "0YP36cJOopQKmIed2WTmyw==", + "external_catalog_dataset_options": [], + "external_dataset_reference": [], + "friendly_name": "OSVauco Logs", + "id": "projects/propane-will-491900-m5/datasets/osvauco_logs", + "is_case_insensitive": false, + "labels": null, + "last_modified_time": 1779773249328, + "location": "europe-west1", + "max_time_travel_hours": "168", + "project": "propane-will-491900-m5", + "resource_tags": null, + "self_link": "https://bigquery.googleapis.com/bigquery/v2/projects/propane-will-491900-m5/datasets/osvauco_logs", + "storage_billing_model": "", + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "identity_schema_version": 0, + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" + } + ] + }, + { + "mode": "managed", + "type": "google_bigquery_table", + "name": "cloud_run_logs", + "provider": "provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "biglake_configuration": [], + "clustering": null, + "creation_time": 1779773250362, + "dataset_id": "osvauco_logs", + "deletion_policy": "DELETE", + "deletion_protection": false, + "description": "", + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "encryption_configuration": [], + "etag": "jk+j8DmdDwt11iy8M5wKqA==", + "expiration_time": 1787549250362, + "external_catalog_table_options": [], + "external_data_configuration": [], + "friendly_name": "", + "generated_schema_columns": "", + "id": "projects/propane-will-491900-m5/datasets/osvauco_logs/tables/cloud_run_logs", + "ignore_auto_generated_schema": false, + "ignore_schema_changes": null, + "labels": null, + "last_modified_time": 1779773250434, + "location": "europe-west1", + "materialized_view": [], + "max_staleness": "", + "num_bytes": 0, + "num_long_term_bytes": 0, + "num_rows": 0, + "project": "propane-will-491900-m5", + "range_partitioning": [], + "require_partition_filter": false, + "resource_tags": null, + "schema": "[{\"mode\":\"REQUIRED\",\"name\":\"timestamp\",\"type\":\"TIMESTAMP\"},{\"mode\":\"NULLABLE\",\"name\":\"severity\",\"type\":\"STRING\"},{\"mode\":\"NULLABLE\",\"name\":\"service_name\",\"type\":\"STRING\"},{\"mode\":\"NULLABLE\",\"name\":\"revision\",\"type\":\"STRING\"},{\"mode\":\"NULLABLE\",\"name\":\"http_method\",\"type\":\"STRING\"},{\"mode\":\"NULLABLE\",\"name\":\"http_url\",\"type\":\"STRING\"},{\"mode\":\"NULLABLE\",\"name\":\"http_status\",\"type\":\"INTEGER\"},{\"mode\":\"NULLABLE\",\"name\":\"latency_ms\",\"type\":\"FLOAT\"},{\"mode\":\"NULLABLE\",\"name\":\"message\",\"type\":\"STRING\"},{\"mode\":\"NULLABLE\",\"name\":\"trace\",\"type\":\"STRING\"},{\"mode\":\"NULLABLE\",\"name\":\"labels\",\"type\":\"JSON\"}]", + "schema_foreign_type_info": [], + "self_link": "https://bigquery.googleapis.com/bigquery/v2/projects/propane-will-491900-m5/datasets/osvauco_logs/tables/cloud_run_logs", + "table_constraints": [], + "table_id": "cloud_run_logs", + "table_metadata_view": null, + "table_replication_info": [], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "time_partitioning": [ + { + "expiration_ms": 7776000000, + "field": "timestamp", + "require_partition_filter": false, + "type": "DAY" + } + ], + "type": "TABLE", + "view": [] + }, + "sensitive_attributes": [], + "identity_schema_version": 0, + "private": "bnVsbA==", + "dependencies": [ + "google_bigquery_dataset.logs" + ] + } + ] + }, { "mode": "managed", "type": "google_project_iam_member", @@ -203,6 +370,31 @@ } ] }, + { + "mode": "managed", + "type": "google_project_iam_member", + "name": "bq_log_writer", + "provider": "provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwZSscB/pxg=", + "id": "propane-will-491900-m5/roles/bigquery.dataEditor/serviceAccount:osvauco-agent-sa@propane-will-491900-m5.iam.gserviceaccount.com", + "member": "serviceAccount:osvauco-agent-sa@propane-will-491900-m5.iam.gserviceaccount.com", + "project": "propane-will-491900-m5", + "role": "roles/bigquery.dataEditor" + }, + "sensitive_attributes": [], + "identity_schema_version": 0, + "private": "bnVsbA==", + "dependencies": [ + "google_service_account.agent_sa" + ] + } + ] + }, { "mode": "managed", "type": "google_project_service", diff --git a/infrastructure/terraform/terraform.tfstate.backup b/infrastructure/terraform/terraform.tfstate.backup index 23262cd..d860d92 100644 --- a/infrastructure/terraform/terraform.tfstate.backup +++ b/infrastructure/terraform/terraform.tfstate.backup @@ -1,17 +1,13 @@ { "version": 4, "terraform_version": "1.15.4", - "serial": 38, + "serial": 41, "lineage": "88d46b78-a06c-f64f-5e21-905b6f0583d9", "outputs": { "artifact_registry_url": { "value": "europe-west1-docker.pkg.dev/propane-will-491900-m5/agent-images", "type": "string" }, - "cloud_run_url": { - "value": "https://osvauco-agent-zjbqp3prqq-ew.a.run.app", - "type": "string" - }, "service_account_email": { "value": "osvauco-agent-sa@propane-will-491900-m5.iam.gserviceaccount.com", "type": "string" @@ -73,209 +69,6 @@ } ] }, - { - "mode": "managed", - "type": "google_cloud_run_v2_service", - "name": "agent_service", - "provider": "provider[\"registry.terraform.io/hashicorp/google\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "annotations": {}, - "binary_authorization": [], - "build_config": [], - "client": "", - "client_version": "", - "conditions": [ - { - "execution_reason": "", - "last_transition_time": "2026-05-25T23:44:19.852735Z", - "message": "", - "reason": "", - "revision_reason": "", - "severity": "", - "state": "CONDITION_SUCCEEDED", - "type": "RoutesReady" - }, - { - "execution_reason": "", - "last_transition_time": "2026-05-25T23:44:18.643827Z", - "message": "", - "reason": "", - "revision_reason": "", - "severity": "", - "state": "CONDITION_SUCCEEDED", - "type": "ConfigurationsReady" - } - ], - "create_time": "2026-05-25T22:48:32.969598Z", - "creator": "chris.christiansen@vauco.no", - "custom_audiences": [], - "default_uri_disabled": false, - "delete_time": "", - "deletion_policy": "DELETE", - "deletion_protection": true, - "description": "", - "effective_annotations": {}, - "effective_labels": {}, - "etag": "\"CLi909AGEOjL0mg/cHJvamVjdHMvcHJvcGFuZS13aWxsLTQ5MTkwMC1tNS9sb2NhdGlvbnMvZXVyb3BlLXdlc3QxL3NlcnZpY2VzL29zdmF1Y28tYWdlbnQ\"", - "expire_time": "", - "generation": "6", - "iap_enabled": false, - "id": "projects/propane-will-491900-m5/locations/europe-west1/services/osvauco-agent", - "ingress": "INGRESS_TRAFFIC_ALL", - "invoker_iam_disabled": false, - "labels": {}, - "last_modifier": "chris.christiansen@vauco.no", - "latest_created_revision": "projects/propane-will-491900-m5/locations/europe-west1/services/osvauco-agent/revisions/osvauco-agent-00006-282", - "latest_ready_revision": "projects/propane-will-491900-m5/locations/europe-west1/services/osvauco-agent/revisions/osvauco-agent-00006-282", - "launch_stage": "GA", - "location": "europe-west1", - "multi_region_settings": [], - "name": "osvauco-agent", - "observed_generation": "6", - "project": "propane-will-491900-m5", - "reconciling": false, - "scaling": [ - { - "manual_instance_count": 0, - "max_instance_count": 20, - "min_instance_count": 0, - "scaling_mode": "" - } - ], - "template": [ - { - "annotations": {}, - "containers": [ - { - "args": [], - "base_image_uri": "", - "build_info": [], - "command": [], - "depends_on": [], - "env": [ - { - "name": "CUSTOMER_ID", - "value": "osvauco", - "value_source": [] - } - ], - "image": "europe-west1-docker.pkg.dev/propane-will-491900-m5/agent-images/osvauco-agent:latest", - "liveness_probe": [], - "name": "", - "ports": [ - { - "container_port": 8080, - "name": "http1" - } - ], - "readiness_probe": [], - "resources": [ - { - "cpu_idle": true, - "limits": { - "cpu": "1000m", - "memory": "512Mi" - }, - "startup_cpu_boost": true - } - ], - "startup_probe": [ - { - "failure_threshold": 1, - "grpc": [], - "http_get": [], - "initial_delay_seconds": 0, - "period_seconds": 240, - "tcp_socket": [ - { - "port": 8080 - } - ], - "timeout_seconds": 240 - } - ], - "volume_mounts": [], - "working_dir": "" - } - ], - "encryption_key": "", - "execution_environment": "", - "gpu_zonal_redundancy_disabled": false, - "health_check_disabled": false, - "labels": {}, - "max_instance_request_concurrency": 80, - "node_selector": [], - "revision": "", - "scaling": [ - { - "max_instance_count": 20, - "min_instance_count": 0 - } - ], - "service_account": "osvauco-agent-sa@propane-will-491900-m5.iam.gserviceaccount.com", - "session_affinity": false, - "timeout": "300s", - "volumes": [], - "vpc_access": [] - } - ], - "terminal_condition": [ - { - "execution_reason": "", - "last_transition_time": "2026-05-25T23:44:19.877967Z", - "message": "", - "reason": "", - "revision_reason": "", - "severity": "", - "state": "CONDITION_SUCCEEDED", - "type": "Ready" - } - ], - "terraform_labels": {}, - "timeouts": null, - "traffic": [ - { - "percent": 100, - "revision": "", - "tag": "", - "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST" - } - ], - "traffic_statuses": [ - { - "percent": 100, - "revision": "", - "tag": "", - "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST", - "uri": "" - } - ], - "uid": "ca411fe9-555a-4e83-9e97-d7ee9c1de497", - "update_time": "2026-05-25T23:43:52.219457Z", - "uri": "https://osvauco-agent-zjbqp3prqq-ew.a.run.app", - "urls": [ - "https://osvauco-agent-357036551735.europe-west1.run.app", - "https://osvauco-agent-zjbqp3prqq-ew.a.run.app" - ] - }, - "sensitive_attributes": [], - "identity_schema_version": 1, - "identity": { - "location": "europe-west1", - "name": "osvauco-agent", - "project": "propane-will-491900-m5" - }, - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", - "dependencies": [ - "google_project_service.apis", - "google_service_account.agent_sa" - ] - } - ] - }, { "mode": "managed", "type": "google_project_iam_member",