🏗️ refactor error handling in controllers and integrate logging functionality

This commit is contained in:
刘嘉伟 2025-02-25 17:55:13 +08:00
parent cd5122c6cf
commit fb2846c0b5
9 changed files with 219 additions and 90 deletions

View File

@ -7,6 +7,7 @@ import SystemService from "../service/SystemService";
import moment from "moment";
import ResponseUtils from "../utils/ResponseUtils";
import { dialog } from "electron";
import Logger from "../core/Logger";
class ConfigController extends BaseController {
private readonly _serverService: ServerService;
@ -25,49 +26,73 @@ class ConfigController extends BaseController {
}
saveConfig(req: ControllerParam) {
this._serverService.saveServerConfig(req.args).then(() => {
req.event.reply(req.channel, ResponseUtils.success());
});
this._serverService
.saveServerConfig(req.args)
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch((err: Error) => {
Logger.error("ConfigController.saveConfig", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
getServerConfig(req: ControllerParam) {
this._serverService.getServerConfig().then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._serverService
.getServerConfig()
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("ConfigController.getServerConfig", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
openAppData(req: ControllerParam) {
this._systemService.openLocalPath(PathUtils.getAppData()).then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._systemService
.openLocalPath(PathUtils.getAppData())
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("ConfigController.openAppData", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
async resetAllConfig(req: ControllerParam) {
resetAllConfig(req: ControllerParam) {
// await this._serverDao.truncate();
// await this._proxyDao.truncate();
// await this._versionDao.truncate();
await this._frpcProcessService.stopFrpcProcess();
fs.rmSync(PathUtils.getDataBaseStoragePath(), {
recursive: true,
force: true
});
this._frpcProcessService
.stopFrpcProcess()
.then(() => {
fs.rmSync(PathUtils.getDataBaseStoragePath(), {
recursive: true,
force: true
});
fs.rmSync(PathUtils.getDownloadStoragePath(), {
recursive: true,
force: true
});
fs.rmSync(PathUtils.getDownloadStoragePath(), {
recursive: true,
force: true
});
fs.rmSync(PathUtils.getVersionStoragePath(), {
recursive: true,
force: true
});
fs.rmSync(PathUtils.getVersionStoragePath(), {
recursive: true,
force: true
});
fs.rmSync(PathUtils.getFrpcLogStoragePath(), {
recursive: true,
force: true
});
req.event.reply(req.channel, ResponseUtils.success());
fs.rmSync(PathUtils.getFrpcLogStoragePath(), {
recursive: true,
force: true
});
req.event.reply(req.channel, ResponseUtils.success());
})
.catch((err: Error) => {
Logger.error("ConfigController.resetAllConfig", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
exportConfig(req: ControllerParam) {
@ -98,13 +123,23 @@ class ConfigController extends BaseController {
);
});
}
})
.catch((err: Error) => {
Logger.error("ConfigController.exportConfig", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
importTomlConfig(req: ControllerParam) {
this._serverService.importTomlConfig().then(() => {
req.event.reply(req.channel, ResponseUtils.success());
});
this._serverService
.importTomlConfig()
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch((err: Error) => {
Logger.error("ConfigController.importTomlConfig", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
}

View File

@ -1,6 +1,7 @@
import BaseController from "./BaseController";
import FrpcProcessService from "../service/FrpcProcessService";
import ResponseUtils from "../utils/ResponseUtils";
import Logger from "../core/Logger";
class LaunchController extends BaseController {
private readonly _frpcProcessService: FrpcProcessService;
@ -16,15 +17,21 @@ class LaunchController extends BaseController {
.then(r => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch(err => {
console.log(err, "1");
.catch((err: Error) => {
Logger.error("LaunchController.launch", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
terminate(req: ControllerParam) {
this._frpcProcessService.stopFrpcProcess().then(r => {
req.event.reply(req.channel, ResponseUtils.success());
});
this._frpcProcessService
.stopFrpcProcess()
.then(r => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch(err => {
Logger.error("LaunchController.terminate", err);
});
}
getStatus(req: ControllerParam) {

View File

@ -1,6 +1,7 @@
import BaseController from "./BaseController";
import LogService from "../service/LogService";
import ResponseUtils from "../utils/ResponseUtils";
import Logger from "../core/Logger";
class LogController extends BaseController {
private readonly _logService: LogService;
@ -11,9 +12,15 @@ class LogController extends BaseController {
}
getFrpLogContent(req: ControllerParam) {
this._logService.getFrpLogContent().then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._logService
.getFrpLogContent()
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("LogController.getFrpLogContent", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
// watchFrpcLogContent(req: ControllerRequest) {
@ -24,13 +31,19 @@ class LogController extends BaseController {
// }
openFrpcLogFile(req: ControllerParam) {
this._logService.openFrpcLogFile().then(data => {
if (data) {
ResponseUtils.success();
} else {
ResponseUtils.fail();
}
});
this._logService
.openFrpcLogFile()
.then(data => {
if (data) {
ResponseUtils.success();
} else {
ResponseUtils.fail();
}
})
.catch((err: Error) => {
Logger.error("LogController.openFrpcLogFile", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
}

View File

@ -2,6 +2,7 @@ import BaseController from "./BaseController";
import ProxyService from "../service/ProxyService";
import ResponseUtils from "../utils/ResponseUtils";
import ProxyRepository from "../repository/ProxyRepository";
import Logger from "../core/Logger";
class ProxyController extends BaseController {
private readonly _proxyService: ProxyService;
@ -14,39 +15,75 @@ class ProxyController extends BaseController {
}
createProxy(req: ControllerParam) {
this._proxyService.insertProxy(req.args).then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._proxyService
.insertProxy(req.args)
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("ProxyController.createProxy", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
modifyProxy(req: ControllerParam) {
this._proxyService.updateProxy(req.args).then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._proxyService
.updateProxy(req.args)
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("ProxyController.modifyProxy", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
getAllProxies(req: ControllerParam) {
this._proxyDao.findAll().then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._proxyDao
.findAll()
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("ProxyController.getAllProxies", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
deleteProxy(req: ControllerParam) {
this._proxyService.deleteProxy(req.args).then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._proxyService
.deleteProxy(req.args)
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("ProxyController.deleteProxy", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
modifyProxyStatus(req: ControllerParam) {
this._proxyDao.updateProxyStatus(req.args.id, req.args.status).then(() => {
req.event.reply(req.channel, ResponseUtils.success());
});
this._proxyDao
.updateProxyStatus(req.args.id, req.args.status)
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch((err: Error) => {
Logger.error("ProxyController.modifyProxyStatus", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
getLocalPorts(req: ControllerParam) {
this._proxyService.getLocalPorts().then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._proxyService
.getLocalPorts()
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("ProxyController.getLocalPorts", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
}

View File

@ -3,6 +3,7 @@ import ResponseUtils from "../utils/ResponseUtils";
import PathUtils from "../utils/PathUtils";
import { BrowserWindow, dialog } from "electron";
import BeanFactory from "../core/BeanFactory";
import Logger from "../core/Logger";
class SystemController {
private readonly _systemService: SystemService;
@ -17,21 +18,34 @@ class SystemController {
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch(err => {
req.event.reply(req.channel, ResponseUtils.fail());
.catch((err: Error) => {
Logger.error("SystemController.openUrl", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
relaunchApp(req: ControllerParam) {
this._systemService.relaunch().then(() => {
req.event.reply(req.channel, ResponseUtils.success());
});
this._systemService
.relaunch()
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch((err: Error) => {
Logger.error("SystemController.relaunchApp", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
openAppData(req: ControllerParam) {
this._systemService.openLocalPath(PathUtils.getAppData()).then(() => {
req.event.reply(req.channel, ResponseUtils.success());
});
this._systemService
.openLocalPath(PathUtils.getAppData())
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch((err: Error) => {
Logger.error("SystemController.openAppData", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
selectLocalFile(req: ControllerParam) {
@ -58,6 +72,10 @@ class SystemController {
path: result.filePaths[0]
});
}
})
.catch((err: Error) => {
Logger.error("SystemController.selectLocalFile", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
}

View File

@ -2,6 +2,7 @@ import BaseController from "./BaseController";
import VersionService from "../service/VersionService";
import ResponseUtils from "../utils/ResponseUtils";
import VersionRepository from "../repository/VersionRepository";
import Logger from "../core/Logger";
class VersionController extends BaseController {
private readonly _versionService: VersionService;
@ -19,7 +20,8 @@ class VersionController extends BaseController {
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch(() => {
.catch(err => {
Logger.error("VersionController.getVersions", err);
this._versionService.getFrpVersionByLocalJson().then(localData => {
req.event.reply(req.channel, ResponseUtils.success(localData));
});
@ -27,9 +29,15 @@ class VersionController extends BaseController {
}
getDownloadedVersions(req: ControllerParam) {
this._versionDao.findAll().then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
});
this._versionDao
.findAll()
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("VersionController.getDownloadedVersions", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
downloadFrpVersion(req: ControllerParam) {
@ -45,10 +53,18 @@ class VersionController extends BaseController {
);
})
.then(r => {
console.log(2);
req.event.reply(
req.channel,
ResponseUtils.success({
percent: 1,
githubReleaseId: req.args.githubReleaseId,
completed: true
})
);
})
.catch(err => {
console.log(1);
.catch((err: Error) => {
Logger.error("VersionController.downloadFrpVersion", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
@ -58,8 +74,9 @@ class VersionController extends BaseController {
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch(err => {
req.event.reply(req.channel, ResponseUtils.fail());
.catch((err: Error) => {
Logger.error("VersionController.deleteDownloadedVersion", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
@ -69,8 +86,9 @@ class VersionController extends BaseController {
.then(data => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch(err => {
req.event.reply(req.channel, ResponseUtils.fail());
.catch((err: Error) => {
Logger.error("VersionController.importLocalFrpcVersion", err);
req.event.reply(req.channel, ResponseUtils.fail(err.message));
});
}
}

View File

@ -18,8 +18,8 @@ class Logger {
log.warn(`[${module}] ${msg}`);
}
public static error(module: string, msg: string) {
log.warn(`[${module}] ${msg}`);
public static error(module: string, error: Error) {
log.error(`[${module}] ${error}`);
}
}

View File

@ -6,6 +6,7 @@ import { app, BrowserWindow, Notification } from "electron";
import treeKill from "tree-kill";
import BeanFactory from "../core/BeanFactory";
import ResponseUtils from "../utils/ResponseUtils";
import Logger from "../core/Logger";
class FrpcProcessService {
private readonly _serverService: ServerService;
@ -36,7 +37,7 @@ class FrpcProcessService {
}
const config = await this._serverService.getServerConfig();
if (!config) {
throw new Error("请先进行配置")
throw new Error("请先进行配置");
}
const version = await this._versionDao.findByGithubReleaseId(
config.frpcVersion

View File

@ -52,7 +52,7 @@ const defaultFormData: OpenSourceFrpcDesktopServer = {
connectServerLocalIP: "",
proxyURL: "",
tls: {
enable: false,
enable: true,
certFile: "",
keyFile: "",
trustedCaFile: "",
@ -1347,7 +1347,7 @@ onUnmounted(() => {
<div class="h2">日志配置</div>
</el-col>
<el-col :span="12">
<el-form-item class="!w-full" label="日志级别:" prop="logLevel">
<el-form-item class="!w-full" label="日志级别:" prop="log.level">
<el-select v-model="formData.log.level">
<el-option label="info" value="info" />
<el-option label="debug" value="debug" />
@ -1357,7 +1357,7 @@ onUnmounted(() => {
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item lalog.maxDaysbel="日志保留天数" prop="">
<el-form-item label="日志保留天数:" prop="log.maxDays">
<el-input-number
class="!w-full"
controls-position="right"