58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package rbdfactory
|
|
|
|
import (
|
|
"fmt"
|
|
"rbd_exporter/logger"
|
|
"rbd_exporter/mytypes"
|
|
)
|
|
|
|
func PoolFactory(cephConn mytypes.CephConnector, poolName string) (mytypes.Pool, error) {
|
|
var rbdlist = []mytypes.IRBD{}
|
|
|
|
ioctx, err := cephConn.OpenIOContext(poolName)
|
|
if err != nil {
|
|
return mytypes.Pool{}, fmt.Errorf("couldn't set context for pool %s %w", poolName, err)
|
|
}
|
|
|
|
defer ioctx.Destroy()
|
|
|
|
imageNames, err := ioctx.GetImageNames()
|
|
if err != nil {
|
|
return mytypes.Pool{}, fmt.Errorf("couldn't get list of rbds %w", err)
|
|
}
|
|
for _, rbdName := range imageNames {
|
|
stat, err := RBDFacroty(ioctx, rbdName)
|
|
if err != nil {
|
|
logger.Logger.Errorf("coundn't get stat from disk %s %w", rbdName, err)
|
|
}
|
|
rbdlist = append(rbdlist, stat)
|
|
}
|
|
return mytypes.Pool{
|
|
Name: poolName,
|
|
HasRBD: len(imageNames) != 0,
|
|
RBDlist: rbdlist,
|
|
}, nil
|
|
}
|
|
|
|
func RBDFacroty(ioctx mytypes.IOContexter, rbdName string) (mytypes.RBD, error) {
|
|
image := ioctx.GetImage(rbdName)
|
|
err := image.Open()
|
|
if err != nil {
|
|
logger.Logger.Errorf("Couldn't open RBD %s",rbdName)
|
|
// logger.Logger.Errorf("Shit happened in RBDFactory")
|
|
}
|
|
|
|
defer image.Close()
|
|
|
|
|
|
info,err := image.Stat()
|
|
if err != nil {
|
|
return mytypes.RBD{},fmt.Errorf("couldn't get stats for image %s %w",rbdName,err)
|
|
}
|
|
|
|
return mytypes.RBD{
|
|
Name: rbdName,
|
|
ImageInfo: *info,
|
|
},nil
|
|
}
|