forked from Cepave/open-falcon-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
/
host_group.go
101 lines (91 loc) · 2.51 KB
/
host_group.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package dashboard
import (
"errors"
"fmt"
"github.com/Cepave/open-falcon-backend/modules/fe/g"
"github.com/astaxie/beego/orm"
"regexp"
"strings"
)
func QueryHostGroupByNameRegx(queryStr string, limit int) (hostgroup []HostGroup, err error) {
config := g.Config()
if limit == 0 || limit > config.GraphDB.LimitHostGroup {
limit = config.GraphDB.LimitHostGroup
}
hostgroup, err = getHostGroupRegex(queryStr, limit)
return
}
func GetHostsByHostGroupName(hostGroupName []string) (hosts []Hosts, err error) {
if len(hostGroupName) == 0 {
err = errors.New("query string is empty")
return
}
host_tmp := map[string]Hosts{}
for _, v := range hostGroupName {
v = strings.Replace(v, "\"", "", -1)
hostgroupid, _ := getHostGroupIdByName(v)
hostids, _ := getHostIdsByHostGroupId(hostgroupid)
ho, _ := getHostsByHostIds(hostids)
for _, v2 := range ho {
if _, ok := host_tmp[v2.Hostname]; ok != true {
host_tmp[v2.Hostname] = v2
}
}
}
for _, v := range host_tmp {
hosts = append(hosts, v)
}
return
}
func getOrmObj() (q orm.Ormer) {
q = orm.NewOrm()
q.Using("falcon_portal")
return
}
func getHostGroupRegex(queryStr string, limit int) (hostgroup []HostGroup, err error) {
q := getOrmObj()
_, err = q.Raw("select * from `grp` where grp_name regexp ? limit ?", queryStr, limit).QueryRows(&hostgroup)
return
}
func getHostGroupIdByName(hostgroup string) (id int64, err error) {
q := getOrmObj()
var hostgtmp []HostGroup
_, err = q.Raw("select * from `grp` where grp_name = ?", hostgroup).QueryRows(&hostgtmp)
if len(hostgtmp) != 0 {
id = hostgtmp[0].Id
}
return
}
func getHostIdsByHostGroupId(hostgroupid int64) (host_ids []int64, err error) {
q := getOrmObj()
var mapping []HostGroupMapping
_, err = q.Raw("select * from `grp_host` where grp_id = ?", hostgroupid).QueryRows(&mapping)
if len(mapping) != 0 {
for _, v := range mapping {
host_ids = append(host_ids, v.HostId)
}
}
return
}
func getHostsByHostIds(hostId []int64) (hosts []Hosts, err error) {
if len(hostId) == 0 {
err = errors.New("host is nil")
return
}
q := getOrmObj()
hostIdQueryTmp := ""
for _, v := range hostId {
hostIdQueryTmp += fmt.Sprintf("%d,", v)
}
pattn, _ := regexp.Compile("\\s*,\\s*$")
queryperfix := fmt.Sprintf("select * from host where id IN(%s)", pattn.ReplaceAllString(hostIdQueryTmp, ""))
_, err = q.Raw(queryperfix).QueryRows(&hosts)
return
}
func CountNumOfHostGroup() (c int, err error) {
var h []HostGroup
q := getOrmObj()
_, err = q.Raw("select * from `grp`").QueryRows(&h)
c = len(h)
return
}