-
Notifications
You must be signed in to change notification settings - Fork 3
/
apicfg-hmcserver.go
191 lines (171 loc) · 5.84 KB
/
apicfg-hmcserver.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
package webui
import (
"time"
"github.com/adejoux/pSeriesCollector/pkg/agent"
"github.com/adejoux/pSeriesCollector/pkg/agent/devices/hmc"
"github.com/adejoux/pSeriesCollector/pkg/config"
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
)
// NewAPICfgHMCServer HMCServer API REST creator
func NewAPICfgHMCServer(m *macaron.Macaron) error {
bind := binding.Bind
m.Group("/api/cfg/hmcserver", func() {
m.Get("/", reqSignedIn, GetHMCServerServer)
m.Post("/", reqSignedIn, bind(config.HMCCfg{}), AddHMCServerServer)
m.Put("/:id", reqSignedIn, bind(config.HMCCfg{}), UpdateHMCServerServer)
m.Delete("/:id", reqSignedIn, DeleteHMCServerServer)
m.Get("/:id", reqSignedIn, GetHMCServerServerByID)
m.Get("/checkondel/:id", reqSignedIn, GetHMCServerAffectOnDel)
m.Post("/ping/", reqSignedIn, bind(config.HMCCfg{}), PingHMCServer)
m.Post("/import", reqSignedIn, bind(config.HMCCfg{}), ImportHMCDevices)
})
return nil
}
// GetHMCServerServer Return Server Array
func GetHMCServerServer(ctx *Context) {
cfgarray, err := agent.MainConfig.Database.GetHMCCfgArray("")
if err != nil {
ctx.JSON(404, err.Error())
log.Errorf("Error on get HMCServer db :%+s", err)
return
}
ctx.JSON(200, &cfgarray)
log.Debugf("Getting DEVICEs %+v", &cfgarray)
}
// AddHMCServerServer Insert new measurement groups to de internal BBDD --pending--
func AddHMCServerServer(ctx *Context, dev config.HMCCfg) {
log.Printf("ADDING HMCServer Backend %+v", dev)
affected, err := agent.MainConfig.Database.AddHMCCfg(dev)
if err != nil {
log.Warningf("Error on insert new Backend %s , affected : %+v , error: %s", dev.ID, affected, err)
ctx.JSON(404, err.Error())
} else {
//TODO: review if needed return data or affected
ctx.JSON(200, &dev)
}
}
// UpdateHMCServerServer --pending--
func UpdateHMCServerServer(ctx *Context, dev config.HMCCfg) {
id := ctx.Params(":id")
log.Debugf("Tying to update: %+v", dev)
affected, err := agent.MainConfig.Database.UpdateHMCCfg(id, dev)
if err != nil {
log.Warningf("Error on update HMCServer db %s , affected : %+v , error: %s", dev.ID, affected, err)
} else {
//TODO: review if needed return device data
ctx.JSON(200, &dev)
}
}
//DeleteHMCServerServer --pending--
func DeleteHMCServerServer(ctx *Context) {
id := ctx.Params(":id")
log.Debugf("Tying to delete: %+v", id)
affected, err := agent.MainConfig.Database.DelHMCCfg(id)
if err != nil {
log.Warningf("Error on delete influx db %s , affected : %+v , error: %s", id, affected, err)
ctx.JSON(404, err.Error())
} else {
ctx.JSON(200, "deleted")
}
}
//GetHMCServerServerByID --pending--
func GetHMCServerServerByID(ctx *Context) {
id := ctx.Params(":id")
dev, err := agent.MainConfig.Database.GetHMCCfgByID(id)
if err != nil {
log.Warningf("Error on get HMCServer db data for device %s , error: %s", id, err)
ctx.JSON(404, err.Error())
} else {
ctx.JSON(200, &dev)
}
}
//GetHMCServerAffectOnDel --pending--
func GetHMCServerAffectOnDel(ctx *Context) {
id := ctx.Params(":id")
obarray, err := agent.MainConfig.Database.GetHMCCfgAffectOnDel(id)
if err != nil {
log.Warningf("Error on get object array for influx device %s , error: %s", id, err)
ctx.JSON(404, err.Error())
} else {
ctx.JSON(200, &obarray)
}
}
//PingHMCServer Return ping result
func PingHMCServer(ctx *Context, cfg config.HMCCfg) {
log.Infof("trying to ping influx server %s : %+v", cfg.ID, cfg)
_, elapsed, message, err := hmc.Ping(&cfg, log, false, "")
type result struct {
Result string
Elapsed time.Duration
Message string
}
if err != nil {
log.Debugf("ERROR on ping HMCServerDB Server : %s", err)
res := result{Result: "NOOK", Elapsed: elapsed, Message: err.Error()}
ctx.JSON(400, res)
} else {
log.Debugf("OK on ping HMCServerDB Server %+v, %+v", elapsed, message)
res := result{Result: "OK", Elapsed: elapsed, Message: message}
ctx.JSON(200, res)
}
}
// ImportHMCDevices new snmpdevice to de internal BBDD --pending--
func ImportHMCDevices(ctx *Context, dev config.HMCCfg) {
log.Warningf("Importing HMC devices for HMC: %s", dev.ID)
ses, _, _, err := hmc.Ping(&dev, log, false, "")
if err != nil {
log.Errorf("Error on Ping HMC Server %s: Err: %s", dev.ID, err)
ctx.JSON(404, err.Error())
return
}
devices, err := hmc.ScanHMC(ses)
if err != nil {
log.Errorf("Error on Scan HMC Server %s: Err: %s", dev.ID, err)
ctx.JSON(404, err.Error())
return
}
for smid, sm := range devices {
d := &config.DeviceCfg{
ID: sm.UUID,
Name: sm.SystemName,
SerialNumber: "xxxxx",
OSVersion: "osversion",
Type: "Managed",
Location: dev.ID,
EnableHMCStats: true,
//Nmon properties doesn't apply here
}
log.Infof("Importing Managed System: %s | %s", smid, sm.SystemName)
agent.MainConfig.Database.AddOrUpdateDeviceCfg(d)
for lparid, lpar := range sm.Lpars {
log.Infof("Importing Lpar System: %s | %s", lparid, lpar.PartitionName)
//Pending add some kind of name resolution to check NMon connectivity.
// net.Dial
d := &config.DeviceCfg{
ID: lpar.PartitionUUID,
Name: lpar.PartitionName,
SerialNumber: lpar.LogicalSerialNumber,
OSVersion: lpar.OperatingSystemVersion,
Type: lpar.PartitionType,
Location: sm.SystemName,
}
log.Debugf("APICFG_HMCSERVER: ADD OR UPDATE LPAR %#+v", d)
agent.MainConfig.Database.AddOrUpdateDeviceCfg(d)
}
for lparid, lpar := range sm.Vios {
log.Infof("Importing Vios System: %s | %s", lparid, lpar.PartitionName)
d := &config.DeviceCfg{
ID: lpar.PartitionUUID,
Name: lpar.PartitionName,
SerialNumber: lpar.LogicalSerialNumber,
OSVersion: lpar.OperatingSystemVersion,
Type: lpar.PartitionType,
Location: sm.SystemName,
}
log.Debugf("APICFG_HMCSERVER: ADD OR UPDATE VIOS %#+v", d)
agent.MainConfig.Database.AddOrUpdateDeviceCfg(d)
}
}
ctx.JSON(200, &devices)
}