Browse Source

添加日志配置界面

master
zhaohe 3 years ago
parent
commit
b9ace415b5
  1. 2
      dep/zservice_container
  2. 9
      src/main.cpp
  3. 41
      src/service/main_control_service.cpp
  4. 17
      src/service/main_control_service.hpp
  5. 0
      webapp/debug/index.html
  6. 88
      webapp/debug/logger.html
  7. 0
      webapp/index.html
  8. 0
      webapp/js/.empty
  9. 5
      webapp/js/jquery.min.js
  10. 149
      webapp/js/zcmd.js

2
dep/zservice_container

@ -1 +1 @@
Subproject commit 956a5cc3a379cb53f38b2c4dadd086a29b05f2c8
Subproject commit 02efa46cb128b1437a49a89f413fb17efb88cf31

9
src/main.cpp

@ -22,13 +22,13 @@ class Main {
unique_ptr<Thread> thread;
private:
void main(int argc, char *argv[]);
int main(int argc, char *argv[]);
public:
Main(/* args */) {}
~Main() {}
void run(int argc, char *argv[]) {
thread.reset(new Thread("main", [&]() { main(argc, argv); }));
thread.reset(new Thread("main", [&]() { exit(main(argc, argv)); }));
while (true) sleep(1000);
}
};
@ -44,7 +44,7 @@ int main(int argc, char *argv[]) {
/***********************************************************************************************************************
* =======================================================Main======================================================== *
***********************************************************************************************************************/
void Main::main(int argc, char *argv[]) {
int Main::main(int argc, char *argv[]) {
string g_host_server_ip;
string g_device_id;
auto cli = ( //
@ -52,7 +52,7 @@ void Main::main(int argc, char *argv[]) {
);
if (!parse(argc, argv, cli)) {
cout << make_man_page(cli, argv[0]);
return;
exit(-1);
}
logger->info("#");
@ -74,4 +74,5 @@ void Main::main(int argc, char *argv[]) {
GET_SERVICE(MainControlService)->initialize();
logger->info("system setup end.");
while (true) sleep(1000);
}

41
src/service/main_control_service.cpp

@ -1,5 +1,44 @@
#include "main_control_service.hpp"
#include "version.hpp"
using namespace iflytop;
using namespace core;
using namespace std;
using namespace std;
void MainControlService::initialize() {
GET_TO_SERVICE(m_zwebService);
// 监听从webservice来的websocket消息
m_zwebService->startWork([this](const json& command, json& receipt) {
try {
processReceiveMessage(kzwebService, command, receipt);
} catch (const std::exception& e) {
logger->error("process message fail {}", string(e.what()));
} catch (...) {
logger->error("process message fail {}", "catch unknown exception");
}
});
};
void MainControlService::processReceiveMessage(fromwhere_t fromwhere, const json& in, json& receipt) {
logger->info("process receive message from {},{}", fromwhere2str(fromwhere), in.dump());
if (in["command"] == "getVersion") {
receipt["version"] = VERSION;
}
/*********************************************************************************************************************
* ================================================================================================= *
*********************************************************************************************************************/
else if (in["command"] == "loggerSetLevel") {
int loggerLevel = in["loggerLevel"];
string loggerName = in["loggerName"];
logger->info("loggerSetLevel {} {}", loggerName, loggerLevel);
SpdLoggerFactory::Instance().createLogger(loggerName)->set_level((level::level_enum)loggerLevel);
} else if (in["command"] == "loggerGetAllLoggers") {
receipt["loggers"] = SpdLoggerFactory::Instance().loggerNames();
}
/*********************************************************************************************************************
* ============================================================================================================= *
*********************************************************************************************************************/
}

17
src/service/main_control_service.hpp

@ -18,6 +18,7 @@
//
#include "configs/config.hpp"
#include "zservice_container/zservice_container.hpp"
#include "zwebservice/zwebservice.hpp"
/**
* @brief
@ -37,9 +38,23 @@ using namespace core;
class MainControlService : public enable_shared_from_this<MainControlService> {
ENABLE_LOGGER(MainControlService);
shared_ptr<ZWebService> m_zwebService;
typedef enum {
kzwebService,
} fromwhere_t;
private:
string fromwhere2str(fromwhere_t var) {
if (var == kzwebService) return "zwebService";
return "unkown";
}
private:
void processReceiveMessage(fromwhere_t fromwhere, const json &in, json &receipt);
public:
MainControlService(){};
void initialize(){};
void initialize();
};
} // namespace iflytop

0
webapp/debug/index.html

88
webapp/debug/logger.html

@ -0,0 +1,88 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>
<script src="../js/zcmd.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>日志配置</title>
<style>
</style>
<script>
</script>
</head>
<body>
<!--
选择框:main,service
选择框:等级(debug,info,warning,error)
设置日志等级:按钮
-->
<div>
<select id="logger">
<option value="main">main</option>
<option value="service">service</option>
</select>
<select id="level">
<option value=0>trace</option>
<option value=1>debug</option>
<option value=2>info</option>
<option value=3>warning</option>
<option value=4>error</option>
<option value=5>critical</option>
</select>
<button id="set">设置日志等级</button>
</div>
<script>
$(function () {
var zcmd = new ZCommand();
zcmd.onsendraw = function (data/*json*/) {
console.log("zcmd send:" + JSON.stringify(data, null, 0));
}
zcmd.onreceipt = function (tx, rx) {
console.log("zcmd receipt:" + JSON.stringify(rx, null, 0));
}
ZWSURL = "ws://127.0.0.1:19000";
//连接后端
zcmd.start_auto_connect(ZWSURL, () => {
console.log("zcmd connected");
//请求日志名称
zcmd.send_message({
"command": "loggerGetAllLoggers",
"need_receipt": true,
}, 4000).then((data) => {
console.log(data);
var html = "";
for (var i = 0; i < data.loggers.length; i++) {
html += "<option value='" + data.loggers[i] + "'>" + data.loggers[i] + "</option>";
}
$("#logger").html(html);
});
$("#set").click(function () {
zcmd.send_message({
"command": "loggerSetLevel",
"need_receipt": true,
"loggerLevel": Number($("#level").val()),
"loggerName": $("#logger").val(),
}, 4000).then((data) => {
if (data.success) {
alert("设置成功");
} else {
alert("设置失败")
}
});
});
});
});
</script>
</body>
</html>

0
webapp/index.html

0
webapp/js/.empty

5
webapp/js/jquery.min.js
File diff suppressed because it is too large
View File

149
webapp/js/zcmd.js

@ -0,0 +1,149 @@
function uuid() {
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
)
}
var ZWSURL = "ws://" + window.location.hostname + ":" + window.location.port + "/ws/cmd";
class ZCommand {
/*******************************************************************************************************************
* ===================================================BASE======================================================== *
*******************************************************************************************************************/
constructor() {
if (!('WebSocket' in window)) {
alert('当前浏览器 Not support websocket')
}
this.connected = false;
this.connecting = false;
this.cmdServerListener = new Map();
this.onConnect;
this.firstConnect = true;
}
start_auto_connect(wsurl, onFirstConnect) {
var ThisClass = this;
this.onFirstConnect = onFirstConnect;
this.wsurl = wsurl;
ThisClass.connectToCmdServer();
setInterval(function () {
if (!ThisClass.isConnect()) {
console.info("ZcmdService try connect to server");
ThisClass.connectToCmdServer();
}
}, 2000);
}
isConnect() {
return this.connected;
}
isConnecting() {
return this.connecting;
}
connectToCmdServer() {
this.connecting = true;
console.info('websocket create socket:' + this.wsurl);
this.cmdServer = new WebSocket(this.wsurl);
var ThisClass = this;
this.cmdServer.onopen = function () {
ThisClass.connecting = false;
ThisClass.connected = true;
console.info("ZcmdService connect to server");
if (ThisClass.firstConnect && ThisClass.onFirstConnect) {
ThisClass.onFirstConnect();
}
ThisClass.firstConnect = false;
}
this.cmdServer.onerror = function () {
ThisClass.connecting = false;
ThisClass.connected = false;
console.info("websocket onerror");
};
var ThisClass = this;
this.cmdServer.onmessage = function (event) {
var obj = $.parseJSON(event.data);
var messageId = obj["messageId"];
if (ThisClass.cmdServerListener.has(messageId)) {
var txcontext = ThisClass.cmdServerListener.get(messageId);
txcontext.onreceipt(txcontext, obj);
ThisClass.cmdServerListener.delete(messageId);
} else {
if (ThisClass.onreport) {
ThisClass.onreport(obj)
}
}
}
this.cmdServer.onclose = function () {
ThisClass.connected = false;
console.warn("websocket close");
}
};
sendCmd(txcontext) {
var ThisClass = this;
var messageId = uuid();;
txcontext.message["messageId"] = messageId;
txcontext.message["need_receipt"] = true;
// TODO:这里修改成异步等待链接成功,并发送
if (!this.isConnect()) {
console.error("Servcer is unconnected");
setTimeout(function () {
txcontext.onOvertime();
}, txcontext.overtime)
return;
}
txcontext.timerId = setTimeout(function () {
console.error("cmd is overtime");
txcontext.onOvertime();
ThisClass.cmdServerListener.delete(messageId);
}, txcontext.overtime)
txcontext.onreceipt = function (_txcontext, receipt) {
clearTimeout(_txcontext.timerId)
_txcontext.onMessage(receipt)
if (ThisClass.onreceipt) {
ThisClass.onreceipt(_txcontext.message, receipt)
}
}
this.cmdServerListener.set(messageId, txcontext);
if (this.onsendraw) {
this.onsendraw(txcontext.message);
}
this.cmdServer.send(JSON.stringify(txcontext.message));
};
/*******************************************************************************************************************
* =================================================通用发送消息================================================== *
*******************************************************************************************************************/
send_message(jsonobject, _overtime = 3000) {
var p = new Promise(
(resolve, reject) => {
this.sendCmd({
message: jsonobject,
onMessage: function (message) {
if (resolve)
resolve(message);
},
onOvertime: function () { },
onError: function () { },
overtime: _overtime,
});
}
)
return p;
};
set_onreceipt(onreceipt) {
this.onreceipt = onreceipt;
}
set_onreport(onreport) {
this.onreport = onreport;
}
set_onsendraw(onsendraw) {
this.onsendraw = onsendraw;
}
}
// var zcmd = new ZCommand();
// zcmd.start_auto_connect(() => { });
Loading…
Cancel
Save