Allow configuring warning/info/debug logging levels

pull/521/head
Michael Zanetti 2022-04-25 14:13:13 +02:00
parent 45081ad64e
commit 48dd263cd9
3 changed files with 126 additions and 36 deletions

View File

@ -145,23 +145,23 @@ function loadLoggingCategorySettings() {
for (var loggingCategory in responseMap['loggingCategories']) {
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory)
loggingCategoryElement.checked = responseMap['loggingCategories'][loggingCategory]
console.log("Setting category", loggingCategory, "to", responseMap['loggingCategories'][loggingCategory])
loggingCategoryElement.value = responseMap['loggingCategories'][loggingCategory]
}
for (var loggingCategory in responseMap['loggingCategoriesPlugins']) {
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory)
loggingCategoryElement.checked = responseMap['loggingCategoriesPlugins'][loggingCategory]
loggingCategoryElement.value = responseMap['loggingCategoriesPlugins'][loggingCategory]
}
}
}
}
function toggleLoggingCategory(categoryName) {
var switchElement = document.getElementById("debug-category-" + categoryName)
console.log("Toggle logging category", categoryName, switchElement.checked)
function toggleLoggingCategory(categoryName, obj) {
console.log("Select changed:", categoryName, obj.value)
var fileRequestUrl = "/debug/logging-categories?" + categoryName + "=" + (switchElement.checked ? "true" : "false");
var fileRequestUrl = "/debug/logging-categories?" + categoryName + "=" + obj.value;
// Request report file generation
var request = new XMLHttpRequest();

View File

@ -283,6 +283,52 @@ button::-moz-focus-inner { border: 0; }
flex-grow: 1;
}
.debug-select {
box-sizing: border-box;
margin: 0;
border-radius: 4px;
font: inherit;
}
.debug-select {
max-width: 100%;
width: 100%;
border: 0 none;
padding: 0 10px;
background: #fff;
color: #666;
border: 1px solid #e5e5e5;
transition: .2s ease-in-out;
transition-property: color,background-color,border;
}
.debug-select:not([multiple]):not([size]) {
-webkit-appearance: none;
-moz-appearance: none;
padding-right: 20px;
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");
background-repeat: no-repeat;
background-position: 100% 50%;
}
.debug-select:not([multiple]):not([size]) {
height: 40px;
vertical-align: middle;
display: inline-block;
}
.debug-select:not([multiple]):not([size]) option {
color: #666;
}
.debug-select:focus {
outline:0;
background-color: #fff;
color: #666;
border-color: #57baae;
}
/* The switch - the box around the slider */
.switch {
position: relative;

View File

@ -410,12 +410,32 @@ HttpReply *DebugServerHandler::processDebugRequest(const QString &requestPath, c
QVariantMap dataMap;
QVariantMap loggingCategories;
foreach (const QString &loggingCategory, NymeaCore::loggingFilters()) {
loggingCategories.insert(loggingCategory, settings.value(QString("%1.debug").arg(loggingCategory), false).toBool());
QString level = "critical";
if (settings.value(QString("%1.warning").arg(loggingCategory), true).toBool()) {
level = "warning";
}
if (settings.value(QString("%1.info").arg(loggingCategory), true).toBool()) {
level = "info";
}
if (settings.value(QString("%1.debug").arg(loggingCategory), false).toBool()) {
level = "debug";
}
loggingCategories.insert(loggingCategory, level);
}
dataMap.insert("loggingCategories", loggingCategories);
QVariantMap loggingCategoriesPlugins;
foreach (const QString &loggingCategory, NymeaCore::loggingFiltersPlugins()) {
loggingCategoriesPlugins.insert(loggingCategory, settings.value(QString("%1.debug").arg(loggingCategory), false).toBool());
QString level = "critical";
if (settings.value(QString("%1.warning").arg(loggingCategory), true).toBool()) {
level = "warning";
}
if (settings.value(QString("%1.info").arg(loggingCategory), true).toBool()) {
level = "info";
}
if (settings.value(QString("%1.debug").arg(loggingCategory), false).toBool()) {
level = "debug";
}
loggingCategoriesPlugins.insert(loggingCategory, level);
}
dataMap.insert("loggingCategoriesPlugins", loggingCategoriesPlugins);
@ -434,9 +454,25 @@ HttpReply *DebugServerHandler::processDebugRequest(const QString &requestPath, c
continue;
}
bool enabled = QVariant(requestQuery.queryItems().at(i).second).toBool();
qCDebug(dcDebugServer()) << "Logging category" << category << (enabled ? "enabled" : "disabled");
settings.setValue(QString("%1.debug").arg(category), (enabled ? "true" : "false"));
QString level = QVariant(requestQuery.queryItems().at(i).second).toString();
qCDebug(dcDebugServer()) << "Logging category" << category << level;
if (level == "debug") {
settings.setValue(QString("%1.debug").arg(category), true);
settings.setValue(QString("%1.info").arg(category), true);
settings.setValue(QString("%1.warning").arg(category), true);
} else if (level == "info") {
settings.setValue(QString("%1.debug").arg(category), false);
settings.setValue(QString("%1.info").arg(category), true);
settings.setValue(QString("%1.warning").arg(category), true);
} else if (level == "warning"){
settings.setValue(QString("%1.debug").arg(category), false);
settings.setValue(QString("%1.info").arg(category), false);
settings.setValue(QString("%1.warning").arg(category), true);
} else {
settings.setValue(QString("%1.debug").arg(category), false);
settings.setValue(QString("%1.info").arg(category), false);
settings.setValue(QString("%1.warning").arg(category), false);
}
}
// Update logging filter rules according to the nw settings
@ -1806,22 +1842,29 @@ QByteArray DebugServerHandler::createDebugXmlDocument()
QStringList loggingCategories = NymeaCore::loggingFilters();
loggingCategories.sort();
QHash<QString, QString> categoryMap = {
{"debug", "🐞 Debug"},
{"info", " Info"},
{"warning", "⚠️ Warning"},
{"critical", "🔥 Critical"}
};
foreach (const QString &loggingCategory, loggingCategories) {
writer.writeStartElement("div");
writer.writeAttribute("class", "debug-category");
writer.writeTextElement("p", loggingCategory);
writer.writeStartElement("label");
writer.writeAttribute("class", "switch");
writer.writeStartElement("input");
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
writer.writeAttribute("type", "checkbox");
writer.writeAttribute("onclick", QString("toggleLoggingCategory('%1')").arg(loggingCategory));
writer.writeEndElement(); // input
writer.writeStartElement("span");
writer.writeAttribute("class", "slider round");
writer.writeCharacters("");
writer.writeEndElement(); // span
writer.writeEndElement(); // label
writer.writeAttribute("class", "debug-category");
writer.writeTextElement("p", loggingCategory);
writer.writeStartElement("label");
writer.writeStartElement("select");
writer.writeAttribute("class", "debug-select");
writer.writeAttribute("onchange", QString("toggleLoggingCategory('%1', this)").arg(loggingCategory));
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
foreach (const QString &option, QStringList({"debug", "info", "warning", "critical"})) {
writer.writeStartElement("option");
writer.writeAttribute("value", option);
writer.writeCharacters(categoryMap.value(option));
writer.writeEndElement();
}
writer.writeEndElement(); // select
writer.writeEndElement(); // label
writer.writeEndElement(); // div debug-category
}
@ -1842,16 +1885,17 @@ QByteArray DebugServerHandler::createDebugXmlDocument()
writer.writeAttribute("class", "debug-category");
writer.writeTextElement("p", loggingCategory);
writer.writeStartElement("label");
writer.writeAttribute("class", "switch");
writer.writeStartElement("input");
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
writer.writeAttribute("type", "checkbox");
writer.writeAttribute("onclick", QString("toggleLoggingCategory('%1')").arg(loggingCategory));
writer.writeEndElement(); // input
writer.writeStartElement("span");
writer.writeAttribute("class", "slider round");
writer.writeCharacters("");
writer.writeEndElement(); // span
writer.writeStartElement("select");
writer.writeAttribute("class", "debug-select");
writer.writeAttribute("onchange", QString("toggleLoggingCategory('%1', this)").arg(loggingCategory));
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
foreach (const QString &option, QStringList({"debug", "info", "warning", "critical"})) {
writer.writeStartElement("option");
writer.writeAttribute("value", option);
writer.writeCharacters(categoryMap.value(option));
writer.writeEndElement();
}
writer.writeEndElement(); // select
writer.writeEndElement(); // label
writer.writeEndElement(); // div debug-category
}
@ -1867,7 +1911,7 @@ QByteArray DebugServerHandler::createDebugXmlDocument()
writer.writeAttribute("class", "footer");
writer.writeTextElement("p", QString("Copyright %1 %2 nymea GmbH.").arg(QChar(0xA9)).arg(COPYRIGHT_YEAR_STRING));
//: The footer license note of the debug interface
writer.writeTextElement("p", tr("Released under the GNU GENERAL PUBLIC LICENSE Version 2."));
writer.writeTextElement("p", tr("Released under the GNU GENERAL PUBLIC LICENSE Version 3."));
writer.writeEndElement(); // div footer
writer.writeEndElement(); // div container