in middleware/controllers/nodeExporter.js [125:165]
async function getDiskWaitTime(req, res) {
const { from = "now-5m", until = "now", step = 28 } = req.body;
try {
const queries = {
readWaitTime: "rate(node_disk_read_time_seconds_total{device='vda'}[5m]) / rate(node_disk_reads_completed_total{device='vda'}[5m])",
writeWaitTime: "rate(node_disk_write_time_seconds_total{device='vda'}[5m]) / rate(node_disk_writes_completed_total{device='vda'}[5m])",
};
const responses = await Promise.all(
Object.entries(queries).map(async ([key, query]) => {
const baseUrl = buildUrl(getEnv("NODE_EXPORTER_BASE_URL"), {
query,
start: from,
end: until,
step,
});
const response = await axios.get(baseUrl);
return {
key,
values: response?.data?.data?.result?.[0]?.values || [],
};
})
);
const formattedData = responses.reduce((acc, { key, values }) => {
acc[key] = values.map(([timestamp, value]) => ({
time: new Date(timestamp * 1000).toISOString(),
value: parseFloat(value),
}));
return acc;
}, {});
return res.send({ data: formattedData });
} catch (error) {
logger.error(error);
return res.status(400).send({
error: error.message || "An error occurred while fetching Disk Wait Time data",
});
}
}