mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
Add advanced dashboard selector
This commit is contained in:
parent
05bd7f4b4c
commit
ad67608956
@ -476,7 +476,7 @@
|
|||||||
<input id="edit" type="button" value="✎" style="display: none;">
|
<input id="edit" type="button" value="✎" style="display: none;">
|
||||||
<input id="add" type="button" value="Add chart" style="display: none;">
|
<input id="add" type="button" value="Add chart" style="display: none;">
|
||||||
<input id="reload" type="button" value="Reload">
|
<input id="reload" type="button" value="Reload">
|
||||||
<span id="search-span" class="nowrap" style="display: none;"><input id="search" type="button" value="🔎" title="Run query to obtain list of charts from ClickHouse"><input id="search-query" name="search" type="text" spellcheck="false"></span>
|
<span id="search-span" class="nowrap" style="display: none;"><input id="search" type="button" value="🔎" title="Run query to obtain list of charts from ClickHouse. Either select dashboard name or write your own query"><input id="search-query" name="search" list="search-options" type="text" spellcheck="false"><datalist id="search-options"></datalist></span>
|
||||||
<div id="chart-params"></div>
|
<div id="chart-params"></div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@ -532,9 +532,15 @@ const errorMessages = [
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
/// Dashboard selector
|
||||||
|
const dashboardSearchQuery = (dashboard_name) => `SELECT title, query FROM system.dashboards WHERE dashboard = '${dashboard_name}'`;
|
||||||
|
let dashboard_queries = {
|
||||||
|
"Overview": dashboardSearchQuery("Overview"),
|
||||||
|
};
|
||||||
|
const default_dashboard = 'Overview';
|
||||||
|
|
||||||
/// Query to fill `queries` list for the dashboard
|
/// Query to fill `queries` list for the dashboard
|
||||||
let search_query = `SELECT title, query FROM system.dashboards WHERE dashboard = 'Overview'`;
|
let search_query = dashboardSearchQuery(default_dashboard);
|
||||||
let customized = false;
|
let customized = false;
|
||||||
let queries = [];
|
let queries = [];
|
||||||
|
|
||||||
@ -1439,7 +1445,7 @@ async function reloadAll(do_search) {
|
|||||||
try {
|
try {
|
||||||
updateParams();
|
updateParams();
|
||||||
if (do_search) {
|
if (do_search) {
|
||||||
search_query = document.getElementById('search-query').value;
|
search_query = toSearchQuery(document.getElementById('search-query').value);
|
||||||
queries = [];
|
queries = [];
|
||||||
refreshCustomized(false);
|
refreshCustomized(false);
|
||||||
}
|
}
|
||||||
@ -1504,7 +1510,7 @@ function updateFromState() {
|
|||||||
document.getElementById('url').value = host;
|
document.getElementById('url').value = host;
|
||||||
document.getElementById('user').value = user;
|
document.getElementById('user').value = user;
|
||||||
document.getElementById('password').value = password;
|
document.getElementById('password').value = password;
|
||||||
document.getElementById('search-query').value = search_query;
|
document.getElementById('search-query').value = fromSearchQuery(search_query);
|
||||||
refreshCustomized();
|
refreshCustomized();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1543,6 +1549,44 @@ if (window.location.hash) {
|
|||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fromSearchQuery(query) {
|
||||||
|
for (const dashboard_name in dashboard_queries) {
|
||||||
|
if (query == dashboard_queries[dashboard_name])
|
||||||
|
return dashboard_name;
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
function toSearchQuery(value) {
|
||||||
|
if (value in dashboard_queries)
|
||||||
|
return dashboard_queries[value];
|
||||||
|
else
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function populateSearchOptions() {
|
||||||
|
let {reply, error} = await doFetch("SELECT dashboard FROM system.dashboards GROUP BY dashboard ORDER BY ALL");
|
||||||
|
if (error) {
|
||||||
|
throw new Error(error);
|
||||||
|
}
|
||||||
|
let data = reply.data;
|
||||||
|
if (data.dashboard.length == 0) {
|
||||||
|
console.log("Unable to fetch dashboards list");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dashboard_queries = {};
|
||||||
|
for (let i = 0; i < data.dashboard.length; i++) {
|
||||||
|
const dashboard = data.dashboard[i];
|
||||||
|
dashboard_queries[dashboard] = dashboardSearchQuery(dashboard);
|
||||||
|
}
|
||||||
|
const searchOptions = document.getElementById('search-options');
|
||||||
|
for (const dashboard in dashboard_queries) {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = dashboard;
|
||||||
|
searchOptions.appendChild(opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function start() {
|
async function start() {
|
||||||
try {
|
try {
|
||||||
updateFromState();
|
updateFromState();
|
||||||
@ -1558,6 +1602,7 @@ async function start() {
|
|||||||
} else {
|
} else {
|
||||||
drawAll();
|
drawAll();
|
||||||
}
|
}
|
||||||
|
await populateSearchOptions();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showError(e.message);
|
showError(e.message);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user