diff --git a/cmd/pg-pulse/main.go b/cmd/pg-pulse/main.go index b996e09..20e260b 100644 --- a/cmd/pg-pulse/main.go +++ b/cmd/pg-pulse/main.go @@ -24,16 +24,28 @@ func run(ctx context.Context) error { fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) c := fs.String("c", "postgresql://pulsegres:pulsegres@localhost:15432", "conn string") d := fs.Duration("d", time.Second, "interval") + p := fs.Int("p", 1, "concurrent goroutines") if err := fs.Parse(os.Args[1:]); err != nil { panic(err) } + for i := 0; i < *p-1; i++ { + go with.PSQL(ctx, *c, func(pg *sql.DB) error { + with.GoEvery(ctx, *d, func() { + if _, err := pg.ExecContext(ctx, `SELECT 1`); err != nil { + log.Println("!", err) + } + }) + return ctx.Err() + }) + } + return with.PSQL(ctx, *c, func(pg *sql.DB) error { log.Println("staging...") if _, err := pg.ExecContext(ctx, ` - DROP TABLE IF EXISTS "pg-pulse"; - CREATE TABLE IF NOT EXISTS "pg-pulse" (k TEXT); - `); err != nil { + DROP TABLE IF EXISTS "pg-pulse"; + CREATE TABLE IF NOT EXISTS "pg-pulse" (k TEXT); + `); err != nil { return err } @@ -78,8 +90,8 @@ func run(ctx context.Context) error { with.GoEvery(ctx, *d, func() { if _, err := pg.ExecContext(ctx, fmt.Sprintf(` - INSERT INTO "pg-pulse" (k) SELECT substr(md5(random()::text), 1, 25) - `)); err != nil { + INSERT INTO "pg-pulse" (k) SELECT substr(md5(random()::text), 1, 25) + `)); err != nil { pushOK(false) log.Println("\n! failed nonzero insert:", err) } else { @@ -89,22 +101,22 @@ func run(ctx context.Context) error { ha, ha1 := false, false row := pg.QueryRowContext(ctx, ` - SELECT - ( - SELECT COUNT(*) > 0 - FROM pg_replication_slots - WHERE slot_name LIKE 'dpg_%_a_ha__' - ) AS is_ha, - ( - SELECT COUNT(*) > 0 - FROM pg_replication_slots - WHERE slot_name LIKE 'dpg_%_a_ha_0' - ) AS is_ha1, - ( - SELECT $1 - COUNT(*) - FROM "pg-pulse" - ) AS lost_writes - `, n) + SELECT + ( + SELECT COUNT(*) > 0 + FROM pg_replication_slots + WHERE slot_name LIKE 'dpg_%_a_ha__' + ) AS is_ha, + ( + SELECT COUNT(*) > 0 + FROM pg_replication_slots + WHERE slot_name LIKE 'dpg_%_a_ha_0' + ) AS is_ha1, + ( + SELECT $1 - COUNT(*) + FROM "pg-pulse" + ) AS lost_writes + `, n) if err := row.Err(); err != nil { log.Println("\n! failed getting ha-stuff:", err) } else if err := row.Scan(&ha, &ha1, &lostWrites); err != nil {