123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package service
- import (
- "context"
- "go-common/app/admin/main/bfs/model"
- "go-common/library/ecode"
- )
- // Total .
- func (s *Service) Total(c context.Context, arg *model.ArgCluster) (resp *model.RespTotal, err error) {
- volumes, err := s.Volumes(c, arg)
- if err != nil {
- return
- }
- num := int64(len(volumes.Volumes))
- var fs int64
- for _, volume := range volumes.Volumes {
- fs += int64(volume.FreeSpace)
- }
- fs = (fs * 8) / 1024 / 1024 / 1024 // GB
- // groups
- groups, err := s.d.Groups(arg.Cluster)
- if err != nil {
- return
- }
- // stores
- racks, err := s.d.Racks(arg.Cluster)
- if err != nil {
- return
- }
- var stores int64
- for _, rack := range racks {
- stores += int64(len(rack.Stores))
- }
- resp = &model.RespTotal{
- Space: 32 * num,
- FreeSpace: fs,
- Groups: int64(len(groups)),
- Stores: stores,
- Volumes: num,
- }
- return
- }
- // Racks .
- func (s *Service) Racks(c context.Context, arg *model.ArgCluster) (resp *model.RespRack, err error) {
- racks, err := s.d.Racks(arg.Cluster)
- if err != nil {
- return
- }
- for _, rack := range racks {
- for _, store := range rack.Stores {
- store.ParseStates()
- }
- }
- resp = &model.RespRack{Racks: racks}
- return
- }
- // Groups .
- func (s *Service) Groups(c context.Context, arg *model.ArgCluster) (resp *model.RespGroup, err error) {
- groups, err := s.d.Groups(arg.Cluster)
- if err != nil {
- return
- }
- racks, err := s.Racks(c, arg)
- if err != nil {
- return
- }
- volumes, err := s.Volumes(c, arg)
- if err != nil {
- return
- }
- for _, group := range groups {
- group.StoreDatas = make(map[string]*model.Store)
- for _, rack := range racks.Racks {
- for sname, store := range rack.Stores {
- for _, name := range group.Stores {
- if sname == name {
- group.StoreDatas[name] = store
- }
- }
- }
- }
- for _, store := range group.StoreDatas {
- num := int64(len(store.Volumes))
- var fs int64
- for _, volume := range store.Volumes {
- fs += int64(volumes.Volumes[volume].FreeSpace)
- }
- fs = (fs * 8) / 1024 / 1024 / 1024 // GB
- group.Total.Space = 32 * num
- group.Total.FreeSpace = fs
- group.Total.Volumes = num
- break
- }
- }
- resp = &model.RespGroup{Groups: groups}
- return
- }
- // Volumes .
- func (s *Service) Volumes(c context.Context, arg *model.ArgCluster) (resp *model.RespVolume, err error) {
- volumes, err := s.d.Volumes(arg.Cluster)
- if err != nil {
- return
- }
- resp = &model.RespVolume{Volumes: volumes}
- return
- }
- // AddVolume add volume.
- func (s *Service) AddVolume(c context.Context, arg *model.ArgAddVolume) (err error) {
- return s.d.AddVolume(c, arg.Group, arg.Num)
- }
- // AddFreeVolume add free volume.
- func (s *Service) AddFreeVolume(c context.Context, arg *model.ArgAddFreeVolume) (err error) {
- return s.d.AddFreeVolume(c, arg.Group, arg.Dir, arg.Num)
- }
- // Compact compact store.
- func (s *Service) Compact(c context.Context, arg *model.ArgCompact) (err error) {
- return s.d.Compact(c, arg.Group, arg.Vid)
- }
- // SetGroupStatus set group status(read,write,sync,health).
- func (s *Service) SetGroupStatus(c context.Context, arg *model.ArgGroupStatus) (err error) {
- if arg.Status != "read" && arg.Status != "write" && arg.Status != "sync" && arg.Status != "health" {
- err = ecode.RequestErr
- return
- }
- return s.d.SetGroupStatus(c, arg.Group, arg.Status)
- }
|