版本 6.7.1
前言
- go 依賴注入
- 事件總線模式
- go-macaron
- hashicorp/go-plugin
- DTO
Services
Services vs Background Services
兩者都實現了 Init(),后者還實現了 Run()
分析 server.go 代碼可知,大多數服務是通過匿名導入( import _ <package> )的方式,隨包的 init() 方法完成服務注冊。只有 api.HTTPServer 服務是通過顯式導入 api 包並注冊。而 api.HTTPServer 服務的依賴服務,包括 datasources.CacheService、login.LoginService、hooks.HooksService、quota.QuotaService、backendplugin.Manager、rendering.RenderingService 是在 http_server.go 中顯式導入注冊。
優先級 High:SqlStore,HTTPServer
Service | 功能說明 | 依賴項 |
---|---|---|
SqlStore | 提供數據庫服務,包括用戶表、模板信息表等、注冊各種數據庫表增刪改查請求的處理函數,比如 Dashboard 表的請求處理函數。Init:初始化 xorm 引擎;完成表的創建或升級、遷移操作;向 Bus 注冊 sql Handler;檢查用戶表中是否至少有一個 admin。 | *setting.Cfg, bus.Bus, *localcache.CacheService |
OSSLicensingService | 檢查開源軟件證書授權 | *setting.Cfg, *hooks.HooksService |
UserAuthTokenService | *sqlstore.SqlStore, *serverlock.ServerLockService, *setting.Cfg | |
SearchService | 處理 /api/search/,/api/alerts/{alertid} 等API 請求 | bus.Bus |
CacheService | 從緩存中讀取 datasource 信息並返回。 | bus.Bus, *localcache.CacheService |
LoginService | 提供登錄后的服務。Init:注冊 user 更新處理函數到 Bus。 | bus.Bus, *quota.QuotaService |
HooksService | ||
QuotaService | models.UserTokenService | |
ServerLockService | *sqlstore.SqlStore |
BackgroundService | 說明 | 依賴項 |
---|---|---|
HTTPServer | 提供 API 服務,Web 框架基於 go-macaron。Init:初始化 HTTPServer 結構體,包括創建一個 Macaron 實例,注冊 API 路由以及對應處理函數 handler。Run:將注冊的 API 路徑依次應用到 Macaron 實例(通過調用 Macaron 的 Handle 和 Get 方法);根據協議(HTTP/HTTP2/HTTPS/SOCKET)啟動服務端。 | routing.RouteRegister, bus.Bus, rendering.Service, *setting.Cfg, *hooks.HooksService, *localcache.CacheService, datasources.CacheService, models.UserTokenService, *quota.QuotaService, *remotecache.RemoteCache, api.ProvisioningService, *login.LoginService, models.Licensing, backendplugin.Manager, *plugins.PluginManager |
InternalMetricsService | *setting.Cfg | |
RemoteCache | 向遠端存儲存放對象,支持的遠端存儲包括:redis,memcached 和 db。 | *sqlstore.SqlStore, *setting.Cfg |
TracingService | 提供 jaeger 的鏈路追蹤服務 | *setting.Cfg |
UsageStatsService | *setting.Cfg, bus.Bus, *sqlstore.SqlStore, models.Licensing | |
PluginManager | 加載前端插件:datasource(負載將 ds 的原始數據轉化成前端需要的 time series 或 table 格式),panel 和 app。Init:讀取 plugin.json 文件,初始化插件信息。Run:每 10分鍾 檢查插件版本,並更新。 | backendplugin.Manager |
AlertEngine | 告警處理服務。Init:初始化告警 Job 隊列。Run:更新任務隊列;處理告警任務。 | rendering.Service |
CleanUpService | 定時刪除 過期、tmp 文件 | *setting.Cfg, *serverlock.ServerLockService |
NotificationService | 通知處理服務 | bus.Bus, *setting.Cfg |
ProvisioningService | *setting.Cfg | |
RenderingService | 提供監控導出圖片服務。 | *setting.Cfg, *remotecache.RemoteCache |
Manager | 加載后端插件 。 |
Service:包名.服務結構體名
功能說明:介紹 Service(功能概述、init() 方法向 Bus 注冊了哪些事件處理函數等),以及 Init(),Run() 函數功能
依賴項:僅列出被 `inject:""` 標記的字段
數據庫表
Dashboard 表
插件系統
Frontend Plugin
Backend Plugin
CLI 工具
總結
小技巧:Navigate | Implementation(s) 快速找到實現結構體