Allow configuring warning/info/debug logging levels

This commit is contained in:
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']) { for (var loggingCategory in responseMap['loggingCategories']) {
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory) 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']) { for (var loggingCategory in responseMap['loggingCategoriesPlugins']) {
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory) var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory)
loggingCategoryElement.checked = responseMap['loggingCategoriesPlugins'][loggingCategory] loggingCategoryElement.value = responseMap['loggingCategoriesPlugins'][loggingCategory]
} }
} }
} }
} }
function toggleLoggingCategory(categoryName) { function toggleLoggingCategory(categoryName, obj) {
var switchElement = document.getElementById("debug-category-" + categoryName) console.log("Select changed:", categoryName, obj.value)
console.log("Toggle logging category", categoryName, switchElement.checked)
var fileRequestUrl = "/debug/logging-categories?" + categoryName + "=" + (switchElement.checked ? "true" : "false"); var fileRequestUrl = "/debug/logging-categories?" + categoryName + "=" + obj.value;
// Request report file generation // Request report file generation
var request = new XMLHttpRequest(); var request = new XMLHttpRequest();

View File

@ -283,6 +283,52 @@ button::-moz-focus-inner { border: 0; }
flex-grow: 1; 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 */ /* The switch - the box around the slider */
.switch { .switch {
position: relative; position: relative;

View File

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