Add server settings view (#768)

This commit is contained in:
Dan Sosedoff 2024-12-15 14:46:01 -08:00 committed by GitHub
parent e6df3d19fa
commit f5f78eb32e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 61 additions and 2 deletions

View File

@ -486,6 +486,12 @@ func GetConnectionInfo(c *gin.Context) {
successResponse(c, info) 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 // GetActivity renders a list of running queries
func GetActivity(c *gin.Context) { func GetActivity(c *gin.Context) {
res, err := DB(c).Activity() res, err := DB(c).Activity()

View File

@ -35,6 +35,7 @@ func SetupRoutes(router *gin.Engine) {
api.POST("/switchdb", SwitchDb) api.POST("/switchdb", SwitchDb)
api.GET("/databases", GetDatabases) api.GET("/databases", GetDatabases)
api.GET("/connection", GetConnectionInfo) api.GET("/connection", GetConnectionInfo)
api.GET("/server_settings", GetServerSettings)
api.GET("/activity", GetActivity) api.GET("/activity", GetActivity)
api.GET("/schemas", GetSchemas) api.GET("/schemas", GetSchemas)
api.GET("/objects", GetObjects) api.GET("/objects", GetObjects)

View File

@ -386,6 +386,10 @@ func (client *Client) TablesStats() (*Result, error) {
return client.query(statements.TablesStats) return client.query(statements.TablesStats)
} }
func (client *Client) ServerSettings() (*Result, error) {
return client.query(statements.Settings)
}
// Returns all active queriers on the server // Returns all active queriers on the server
func (client *Client) Activity() (*Result, error) { func (client *Client) Activity() (*Result, error) {
if client.serverType == cockroachType { if client.serverType == cockroachType {

View File

@ -11,10 +11,10 @@ import (
"testing" "testing"
"time" "time"
"github.com/sosedoff/pgweb/pkg/command"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/sosedoff/pgweb/pkg/command"
) )
var ( var (
@ -717,6 +717,32 @@ func testConnContext(t *testing.T) {
assert.Equal(t, "default", result.Mode) 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) { func TestAll(t *testing.T) {
if onWindows() { if onWindows() {
t.Log("Unit testing on Windows platform is not supported.") t.Log("Unit testing on Windows platform is not supported.")
@ -756,6 +782,7 @@ func TestAll(t *testing.T) {
testDumpExport(t) testDumpExport(t)
testTablesStats(t) testTablesStats(t)
testConnContext(t) testConnContext(t)
testServerSettings(t)
teardownClient() teardownClient()
teardown(t, true) teardown(t, true)

View File

@ -47,6 +47,9 @@ var (
//go:embed sql/function.sql //go:embed sql/function.sql
Function string Function string
//go:embed sql/settings.sql
Settings string
// Activity queries for specific PG versions // Activity queries for specific PG versions
Activity = map[string]string{ Activity = map[string]string{
"default": "SELECT * FROM pg_stat_activity WHERE datname = current_database()", "default": "SELECT * FROM pg_stat_activity WHERE datname = current_database()",

View File

@ -0,0 +1 @@
SELECT * FROM pg_settings

View File

@ -327,6 +327,8 @@
<li><a href="#" data-action="show_db_stats">Show Database Stats</a></li> <li><a href="#" data-action="show_db_stats">Show Database Stats</a></li>
<li><a href="#" data-action="download_db_stats">Download Database Stats</a></li> <li><a href="#" data-action="download_db_stats">Download Database Stats</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="#" data-action="server_settings">Show Server Settings</a></li>
<li class="divider"></li>
<li><a href="#" data-action="export">Export SQL dump</a></li> <li><a href="#" data-action="export">Export SQL dump</a></li>
</ul> </ul>
</div> </div>

View File

@ -99,6 +99,7 @@ function apiCall(method, path, params, cb) {
function getInfo(cb) { apiCall("get", "/info", {}, cb); } function getInfo(cb) { apiCall("get", "/info", {}, cb); }
function getConnection(cb) { apiCall("get", "/connection", {}, cb); } function getConnection(cb) { apiCall("get", "/connection", {}, cb); }
function getServerSettings(cb) { apiCall("get", "/server_settings", {}, cb); }
function getSchemas(cb) { apiCall("get", "/schemas", {}, cb); } function getSchemas(cb) { apiCall("get", "/schemas", {}, cb); }
function getObjects(cb) { apiCall("get", "/objects", {}, cb); } function getObjects(cb) { apiCall("get", "/objects", {}, cb); }
function getTables(cb) { apiCall("get", "/tables", {}, cb); } function getTables(cb) { apiCall("get", "/tables", {}, cb); }
@ -678,6 +679,17 @@ function downloadDatabaseStats() {
openInNewWindow("api/tables_stats", { format: "csv", export: "true" }); openInNewWindow("api/tables_stats", { format: "csv", export: "true" });
} }
function showServerSettings() {
getServerSettings(function(data) {
buildTable(data);
setCurrentTab("table_content");
$("#input").hide();
$("#body").prop("class", "full");
$("#results").addClass("no-crop");
});
}
function showTableStructure() { function showTableStructure() {
var name = getCurrentObject().name; var name = getCurrentObject().name;
@ -1280,6 +1292,9 @@ function bindCurrentDatabaseMenu() {
case "download_db_stats": case "download_db_stats":
downloadDatabaseStats(); downloadDatabaseStats();
break; break;
case "server_settings":
showServerSettings();
break;
case "export": case "export":
openInNewWindow("api/export"); openInNewWindow("api/export");
break; break;