Package com.alibaba.dubbo.governance.web.governance.module.screen

Source Code of com.alibaba.dubbo.governance.web.governance.module.screen.Services

/*
* Copyright 2011 Alibaba.com All right reserved. This software is the
* confidential and proprietary information of Alibaba.com ("Confidential
* Information"). You shall not disclose such Confidential Information and shall
* use it only in accordance with the terms of the license agreement you entered
* into with Alibaba.com.
*/
package com.alibaba.dubbo.governance.web.governance.module.screen;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.dubbo.governance.service.ConsumerService;
import com.alibaba.dubbo.governance.service.OverrideService;
import com.alibaba.dubbo.governance.service.ProviderService;
import com.alibaba.dubbo.governance.web.common.module.screen.Restful;
import com.alibaba.dubbo.registry.common.domain.Override;
import com.alibaba.dubbo.registry.common.route.OverrideUtils;
import com.alibaba.dubbo.registry.common.util.Tool;

/**
* Providers. URI: /services/$service/providers /addresses/$address/services /application/$application/services
*
* @author ding.lid
*/
public class Services extends Restful {

    @Autowired
    private ProviderService providerService;
   
    @Autowired
    private ConsumerService consumerService;
   
    @Autowired
    private OverrideService overrideService;
   
    public void index(Map<String, Object> context) {
        String application = (String) context.get("application");
        String address = (String) context.get("address");
       
        if (context.get("service") == null
                && context.get("application") == null
                && context.get("address") == null) {
            context.put("service", "*");
        }
       
        List<String> providerServices = null;
        List<String> consumerServices = null;
        List<Override> overrides = null;
        if (application != null && application.length() > 0) {
            providerServices = providerService.findServicesByApplication(application);
            consumerServices = consumerService.findServicesByApplication(application);
            overrides = overrideService.findByApplication(application);
        } else if (address != null && address.length() > 0) {
            providerServices = providerService.findServicesByAddress(address);
            consumerServices = consumerService.findServicesByAddress(address);
            overrides = overrideService.findByAddress(Tool.getIP(address));
        } else {
            providerServices = providerService.findServices();
            consumerServices = consumerService.findServices();
            overrides = overrideService.findAll();
        }
       
        Set<String> services = new TreeSet<String>();
        if (providerServices != null) {
            services.addAll(providerServices);
        }
        if (consumerServices != null) {
            services.addAll(consumerServices);
        }
       
        Map<String, List<Override>> service2Overrides = new HashMap<String, List<Override>>();
        if (overrides != null && overrides.size() > 0
                && services != null && services.size() > 0) {
            for (String s : services) {
                if (overrides != null && overrides.size() > 0) {
                    for (Override override : overrides) {
                      List<Override> serOverrides = new ArrayList<Override>();
                      if (override.isMatch(s, address, application)) {
                          serOverrides.add(override);
                        }
                        Collections.sort(serOverrides, OverrideUtils.OVERRIDE_COMPARATOR);
                        service2Overrides.put(s, serOverrides);
                    }
                }
            }
        }
       
        context.put("providerServices", providerServices);
        context.put("consumerServices", consumerServices);
        context.put("services", services);
        context.put("overrides", service2Overrides);
       
        String keyword = (String) context.get("keyword");
        if (StringUtils.isNotEmpty(keyword) && ! "*".equals(keyword)) {
            keyword = keyword.toLowerCase();
            Set<String> newList = new HashSet<String>();
            Set<String> newProviders = new HashSet<String>();
            Set<String> newConsumers = new HashSet<String>();
           
            for (String o : services) {
                if (o.toLowerCase().toLowerCase().indexOf(keyword) != -1) {
                    newList.add(o);
                }
            }
            for (String o : providerServices) {
                if (o.toLowerCase().indexOf(keyword) != -1) {
                    newProviders.add(o);
                }
            }
            for (String o : consumerServices) {
                if (o.toLowerCase().indexOf(keyword) != -1) {
                    newConsumers.add(o);
                }
            }
            context.put("services", newList);
            context.put("providerServices", newProviders);
            context.put("consumerServices", newConsumers);
        }
    }

    public boolean shield(Map<String, Object> context) throws Exception {
      return mock(context, "force:return null");
    }

    public boolean tolerant(Map<String, Object> context) throws Exception {
      return mock(context, "fail:return null");
    }

    public boolean recover(Map<String, Object> context) throws Exception {
      return mock(context, "");
    }
   
    private boolean mock(Map<String, Object> context, String mock) throws Exception {
      String services = (String) context.get("service");
      String application = (String) context.get("application");
        if (services == null || services.length() == 0
            || application == null || application.length() == 0){
            context.put("message", getMessage("NoSuchOperationData"));
            return false;
        }
        for (String service : SPACE_SPLIT_PATTERN.split(services)) {
          if (! super.currentUser.hasServicePrivilege(service)) {
              context.put("message", getMessage("HaveNoServicePrivilege", service));
              return false;
          }
        }
        for (String service : SPACE_SPLIT_PATTERN.split(services)) {
          List<Override> overrides = overrideService.findByServiceAndApplication(service, application);
          if (overrides != null && overrides.size() > 0) {
              for (Override override: overrides) {
                  Map<String, String> map = StringUtils.parseQueryString(override.getParams());
                  if (mock == null || mock.length() == 0) {
                      map.remove("mock");
                  } else {
                      map.put("mock", URL.encode(mock));
                  }
                  if (map.size() > 0) {
                    override.setParams(StringUtils.toQueryString(map));
                      override.setEnabled(true);
                      override.setOperator(operator);
                      override.setOperatorAddress(operatorAddress);
                      overrideService.updateOverride(override);
                  } else {
                    overrideService.deleteOverride(override.getId());
                  }
              }
          } else if (mock != null && mock.length() > 0) {
              Override override = new Override();
              override.setService(service);
              override.setApplication(application);
              override.setParams("mock=" + URL.encode(mock));
              override.setEnabled(true);
              override.setOperator(operator);
              override.setOperatorAddress(operatorAddress);
              overrideService.saveOverride(override);
          }
        }
        return true;
    }

}
TOP

Related Classes of com.alibaba.dubbo.governance.web.governance.module.screen.Services

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.