Skip to content

Read the dashboard

Progress checklist

The harness
Docker container on the lab EC2 instance that continuously GETs the same keys from Express and Standard, exposes a dashboard on :8080, and reports p50/p90 latency ratios.
serves a small dashboard on port 8080. Continuous GETs against the same hot keys produce latency percentiles for Express and Standard. The headline ratio is Standard p50 ÷ Express p50 (higher means Express is faster on that percentile). Prefer the ratio over absolute milliseconds from a quiet lab.

FieldMeaning
Express p50 / p90 / p99GET latency for the directory bucket
Standard p50 / p90 / p99Same keys against the general-purpose bucket
Standard ÷ Express p50How many times slower Standard is vs Express at p50
samples / errorsRolling window (default 300s) plus cumulative errors
Terminal window
export AWS_PROFILE=sandbox
export AWS_REGION=ap-southeast-2
  1. Open the dashboard — pick public IP or SSM port-forward to view on localhost.

    Terminal window
    ./scripts/demo.sh dash

    Looks like (verified shape; IP is yours):

    http://203.0.113.10:8080/
    Local view (SSM): ./scripts/demo.sh port-forward → http://127.0.0.1:8080/

    Open that URL in a browser. Security group ingress allows TCP 8080 (lab default 0.0.0.0/0).

  2. Wait until both series have enough samples (hundreds of GETs), then read the headline (Express is N× faster), the ms saved at p50, and the equal-scale race bars (Standard = full width). p50 / p90 / p99 stay in the two panels.

    Harness dashboard: Express and Standard p50/p90/p99 panels, headline Express is about 4× faster, ms saved at p50, and equal-scale race bars. Bucket names use EXAMPLE placeholders; account id redacted to 123456789012.

    Live harness UI (this lab ≈4× at p50). Bucket suffix and account id are redacted.

  3. Cross-check with CLI status and /api/stats.

    Terminal window
    ./scripts/demo.sh status
    curl -sS "http://$(jq -r .publicIp .lab-state.json):8080/api/stats" | jq '{
    express: .express|{count,errors,p50_ms,p90_ms},
    standard: .standard|{count,errors,p50_ms,p90_ms},
    standard_over_express_p50
    }'

    Looks like (verified in this lab; your numbers will differ — cite the ratio, not a fixed ms claim):

    {
    "express": { "count": 3671, "errors": 0, "p50_ms": 6.07, "p90_ms": 6.38 },
    "standard": { "count": 3671, "errors": 0, "p50_ms": 25.19, "p90_ms": 28.05 },
    "standard_over_express_p50": 4.15
    }

    Via port-forward, use http://127.0.0.1:8080/api/stats instead of the public IP.

CheckExpect
Dashboard HTMLLoads on :8080 (public or 127.0.0.1)
Sample countsClimbing / non-zero in the rolling window
Errors0 on both sides after warm-up
Ratiostandard_over_express_p50 ≫ 1 when co-located (this lab ~4× at p50)
SSM forwardsession-manager-plugin installed; get-connection-statusconnected

When finished, Tear down so On-Demand and storage charges stop. Then read Where Express fits before treating Express as production-only storage.