diff --git a/pkg/api/api.go b/pkg/api/api.go index c1d8b4f..5e4d1c2 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -486,6 +486,12 @@ func GetConnectionInfo(c *gin.Context) { successResponse(c, info) } +// GetServerSettings renders a list of all server settings +func GetServerSettings(c *gin.Context) { + res, err := DB(c).ServerSettings() + serveResult(c, res, err) +} + // GetActivity renders a list of running queries func GetActivity(c *gin.Context) { res, err := DB(c).Activity() diff --git a/pkg/api/routes.go b/pkg/api/routes.go index 01aaae9..e979603 100644 --- a/pkg/api/routes.go +++ b/pkg/api/routes.go @@ -35,6 +35,7 @@ func SetupRoutes(router *gin.Engine) { api.POST("/switchdb", SwitchDb) api.GET("/databases", GetDatabases) api.GET("/connection", GetConnectionInfo) + api.GET("/server_settings", GetServerSettings) api.GET("/activity", GetActivity) api.GET("/schemas", GetSchemas) api.GET("/objects", GetObjects) diff --git a/pkg/client/client.go b/pkg/client/client.go index 5bb4d44..8bff28a 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -386,6 +386,10 @@ func (client *Client) TablesStats() (*Result, error) { return client.query(statements.TablesStats) } +func (client *Client) ServerSettings() (*Result, error) { + return client.query(statements.Settings) +} + // Returns all active queriers on the server func (client *Client) Activity() (*Result, error) { if client.serverType == cockroachType { diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index 04c3afe..7e84e0c 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -11,10 +11,10 @@ import ( "testing" "time" - "github.com/sosedoff/pgweb/pkg/command" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/sosedoff/pgweb/pkg/command" ) var ( @@ -717,6 +717,32 @@ func testConnContext(t *testing.T) { assert.Equal(t, "default", result.Mode) } +func testServerSettings(t *testing.T) { + expectedColumns := []string{ + "name", + "setting", + "unit", + "category", + "short_desc", + "extra_desc", + "context", + "vartype", + "source", + "min_val", + "max_val", + "enumvals", + "boot_val", + "reset_val", + "sourcefile", + "sourceline", + "pending_restart", + } + + result, err := testClient.ServerSettings() + assert.NoError(t, err) + assert.Equal(t, expectedColumns, result.Columns) +} + func TestAll(t *testing.T) { if onWindows() { t.Log("Unit testing on Windows platform is not supported.") @@ -756,6 +782,7 @@ func TestAll(t *testing.T) { testDumpExport(t) testTablesStats(t) testConnContext(t) + testServerSettings(t) teardownClient() teardown(t, true) diff --git a/pkg/statements/sql.go b/pkg/statements/sql.go index e358c75..ec031d2 100644 --- a/pkg/statements/sql.go +++ b/pkg/statements/sql.go @@ -47,6 +47,9 @@ var ( //go:embed sql/function.sql Function string + //go:embed sql/settings.sql + Settings string + // Activity queries for specific PG versions Activity = map[string]string{ "default": "SELECT * FROM pg_stat_activity WHERE datname = current_database()", diff --git a/pkg/statements/sql/settings.sql b/pkg/statements/sql/settings.sql new file mode 100644 index 0000000..2192d4c --- /dev/null +++ b/pkg/statements/sql/settings.sql @@ -0,0 +1 @@ +SELECT * FROM pg_settings diff --git a/static/index.html b/static/index.html index d92fa7d..71ccaf7 100644 --- a/static/index.html +++ b/static/index.html @@ -327,6 +327,8 @@