## Description
main things in this pr
- generate template queries based on tables in the DB, excluding
`__diesel_schema_migrations`
- enrich the template with values read from DB and execute queries in
parallel
- configs of concurrency and duration time
- metrics collection and reports
## Test plan
- local run with a local DB populated with latest
`sui-indexer-alt-schema`
```
cargo run --bin sui-rpc-benchmark -- direct \
--db-url "postgres://postgres:postgres@localhost/gegao" \
--concurrency 10 \
--duration-secs 10
```
report with local DB
```
Total queries: 211772
Total errors: 0
Average latency: 0.46ms
Per-table statistics:
obj_info queries: 33526 errors: 0 avg latency: 0.49ms
ev_struct_inst queries: 31598 errors: 0 avg latency: 0.47ms
tx_calls queries: 28752 errors: 0 avg latency: 0.45ms
ev_emit_mod queries: 18321 errors: 0 avg latency: 0.44ms
tx_affected_objects queries: 11495 errors: 0 avg latency: 0.43ms
tx_affected_addresses queries: 11472 errors: 0 avg latency: 0.43ms
sum_packages queries: 10759 errors: 0 avg latency: 0.55ms
tx_kinds queries: 8140 errors: 0 avg latency: 0.43ms
coin_balance_buckets queries: 7542 errors: 0 avg latency: 0.45ms
obj_versions queries: 7485 errors: 0 avg latency: 0.43ms
kv_epoch_ends queries: 3750 errors: 0 avg latency: 0.45ms
watermarks queries: 3742 errors: 0 avg latency: 0.44ms
tx_digests queries: 3690 errors: 0 avg latency: 0.42ms
tx_balance_changes queries: 3662 errors: 0 avg latency: 0.42ms
kv_checkpoints queries: 3619 errors: 0 avg latency: 0.43ms
cp_sequence_numbers queries: 3590 errors: 0 avg latency: 0.42ms
kv_transactions queries: 3463 errors: 0 avg latency: 0.43ms
kv_protocol_configs queries: 3451 errors: 0 avg latency: 0.44ms
kv_epoch_starts queries: 3448 errors: 0 avg latency: 0.71ms
kv_genesis queries: 3424 errors: 0 avg latency: 0.42ms
kv_objects queries: 3422 errors: 0 avg latency: 0.42ms
kv_feature_flags queries: 3421 errors: 0 avg latency: 0.42ms
```
---
## Release notes
Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.
For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.
- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
- [ ] REST API: