code: func NewCatShardInfo(rawCat string) (catshard *CatShardInfo, err error) {
  
  	split := strings.Fields(rawCat)
  	if len(split) < 4 {
  		return nil, ErrInvalidShardLine
  	}
  	catshard = &CatShardInfo{}
  	catshard.IndexName = split[0]
  	catshard.Shard, err = strconv.Atoi(split[1])
  	if err != nil {
  		catshard.Shard = -1
  	}
  	catshard.Primary = split[2]
  	catshard.State = split[3]
  	if len(split) == 4 {
  		return catshard, nil
  	}
  
  	catshard.Docs, err = strconv.ParseInt(split[4], 10, 64)
  	if err != nil {
  		catshard.Docs = 0
  	}
  	if len(split) == 5 {
  		return catshard, nil
  	}
  	catshard.Store, err = strconv.ParseInt(split[5], 10, 64)
  	if err != nil {
  		catshard.Store = 0
  	}
  	if len(split) == 6 {
  		return catshard, nil
  	}
  	catshard.NodeIP = split[6]
  	if len(split) == 7 {
  		return catshard, nil
  	}
  	catshard.NodeName = split[7]
  	if len(split) > 8 {
  	loop:
  		for i, moreName := range split {
  			if i > 7 {
  				if moreName == "->" {
  					break loop
  				}
  				catshard.NodeName += " "
  				catshard.NodeName += moreName
  			}
  		}
  	}
  
  	return catshard, nil
  }
docs: // Create a CatShard from a line of the raw output of a _cat/shards