mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00

将所有服务插件移动到plugins/services/目录下,使目录结构更加清晰直观: • 创建plugins/services/目录统一管理服务扫描插件 • 添加init.go提供类型别名和函数导出 • 更新main.go导入路径 • 所有20个服务插件功能验证正常 新的目录结构更便于插件管理和维护。
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"os"
|
||
|
||
"github.com/shadow1ng/fscan/app"
|
||
"github.com/shadow1ng/fscan/common"
|
||
|
||
// 导入服务插件
|
||
_ "github.com/shadow1ng/fscan/plugins/services"
|
||
)
|
||
|
||
func main() {
|
||
// 创建应用容器
|
||
container := app.NewContainer()
|
||
|
||
// 第一阶段:基础初始化(插件系统)
|
||
if err := container.Initialize(); err != nil {
|
||
handleError("基础初始化失败", err)
|
||
}
|
||
defer container.Cleanup()
|
||
|
||
// 第二阶段:解析配置
|
||
var info common.HostInfo
|
||
common.Flag(&info)
|
||
|
||
// 第三阶段:日志初始化(依赖于flag解析)
|
||
logInit := &app.LoggerInitializer{}
|
||
if err := logInit.Initialize(); err != nil {
|
||
handleError("日志初始化失败", err)
|
||
}
|
||
|
||
// 第四阶段:参数解析和验证
|
||
if err := common.Parse(&info); err != nil {
|
||
handleError("参数解析失败", err)
|
||
}
|
||
|
||
// 第五阶段:输出系统初始化
|
||
outputInit := &app.OutputInitializer{}
|
||
if err := outputInit.Initialize(); err != nil {
|
||
handleError("输出初始化失败", err)
|
||
}
|
||
|
||
// 第六阶段:执行扫描
|
||
ctx := context.Background()
|
||
if err := container.RunScan(ctx, info); err != nil {
|
||
handleError("扫描失败", err)
|
||
}
|
||
}
|
||
|
||
func handleError(msg string, err error) {
|
||
// 检查是否是应用程序错误
|
||
if appErr, ok := err.(*app.AppError); ok {
|
||
common.LogError(fmt.Sprintf("%s: %s", msg, appErr.Message))
|
||
if appErr.Cause != nil {
|
||
common.LogError(fmt.Sprintf("详细错误: %v", appErr.Cause))
|
||
}
|
||
os.Exit(appErr.Code)
|
||
} else {
|
||
common.LogError(fmt.Sprintf("%s: %v", msg, err))
|
||
os.Exit(1)
|
||
}
|
||
}
|