This is an automated email from the ASF dual-hosted git repository.
min pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-ops.git
The following commit(s) were added to refs/heads/develop by this push:
new c48f1da LoadBalance page
c48f1da is described below
commit c48f1da9cea63f8a4a1240dd3eea3400ba8b4959
Author: nzomkxia <[email protected]>
AuthorDate: Thu Sep 20 13:40:42 2018 +0800
LoadBalance page
---
.../admin/controller/LoadBalanceController.java | 115 +++++++
.../web/mvc/governance/LoadbalancesController.java | 378 ++++++++++-----------
.../src/components/LoadBalance.vue | 320 ++++++++++++++++-
3 files changed, 619 insertions(+), 194 deletions(-)
diff --git
a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
new file mode 100644
index 0000000..2993c85
--- /dev/null
+++
b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
@@ -0,0 +1,115 @@
+/*
+ * 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
+ * he 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.controller;
+
+import org.apache.dubbo.admin.governance.service.OverrideService;
+import org.apache.dubbo.admin.registry.common.domain.LoadBalance;
+import org.apache.dubbo.admin.registry.common.domain.Override;
+import org.apache.dubbo.admin.registry.common.util.OverrideUtils;
+import org.apache.dubbo.admin.util.YamlUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/balancing")
+public class LoadBalanceController {
+
+ @Autowired
+ private OverrideService overrideService;
+
+ @RequestMapping("/create")
+ public boolean createLoadbalance(@RequestParam String serviceName,
@RequestParam String rule) {
+ if (serviceName == null || serviceName.length() == 0) {
+ //TODO throw exception
+ }
+
+ Map<String, Object> result = YamlUtil.loadString(rule);
+ LoadBalance loadBalance = generateLoadbalance(result);
+ loadBalance.setService(serviceName);
+
overrideService.saveOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
+ return true;
+ }
+
+ @RequestMapping("/update")
+ public boolean updateLoadbalance(@RequestParam Long id, @RequestParam
String rule) {
+ Override override = overrideService.findById(id);
+ if (override == null) {
+ //TODO throw exception
+ }
+ LoadBalance old = OverrideUtils.overrideToLoadBalance(override);
+ Map<String, Object> result = YamlUtil.loadString(rule);
+ LoadBalance loadBalance = generateLoadbalance(result);
+ loadBalance.setService(old.getService());
+ loadBalance.setId(old.getId());
+
overrideService.updateOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
+ return true;
+ }
+
+ @RequestMapping("/all")
+ public List<LoadBalance> allLoadbalances(@RequestParam String serviceName)
{
+ if (serviceName == null || serviceName.length() == 0) {
+ //TODO throw Exception
+ }
+ List<Override> overrides = overrideService.findByService(serviceName);
+ List<LoadBalance> loadBalances = new ArrayList<>();
+ if (overrides != null) {
+ for (Override override : overrides) {
+ LoadBalance l = OverrideUtils.overrideToLoadBalance(override);
+ if (l != null) {
+ loadBalances.add(l);
+ }
+ }
+ }
+ return loadBalances;
+ }
+
+ @RequestMapping("/detail")
+ public LoadBalance detail(@RequestParam Long id) {
+ Override override = overrideService.findById(id);
+ if (override == null) {
+ //TODO throw exception
+ }
+ return OverrideUtils.overrideToLoadBalance(override);
+ }
+
+ @RequestMapping("/delete")
+ public boolean delete(@RequestParam Long id) {
+ overrideService.deleteOverride(id);
+ return true;
+ }
+
+ private LoadBalance generateLoadbalance(Map<String, Object> yaml) {
+ LoadBalance loadBalance = new LoadBalance();
+ String methodName;
+ if (yaml.get("methodName").equals(0)) {
+ methodName = "*";
+ } else {
+ methodName = (String)yaml.get("methodName");
+ }
+ String strategy = (String)yaml.get("strategy");
+ loadBalance.setMethod(methodName);
+ loadBalance.setStrategy(strategy);
+ return loadBalance;
+ }
+}
diff --git
a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java
b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java
index 96771c8..fe2bda8 100644
---
a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java
+++
b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java
@@ -1,189 +1,189 @@
-/*
- * 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.utils.CollectionUtils;
-import org.apache.dubbo.admin.governance.service.OverrideService;
-import org.apache.dubbo.admin.governance.service.ProviderService;
-import org.apache.dubbo.admin.registry.common.domain.LoadBalance;
-import org.apache.dubbo.admin.registry.common.domain.Provider;
-import org.apache.dubbo.admin.registry.common.util.OverrideUtils;
-import org.apache.dubbo.admin.web.mvc.BaseController;
-import org.apache.dubbo.admin.web.pulltool.Tool;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.validation.support.BindingAwareModelMap;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * ProvidersController.
- * URI: /services/$service/loadbalances
- *
- */
-@Controller
-@RequestMapping("/governance/loadbalances")
-public class LoadbalancesController extends BaseController {
-
- @Autowired
- private OverrideService overrideService;
-
- @Autowired
- private ProviderService providerService;
-
- @RequestMapping("")
- public String index(HttpServletRequest request, HttpServletResponse
response, Model model) {
- prepare(request, response, model, "index", "loadbalances");
- BindingAwareModelMap newModel = (BindingAwareModelMap)model;
- String service = (String)newModel.get("service");
- service = StringUtils.trimToNull(service);
-
- List<LoadBalance> loadbalances;
- if (service != null && service.length() > 0) {
- loadbalances =
OverrideUtils.overridesToLoadBalances(overrideService.findByService(service));
- } else {
- loadbalances =
OverrideUtils.overridesToLoadBalances(overrideService.findAll());
- }
- model.addAttribute("loadbalances", loadbalances);
- return "governance/screen/loadbalances/index";
- }
-
- @RequestMapping("/detail")
- public String show(@RequestParam("id") Long id, HttpServletRequest
request, HttpServletResponse response, Model model) {
- prepare(request, response, model, "show", "loadbalances");
- LoadBalance loadbalance =
OverrideUtils.overrideToLoadBalance(overrideService.findById(id));
- model.addAttribute("loadbalance", loadbalance);
- return "governance/screen/loadbalances/show";
- }
-
- @RequestMapping("/add")
- public String add(HttpServletRequest request, HttpServletResponse
response, Model model) {
- prepare(request, response, model, "add", "loadbalances");
- BindingAwareModelMap newModel = (BindingAwareModelMap)model;
- String service = (String)newModel.get("service");
-
- if (service != null && service.length() > 0 && !service.contains("*"))
{
- List<Provider> providerList =
providerService.findByService(service);
- List<String> addressList = new ArrayList<String>();
- for (Provider provider : providerList) {
-
addressList.add(provider.getUrl().split("://")[1].split("/")[0]);
- }
- model.addAttribute("addressList", addressList);
- model.addAttribute("service", service);
- model.addAttribute("methods",
CollectionUtils.sort(providerService.findMethodsByService(service)));
- } else {
- List<String> serviceList =
Tool.sortSimpleName(providerService.findServices());
- model.addAttribute("serviceList", serviceList);
- }
- //if (input != null) model.addAttribute("input", input);
- return "governance/screen/loadbalances/add";
- }
-
- @RequestMapping("/edit")
- public String edit(@RequestParam("id") Long id, HttpServletRequest
request, HttpServletResponse response, Model model) {
- prepare(request, response, model, "edit", "loadbalances");
- String service = request.getParameter("service");
- String input = request.getParameter("input");
-
- if (service != null && service.length() > 0 && !service.contains("*"))
{
- List<Provider> providerList =
providerService.findByService(service);
- List<String> addressList = new ArrayList<String>();
- for (Provider provider : providerList) {
-
addressList.add(provider.getUrl().split("://")[1].split("/")[0]);
- }
- model.addAttribute("addressList", addressList);
- model.addAttribute("service", service);
- model.addAttribute("methods",
CollectionUtils.sort(providerService.findMethodsByService(service)));
- } else {
- List<String> serviceList =
Tool.sortSimpleName(providerService.findServices());
- model.addAttribute("serviceList", serviceList);
- }
- if (input != null) model.addAttribute("input", input);
- LoadBalance loadbalance =
OverrideUtils.overrideToLoadBalance(overrideService.findById(id));
- model.addAttribute("loadbalance", loadbalance);
- return "governance/screen/loadbalances/edit";
- }
-
- @RequestMapping("/create")
- public String create(LoadBalance loadBalance, HttpServletRequest request,
HttpServletResponse response, Model model) {
- prepare(request, response, model, "create", "loadbalances");
- boolean success = true;
- if (!super.currentUser.hasServicePrivilege(loadBalance.getService())) {
- model.addAttribute("message", getMessage("HaveNoServicePrivilege",
loadBalance.getService()));
- success = false;
- } else {
- loadBalance.setUsername((String)
((BindingAwareModelMap)model).get("operator"));
-
overrideService.saveOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
- }
- model.addAttribute("success", success);
- model.addAttribute("redirect", "../loadbalances");
- return "governance/screen/redirect";
- }
-
-
- @RequestMapping("/update")
- public String update(LoadBalance loadBalance, HttpServletRequest request,
HttpServletResponse response, Model model) {
- prepare(request, response, model, "update", "loadbalances");
- boolean success = true;
- if (!super.currentUser.hasServicePrivilege(loadBalance.getService())) {
- model.addAttribute("message", getMessage("HaveNoServicePrivilege",
loadBalance.getService()));
- success = false;
- } else {
-
overrideService.updateOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
- }
- model.addAttribute("success", success);
- model.addAttribute("redirect", "../loadbalances");
- return "governance/screen/redirect";
-
- }
-
- /**
- *
- * @param ids
- * @return
- */
- @RequestMapping("/delete")
- public String delete(@RequestParam("ids") Long[] ids, HttpServletRequest
request, HttpServletResponse response, Model model) {
- prepare(request, response, model, "delete", "loadbalances");
- boolean success = true;
- for (Long id : ids) {
- LoadBalance lb =
OverrideUtils.overrideToLoadBalance(overrideService.findById(id));
- if (!super.currentUser.hasServicePrivilege(lb.getService())) {
- model.addAttribute("message",
getMessage("HaveNoServicePrivilege", lb.getService()));
- success = false;
- model.addAttribute("success", success);
- model.addAttribute("redirect", "../../loadbalances");
- return "governance/screen/redirect";
- }
- }
-
- for (Long id : ids) {
- overrideService.deleteOverride(id);
- }
- model.addAttribute("success", success);
- model.addAttribute("redirect", "../../loadbalances");
- return "governance/screen/redirect";
- }
-
-}
+///*
+// * 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.utils.CollectionUtils;
+//import org.apache.dubbo.admin.governance.service.OverrideService;
+//import org.apache.dubbo.admin.governance.service.ProviderService;
+//import org.apache.dubbo.admin.registry.common.domain.LoadBalance;
+//import org.apache.dubbo.admin.registry.common.domain.Provider;
+//import org.apache.dubbo.admin.registry.common.util.OverrideUtils;
+//import org.apache.dubbo.admin.web.mvc.BaseController;
+//import org.apache.dubbo.admin.web.pulltool.Tool;
+//import org.apache.commons.lang3.StringUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Controller;
+//import org.springframework.ui.Model;
+//import org.springframework.validation.support.BindingAwareModelMap;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RequestParam;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.util.ArrayList;
+//import java.util.List;
+//
+///**
+// * ProvidersController.
+// * URI: /services/$service/loadbalances
+// *
+// */
+//@Controller
+//@RequestMapping("/governance/loadbalances")
+//public class LoadbalancesController extends BaseController {
+//
+// @Autowired
+// private OverrideService overrideService;
+//
+// @Autowired
+// private ProviderService providerService;
+//
+// @RequestMapping("")
+// public String index(HttpServletRequest request, HttpServletResponse
response, Model model) {
+// prepare(request, response, model, "index", "loadbalances");
+// BindingAwareModelMap newModel = (BindingAwareModelMap)model;
+// String service = (String)newModel.get("service");
+// service = StringUtils.trimToNull(service);
+//
+// List<LoadBalance> loadbalances;
+// if (service != null && service.length() > 0) {
+// loadbalances =
OverrideUtils.overridesToLoadBalances(overrideService.findByService(service));
+// } else {
+// loadbalances =
OverrideUtils.overridesToLoadBalances(overrideService.findAll());
+// }
+// model.addAttribute("loadbalances", loadbalances);
+// return "governance/screen/loadbalances/index";
+// }
+//
+// @RequestMapping("/detail")
+// public String show(@RequestParam("id") Long id, HttpServletRequest
request, HttpServletResponse response, Model model) {
+// prepare(request, response, model, "show", "loadbalances");
+// LoadBalance loadbalance =
OverrideUtils.overrideToLoadBalance(overrideService.findById(id));
+// model.addAttribute("loadbalance", loadbalance);
+// return "governance/screen/loadbalances/show";
+// }
+//
+// @RequestMapping("/add")
+// public String add(HttpServletRequest request, HttpServletResponse
response, Model model) {
+// prepare(request, response, model, "add", "loadbalances");
+// BindingAwareModelMap newModel = (BindingAwareModelMap)model;
+// String service = (String)newModel.get("service");
+//
+// if (service != null && service.length() > 0 &&
!service.contains("*")) {
+// List<Provider> providerList =
providerService.findByService(service);
+// List<String> addressList = new ArrayList<String>();
+// for (Provider provider : providerList) {
+//
addressList.add(provider.getUrl().split("://")[1].split("/")[0]);
+// }
+// model.addAttribute("addressList", addressList);
+// model.addAttribute("service", service);
+// model.addAttribute("methods",
CollectionUtils.sort(providerService.findMethodsByService(service)));
+// } else {
+// List<String> serviceList =
Tool.sortSimpleName(providerService.findServices());
+// model.addAttribute("serviceList", serviceList);
+// }
+// //if (input != null) model.addAttribute("input", input);
+// return "governance/screen/loadbalances/add";
+// }
+//
+// @RequestMapping("/edit")
+// public String edit(@RequestParam("id") Long id, HttpServletRequest
request, HttpServletResponse response, Model model) {
+// prepare(request, response, model, "edit", "loadbalances");
+// String service = request.getParameter("service");
+// String input = request.getParameter("input");
+//
+// if (service != null && service.length() > 0 &&
!service.contains("*")) {
+// List<Provider> providerList =
providerService.findByService(service);
+// List<String> addressList = new ArrayList<String>();
+// for (Provider provider : providerList) {
+//
addressList.add(provider.getUrl().split("://")[1].split("/")[0]);
+// }
+// model.addAttribute("addressList", addressList);
+// model.addAttribute("service", service);
+// model.addAttribute("methods",
CollectionUtils.sort(providerService.findMethodsByService(service)));
+// } else {
+// List<String> serviceList =
Tool.sortSimpleName(providerService.findServices());
+// model.addAttribute("serviceList", serviceList);
+// }
+// if (input != null) model.addAttribute("input", input);
+// LoadBalance loadbalance =
OverrideUtils.overrideToLoadBalance(overrideService.findById(id));
+// model.addAttribute("loadbalance", loadbalance);
+// return "governance/screen/loadbalances/edit";
+// }
+//
+// @RequestMapping("/create")
+// public String create(LoadBalance loadBalance, HttpServletRequest
request, HttpServletResponse response, Model model) {
+// prepare(request, response, model, "create", "loadbalances");
+// boolean success = true;
+// if
(!super.currentUser.hasServicePrivilege(loadBalance.getService())) {
+// model.addAttribute("message",
getMessage("HaveNoServicePrivilege", loadBalance.getService()));
+// success = false;
+// } else {
+// loadBalance.setUsername((String)
((BindingAwareModelMap)model).get("operator"));
+//
overrideService.saveOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
+// }
+// model.addAttribute("success", success);
+// model.addAttribute("redirect", "../loadbalances");
+// return "governance/screen/redirect";
+// }
+//
+//
+// @RequestMapping("/update")
+// public String update(LoadBalance loadBalance, HttpServletRequest
request, HttpServletResponse response, Model model) {
+// prepare(request, response, model, "update", "loadbalances");
+// boolean success = true;
+// if
(!super.currentUser.hasServicePrivilege(loadBalance.getService())) {
+// model.addAttribute("message",
getMessage("HaveNoServicePrivilege", loadBalance.getService()));
+// success = false;
+// } else {
+//
overrideService.updateOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
+// }
+// model.addAttribute("success", success);
+// model.addAttribute("redirect", "../loadbalances");
+// return "governance/screen/redirect";
+//
+// }
+//
+// /**
+// *
+// * @param ids
+// * @return
+// */
+// @RequestMapping("/delete")
+// public String delete(@RequestParam("ids") Long[] ids, HttpServletRequest
request, HttpServletResponse response, Model model) {
+// prepare(request, response, model, "delete", "loadbalances");
+// boolean success = true;
+// for (Long id : ids) {
+// LoadBalance lb =
OverrideUtils.overrideToLoadBalance(overrideService.findById(id));
+// if (!super.currentUser.hasServicePrivilege(lb.getService())) {
+// model.addAttribute("message",
getMessage("HaveNoServicePrivilege", lb.getService()));
+// success = false;
+// model.addAttribute("success", success);
+// model.addAttribute("redirect", "../../loadbalances");
+// return "governance/screen/redirect";
+// }
+// }
+//
+// for (Long id : ids) {
+// overrideService.deleteOverride(id);
+// }
+// model.addAttribute("success", success);
+// model.addAttribute("redirect", "../../loadbalances");
+// return "governance/screen/redirect";
+// }
+//
+//}
diff --git a/dubbo-admin-frontend/src/components/LoadBalance.vue
b/dubbo-admin-frontend/src/components/LoadBalance.vue
index 61d4aba..6c84ef8 100644
--- a/dubbo-admin-frontend/src/components/LoadBalance.vue
+++ b/dubbo-admin-frontend/src/components/LoadBalance.vue
@@ -1,15 +1,325 @@
+<!--
+ - 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
+ - he 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.
+ -->
+
<template>
- <v-container fluid>
+ <v-container grid-list-xl fluid >
<v-layout row wrap>
- <v-flex xs12 class="text-xs-center" mt-5>
- <h1>Load Balance</h1>
+ <v-flex xs12 >
+ <v-card flat color="transparent">
+ <v-card-text>
+ <v-layout row wrap >
+ <v-text-field label="Search dubbo service"
+ v-model="filter" clearable></v-text-field>
+ <v-btn @click="submit" color="primary" large>Search</v-btn>
+ </v-layout>
+ </v-card-text>
+ </v-card>
</v-flex>
</v-layout>
+ <v-flex lg12>
+ <v-card>
+ <v-toolbar flat color="transparent" class="elevation-0">
+ <v-toolbar-title><span class="headline">Search
Result</span></v-toolbar-title>
+ <v-divider
+ class="mx-2"
+ inset
+ vertical
+ ></v-divider>
+ <v-spacer></v-spacer>
+ <v-btn outline color="primary" @click.stop="openDialog"
class="mb-2">CREATE</v-btn>
+ </v-toolbar>
+
+ <v-card-text class="pa-0">
+ <v-data-table
+ :headers="headers"
+ :items="loadBalances"
+ hide-actions
+ class="elevation-0"
+ >
+ <template slot="items" slot-scope="props">
+ <td class="text-xs-left">{{ props.item.service }}</td>
+ <td class="text-xs-left">{{ props.item.method }}</td>
+ <td class="justify-center px-0">
+ <v-tooltip bottom v-for="op in operations" :key="op.id">
+ <v-icon small class="mr-2" slot="activator"
@click="itemOperation(op.icon(props.item), props.item)">
+ {{op.icon(props.item)}}
+ </v-icon>
+ <span>{{op.tooltip(props.item)}}</span>
+ </v-tooltip>
+ </td>
+ </template>
+ </v-data-table>
+ </v-card-text>
+ </v-card>
+ </v-flex>
+
+ <v-dialog v-model="dialog" width="800px" persistent >
+ <v-card>
+ <v-card-title class="justify-center">
+ <span class="headline">Create New LoadBalance Rule</span>
+ </v-card-title>
+ <v-card-text >
+ <v-text-field
+ label="Service Unique ID"
+ hint="A service ID is service name"
+ required
+ v-model="service"
+ ></v-text-field>
+ <v-subheader class="pa-0 mt-3">RULE CONTENT</v-subheader>
+ <codemirror ref="myCm"
+ v-model="ruleText"
+ :options="cmOption">
+ </codemirror>
+
+ </v-card-text>
+ <v-card-actions>
+ <v-spacer></v-spacer>
+ <v-btn color="blue darken-1" flat
@click.native="closeDialog">Close</v-btn>
+ <v-btn color="blue darken-1" flat
@click.native="saveItem">Save</v-btn>
+ </v-card-actions>
+ </v-card>
+ </v-dialog>
+
+ <v-dialog v-model="warn" persistent max-width="500px">
+ <v-card>
+ <v-card-title class="headline">{{this.warnTitle}}</v-card-title>
+ <v-card-text >{{this.warnText}}</v-card-text>
+ <v-card-actions>
+ <v-spacer></v-spacer>
+ <v-btn color="green darken-1" flat
@click.native="closeWarn">CANCLE</v-btn>
+ <v-btn color="green darken-1" flat
@click.native="deleteItem(warnStatus)">CONFIRM</v-btn>
+ </v-card-actions>
+ </v-card>
+ </v-dialog>
+
</v-container>
</template>
-
<script>
- export default {}
+ import { codemirror } from 'vue-codemirror'
+ import 'codemirror/lib/codemirror.css'
+ import 'codemirror/theme/paraiso-light.css'
+ import 'codemirror/mode/yaml/yaml.js'
+ import 'codemirror/addon/display/autorefresh.js'
+ import 'codemirror/addon/display/placeholder'
+ import yaml from 'js-yaml'
+ import {AXIOS} from './http-common'
+ export default {
+ components: {
+ codemirror
+ },
+ data: () => ({
+ dropdown_font: [ 'Service', 'App', 'IP' ],
+ ruleKeys: ['method', 'strategy'],
+ pattern: 'Service',
+ filter: '',
+ dialog: false,
+ warn: false,
+ application: '',
+ service: '',
+ warnTitle: '',
+ warnText: '',
+ warnStatus: {},
+ height: 0,
+ operations: [
+ {id: 0,
+ icon: function (item) {
+ return 'visibility'
+ },
+ tooltip: function (item) {
+ return 'View'
+ }},
+ {id: 1,
+ icon: function (item) {
+ return 'edit'
+ },
+ tooltip: function (item) {
+ return 'Edit'
+ }},
+ {id: 3,
+ icon: function (item) {
+ return 'delete'
+ },
+ tooltip: function (item) {
+ return 'Delete'
+ }}
+ ],
+ loadBalances: [
+ ],
+ template:
+ 'methodName: sayHello # 0 for all methods\n' +
+ 'strategy: # leastactive, random, roundrobin',
+ ruleText: '',
+ cmOption: {
+ theme: 'paraiso-light',
+ autoRefresh: true,
+ readOnly: false,
+ mode: 'text/x-yaml',
+ line: true
+ },
+ headers: [
+ {
+ text: 'Service Name',
+ value: 'service',
+ align: 'left'
+ },
+ {
+ text: 'Method',
+ value: 'method',
+ align: 'left'
+
+ },
+ {
+ text: 'Operation',
+ value: 'operation',
+ sortable: false
+ }
+ ]
+ }),
+ methods: {
+ submit: function () {
+ this.search(this.filter, true)
+ },
+ search: function (filter, rewrite) {
+ AXIOS.get('/balancing/all?serviceName=' + filter)
+ .then(response => {
+ this.loadBalances = response.data
+ if (rewrite) {
+ this.$router.push({path: 'loadbalance', query: {serviceName:
filter}})
+ }
+ })
+ },
+ handleRule: function (route) {
+ let result = {}
+ let conditions = []
+ for (let property in route) {
+ if (this.ruleKeys.includes(property)) {
+ if (property === 'rule') {
+ conditions.push(route[property])
+ } else {
+ result[property] = route[property]
+ }
+ }
+ }
+ if (conditions.length > 0) {
+ result['conditions'] = conditions
+ }
+ return yaml.safeDump(result)
+ },
+ closeDialog: function () {
+ this.ruleText = this.template
+ this.service = ''
+ this.dialog = false
+ this.cmOption.readOnly = false
+ },
+ openDialog: function () {
+ this.dialog = true
+ },
+ openWarn: function (title, text) {
+ this.warnTitle = title
+ this.warnText = text
+ this.warn = true
+ },
+ closeWarn: function () {
+ this.warnTitle = ''
+ this.warnText = ''
+ this.warn = false
+ },
+ saveItem: function () {
+ let text = encodeURIComponent(this.ruleText) // contains illegal url
character, need encode
+ AXIOS.get('/balancing/create?serviceName=' + this.service + '&rule=' +
text)
+ .then(response => {
+ if (response.data) {
+ this.search(this.service, true)
+ }
+ })
+ },
+ itemOperation: function (icon, item) {
+ switch (icon) {
+ case 'visibility':
+ AXIOS.get('/balancing/detail?id=' + item.id)
+ .then(response => {
+ let balancing = response.data
+ let result = this.handleRule(balancing)
+ this.service = balancing.service
+ this.ruleText = result
+ this.cmOption.readOnly = true
+ this.dialog = true
+ })
+ break
+ case 'edit':
+ AXIOS.get('/balancing/edit?id=' + item.id)
+ .then(response => {
+ let loadbalance = response.data
+ let result = this.handleRule(loadbalance)
+ this.service = loadbalance.service
+ this.ruleText = result
+ this.cmOption.readOnly = false
+ this.dialog = true
+ })
+ break
+ case 'delete':
+ this.openWarn(' Are you sure to Delete Routing Rule',
'serviceName: ' + item.service)
+ this.warnStatus.operation = 'delete'
+ this.warnStatus.id = item.id
+ }
+ },
+ setHeight: function () {
+ this.height = window.innerHeight * 0.5
+ },
+ deleteItem: function (warnStatus) {
+ if (warnStatus.operation === 'delete') {
+ AXIOS.get('/balancing/delete?id=' + warnStatus.id)
+ .then(response => {
+ this.warn = false
+ this.search(this.filter, false)
+ })
+ } else if (warnStatus.operation === 'block') {
+ AXIOS.get('/routes/changeStatus?id=' + warnStatus.id + '&enabled=' +
warnStatus.enabled)
+ .then(response => {
+ this.warn = false
+ this.search(this.filter, false)
+ })
+ }
+ }
+ },
+ computed: {
+ codemirror () {
+ return this.$refs.myCm.codemirror
+ }
+ },
+ created () {
+ this.setHeight()
+ },
+ mounted: function () {
+ this.ruleText = this.template
+ let query = this.$route.query
+ let service = ''
+ Object.keys(query).forEach(function (key) {
+ if (key === 'serviceName') {
+ service = query[key]
+ }
+ })
+ if (service !== '') {
+ this.filter = service
+ this.search(service, false)
+ }
+ }
+
+ }
</script>