Переглянути джерело

Added weight adjusting logic

Toby Chui 8 місяців тому
батько
коміт
4ff5d9c5ec
1 змінених файлів з 49 додано та 7 видалено
  1. 49 7
      web/snippet/upstreams.html

+ 49 - 7
web/snippet/upstreams.html

@@ -39,7 +39,6 @@
             }
 
             .upstreamEntry{
-                cursor: pointer;
                 border-radius: 0.4em !important;
                 border: 1px solid rgb(233, 233, 233) !important;
             }
@@ -122,7 +121,6 @@
                 <button class="ui basic button"  style="float: right;" onclick="closeThisWrapper();">Close</button>
             </div>
         </div>
-            
         <br><br><br><br>
 
         </div>
@@ -229,7 +227,7 @@
                         </div>
                         <div class="content">
                         <a href="${url}" target="_blank" class="upstreamLink">${upstream.OriginIpOrDomain} ${tlsIcon}</a>
-                            <div class="sub header">${isActive?"Active":"Inactive"} | Weight: ${upstream.Weight}x</div>
+                            <div class="sub header">${isActive?(upstream.Weight==0?"Fallback Only":"Active"):"Inactive"} | Weight: ${upstream.Weight}x </div>
                         </div>
                     </h4>
                     <div class="advanceOptions" style="display:none;">
@@ -259,8 +257,8 @@
                     </div>
                     <div class="upstreamActions">
                         <!-- Change Priority -->
-                        <button class="ui basic circular icon button highPriorityButton" title="Increase Weight"><i class="ui arrow up icon"></i></button>
-                        <button class="ui basic circular icon button lowPriorityButton ${downArrowClass}" title="Reduce Weight"><i class="ui arrow down icon"></i></button>
+                        <button class="ui basic circular icon button highPriorityButton" title="Increase Weight" onclick="increaseUpstreamWeight('${domUID}');"><i class="ui arrow up icon"></i></button>
+                        <button class="ui basic circular icon button lowPriorityButton ${downArrowClass}" title="Reduce Weight"  onclick="decreaseUpstreamWeight('${domUID}');"><i class="ui arrow down icon"></i></button>
                         <button class="ui basic circular icon editbtn button" onclick="handleUpstreamOriginEdit('${domUID}');" title="Edit Upstream Destination"><i class="ui grey edit icon"></i></button>
                         <button style="display:none;" class="ui basic circular icon trashbtn button" onclick="removeUpstream('${domUID}');" title="Remove Upstream"><i class="ui red trash icon"></i></button>
                         <button style="display:none;" class="ui basic circular icon savebtn button" onclick="saveUpstreamUpdate('${domUID}');" title="Save Changes"><i class="ui green save icon"></i></button>
@@ -391,8 +389,7 @@
             //Edit the upstream origin of this upstream entry
             function handleUpstreamOriginEdit(upstreamDomID){
                 let targetDOM = $(`.upstreamEntry[data-domid=${upstreamDomID}]`);
-                let originalSettings = $(targetDOM).attr("data-payload");
-                originalSettings = JSON.parse(decodeURIComponent(originalSettings));
+                let originalSettings = getUpstreamSettingsFromDomID(upstreamDomID);
                 let originIP = originalSettings.OriginIpOrDomain;
 
                 //Change the UI to edit mode
@@ -437,6 +434,51 @@
                 }
             }
 
+            function getUpstreamSettingsFromDomID(domid){
+                let targetDOM = $(`.upstreamEntry[data-domid=${domid}]`);
+                if (targetDOM.length == 0){
+                    return undefined;
+                }
+                let upstreamSettings = $(targetDOM).attr("data-payload");
+                upstreamSettings = JSON.parse(decodeURIComponent(upstreamSettings));
+                return upstreamSettings;
+            }
+
+            function increaseUpstreamWeight(domid){
+                let upstreamSetting = getUpstreamSettingsFromDomID(domid);
+                let originIP = upstreamSetting.OriginIpOrDomain;
+                let currentWeight = upstreamSetting.Weight;
+                setUpstreamWeight(originIP, currentWeight+1);
+            }
+
+            function decreaseUpstreamWeight(domid){
+                let upstreamSetting = getUpstreamSettingsFromDomID(domid);
+                let originIP = upstreamSetting.OriginIpOrDomain;
+                let currentWeight = upstreamSetting.Weight;
+                setUpstreamWeight(originIP, currentWeight-1);
+            }
+
+            //Set a weight of a upstream
+            function setUpstreamWeight(originIP, newWeight){
+                $.ajax({
+                    url: "/api/proxy/upstream/setPriority",
+                    method: "POST",
+                    data: {
+                        ep: editingEndpoint.ep,
+                        origin: originIP,
+                        weight: newWeight,
+                    },
+                    success: function(data){
+                        if (data.error != undefined){
+                            parent.msgbox(data.error, false);
+                        }else{
+                            parent.msgbox("Upstream Weight Updated");
+                            initOriginList();
+                        }
+                    }
+                })
+            }
+
             //Handle removal of an upstream
             function removeUpstream(domid){
                 let targetDOM = $(`.upstreamEntry[data-domid=${domid}]`);