From 2bbea56e558db100eaf52b069cc40628450d884a Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Tue, 27 Dec 2022 12:45:23 -0600
Subject: [PATCH] hm

---
 lib/gat/admin/admin.go                  | 28 +++++++++------
 lib/gat/pool/transaction/shard/conn.go  | 48 ++++++++++++-------------
 lib/gat/pool/transaction/shard/shard.go | 16 ++++-----
 scripts/ddos/ddos.go                    |  2 +-
 test/docker-compose.yml                 |  2 +-
 5 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/lib/gat/admin/admin.go b/lib/gat/admin/admin.go
index 3c72400a..0dc63ca4 100644
--- a/lib/gat/admin/admin.go
+++ b/lib/gat/admin/admin.go
@@ -98,7 +98,11 @@ func New(g gat.Gat) *Database {
 			Header: gatutil.TableHeader{
 				Columns: []gatutil.TableHeaderColumn{
 					{
-						Name: "Table name",
+						Name: "Database",
+						Type: gatutil.Text{},
+					},
+					{
+						Name: "User",
 						Type: gatutil.Text{},
 					},
 					{
@@ -119,17 +123,21 @@ func New(g gat.Gat) *Database {
 					},
 				},
 			},
-			Rows: []gatutil.TableRow{
-				{
+		}
+		for dbname, db := range g.GetDatabases() {
+			for _, pool := range db.GetPools() {
+				uname := pool.GetUser().Name
+				table.Rows = append(table.Rows, gatutil.TableRow{
 					Columns: []any{
-						"Test",
-						float64(1.0),
-						float64(2.0),
-						float64(3.0),
-						int64(123),
+						dbname,
+						uname,
+						float64(0),
+						float64(0),
+						float64(0),
+						int64(0),
 					},
-				},
-			},
+				})
+			}
 		}
 		return table.Send(c)
 	})
diff --git a/lib/gat/pool/transaction/shard/conn.go b/lib/gat/pool/transaction/shard/conn.go
index c7d25f4c..5262affe 100644
--- a/lib/gat/pool/transaction/shard/conn.go
+++ b/lib/gat/pool/transaction/shard/conn.go
@@ -10,98 +10,98 @@ import (
 	"time"
 )
 
-type conn struct {
+type Conn struct {
 	conn      gat.Connection
 	conf      *config.Server
 	replicaId int
 	s         *Shard
 }
 
-func (s *conn) GetServerInfo() []*protocol.ParameterStatus {
+func (s *Conn) GetServerInfo() []*protocol.ParameterStatus {
 	return s.conn.GetServerInfo()
 }
 
-func (s *conn) GetDatabase() string {
+func (s *Conn) GetDatabase() string {
 	return s.conn.GetDatabase()
 }
 
-func (s *conn) GetState() gat.ConnectionState {
+func (s *Conn) GetState() gat.ConnectionState {
 	return s.conn.GetState()
 }
 
-func (s *conn) GetHost() string {
+func (s *Conn) GetHost() string {
 	return s.conn.GetHost()
 }
 
-func (s *conn) GetPort() int {
+func (s *Conn) GetPort() int {
 	return s.conn.GetPort()
 }
 
-func (s *conn) GetAddress() net.Addr {
+func (s *Conn) GetAddress() net.Addr {
 	return s.conn.GetAddress()
 }
 
-func (s *conn) GetLocalAddress() net.Addr {
+func (s *Conn) GetLocalAddress() net.Addr {
 	return s.conn.GetLocalAddress()
 }
 
-func (s *conn) GetConnectTime() time.Time {
+func (s *Conn) GetConnectTime() time.Time {
 	return s.conn.GetConnectTime()
 }
 
-func (s *conn) GetRequestTime() time.Time {
+func (s *Conn) GetRequestTime() time.Time {
 	return s.conn.GetRequestTime()
 }
 
-func (s *conn) GetClient() gat.Client {
+func (s *Conn) GetClient() gat.Client {
 	return s.conn.GetClient()
 }
 
-func (s *conn) SetClient(client gat.Client) {
+func (s *Conn) SetClient(client gat.Client) {
 	s.conn.SetClient(client)
 }
 
-func (s *conn) GetRemotePid() int {
+func (s *Conn) GetRemotePid() int {
 	return s.conn.GetRemotePid()
 }
 
-func (s *conn) GetTLS() string {
+func (s *Conn) GetTLS() string {
 	return s.conn.GetTLS()
 }
 
-func (s *conn) IsCloseNeeded() bool {
+func (s *Conn) IsCloseNeeded() bool {
 	return s.conn.IsCloseNeeded()
 }
 
-func (s *conn) Close() error {
+func (s *Conn) Close() error {
 	return s.conn.Close()
 }
 
-func (s *conn) Describe(ctx context.Context, client gat.Client, payload *protocol.Describe) error {
+func (s *Conn) Describe(ctx context.Context, client gat.Client, payload *protocol.Describe) error {
 	return s.conn.Describe(ctx, client, payload)
 }
 
-func (s *conn) Execute(ctx context.Context, client gat.Client, payload *protocol.Execute) error {
+func (s *Conn) Execute(ctx context.Context, client gat.Client, payload *protocol.Execute) error {
 	return s.conn.Execute(ctx, client, payload)
 }
 
-func (s *conn) CallFunction(ctx context.Context, client gat.Client, payload *protocol.FunctionCall) error {
+func (s *Conn) CallFunction(ctx context.Context, client gat.Client, payload *protocol.FunctionCall) error {
 	return s.conn.CallFunction(ctx, client, payload)
 }
 
-func (s *conn) SimpleQuery(ctx context.Context, client gat.Client, payload string) error {
+func (s *Conn) SimpleQuery(ctx context.Context, client gat.Client, payload string) error {
 	return s.conn.SimpleQuery(ctx, client, payload)
 }
 
-func (s *conn) Transaction(ctx context.Context, client gat.Client, payload string) error {
+func (s *Conn) Transaction(ctx context.Context, client gat.Client, payload string) error {
 	return s.conn.Transaction(ctx, client, payload)
 }
 
-func (s *conn) Cancel() error {
+func (s *Conn) Cancel() error {
 	return s.conn.Cancel()
 }
 
-func (s *conn) connect() {
+func (s *Conn) connect() {
 	if s.s == nil || s.conf == nil {
 		return
 	}
@@ -116,7 +116,7 @@ func (s *conn) connect() {
 	return
 }
 
-func (s *conn) acquire() *conn {
+func (s *Conn) acquire() *Conn {
 	if s.conn == nil || s.conn.IsCloseNeeded() {
 		s.connect()
 	}
diff --git a/lib/gat/pool/transaction/shard/shard.go b/lib/gat/pool/transaction/shard/shard.go
index 5c887911..aedb5157 100644
--- a/lib/gat/pool/transaction/shard/shard.go
+++ b/lib/gat/pool/transaction/shard/shard.go
@@ -11,8 +11,8 @@ import (
 )
 
 type Shard struct {
-	primary  Pool[*conn]
-	replicas []Pool[*conn]
+	primary  Pool[*Conn]
+	replicas []Pool[*Conn]
 
 	pool *config.Pool
 	user *config.User
@@ -43,8 +43,8 @@ func FromConfig(dialer gat.Dialer, options []protocol.FieldsStartupMessageParame
 	return out
 }
 
-func (s *Shard) newConn(conf *config.Server, replicaId int) *conn {
-	return &conn{
+func (s *Shard) newConn(conf *config.Server, replicaId int) *Conn {
+	return &Conn{
 		conf:      conf,
 		replicaId: replicaId,
 		s:         s,
@@ -56,7 +56,7 @@ func (s *Shard) init() {
 	defer s.mu.Unlock()
 	poolSize := s.user.PoolSize
 	for _, serv := range s.conf.Servers {
-		pool := NewChannelPool[*conn](poolSize)
+		pool := NewChannelPool[*Conn](poolSize)
 		for i := 0; i < poolSize; i++ {
 			pool.Put(s.newConn(serv, len(s.replicas)))
 		}
@@ -69,7 +69,7 @@ func (s *Shard) init() {
 	}
 }
 
-func (s *Shard) tryAcquireAvailableReplica() *conn {
+func (s *Shard) tryAcquireAvailableReplica() *Conn {
 	// try to get any available conn
 	for _, replica := range s.replicas {
 		c, ok := replica.TryGet()
@@ -81,7 +81,7 @@ func (s *Shard) tryAcquireAvailableReplica() *conn {
 	return nil
 }
 
-func (s *Shard) Choose(role config.ServerRole) *conn {
+func (s *Shard) Choose(role config.ServerRole) *Conn {
 	s.mu.RLock()
 	defer s.mu.RUnlock()
 	start := time.Now()
@@ -121,7 +121,7 @@ func (s *Shard) Choose(role config.ServerRole) *conn {
 	}
 }
 
-func (s *Shard) Return(conn *conn) {
+func (s *Shard) Return(conn *Conn) {
 	s.mu.RLock()
 	defer s.mu.RUnlock()
 	switch conn.conf.Role {
diff --git a/scripts/ddos/ddos.go b/scripts/ddos/ddos.go
index ba0f6e6b..6facf4d4 100644
--- a/scripts/ddos/ddos.go
+++ b/scripts/ddos/ddos.go
@@ -27,7 +27,7 @@ const PostgresHost = "postgres://dev_rw:pGf63Aq0M5ck@pggat-dev.gfx.town:6432/pre
 const ThreadCount = 1000
 
 // TestTime how long to run the test. Set to 0 to run forever
-const TestTime = 30 * time.Second
+const TestTime = 0 * time.Second
 
 type col struct {
 	V int `json:"v"`
diff --git a/test/docker-compose.yml b/test/docker-compose.yml
index 2d6583db..0567735f 100644
--- a/test/docker-compose.yml
+++ b/test/docker-compose.yml
@@ -30,7 +30,7 @@ services:
     image: prest/prest
     restart: always
     environment:
-      PREST_PG_URL: postgres://postgres:example@db:5432/prest
+      PREST_PG_URL: postgres://postgres:example@pggat:6432/prest
       PREST_DEBUG: true
       PREST_SSL_MODE: disable
     ports:
-- 
GitLab