123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- package service
- import (
- "context"
- "go-common/app/admin/ep/merlin/model"
- "go-common/library/ecode"
- )
- const (
- _startsWith = "startswith"
- _merlinHostnameRegex = ".*-[0-9]-0"
- )
- // UserTreeAsOption get user tree as option.
- func (s *Service) UserTreeAsOption(c context.Context, sessionID string) (firstRetMap []map[string]interface{}, err error) {
- var treeMap *model.UserTree
- if treeMap, err = s.dao.UserTree(c, sessionID); err != nil {
- err = ecode.MerlinGetUserTreeFailed
- return
- }
- if treeMap.Bilibili == nil {
- return
- }
- firstLevelMapTmp := treeMap.Bilibili
- if firstLevelMapTmp["children"] == nil {
- return
- }
- firstLevelMap := firstLevelMapTmp["children"].(map[string]interface{})
- for firstLevelKey, firstLevelChildren := range firstLevelMap {
- secondLevelMapTmp := firstLevelChildren.(map[string]interface{})
- if secondLevelMapTmp["children"] == nil {
- continue
- }
- secondLevelMap := secondLevelMapTmp["children"].(map[string]interface{})
- var secondRetMap []map[string]interface{}
- for secondLevelKey, secondLevelChildren := range secondLevelMap {
- thirdLevelMapTmp := secondLevelChildren.(map[string]interface{})
- if thirdLevelMapTmp["children"] == nil {
- continue
- }
- thirdLevelMap := thirdLevelMapTmp["children"].(map[string]interface{})
- var thirdRetMap []map[string]interface{}
- for thirdLevelKey, thirdLevelChildren := range thirdLevelMap {
- if thirdLevelKey != "" && thirdLevelChildren != nil {
- childID := int64(thirdLevelChildren.(map[string]interface{})["id"].(float64))
- thirdTmp := make(map[string]interface{})
- thirdTmp["label"] = thirdLevelKey
- v := new(struct {
- ID int64 `json:"id"`
- Name string `json:"name"`
- })
- v.ID = childID
- v.Name = thirdLevelKey
- thirdTmp["value"] = v
- thirdRetMap = append(thirdRetMap, thirdTmp)
- }
- }
- if secondLevelKey != "" {
- secondTmp := make(map[string]interface{})
- secondTmp["value"] = secondLevelKey
- secondTmp["label"] = secondLevelKey
- secondTmp["children"] = thirdRetMap
- secondRetMap = append(secondRetMap, secondTmp)
- }
- }
- if firstLevelKey != "" {
- firstTmp := make(map[string]interface{})
- firstTmp["value"] = firstLevelKey
- firstTmp["label"] = firstLevelKey
- firstTmp["children"] = secondRetMap
- firstRetMap = append(firstRetMap, firstTmp)
- }
- }
- return
- }
- // VerifyTreeContainerNode verify tree containers.
- func (s *Service) VerifyTreeContainerNode(c context.Context, sessionID string, tnr *model.TreeNode) (err error) {
- var (
- sonMap map[string]interface{}
- ok bool
- )
- if sonMap, err = s.dao.TreeSon(c, sessionID, tnr.TreePath()); err != nil {
- err = ecode.MerlinGetUserTreeFailed
- return
- }
- if sonMap, ok = sonMap["dev"].(map[string]interface{}); !ok {
- err = ecode.MerlinLoseTreeContainerNodeErr
- return
- }
- if sonMap, ok = sonMap["children"].(map[string]interface{}); !ok {
- err = ecode.MerlinLoseTreeContainerNodeErr
- return
- }
- if sonMap["containers"] == nil {
- err = ecode.MerlinLoseTreeContainerNodeErr
- }
- return
- }
- // TreeRoleAsAuditor tree role as auditor.
- func (s *Service) TreeRoleAsAuditor(c context.Context, sessionID, firstNode string) (auditors []string, err error) {
- var treeRoles []*model.TreeRole
- if treeRoles, err = s.dao.TreeRoles(c, sessionID, firstNode); err != nil {
- return
- }
- for _, treeRole := range treeRoles {
- if treeRole.Role == model.TreeRoleAdmin {
- auditors = append(auditors, treeRole.UserName)
- }
- }
- return
- }
- // TreeMachineIsExist tree machine is exist.
- func (s *Service) TreeMachineIsExist(c context.Context, podName string, tn *model.TreeNode) (b bool, err error) {
- var (
- pathAndPodNameMap = make(map[string][]string)
- result map[string]bool
- )
- pathAndPodNameMap[tn.TreePath()] = []string{podName}
- if result, err = s.TreeMachinesIsExist(c, pathAndPodNameMap); err != nil {
- return
- }
- b = result[podName]
- return
- }
- // TreeMachinesIsExist tree machines is exist.
- func (s *Service) TreeMachinesIsExist(c context.Context, pathAndMachinesMap map[string][]string) (machinesIsExist map[string]bool, err error) {
- var (
- treeAppInstances map[string][]*model.TreeAppInstance
- paths []string
- )
- machinesIsExist = make(map[string]bool)
- for path, machineNames := range pathAndMachinesMap {
- paths = append(paths, path)
- for _, machineName := range machineNames {
- machinesIsExist[machineName] = false
- }
- }
- if treeAppInstances, err = s.dao.TreeAppInstance(c, paths); err != nil {
- return
- }
- for _, machinesInTree := range treeAppInstances {
- for _, machineInTree := range machinesInTree {
- if _, ok := machinesIsExist[machineInTree.HostName]; ok {
- machinesIsExist[machineInTree.HostName] = true
- }
- }
- }
- return
- }
- // QueryTreeInstanceForMerlin query TreeInstance for merlin.
- func (s *Service) QueryTreeInstanceForMerlin(c context.Context, sessionID string, tn *model.TreeNode) (res map[string]*model.TreeInstance, err error) {
- tir := &model.TreeInstanceRequest{
- HostnameRegex: _merlinHostnameRegex,
- }
- if path := tn.TreePathWithoutEmptyField(); path != "" {
- tir.Path = path
- tir.PathFuzzy = _startsWith
- }
- res, err = s.dao.QueryTreeInstances(c, sessionID, tir)
- return
- }
|