فهرست منبع

实现 IP 池激活功能

James Iter 7 سال پیش
والد
کامیت
c2f706efdf

+ 36 - 0
jimvc/api/ip_pool.py

@@ -182,6 +182,42 @@ def r_update(ids):
         return json.loads(e.message)
 
 
+@Utils.dumps2response
+def r_activity(_id):
+
+    ret = dict()
+    ret['state'] = ji.Common.exchange_state(20000)
+    ret['data'] = list()
+
+    args_rules = [
+        Rules.ID.value
+    ]
+
+    if args_rules.__len__() < 1:
+        return ret
+
+    try:
+        ji.Check.previewing(args_rules, {'id': _id})
+
+        ip_pool = IPPool()
+        ip_pool.id = _id
+        ip_pool.get()
+
+        ip_pool.activity = 1
+
+        # 如果新创建或被更新的 IP 池为活跃状态,则更新其它 IP 池为非活跃状态
+        IPPool.update_by_filter({'activity': 0}, filter_str='id:gt:0')
+
+        ip_pool.update()
+        ip_pool.get()
+
+        ret['data'].append(ip_pool.__dict__)
+
+        return ret
+    except ji.PreviewingError, e:
+        return json.loads(e.message)
+
+
 @Utils.dumps2response
 def r_get(ids):
     return ip_pool_base.get(ids=ids, ids_rule=Rules.IDS.value, by_field='id')

+ 1 - 0
jimvc/api_route_table.py

@@ -46,6 +46,7 @@ add_rule_api(ip_pool.blueprints, '/<ids>', api_func='ip_pool.r_delete', methods=
 add_rule_api(ip_pool.blueprints, '/<ids>', api_func='ip_pool.r_get', methods=['GET'])
 add_rule_api(ip_pool.blueprints, '', api_func='ip_pool.r_get_by_filter', methods=['GET'])
 add_rule_api(ip_pool.blueprints, '/_search', api_func='ip_pool.r_content_search', methods=['GET'])
+add_rule_api(ip_pool.blueprint, '/<_id>', api_func='ip_pool.r_activity', methods=['PUT'])
 
 # JimV 配置操作
 add_rule_api(dashboard.blueprint, '/_show', api_func='dashboard.r_show', methods=['GET'])

+ 2 - 1
jimvc/models/ip_pool.py

@@ -38,13 +38,14 @@ class IPPool(ORM):
     @staticmethod
     def get_filter_keywords():
         return {
+            'id': FilterFieldType.INT.value,
             'name': FilterFieldType.STR.value,
             'activity': FilterFieldType.INT.value
         }
 
     @staticmethod
     def get_allow_update_keywords():
-        return []
+        return ['activity']
 
     @staticmethod
     def get_allow_content_search_keywords():

+ 31 - 2
jimvc/themes/default/templates/config_show.html

@@ -58,11 +58,14 @@
                 console.log(this); // DOM element
                 console.log(event); // jQuery event
                 console.log(state); // true | false
+                if (state) {
+                    put_ip_pool_activity($(this).data('id'));
+                }
             });
         });
 
         function refresh() {
-            window.location.href=window.location.pathname;
+            window.location.reload();
         }
 
         function select_this(me) {
@@ -268,6 +271,11 @@
         }
 
         function exchange_ip_pool_for_panel(ip_pool) {
+            var activity_checked = '';
+            if (ip_pool.activity > 0) {
+                activity_checked = 'checked';
+            }
+
             return '<div class="panel">\n' +
                 '    <div class="panel-body">\n' +
                 '        <form class="form-horizontal bordered-row" style="padding-left: 8%;">\n' +
@@ -313,7 +321,7 @@
                 '            </div>\n' +
                 '            <div class="form-group" style="margin-bottom: 0;">\n' +
                 '                <div class="col-sm-6">\n' +
-                '                    <input type="checkbox" name="activity" data-on-color="info" class="input-switch" checked data-size="medium" data-on-text="活跃" data-off-text="非活跃">\n' +
+                '                    <input type="checkbox" name="activity" data-on-color="info" class="input-switch" data-id="' + ip_pool.id + '" ' + activity_checked + ' data-size="medium" data-on-text="活跃" data-off-text="非活跃">\n' +
                 '                </div>\n' +
                 '                <div class="col-sm-6">\n' +
                 '                    <div style="padding: 0; text-align: right;">\n' +
@@ -332,6 +340,7 @@
             var html = '<div class="row" style="padding: 10px 10px 10px 0; width: 100%;">\n' +
                 '    <div class="col-sm-12" style="padding-right: 0;">\n' +
                 '        <div class="pull-right">\n' +
+                '            <button class="btn btn-default" onclick="window.location.reload();" style="border-radius: 0;"><span class="glyph-icon icon-elusive-arrows-cw"></span></button>\n' +
                 '            <a class="btn btn-info" href="javascript:;" data-toggle="modal" data-target="#add_ip_pool_modal" style="border-radius: 0; padding-left: 40px; padding-right: 40px;">添加 IP 池</a>\n' +
                 '        </div>\n' +
                 '    </div>\n' +
@@ -414,6 +423,26 @@
                 window.location.reload();
             }, 3000);
         }
+        
+        function put_ip_pool_activity(id) {
+            $.ajax({
+                url : '/api/ip_pool/' + String(id),
+                type : 'PUT',
+                async: false,
+                dataType: "json",
+                error : function(data, textStatus, xhr) {
+                    alter_danger(data.responseText);
+                    alter_warning('IP 池激活失败!');
+                },
+                success : function(data, textStatus, xhr) {
+                    alter_success('IP 池激活成功!');
+                }
+            });
+
+            setTimeout(function() {
+                window.location.reload();
+            }, 3000);
+        }
     </script>
     <div class="panel">
         <div class="panel-body">

+ 1 - 0
jimvc/themes/default/templates/guests_show.html

@@ -1867,6 +1867,7 @@
                                         <option value="10" {% if page_size == 10 %} selected {% endif %}>10</option>
                                         <option value="20" {% if page_size == 20 %} selected {% endif %}>20</option>
                                         <option value="50" {% if page_size == 50  %} selected {% endif %}>50</option>
+                                        <option value="100" {% if page_size == 100  %} selected {% endif %}>100</option>
                                     </select>&nbsp;&nbsp;条
                                 </div>
                                 <div class="col-sm-3" style="text-align: left;">