Allow database stats downloads (#738)
* Add button to download database stats * Return xml as well
This commit is contained in:
parent
63f1150056
commit
3a32f531a0
@ -506,8 +506,43 @@ func GetTableConstraints(c *gin.Context) {
|
|||||||
|
|
||||||
// GetTablesStats renders data sizes and estimated rows for all tables in the database
|
// GetTablesStats renders data sizes and estimated rows for all tables in the database
|
||||||
func GetTablesStats(c *gin.Context) {
|
func GetTablesStats(c *gin.Context) {
|
||||||
res, err := DB(c).TablesStats()
|
db := DB(c)
|
||||||
serveResult(c, res, err)
|
|
||||||
|
connCtx, err := db.GetConnContext()
|
||||||
|
if err != nil {
|
||||||
|
badRequest(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := db.TablesStats()
|
||||||
|
if err != nil {
|
||||||
|
badRequest(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
format := getQueryParam(c, "format")
|
||||||
|
if format == "" {
|
||||||
|
format = "json"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save as attachment if exporting parameter is set
|
||||||
|
if getQueryParam(c, "export") == "true" {
|
||||||
|
ts := time.Now().Format(time.DateOnly)
|
||||||
|
|
||||||
|
filename := fmt.Sprintf("pgweb-dbstats-%s-%s.%s", connCtx.Database, ts, format)
|
||||||
|
c.Writer.Header().Set("Content-disposition", "attachment;filename="+filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch format {
|
||||||
|
case "json":
|
||||||
|
c.JSON(http.StatusOK, res)
|
||||||
|
case "csv":
|
||||||
|
c.Data(http.StatusOK, "text/csv", res.CSV())
|
||||||
|
case "xml":
|
||||||
|
c.XML(200, res)
|
||||||
|
default:
|
||||||
|
badRequest(c, "invalid format")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleQuery runs the database query
|
// HandleQuery runs the database query
|
||||||
|
@ -155,11 +155,12 @@ func assetContentType(name string) string {
|
|||||||
|
|
||||||
// Send a query result to client
|
// Send a query result to client
|
||||||
func serveResult(c *gin.Context, result interface{}, err interface{}) {
|
func serveResult(c *gin.Context, result interface{}, err interface{}) {
|
||||||
if err == nil {
|
if err != nil {
|
||||||
successResponse(c, result)
|
|
||||||
} else {
|
|
||||||
badRequest(c, err)
|
badRequest(c, err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
successResponse(c, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send successful response back to client
|
// Send successful response back to client
|
||||||
|
@ -324,7 +324,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="current_database_context_menu">
|
<div id="current_database_context_menu">
|
||||||
<ul class="dropdown-menu" role="menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#" data-action="show_tables_stats">Show Tables 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 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>
|
||||||
|
@ -660,7 +660,7 @@ function showPaginatedTableContent() {
|
|||||||
showTableContent(sortColumn, sortOrder);
|
showTableContent(sortColumn, sortOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showTablesStats() {
|
function showDatabaseStats() {
|
||||||
getTablesStats(function(data) {
|
getTablesStats(function(data) {
|
||||||
buildTable(data);
|
buildTable(data);
|
||||||
|
|
||||||
@ -671,6 +671,10 @@ function showTablesStats() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function downloadDatabaseStats() {
|
||||||
|
openInNewWindow("api/tables_stats", { format: "csv", export: "true" });
|
||||||
|
}
|
||||||
|
|
||||||
function showTableStructure() {
|
function showTableStructure() {
|
||||||
var name = getCurrentObject().name;
|
var name = getCurrentObject().name;
|
||||||
|
|
||||||
@ -1267,8 +1271,11 @@ function bindCurrentDatabaseMenu() {
|
|||||||
var menuItem = $(e.target);
|
var menuItem = $(e.target);
|
||||||
|
|
||||||
switch(menuItem.data("action")) {
|
switch(menuItem.data("action")) {
|
||||||
case "show_tables_stats":
|
case "show_db_stats":
|
||||||
showTablesStats();
|
showDatabaseStats();
|
||||||
|
break;
|
||||||
|
case "download_db_stats":
|
||||||
|
downloadDatabaseStats();
|
||||||
break;
|
break;
|
||||||
case "export":
|
case "export":
|
||||||
openInNewWindow("api/export");
|
openInNewWindow("api/export");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user