-
Notifications
You must be signed in to change notification settings - Fork 0
/
system.go
76 lines (60 loc) · 1.91 KB
/
system.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// SPDX-License-Identifier: MIT
package system
import (
"github.com/issue9/middleware/v6/health"
"github.com/issue9/orm/v5"
"github.com/issue9/web"
"github.com/issue9/cmfx/modules/admin"
"github.com/issue9/cmfx/pkg/setting"
"github.com/issue9/cmfx/pkg/setting/store"
)
const (
resGetInfo = "get-info"
resGetAPIs = "get-apis"
resGetServices = "get-services"
resGetSettings = "get-settings"
resGetLinkages = "get-linkages"
)
type System struct {
mod string
db *orm.DB
dbPrefix orm.Prefix
admin *admin.Admin
health *health.Health
linkages *rootLinkage
setting *setting.Setting
}
func New(mod string, s *web.Server, db *orm.DB, r *web.Router, admin *admin.Admin) (*System, error) {
m := &System{
mod: mod,
db: db,
dbPrefix: orm.Prefix(mod),
admin: admin,
health: health.New(health.NewCacheStore(s, mod+"_health")),
setting: setting.New(store.NewDB(mod, db)),
}
r.Use(m.health)
lg, err := newRootLinkage(m.db, m.dbPrefix)
if err != nil {
return nil, err
}
m.linkages = lg
err = m.admin.RegisterResources(mod, map[string]web.LocaleStringer{
resGetInfo: web.Phrase("view system info"),
resGetServices: web.Phrase("view services"),
resGetAPIs: web.Phrase("view apis"),
resGetSettings: web.Phrase("view settings"),
resGetLinkages: web.Phrase("view linkages"),
})
if err != nil {
return nil, err
}
r.Prefix(m.admin.URLPrefix(), web.MiddlewareFunc(m.admin.AuthFilter)).
Get("/system/info", m.admin.RBACFilter(mod, resGetInfo, m.adminGetInfo)).
Get("/system/services", m.admin.RBACFilter(mod, resGetServices, m.adminGetServices)).
Get("/system/apis", m.admin.RBACFilter(mod, resGetAPIs, m.adminGetAPIs)).
Get("/system/settings", m.admin.RBACFilter(mod, resGetSettings, m.adminGetSettings)).
Get("/system/linkages/{id}", m.admin.RBACFilter(mod, resGetLinkages, m.adminGetLinkages))
r.Get("/system/problems", m.commonGetProblems)
return m, nil
}