Skip to content
This repository was archived by the owner on Nov 7, 2025. It is now read-only.

Commit e0fc128

Browse files
authored
Don't display empty elastic responses when no calls made (#208)
Disabled the Elasticsearch Response view when using a mode that never calls Elasticsearch <img width="1381" alt="image" src="https://github.com/QuesmaOrg/quesma/assets/2182533/fb03391b-87a5-47f3-a874-2a158a2c5b6c"> instead of: <img width="1382" alt="image" src="https://github.com/QuesmaOrg/quesma/assets/2182533/2b81aabc-07bf-45c2-84a0-a0b69330eb4c">
1 parent 2926d7f commit e0fc128

File tree

8 files changed

+54
-47
lines changed

8 files changed

+54
-47
lines changed

quesma/quesma/ui/dashboard.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,23 @@ func (qmc *QuesmaManagementConsole) generateDashboard() []byte {
3838
// One limitation is that, we don't update color of paths after initial draw.
3939
// They rarely change, so it's not a big deal for now.
4040
// Clickhouse -> Kibana
41-
if qmc.config.ReadsFromClickhouse() {
41+
if qmc.cfg.ReadsFromClickhouse() {
4242
status, _ := qmc.generateDashboardTrafficText(RequestStatisticKibana2Clickhouse)
4343
buffer.Html(fmt.Sprintf(`<path d="M 0 250 L 1000 250" fill="none" stroke="%s" />`, status))
4444
}
4545
// Elasticsearch -> Kibana
46-
if qmc.config.ReadsFromElasticsearch() {
46+
if qmc.cfg.ReadsFromElasticsearch() {
4747
status, _ := qmc.generateDashboardTrafficText(RequestStatisticKibana2Elasticsearch)
4848
buffer.Html(fmt.Sprintf(`<path d="M 0 350 L 150 350 L 150 700 L 1000 700" fill="none" stroke="%s" />`, status))
4949
}
5050

5151
// Ingest -> Clickhouse
52-
if qmc.config.WritesToClickhouse() {
52+
if qmc.cfg.WritesToClickhouse() {
5353
status, _ := qmc.generateDashboardTrafficText(RequestStatisticIngest2Clickhouse)
5454
buffer.Html(fmt.Sprintf(`<path d="M 1000 350 L 300 350 L 300 650 L 0 650" fill="none" stroke="%s" />`, status))
5555
}
5656
// Ingest -> Elasticsearch
57-
if qmc.config.WritesToElasticsearch() {
57+
if qmc.cfg.WritesToElasticsearch() {
5858
status, _ := qmc.generateDashboardTrafficText(RequestStatisticIngest2Elasticsearch)
5959
buffer.Html(fmt.Sprintf(`<path d="M 1000 800 L 0 800" fill="none" stroke="%s" />`, status))
6060
}
@@ -93,22 +93,22 @@ func (qmc *QuesmaManagementConsole) generateDashboardTrafficPanel() []byte {
9393
var buffer builder.HtmlBuffer
9494

9595
// Clickhouse -> Kibana
96-
if qmc.config.ReadsFromClickhouse() {
96+
if qmc.cfg.ReadsFromClickhouse() {
9797
buffer.Html(qmc.generateDashboardTrafficElement(RequestStatisticKibana2Clickhouse, 21))
9898
}
9999

100100
// Elasticsearch -> Kibana
101-
if qmc.config.ReadsFromElasticsearch() {
101+
if qmc.cfg.ReadsFromElasticsearch() {
102102
buffer.Html(qmc.generateDashboardTrafficElement(RequestStatisticKibana2Elasticsearch, 66))
103103
}
104104

105105
// Ingest -> Clickhouse
106-
if qmc.config.WritesToClickhouse() {
106+
if qmc.cfg.WritesToClickhouse() {
107107
buffer.Html(qmc.generateDashboardTrafficElement(RequestStatisticIngest2Clickhouse, 31))
108108
}
109109

110110
// Ingest -> Elasticsearch
111-
if qmc.config.WritesToElasticsearch() {
111+
if qmc.cfg.WritesToElasticsearch() {
112112
buffer.Html(qmc.generateDashboardTrafficElement(RequestStatisticIngest2Elasticsearch, 76))
113113
}
114114

@@ -128,22 +128,22 @@ func (qmc *QuesmaManagementConsole) generateDashboardPanel() []byte {
128128

129129
dashboardName := "<h3>Kibana</h3>"
130130
storeName := "<h3>Elasticsearch</h3>"
131-
if qmc.config.Elasticsearch.Url != nil && strings.Contains(qmc.config.Elasticsearch.Url.String(), "opensearch") {
131+
if qmc.cfg.Elasticsearch.Url != nil && strings.Contains(qmc.cfg.Elasticsearch.Url.String(), "opensearch") {
132132
dashboardName = "<h3>OpenSearch</h3><h3>Dashboards</h3>"
133133
storeName = "<h3>OpenSearch</h3>"
134134
}
135135

136136
clickhouseName := "<h3>ClickHouse</h3>"
137-
if qmc.config.Hydrolix.Url != nil {
137+
if qmc.cfg.Hydrolix.Url != nil {
138138
clickhouseName = "<h3>Hydrolix</h3>"
139139
}
140140

141141
buffer.Html(`<div id="dashboard-kibana" class="component">`)
142-
if qmc.config.Elasticsearch.AdminUrl != nil {
143-
buffer.Html(`<a href="`).Text(qmc.config.Elasticsearch.AdminUrl.String()).Html(`">`)
142+
if qmc.cfg.Elasticsearch.AdminUrl != nil {
143+
buffer.Html(`<a href="`).Text(qmc.cfg.Elasticsearch.AdminUrl.String()).Html(`">`)
144144
}
145145
buffer.Html(dashboardName)
146-
if qmc.config.Elasticsearch.AdminUrl != nil {
146+
if qmc.cfg.Elasticsearch.AdminUrl != nil {
147147
buffer.Html(`</a>`)
148148
}
149149
buffer.Html(statusToDiv(qmc.checkKibana()))
@@ -160,11 +160,11 @@ func (qmc *QuesmaManagementConsole) generateDashboardPanel() []byte {
160160
buffer.Html(`</div>`)
161161

162162
buffer.Html(`<div id="dashboard-clickhouse" class="component">`)
163-
if qmc.config.ClickHouse.AdminUrl != nil {
164-
buffer.Html(`<a href="`).Text(qmc.config.ClickHouse.AdminUrl.String()).Html(`">`)
163+
if qmc.cfg.ClickHouse.AdminUrl != nil {
164+
buffer.Html(`<a href="`).Text(qmc.cfg.ClickHouse.AdminUrl.String()).Html(`">`)
165165
}
166166
buffer.Html(clickhouseName)
167-
if qmc.config.ClickHouse.AdminUrl != nil {
167+
if qmc.cfg.ClickHouse.AdminUrl != nil {
168168
buffer.Html(`</a>`)
169169
}
170170
buffer.Html(statusToDiv(qmc.checkClickhouseHealth()))
@@ -198,7 +198,7 @@ func (qmc *QuesmaManagementConsole) generateDashboardPanel() []byte {
198198
duration := uint64(time.Since(qmc.startedAt).Seconds())
199199

200200
buffer.Html(fmt.Sprintf(`<div class="status">Started: %s ago</div>`, secondsToTerseString(duration)))
201-
buffer.Html(fmt.Sprintf(`<div class="status">Mode: %s</div>`, qmc.config.Mode.String()))
201+
buffer.Html(fmt.Sprintf(`<div class="status">Mode: %s</div>`, qmc.cfg.Mode.String()))
202202

203203
if h, errH := host.Info(); errH == nil {
204204
buffer.Html(fmt.Sprintf(`<div class="status">Host uptime: %s</div>`, secondsToTerseString(h.Uptime)))

quesma/quesma/ui/dashboard_healthcheck.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ type healthCheckStatus struct {
4949
}
5050

5151
func (qmc *QuesmaManagementConsole) checkClickhouseHealth() healthCheckStatus {
52-
if !qmc.config.WritesToClickhouse() && !qmc.config.ReadsFromClickhouse() {
52+
if !qmc.cfg.WritesToClickhouse() && !qmc.cfg.ReadsFromClickhouse() {
5353
return healthCheckStatus{"grey", "N/A (not writing)", ""}
5454
}
5555

@@ -64,12 +64,12 @@ func (qmc *QuesmaManagementConsole) checkClickhouseHealth() healthCheckStatus {
6464
}
6565

6666
func (qmc *QuesmaManagementConsole) checkElasticsearch() healthCheckStatus {
67-
if !qmc.config.WritesToElasticsearch() && !qmc.config.ReadsFromElasticsearch() {
67+
if !qmc.cfg.WritesToElasticsearch() && !qmc.cfg.ReadsFromElasticsearch() {
6868
return healthCheckStatus{"grey", "N/A (not writing)", ""}
6969
}
7070

7171
return qmc.elasticStatusCache.check(func() healthCheckStatus {
72-
resp, err := http.Get(qmc.config.Elasticsearch.Url.String())
72+
resp, err := http.Get(qmc.cfg.Elasticsearch.Url.String())
7373
if err != nil {
7474
return healthCheckStatus{"red", "Ping failed", err.Error()}
7575
}

quesma/quesma/ui/data_sources.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (qmc *QuesmaManagementConsole) generateDatasources() []byte {
3636
buffer.Html(`<ul>`)
3737

3838
tableNames := []string{}
39-
for tableName := range qmc.config.IndexConfig {
39+
for tableName := range qmc.cfg.IndexConfig {
4040
tableNames = append(tableNames, tableName)
4141
}
4242
slices.Sort(tableNames)

quesma/quesma/ui/ingest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func (qmc *QuesmaManagementConsole) generateStatistics() []byte {
3131
var buffer builder.HtmlBuffer
3232
const maxTopValues = 5
3333

34-
if !qmc.config.IngestStatistics {
34+
if !qmc.cfg.IngestStatistics {
3535
buffer.Html("<h2>Statistics are disabled.</h2>\n")
3636
buffer.Html("<p>&nbsp;You can enable them by changing ingest_statistics setting to true.</p>\n")
3737
return buffer.Bytes()

quesma/quesma/ui/live_tail.go

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ui
33
import (
44
"fmt"
55
"mitmproxy/quesma/buildinfo"
6+
"mitmproxy/quesma/quesma/config"
67
"mitmproxy/quesma/quesma/ui/internal/builder"
78
"mitmproxy/quesma/util"
89
)
@@ -80,7 +81,7 @@ document.body.addEventListener('htmx:afterSwap', function(event) {
8081

8182
buffer.Html(`<h3>Details</h3>`)
8283
buffer.Html(`<ul>`)
83-
buffer.Html("<li><small>Mode: ").Text(qmc.config.Mode.String()).Html("</small></li>")
84+
buffer.Html("<li><small>Mode: ").Text(qmc.cfg.Mode.String()).Html("</small></li>")
8485
buffer.Html(`</ul>`)
8586

8687
buffer.Html("\n</div>")
@@ -104,7 +105,7 @@ func (qmc *QuesmaManagementConsole) generateQueries() []byte {
104105
}
105106
qmc.mutex.Unlock()
106107

107-
queriesBytes := generateQueries(debugKeyValueSlice, true)
108+
queriesBytes := qmc.populateQueries(debugKeyValueSlice, true)
108109
queriesStats := qmc.generateQueriesStatsPanel()
109110
unsupportedQueriesStats := qmc.generateUnsupportedQuerySidePanel()
110111
return append(queriesBytes, append(queriesStats, unsupportedQueriesStats...)...)
@@ -182,7 +183,7 @@ func (qmc *QuesmaManagementConsole) generateQueriesStatsPanel() []byte {
182183
return buffer.Bytes()
183184
}
184185

185-
func generateQueries(debugKeyValueSlice []queryDebugInfoWithId, withLinks bool) []byte {
186+
func (qmc *QuesmaManagementConsole) populateQueries(debugKeyValueSlice []queryDebugInfoWithId, withLinks bool) []byte {
186187
var buffer builder.HtmlBuffer
187188

188189
buffer.Html("\n" + `<div class="left" id="query-left">` + "\n")
@@ -205,25 +206,31 @@ func generateQueries(debugKeyValueSlice []queryDebugInfoWithId, withLinks bool)
205206
buffer.Html("\n</div>\n")
206207

207208
buffer.Html(`<div class="right" id="query-right">` + "\n")
208-
buffer.Html(`<div class="title-bar">Elasticsearch response` + "\n" + `</div>`)
209-
buffer.Html(`<div class="debug-body">`)
210-
for _, v := range debugKeyValueSlice {
211-
if withLinks {
212-
buffer.Html(`<a href="/request-id/`).Text(v.id).Html(`">`)
213-
}
214-
tookStr := fmt.Sprintf(" took %d ms", v.query.PrimaryTook.Milliseconds())
215-
buffer.Html("<p>UUID:").Text(v.id).Text(tookStr).Html("</p>\n")
216-
buffer.Html(`<pre Id="response`).Text(v.id).Html(`">`)
217-
if len(v.query.QueryResp) > 0 {
218-
buffer.Text(string(v.query.QueryResp))
219-
} else {
220-
buffer.Text("(empty, request was not sent to Elasticsearch)")
221-
}
222-
buffer.Html("\n</pre>")
223-
if withLinks {
224-
buffer.Html("\n</a>")
209+
// TODO revisit after modes are redone
210+
if qmc.cfg.Mode == config.DualWriteQueryClickhouse && qmc.cfg.Elasticsearch.Call {
211+
buffer.Html(`<div class="title-bar">Elasticsearch response` + "\n" + `</div>`)
212+
buffer.Html(`<div class="debug-body">`)
213+
for _, v := range debugKeyValueSlice {
214+
if withLinks {
215+
buffer.Html(`<a href="/request-id/`).Text(v.id).Html(`">`)
216+
}
217+
tookStr := fmt.Sprintf(" took %d ms", v.query.PrimaryTook.Milliseconds())
218+
buffer.Html("<p>UUID:").Text(v.id).Text(tookStr).Html("</p>\n")
219+
buffer.Html(`<pre Id="response`).Text(v.id).Html(`">`)
220+
if len(v.query.QueryResp) > 0 {
221+
buffer.Text(string(v.query.QueryResp))
222+
} else {
223+
buffer.Text("(empty, request was not sent to Elasticsearch)")
224+
}
225+
buffer.Html("\n</pre>")
226+
if withLinks {
227+
buffer.Html("\n</a>")
228+
}
225229
}
230+
} else {
231+
buffer.Html(`<div class="title-bar">Elasticsearch response (not applicable)` + "\n" + `</div>`)
226232
}
233+
227234
buffer.Html("\n</div>")
228235
buffer.Html("\n</div>\n")
229236

quesma/quesma/ui/live_tail_drilldown.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ func (qmc *QuesmaManagementConsole) generateReportForRequests(title string, requ
289289

290290
buffer.Html(`<main id="queries">`)
291291

292-
buffer.Write(generateQueries(requests, true))
292+
buffer.Write(qmc.populateQueries(requests, true))
293293

294294
buffer.Html("\n</main>\n\n")
295295

quesma/quesma/ui/management_console.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ type QuesmaManagementConsole struct {
7878
debugInfoMessages map[string]queryDebugInfo
7979
debugLastMessages []string
8080
responseMatcherChannel chan queryDebugInfo
81-
config config.QuesmaConfiguration
81+
cfg config.QuesmaConfiguration
8282
requestsStore *stats.RequestStatisticStore
8383
requestsSource chan *recordRequests
8484
startedAt time.Time
@@ -98,7 +98,7 @@ func NewQuesmaManagementConsole(config config.QuesmaConfiguration, logManager *c
9898
debugInfoMessages: make(map[string]queryDebugInfo),
9999
debugLastMessages: make([]string, 0),
100100
responseMatcherChannel: make(chan queryDebugInfo, 5),
101-
config: config,
101+
cfg: config,
102102
requestsStore: stats.NewRequestStatisticStore(),
103103
requestsSource: make(chan *recordRequests, 100),
104104
startedAt: time.Now(),

quesma/quesma/ui/schema.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func (qmc *QuesmaManagementConsole) generateSchema() []byte {
9797
columnMap[k] = c
9898
}
9999

100-
for _, a := range qmc.config.AliasFields(table.Name) {
100+
for _, a := range qmc.cfg.AliasFields(table.Name) {
101101

102102
// check for collisions
103103
if field, collide := columnMap[a.SourceFieldName]; collide {
@@ -238,7 +238,7 @@ func (qmc *QuesmaManagementConsole) generateSchema() []byte {
238238

239239
buffer.Html(`</tr>`)
240240

241-
for _, cfg := range qmc.config.IndexConfig {
241+
for _, cfg := range qmc.cfg.IndexConfig {
242242
buffer.Html(`<tr>`)
243243
buffer.Html(`<td>`)
244244
buffer.Text(cfg.Name)

0 commit comments

Comments
 (0)