Add query execution stats to api endpoint (#629)
This commit is contained in:
parent
12a4bf70c0
commit
239037b4c6
@ -386,7 +386,9 @@ func (client *Client) exec(query string, args ...interface{}) (*Result, error) {
|
|||||||
ctx, cancel := client.context()
|
ctx, cancel := client.context()
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
queryStart := time.Now()
|
||||||
res, err := client.db.ExecContext(ctx, query, args...)
|
res, err := client.db.ExecContext(ctx, query, args...)
|
||||||
|
queryFinish := time.Now()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -401,6 +403,13 @@ func (client *Client) exec(query string, args ...interface{}) (*Result, error) {
|
|||||||
Rows: []Row{
|
Rows: []Row{
|
||||||
{affected},
|
{affected},
|
||||||
},
|
},
|
||||||
|
Stats: &ResultStats{
|
||||||
|
ColumnsCount: 1,
|
||||||
|
RowsCount: 1,
|
||||||
|
QueryStartTime: queryStart.UTC(),
|
||||||
|
QueryFinishTime: queryFinish.UTC(),
|
||||||
|
QueryDuration: queryFinish.Sub(queryStart).Milliseconds(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return &result, nil
|
return &result, nil
|
||||||
@ -437,7 +446,9 @@ func (client *Client) query(query string, args ...interface{}) (*Result, error)
|
|||||||
ctx, cancel := client.context()
|
ctx, cancel := client.context()
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
queryStart := time.Now()
|
||||||
rows, err := client.db.QueryxContext(ctx, query, args...)
|
rows, err := client.db.QueryxContext(ctx, query, args...)
|
||||||
|
queryFinish := time.Now()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if command.Opts.Debug {
|
if command.Opts.Debug {
|
||||||
log.Println("Failed query:", query, "\nArgs:", args)
|
log.Println("Failed query:", query, "\nArgs:", args)
|
||||||
@ -481,6 +492,14 @@ func (client *Client) query(query string, args ...interface{}) (*Result, error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result.Stats = &ResultStats{
|
||||||
|
ColumnsCount: len(cols),
|
||||||
|
RowsCount: len(result.Rows),
|
||||||
|
QueryStartTime: queryStart.UTC(),
|
||||||
|
QueryFinishTime: queryFinish.UTC(),
|
||||||
|
QueryDuration: queryFinish.Sub(queryStart).Milliseconds(),
|
||||||
|
}
|
||||||
|
|
||||||
result.PostProcess()
|
result.PostProcess()
|
||||||
|
|
||||||
return &result, nil
|
return &result, nil
|
||||||
|
@ -42,9 +42,19 @@ type (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result struct {
|
Result struct {
|
||||||
Pagination *Pagination `json:"pagination,omitempty"`
|
Pagination *Pagination `json:"pagination,omitempty"`
|
||||||
Columns []string `json:"columns"`
|
Columns []string `json:"columns"`
|
||||||
Rows []Row `json:"rows"`
|
Rows []Row `json:"rows"`
|
||||||
|
Stats *ResultStats `json:"stats,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
ResultStats struct {
|
||||||
|
ColumnsCount int `json:"columns_count"`
|
||||||
|
RowsCount int `json:"rows_count"`
|
||||||
|
RowsAffected int64 `json:"rows_affected"`
|
||||||
|
QueryStartTime time.Time `json:"query_start_time"`
|
||||||
|
QueryFinishTime time.Time `json:"query_finish_time"`
|
||||||
|
QueryDuration int64 `json:"query_duration_ms"`
|
||||||
}
|
}
|
||||||
|
|
||||||
Object struct {
|
Object struct {
|
||||||
|
@ -416,7 +416,7 @@ function buildTable(results, sortColumn, sortOrder, options) {
|
|||||||
$("#results_body").html(rows);
|
$("#results_body").html(rows);
|
||||||
|
|
||||||
// Show number of rows rendered on the page
|
// Show number of rows rendered on the page
|
||||||
$("#result-rows-count").html(results.rows.length + " rows");
|
$("#result-rows-count").html(results.stats.rows_count + " rows in " + results.stats.query_duration_ms + " ms");
|
||||||
}
|
}
|
||||||
|
|
||||||
function setCurrentTab(id) {
|
function setCurrentTab(id) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user