diff --git a/.github/workflows/build-test-image.yaml b/.github/workflows/build-test-image.yaml index 68b4efb9..56add643 100644 --- a/.github/workflows/build-test-image.yaml +++ b/.github/workflows/build-test-image.yaml @@ -39,6 +39,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -84,6 +86,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Replace Variables run: | @@ -97,6 +101,11 @@ jobs: sed -i 's/$FalkorDBClusterRebalanceImage/falkordb\/${{ env.CLUSTER_REBALANCE_IMAGE_NAME }}:dev-${{ github.event.head_commit.id || github.run_id }}/g' ${{ matrix.plans.file }} sed -i 's/${{ matrix.plans.plan-name }}/${{ matrix.plans.tier-name }}/g' ${{ matrix.plans.file }} + - name: Remove custom metrics for testing + run: | + yq eval 'del(.x-omnistrate-integrations[1].omnistrateMetrics.additionalMetrics)' ${{ matrix.plans.file }} > ${{ matrix.plans.file }}.tmp + mv ${{ matrix.plans.file }}.tmp ${{ matrix.plans.file }} + - name: Upload yaml as artifact uses: actions/upload-artifact@v4 with: @@ -133,6 +142,8 @@ jobs: - name: Checkout if: ${{ contains(github.ref, 'refs/tags/v') || (github.event_name == 'pull_request' && github.event.pull_request.draft == false) }} uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Create Omnistrate Custom Network - GCP if: ${{ contains(github.ref, 'refs/tags/v') || (github.event_name == 'pull_request' && github.event.pull_request.draft == false) }} @@ -567,7 +578,9 @@ jobs: steps: - name: Checkout if: matrix.instances.if == 'true' || matrix.instances.if == true - uses: actions/checkout@v3 + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Setup python if: matrix.instances.if == 'true' || matrix.instances.if == true @@ -619,6 +632,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Delete Omnistrate Custom Network - GCP uses: ./.github/actions/delete-omnistrate-custom-network diff --git a/.github/workflows/delete-omnistrate-service-plan.yaml b/.github/workflows/delete-omnistrate-service-plan.yaml index 21da7726..9970ece4 100644 --- a/.github/workflows/delete-omnistrate-service-plan.yaml +++ b/.github/workflows/delete-omnistrate-service-plan.yaml @@ -46,6 +46,7 @@ jobs: plans: - tier-name: free-${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref_name }} - tier-name: pro-${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref_name }} + - tier-name: enterprise-${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref_name }} steps: - name: Checkout uses: actions/checkout@v2 diff --git a/falkordb-cluster/cluster-entrypoint.sh b/falkordb-cluster/cluster-entrypoint.sh index a6fbbfac..de2fae4d 100755 --- a/falkordb-cluster/cluster-entrypoint.sh +++ b/falkordb-cluster/cluster-entrypoint.sh @@ -169,7 +169,7 @@ set_memory_limit() { MEMORY_LIMIT=${memory_limit_instance_type_map[$INSTANCE_TYPE]} - if [[ ! -z $MEMORY_LIMIT ]]; then + if [[ -z $MEMORY_LIMIT ]]; then MEMORY_LIMIT="100MB" fi diff --git a/omnistrate.enterprise.yaml b/omnistrate.enterprise.yaml index 9698e4e2..c550c971 100644 --- a/omnistrate.enterprise.yaml +++ b/omnistrate.enterprise.yaml @@ -39,21 +39,9 @@ x-internal-integrations: metrics: provider: native -x-redisMetrics: &metrics +x-falkordbMetrics: &metrics prometheusEndpoint: "http://localhost:9121/metrics" metrics: - redis_blocked_clients: - "Blocked Clients": - aggregationFunction: sum - redis_cluster_connections: - "Cluster Connections": - aggregationFunction: sum - redis_commands_duration_seconds_total: - "Total Command Duration (Seconds)": - aggregationFunction: sum - redis_commands_failed_calls_total: - "Failed Command Calls": - aggregationFunction: sum redis_commands_latencies_usec_bucket: "Command Latency (μs) Bucket": aggregationFunction: sum @@ -72,85 +60,27 @@ x-redisMetrics: &metrics redis_commands_total: "Total Commands": aggregationFunction: sum - redis_config_maxclients: - "Max Clients Configured": - aggregationFunction: sum - redis_config_maxmemory: - "Max Memory Configured": - aggregationFunction: sum redis_connected_clients: "Connected Clients": aggregationFunction: sum redis_connections_received_total: "Total Connections Received": aggregationFunction: sum - redis_cpu_sys_children_seconds_total: - "CPU Sys Children Time (Seconds)": - aggregationFunction: sum - redis_cpu_sys_main_thread_seconds_total: - "Total CPU Sys Main Thread Time (Seconds)": - aggregationFunction: sum - redis_cpu_sys_seconds_total: - "Total CPU Sys Time (Seconds)": - aggregationFunction: sum - redis_cpu_user_children_seconds_total: - "Total CPU User Children Time (Seconds)": - aggregationFunction: sum - redis_cpu_user_main_thread_seconds_total: - "Total CPU User Main Thread Time (Seconds)": - aggregationFunction: sum - redis_cpu_user_seconds_total: - "Total CPU User Time (Seconds)": - aggregationFunction: sum redis_db_keys: "Database Keys": aggregationFunction: sum redis_errors_total: "Total Errors": aggregationFunction: sum - redis_exporter_scrapes_total: - "Total Exporter Scrapes": - aggregationFunction: sum - redis_io_threads_active: - "Active I/O Threads": - aggregationFunction: sum - redis_keyspace_hits_total: - "Total Keyspace Hits": - aggregationFunction: sum - redis_keyspace_misses_total: - "Total Keyspaces Misses": - aggregationFunction: sum redis_last_slow_execution_duration_seconds: "Last Slow Execution Duration (Seconds)": aggregationFunction: sum - redis_latency_percentiles_usec: - "Latency Percentiles (μs)": - aggregationFunction: sum - redis_latency_percentiles_usec_sum: - "Total Latency Percentiles (μs)": - aggregationFunction: sum - redis_latency_percentiles_usec_count: - "Latency Percentiles Count": - aggregationFunction: sum - redis_latest_fork_seconds: - "Latest Fork Time (Seconds)": - aggregationFunction: sum redis_loading_dump_file: "Loading Dump File": aggregationFunction: sum - redis_master_repl_offset: - "Master Replication Offset": - aggregationFunction: sum redis_mem_clients_normal: "Memory Used By Normal Clients": aggregationFunction: sum - redis_mem_clients_slaves: - "Memory Used By Slave Clients": - aggregationFunction: sum - redis_memory_max_bytes: - "Max Memory (Bytes)": - aggregationFunction: sum - redis_memory_used_bytes: "Memory Used (Bytes)": aggregationFunction: sum redis_memory_used_dataset_bytes: @@ -168,9 +98,6 @@ x-redisMetrics: &metrics redis_rdb_last_bgsave_duration_sec: "Last RDB BGSAVE Duration (Seconds)": aggregationFunction: sum - redis_rdb_last_bgsave_status: - "Last RDB BGSAVE Status": - aggregationFunction: sum redis_rdb_last_cow_size_bytes: "Last RDB Copy-On-Write Size (Bytes)": aggregationFunction: sum @@ -189,18 +116,9 @@ x-redisMetrics: &metrics redis_slowlog_last_id: "Slow Log Last ID": aggregationFunction: sum - redis_slowlog_length: - "Slow Log Length": - aggregationFunction: sum - redis_start_time_seconds: - "Start Time (Seconds)": - aggregationFunction: sum redis_unexpected_error_replies: "Unexpected Error Replies": aggregationFunction: sum - redis_up: - "Redis Up": - aggregationFunction: sum redis_uptime_in_seconds: "Uptime (Seconds)": aggregationFunction: sum diff --git a/omnistrate.free.yaml b/omnistrate.free.yaml index c84ca4f8..a7fcdf47 100644 --- a/omnistrate.free.yaml +++ b/omnistrate.free.yaml @@ -15,10 +15,6 @@ x-internal-integrations: logs: provider: native metrics: - provider: native - -x-omnistrate-integrations: - - omnistrateMetrics: services: # Free diff --git a/omnistrate.pro.yaml b/omnistrate.pro.yaml index 2af8f711..69fdf597 100644 --- a/omnistrate.pro.yaml +++ b/omnistrate.pro.yaml @@ -37,21 +37,9 @@ x-internal-integrations: metrics: provider: native -x-redisMetrics: &metrics +x-falkordbMetrics: &metrics prometheusEndpoint: "http://localhost:9121/metrics" metrics: - redis_blocked_clients: - "Blocked Clients": - aggregationFunction: sum - redis_cluster_connections: - "Cluster Connections": - aggregationFunction: sum - redis_commands_duration_seconds_total: - "Total Command Duration (Seconds)": - aggregationFunction: sum - redis_commands_failed_calls_total: - "Failed Command Calls": - aggregationFunction: sum redis_commands_latencies_usec_bucket: "Command Latency (μs) Bucket": aggregationFunction: sum @@ -70,85 +58,27 @@ x-redisMetrics: &metrics redis_commands_total: "Total Commands": aggregationFunction: sum - redis_config_maxclients: - "Max Clients Configured": - aggregationFunction: sum - redis_config_maxmemory: - "Max Memory Configured": - aggregationFunction: sum redis_connected_clients: "Connected Clients": aggregationFunction: sum redis_connections_received_total: "Total Connections Received": aggregationFunction: sum - redis_cpu_sys_children_seconds_total: - "CPU Sys Children Time (Seconds)": - aggregationFunction: sum - redis_cpu_sys_main_thread_seconds_total: - "Total CPU Sys Main Thread Time (Seconds)": - aggregationFunction: sum - redis_cpu_sys_seconds_total: - "Total CPU Sys Time (Seconds)": - aggregationFunction: sum - redis_cpu_user_children_seconds_total: - "Total CPU User Children Time (Seconds)": - aggregationFunction: sum - redis_cpu_user_main_thread_seconds_total: - "Total CPU User Main Thread Time (Seconds)": - aggregationFunction: sum - redis_cpu_user_seconds_total: - "Total CPU User Time (Seconds)": - aggregationFunction: sum redis_db_keys: "Database Keys": aggregationFunction: sum redis_errors_total: "Total Errors": aggregationFunction: sum - redis_exporter_scrapes_total: - "Total Exporter Scrapes": - aggregationFunction: sum - redis_io_threads_active: - "Active I/O Threads": - aggregationFunction: sum - redis_keyspace_hits_total: - "Total Keyspace Hits": - aggregationFunction: sum - redis_keyspace_misses_total: - "Total Keyspaces Misses": - aggregationFunction: sum redis_last_slow_execution_duration_seconds: "Last Slow Execution Duration (Seconds)": aggregationFunction: sum - redis_latency_percentiles_usec: - "Latency Percentiles (μs)": - aggregationFunction: sum - redis_latency_percentiles_usec_sum: - "Total Latency Percentiles (μs)": - aggregationFunction: sum - redis_latency_percentiles_usec_count: - "Latency Percentiles Count": - aggregationFunction: sum - redis_latest_fork_seconds: - "Latest Fork Time (Seconds)": - aggregationFunction: sum redis_loading_dump_file: "Loading Dump File": aggregationFunction: sum - redis_master_repl_offset: - "Master Replication Offset": - aggregationFunction: sum redis_mem_clients_normal: "Memory Used By Normal Clients": aggregationFunction: sum - redis_mem_clients_slaves: - "Memory Used By Slave Clients": - aggregationFunction: sum - redis_memory_max_bytes: - "Max Memory (Bytes)": - aggregationFunction: sum - redis_memory_used_bytes: "Memory Used (Bytes)": aggregationFunction: sum redis_memory_used_dataset_bytes: @@ -166,9 +96,6 @@ x-redisMetrics: &metrics redis_rdb_last_bgsave_duration_sec: "Last RDB BGSAVE Duration (Seconds)": aggregationFunction: sum - redis_rdb_last_bgsave_status: - "Last RDB BGSAVE Status": - aggregationFunction: sum redis_rdb_last_cow_size_bytes: "Last RDB Copy-On-Write Size (Bytes)": aggregationFunction: sum @@ -187,18 +114,9 @@ x-redisMetrics: &metrics redis_slowlog_last_id: "Slow Log Last ID": aggregationFunction: sum - redis_slowlog_length: - "Slow Log Length": - aggregationFunction: sum - redis_start_time_seconds: - "Start Time (Seconds)": - aggregationFunction: sum redis_unexpected_error_replies: "Unexpected Error Replies": aggregationFunction: sum - redis_up: - "Redis Up": - aggregationFunction: sum redis_uptime_in_seconds: "Uptime (Seconds)": aggregationFunction: sum diff --git a/omnistrate_tests/classes/omnistrate_fleet_api.py b/omnistrate_tests/classes/omnistrate_fleet_api.py index c21e4ea4..cb4e83ee 100644 --- a/omnistrate_tests/classes/omnistrate_fleet_api.py +++ b/omnistrate_tests/classes/omnistrate_fleet_api.py @@ -7,7 +7,7 @@ ServiceModel, OmnistrateTierVersion, ) - +import os import logging logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(message)s") @@ -15,9 +15,13 @@ class OmnistrateFleetAPI: - base_url = "https://api.omnistrate.cloud/2022-09-01-00" + base_url = os.getenv( + "OMNISTRATE_BASE_URL", "https://api.omnistrate.cloud/2022-09-01-00" + ) _token = None + _session = None + def __init__(self, email: str, password: str): self._email = email self._password = password @@ -43,23 +47,29 @@ def get_token(self): return self._token def client(self): - session = requests.session() + + if self._session is not None: + return self._session + + self._session = requests.session() retries = Retry( total=10, backoff_factor=0.1, + status_forcelist=[403, 429, 500, 502, 503, 504], + allowed_methods=["GET", "POST", "PUT", "DELETE"], ) - session.headers.update( + self._session.headers.update( { "Content-Type": "application/json", "Authorization": "Bearer " + self.get_token(), } ) - session.mount("https://", HTTPAdapter(max_retries=retries)) + self._session.mount("https://", HTTPAdapter(max_retries=retries)) - return session + return self._session def get_service(self, service_id: str) -> "Service": """Get the service by ID.""" diff --git a/omnistrate_tests/classes/omnistrate_fleet_instance.py b/omnistrate_tests/classes/omnistrate_fleet_instance.py index 73cbdb2b..31d2d790 100644 --- a/omnistrate_tests/classes/omnistrate_fleet_instance.py +++ b/omnistrate_tests/classes/omnistrate_fleet_instance.py @@ -230,6 +230,9 @@ def get_resource_id(self, resource_key: str = None) -> str | None: def delete(self, wait_for_delete: bool): """Delete the instance. Optionally wait for the instance to be deleted.""" + if not self.instance_id: + return + resource_id = self.get_resource_id() if resource_id is None: