Generalize store quering functions
This commit is contained in:
1 parent
93c6a4dfcd
commit
9b827c5f5e
26 files changed
+1362
-321
No files matched your search
+21
-70
@@ -1,93 +1,44 @@
|
||||
"use strict";
|
||||
|
||||
import m from "mithril";
|
||||
import config from "./config";
|
||||
import * as config from "./config";
|
||||
import * as store from "./store";
|
||||
import pieChartComponent from "./pie-chart-component";
|
||||
import * as filterParser from "../common/filter-parser";
|
||||
|
||||
function count(filter, limit) {
|
||||
return new Promise((resolve, reject) => {
|
||||
function extract(xhr) {
|
||||
return +xhr.getResponseHeader("x-total-count");
|
||||
}
|
||||
m
|
||||
.request({
|
||||
method: "HEAD",
|
||||
url:
|
||||
"/api/devices/?" +
|
||||
m.buildQueryString({ filter: filter, limit: limit }),
|
||||
extract: extract
|
||||
})
|
||||
.then(res => {
|
||||
resolve(res);
|
||||
})
|
||||
.catch(err => {
|
||||
err.message = err.message || "Unknown error";
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
const GROUPS = config.get("ui.overview.groups");
|
||||
const CHARTS = {};
|
||||
for (let group of Object.values(GROUPS))
|
||||
for (let chartName of Object.values(group["charts"]))
|
||||
CHARTS[chartName] = config.get("ui.overview.charts")[chartName];
|
||||
|
||||
function queryCharts(groups) {
|
||||
const now = Date.now();
|
||||
function evalNow(exp) {
|
||||
if (exp[0] == "FUNC" && exp[1] === "NOW" && exp.length == 2) return now;
|
||||
}
|
||||
|
||||
let calls = [];
|
||||
groups = Object.assign({}, groups);
|
||||
for (let [groupName, group] of Object.entries(groups)) {
|
||||
groups[groupName] = group = Object.assign({}, group);
|
||||
for (let [chartName, chart] of Object.entries(group.charts)) {
|
||||
group.charts[chartName] = chart = Object.assign({}, chart);
|
||||
for (let [sliceName, slice] of Object.entries(chart.slices)) {
|
||||
chart.slices[sliceName] = slice = Object.assign({}, slice);
|
||||
calls.push(
|
||||
new Promise((resolve, reject) => {
|
||||
let f = filterParser.map(filterParser.parse(slice.filter), evalNow);
|
||||
count(filterParser.stringify(f))
|
||||
.then(c => {
|
||||
slice.count = c;
|
||||
resolve();
|
||||
})
|
||||
.catch(reject);
|
||||
})
|
||||
);
|
||||
}
|
||||
function queryCharts(charts) {
|
||||
charts = Object.assign({}, charts);
|
||||
for (let [chartName, chart] of Object.entries(charts)) {
|
||||
charts[chartName] = chart = Object.assign({}, chart);
|
||||
for (let [sliceName, slice] of Object.entries(chart.slices)) {
|
||||
chart.slices[sliceName] = slice = Object.assign({}, slice);
|
||||
slice.count = store.count("devices", slice.filter);
|
||||
}
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
Promise.all(calls)
|
||||
.then(() => {
|
||||
resolve(groups);
|
||||
})
|
||||
.catch(reject);
|
||||
});
|
||||
return charts;
|
||||
}
|
||||
|
||||
const init = function() {
|
||||
return new Promise((resolve, reject) => {
|
||||
queryCharts(config.overview)
|
||||
.then(charts => {
|
||||
resolve({ charts: charts });
|
||||
})
|
||||
.catch(err => {
|
||||
err.message = err.message || "Unknown error";
|
||||
reject(err);
|
||||
});
|
||||
return new Promise(resolve => {
|
||||
resolve({ charts: queryCharts(CHARTS) });
|
||||
});
|
||||
};
|
||||
|
||||
const component = {
|
||||
view: vnode => {
|
||||
view: () => {
|
||||
document.title = "Overview - GenieACS";
|
||||
let children = [];
|
||||
for (let group of Object.values(vnode.attrs.charts)) {
|
||||
for (let group of Object.values(GROUPS)) {
|
||||
if (group.label) children.push(m("h1", group.label));
|
||||
|
||||
let groupChildren = [];
|
||||
for (let chart of Object.values(group.charts)) {
|
||||
for (let chartName of Object.values(group.charts)) {
|
||||
const chart = CHARTS[chartName];
|
||||
let chartChildren = [];
|
||||
if (chart.label) chartChildren.push(m("h2", chart.label));
|
||||
|
||||
|
||||
Reference in new issue
Block a user