diff --git a/.github/workflows/loadtest.yml b/.github/workflows/loadtest.yml deleted file mode 100644 index 76a84cd..0000000 --- a/.github/workflows/loadtest.yml +++ /dev/null @@ -1,115 +0,0 @@ -name: Load Test - -on: - workflow_dispatch: - inputs: - scenario: - description: 'Which scenario to run' - required: true - type: choice - options: - - thundering_herd - - sustained_load - - correctness_check - event_id: - description: 'Event ID for correctness check (scenario 3 only)' - required: false - -jobs: - deploy-loadtest-server: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Start load test server - uses: appleboy/ssh-action@v1 - with: - host: ${{ secrets.VPS_HOST }} - username: ${{ secrets.VPS_USER }} - key: ${{ secrets.VPS_SSH_KEY }} - fingerprint: ${{ secrets.VPS_SSH_FINGERPRINT }} - command_timeout: 120s - script: | - cd ~/fairqueue-loadtest - echo "${{ secrets.LOADTEST_ENV_FILE }}" > .env - docker compose -f docker-compose.loadtest.yml pull - docker compose -f docker-compose.loadtest.yml up -d - - echo "Waiting for load test server to be ready..." - for i in $(seq 1 45); do - STATUS=$(curl -sf -o /dev/null -w "%{http_code}" \ - http://localhost:8082/health || echo "000") - if [ "$STATUS" = "200" ]; then - echo "Server ready after $((i * 2)) seconds" - break - fi - if [ $i -eq 45 ]; then - echo "Server did not become ready in time" - docker compose -f docker-compose.loadtest.yml logs loadtest-app - exit 1 - fi - sleep 2 - done - - SEED_STATUS=$(curl -sf -o /dev/null -w "%{http_code}" \ - -X POST http://localhost:8082/loadtest/seed) - if [ "$SEED_STATUS" != "200" ]; then - echo "Seed failed with status $SEED_STATUS" - exit 1 - fi - echo "Seed complete" - - run-loadtest: - needs: deploy-loadtest-server # waits for server to be ready - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Install k6 - uses: grafana/setup-k6-action@v1 - - - - name: Run load test scenario - run: | - case "${{ inputs.scenario }}" in - thundering_herd) - SCRIPT="loadtest/scripts/01_thundering_herd.js" - ;; - sustained_load) - SCRIPT="loadtest/scripts/02_sustained_load.js" - ;; - correctness_check) - SCRIPT="loadtest/scripts/03_correctness_check.js" - ;; - esac - - k6 run \ - -e BASE_URL=https://loadtest-api.tulcanvcm.com \ - -e ORGANIZER_EMAIL=loadtest@admin.com \ - -e ORGANIZER_PASSWORD=loadtest-password \ - -e EVENT_ID=${{ inputs.event_id }} \ - --out experimental-prometheus-rw \ - --tag scenario=${{ inputs.scenario }} \ - $SCRIPT - env: - K6_PROMETHEUS_RW_SERVER_URL: https://api.tulcanvcm.com/prometheus/api/v1/write - K6_PROMETHEUS_RW_TREND_STATS: p(50),p(90),p(95),p(99),max,min - K6_PROMETHEUS_RW_USERNAME: k6 - K6_PROMETHEUS_RW_PASSWORD: ${{ secrets.PROMETHEUS_REMOTE_WRITE_PASSWORD }} - - teardown-loadtest-server: - needs: run-loadtest # waits for load test to finish - runs-on: ubuntu-latest - if: always() # runs even if run-loadtest fails or is cancelled - steps: - - name: Stop and clean up load test server - uses: appleboy/ssh-action@v1 - with: - host: ${{ secrets.VPS_HOST }} - username: ${{ secrets.VPS_USER }} - key: ${{ secrets.VPS_SSH_KEY }} - fingerprint: ${{ secrets.VPS_SSH_FINGERPRINT }} - script: | - cd ~/fairqueue-loadtest - docker compose -f docker-compose.loadtest.yml down -v - echo "Load test stack torn down" \ No newline at end of file diff --git a/internal/infra/migrate/sql/000001_initial_schema.up.sql b/internal/infra/migrate/sql/000001_initial_schema.up.sql index 301a4d8..a752f32 100644 --- a/internal/infra/migrate/sql/000001_initial_schema.up.sql +++ b/internal/infra/migrate/sql/000001_initial_schema.up.sql @@ -4,6 +4,8 @@ -- ORGANIZERS -- ============================================================ CREATE EXTENSION IF NOT EXISTS citext; +CREATE EXTENSION pg_stat_statements; + CREATE TABLE IF NOT EXISTS organizers ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL,