blob: 918bcc2b02d9d3dce8f2efc863928e8b96a060dc [file] [log] [blame]
///*
// * Licensed to the Apache Software Foundation (ASF) under one or more
// * contributor license agreements. See the NOTICE file distributed with
// * this work for additional information regarding copyright ownership.
// * The ASF licenses this file to You under the Apache License, Version 2.0
// * (the "License"); you may not use this file except in compliance with
// * the License. You may obtain a copy of the License at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//
//package org.apache.dubbo.admin.web.mvc.governance;
//
//import com.alibaba.dubbo.common.URL;
//import com.alibaba.dubbo.common.utils.StringUtils;
//import org.apache.dubbo.admin.governance.service.ConsumerService;
//import org.apache.dubbo.admin.governance.service.OverrideService;
//import org.apache.dubbo.admin.governance.service.ProviderService;
//import org.apache.dubbo.admin.governance.service.RouteService;
//import org.apache.dubbo.admin.registry.common.domain.Consumer;
//import org.apache.dubbo.admin.registry.common.domain.Override;
//import org.apache.dubbo.admin.registry.common.domain.Provider;
//import org.apache.dubbo.admin.registry.common.domain.Route;
//import org.apache.dubbo.admin.registry.common.route.OverrideUtils;
//import org.apache.dubbo.admin.registry.common.route.RouteRule;
//import org.apache.dubbo.admin.web.mvc.BaseController;
//import org.apache.dubbo.admin.web.pulltool.Tool;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.*;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.*;
//
//
//@Controller
//public class ServiceDetailController extends BaseController{
//
// @Autowired
// private ProviderService providerService;
//
// @Autowired
// private ConsumerService consumerService;
//
// @Autowired
// private OverrideService overrideService;
//
// @Autowired
// private RouteService routeService;
//
// @RequestMapping("/serviceDetail")
// public String serviceDetail(@RequestParam(required = false) String app,
// @RequestParam(required = false) String service,
// HttpServletRequest request,
// HttpServletResponse response, Model model) {
// model.addAttribute("service", service);
// model.addAttribute("app", app);
// return "serviceDetail";
// }
//
//
// @RequestMapping(value = "/create", method = RequestMethod.POST) //post
// public boolean create(@RequestParam String service, @ModelAttribute Provider provider,
// HttpServletRequest request, HttpServletResponse response,
// Model model) {
// prepare(request, response, model,"create" ,"providers");
// boolean success = true;
// if (provider.getService() == null) {
// provider.setService(service);
// }
// if (provider.getParameters() == null) {
// String url = provider.getUrl();
// if (url != null) {
// int i = url.indexOf('?');
// if (i > 0) {
// provider.setUrl(url.substring(0, i));
// provider.setParameters(url.substring(i + 1));
// }
// }
// }
// provider.setDynamic(false); // Provider add through web page must be static
// providerService.create(provider);
// return true;
// }
//
// @RequestMapping(value = "/update", method = RequestMethod.POST) //post
// public boolean update(@ModelAttribute Provider newProvider, HttpServletRequest request, HttpServletResponse response, Model model) {
// boolean success = true;
// Long id = newProvider.getId();
// String parameters = newProvider.getParameters();
// Provider provider = providerService.findProvider(id);
// if (provider == null) {
// return false;
// }
// String service = provider.getService();
// Map<String, String> oldMap = StringUtils.parseQueryString(provider.getParameters());
// Map<String, String> newMap = StringUtils.parseQueryString(parameters);
// for (Map.Entry<String, String> entry : oldMap.entrySet()) {
// if (entry.getValue().equals(newMap.get(entry.getKey()))) {
// newMap.remove(entry.getKey());
// }
// }
// if (provider.isDynamic()) {
// String address = provider.getAddress();
// List<Override> overrides = overrideService.findByServiceAndAddress(provider.getService(), provider.getAddress());
// OverrideUtils.setProviderOverrides(provider, overrides);
// Override override = provider.getOverride();
// if (override != null) {
// if (newMap.size() > 0) {
// override.setParams(StringUtils.toQueryString(newMap));
// override.setEnabled(true);
// override.setOperator(operator);
// override.setOperatorAddress(operatorAddress);
// overrideService.updateOverride(override);
// } else {
// overrideService.deleteOverride(override.getId());
// }
// } else {
// override = new Override();
// override.setService(service);
// override.setAddress(address);
// override.setParams(StringUtils.toQueryString(newMap));
// override.setEnabled(true);
// override.setOperator(operator);
// override.setOperatorAddress(operatorAddress);
// overrideService.saveOverride(override);
// }
// } else {
// provider.setParameters(parameters);
// providerService.updateProvider(provider);
// }
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../providers");
// return true;
// }
//
// @RequestMapping("/delete")
// public String delete(@RequestParam("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) {
// //prepare(request, response, model, "delete", "providers");
// boolean success = true;
// for (Long id : ids) {
// Provider provider = providerService.findProvider(id);
// if (provider == null) {
// model.addAttribute("message", getMessage("NoSuchOperationData", id));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// } else if (provider.isDynamic()) {
// model.addAttribute("message", getMessage("CanNotDeleteDynamicData", id));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
// else if (!super.currentUser.hasServicePrivilege(provider.getService())) {
// model.addAttribute("message", getMessage("HaveNoServicePrivilege", provider.getService()));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
// }
// for (Long id : ids) {
// providerService.deleteStaticProvider(id);
// }
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
//
// @RequestMapping("/enable")
// public String enable(@RequestParam("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) {
// prepare(request, response, model, "enable", "providers");
// boolean success = true;
// Map<Long, Provider> id2Provider = new HashMap<Long, Provider>();
// for (Long id : ids) {
// Provider provider = providerService.findProvider(id);
// if (provider == null) {
// model.addAttribute("message", getMessage("NoSuchOperationData", id));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
// else if (!super.currentUser.hasServicePrivilege(provider.getService())) {
// model.addAttribute("message", getMessage("HaveNoServicePrivilege", provider.getService()));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
// id2Provider.put(id, provider);
// }
// for (Long id : ids) {
// providerService.enableProvider(id);
// }
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
//
//
// @RequestMapping("/disable")
// public String disable(@RequestParam("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) {
// //prepare(request, response, model, "disable", "providers");
// boolean success = true;
// for (Long id : ids) {
// Provider provider = providerService.findProvider(id);
// if (provider == null) {
// model.addAttribute("message", getMessage("NoSuchOperationData", id));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
// else if (!super.currentUser.hasServicePrivilege(provider.getService())) {
// success = false;
// model.addAttribute("message", getMessage("HaveNoServicePrivilege", provider.getService()));
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
// }
// for (Long id : ids) {
// providerService.disableProvider(id);
// }
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../providers");
// return "governance/screen/redirect";
// }
//
// @RequestMapping("/shield")
// public String shield(@RequestParam("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// return mock(ids, "force:return null", "shield", request, response, model);
// }
//
// @RequestMapping("/tolerant")
// public String tolerant(@RequestParam("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// return mock(ids, "fail:return null", "tolerant", request, response, model);
// }
//
// @RequestMapping("/recover")
// public String recover(@RequestParam("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// return mock(ids, "", "recover", request, response, model);
// }
//
// private String mock(Long[] ids, String mock, String methodName, HttpServletRequest request,
// HttpServletResponse response, Model model) throws Exception {
// prepare(request, response, model, methodName, "consumers");
// boolean success = true;
// if (ids == null || ids.length == 0) {
// model.addAttribute("message", getMessage("NoSuchOperationData"));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../consumers");
// return "governance/screen/redirect";
// }
// List<Consumer> consumers = new ArrayList<Consumer>();
// for (Long id : ids) {
// Consumer c = consumerService.findConsumer(id);
// if (c != null) {
// consumers.add(c);
// if (!super.currentUser.hasServicePrivilege(c.getService())) {
// model.addAttribute("message", getMessage("HaveNoServicePrivilege", c.getService()));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../consumers");
// return "governance/screen/redirect";
// }
// }
// }
// for (Consumer consumer : consumers) {
// String service = consumer.getService();
// String address = Tool.getIP(consumer.getAddress());
// List<Override> overrides = overrideService.findByServiceAndAddress(service, address);
// 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.setAddress(address);
// override.setParams("mock=" + URL.encode(mock));
// override.setEnabled(true);
// override.setOperator(operator);
// override.setOperatorAddress(operatorAddress);
// overrideService.saveOverride(override);
// }
// }
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../consumers");
// return "governance/screen/redirect";
// }
//
// @RequestMapping("/allshield")
// public String allshield(@RequestParam(required = false) String service, HttpServletRequest request,
// HttpServletResponse response, Model model) throws Exception {
// return allmock(service, "force:return null", "allshield",request, response, model);
// }
//
// @RequestMapping("/alltolerant")
// public String alltolerant(@RequestParam(required = false) String service, HttpServletRequest request,
// HttpServletResponse response, Model model) throws Exception {
// return allmock(service, "fail:return null", "alltolerant", request, response, model);
// }
//
// @RequestMapping("/allrecover")
// public String allrecover(@RequestParam(required = false) String service, HttpServletRequest request,
// HttpServletResponse response, Model model) throws Exception {
// return allmock(service, "", "allrecover", request, response, model);
// }
//
// private String allmock(String service, String mock, String methodName, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// String operatorAddress = request.getRemoteAddr();
// prepare(request, response, model, methodName,"consumers");
// boolean success = true;
// if (service == null || service.length() == 0) {
// model.addAttribute("message", getMessage("NoSuchOperationData"));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../consumers");
// return "governance/screen/redirect";
// }
// if (!super.currentUser.hasServicePrivilege(service)) {
// model.addAttribute("message", getMessage("HaveNoServicePrivilege", service));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../consumers");
// return "governance/screen/redirect";
// }
// List<Override> overrides = overrideService.findByService(service);
// Override allOverride = null;
// if (overrides != null && overrides.size() > 0) {
// for (Override override : overrides) {
// if (override.isDefault()) {
// allOverride = override;
// break;
// }
// }
// }
// if (allOverride != null) {
// Map<String, String> map = StringUtils.parseQueryString(allOverride.getParams());
// if (mock == null || mock.length() == 0) {
// map.remove("mock");
// } else {
// map.put("mock", URL.encode(mock));
// }
// if (map.size() > 0) {
// allOverride.setParams(StringUtils.toQueryString(map));
// allOverride.setEnabled(true);
// //allOverride.setOperator(operator);
// allOverride.setOperatorAddress(operatorAddress);
// overrideService.updateOverride(allOverride);
// } else {
// overrideService.deleteOverride(allOverride.getId());
// }
// } else if (mock != null && mock.length() > 0) {
// Override override = new Override();
// override.setService(service);
// override.setParams("mock=" + URL.encode(mock));
// override.setEnabled(true);
// override.setOperator(operator);
// override.setOperatorAddress(operatorAddress);
// overrideService.saveOverride(override);
// }
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../consumers");
// return "governance/screen/redirect";
// }
//
// @RequestMapping("/{ids}/allow")
// public String allow(@PathVariable("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// return access(request, response, ids, model, true, false, "allow");
// }
//
// @RequestMapping("/{ids}/forbid")
// public String forbid(@PathVariable("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// return access(request, response, ids, model, false, false, "forbid");
// }
//
// @RequestMapping("/{ids}/onlyallow")
// public String onlyallow(@PathVariable("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// return access(request, response, ids, model, true, true, "onlyallow");
// }
//
// @RequestMapping("/{ids}/onlyforbid")
// public String onlyforbid(@PathVariable("ids") Long[] ids, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// return access(request, response, ids, model, false, true, "onlyforbid");
// }
//
// private String access(HttpServletRequest request, HttpServletResponse response, Long[] ids,
// Model model, boolean allow, boolean only, String methodName) throws Exception {
// prepare(request, response, model, methodName, "consumers");
// boolean success = true;
// if (ids == null || ids.length == 0) {
// model.addAttribute("message", getMessage("NoSuchOperationData"));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../consumers");
// return "governance/screen/redirect";
// }
// List<Consumer> consumers = new ArrayList<Consumer>();
// for (Long id : ids) {
// Consumer c = consumerService.findConsumer(id);
// if (c != null) {
// consumers.add(c);
// if (!super.currentUser.hasServicePrivilege(c.getService())) {
// model.addAttribute("message", getMessage("HaveNoServicePrivilege", c.getService()));
// success = false;
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../consumers");
// return "governance/screen/redirect";
// }
// }
// }
// Map<String, Set<String>> serviceAddresses = new HashMap<String, Set<String>>();
// for (Consumer consumer : consumers) {
// String service = consumer.getService();
// String address = Tool.getIP(consumer.getAddress());
// Set<String> addresses = serviceAddresses.get(service);
// if (addresses == null) {
// addresses = new HashSet<String>();
// serviceAddresses.put(service, addresses);
// }
// addresses.add(address);
// }
// for (Map.Entry<String, Set<String>> entry : serviceAddresses.entrySet()) {
// String service = entry.getKey();
// boolean isFirst = false;
// List<Route> routes = routeService.findForceRouteByService(service);
// Route route = null;
// if (routes == null || routes.size() == 0) {
// isFirst = true;
// route = new Route();
// route.setService(service);
// route.setForce(true);
// route.setName(service + " blackwhitelist");
// route.setFilterRule("false");
// route.setEnabled(true);
// } else {
// route = routes.get(0);
// }
// Map<String, RouteRule.MatchPair> when = null;
// RouteRule.MatchPair matchPair = null;
// if (isFirst) {
// when = new HashMap<String, RouteRule.MatchPair>();
// matchPair = new RouteRule.MatchPair(new HashSet<String>(), new HashSet<String>());
// when.put("consumer.host", matchPair);
// } else {
// when = RouteRule.parseRule(route.getMatchRule());
// matchPair = when.get("consumer.host");
// }
// if (only) {
// matchPair.getUnmatches().clear();
// matchPair.getMatches().clear();
// if (allow) {
// matchPair.getUnmatches().addAll(entry.getValue());
// } else {
// matchPair.getMatches().addAll(entry.getValue());
// }
// } else {
// for (String consumerAddress : entry.getValue()) {
// if (matchPair.getUnmatches().size() > 0) { // whitelist take effect
// matchPair.getMatches().remove(consumerAddress); // remove data in blacklist
// if (allow) { // if allowed
// matchPair.getUnmatches().add(consumerAddress); // add to whitelist
// } else { // if not allowed
// matchPair.getUnmatches().remove(consumerAddress); // remove from whitelist
// }
// } else { // blacklist take effect
// if (allow) { // if allowed
// matchPair.getMatches().remove(consumerAddress); // remove from blacklist
// } else { // if not allowed
// matchPair.getMatches().add(consumerAddress); // add to blacklist
// }
// }
// }
// }
// StringBuilder sb = new StringBuilder();
// RouteRule.contidionToString(sb, when);
// route.setMatchRule(sb.toString());
// route.setUsername(operator);
// if (matchPair.getMatches().size() > 0 || matchPair.getUnmatches().size() > 0) {
// if (isFirst) {
// routeService.createRoute(route);
// } else {
// routeService.updateRoute(route);
// }
// } else if (!isFirst) {
// routeService.deleteRoute(route.getId());
// }
// }
// model.addAttribute("success", success);
// model.addAttribute("redirect", "../../consumers");
// return "governance/screen/redirect";
// }
//
// @RequestMapping("/metaData")
// public List<String> metaData(@RequestParam String app, @RequestParam String service) {
// return null;
// }
//
//}