Ver Fonte

实现提示待做的启动作业

James Iter há 9 anos atrás
pai
commit
b0bf715ce2
3 ficheiros alterados com 37 adições e 4 exclusões
  1. 8 2
      docs/todo.md
  2. 9 1
      templates/guests_show.html
  3. 20 1
      views/guest.py

+ 8 - 2
docs/todo.md

@@ -14,11 +14,12 @@
 - [x] 重置Guest密码功能
 - [ ] 增加模板镜像上传功能
 - [x] 虚拟机加入用户级的重启作业功能
-- [ ] 提示待做的启动作业
+- [x] 提示待做的启动作业
 - [ ] 加入 tag 功能
 - [ ] 收集存在于 JimV-N,却不存在于 JimV-C 的 Guest
+- [ ] IP 为空的,允许用户手动补入 Guest 的真实 IP,补入时并检查新 IP 是否可用
 - [x] 批量添加启动作业
-- [ ] 单独写页面展现已有启动作业的虚拟机列表
+- [x] 单独写页面展现已有启动作业的虚拟机列表
 - [x] 磁盘页面,默认不显示系统盘,加 CheckBox 来控制
 - [x] 不显示系统级别的启动作业
 - [ ] 添加对 Guest 的IP管理功能
@@ -27,3 +28,8 @@
 > 要与系统配置中的可用 IP 范围做计算。计算其是不是可以被自动分配的合法 IP。如果是,
 > 则回收。如果不是,则直接丢弃;
 > 2. 给宿主机替换手动指定的任意 IP。此时需要判断手动分配的 IP 是否与已用的 IP 冲突;
+- [ ] 宿主机性能状态展现
+- [ ] 设计、实现 Dashboard 页面
+- [ ] 重新设计创建虚拟机时的机制,虚拟机创建分配由 JimV-C 角色实现
+- [ ] 虚拟机状态变化时时展现在前端页面上
+- [ ] 迁移时计算出剩余时间

+ 9 - 1
templates/guests_show.html

@@ -55,6 +55,10 @@
             color: #000 !important;
             background: #fffdf4 !important;
         }
+
+        .dropdown-menu {
+            min-width: 100%;
+        }
     </style>
 
 {% endblock head %}
@@ -646,6 +650,7 @@
                             <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
                                 更多
                             </a>
+                            <div class="small-badge bg-red" style="display: {% if guests_boot_jobs_ret.data[item.uuid].boot_jobs|length < 1 %} none {% else %} inline-flex{% endif %};"></div>
                             <ul class="dropdown-menu">
                                 <li class="{% if item.status not in [4, 5, 6] %} disabled {% endif %}">
                                     <a href="javascript:;" onclick="boot_at(this);">启动</a>
@@ -675,7 +680,10 @@
                                 </li>
                                 <li class="divider"></li>
                                 <li class="">
-                                    <a href="/guest/boot_jobs/{{ item.uuid }}" target="_blank">启动作业</a>
+                                    <a href="/guest/boot_jobs/{{ item.uuid }}" target="_blank">
+                                        启动作业&nbsp;&nbsp;
+                                        <span class="bs-badge badge-info" style="display: {% if guests_boot_jobs_ret.data[item.uuid].boot_jobs|length < 1 %} none {% endif %};">{{ guests_boot_jobs_ret.data[item.uuid].boot_jobs|length }}</span>
+                                    </a>
                                 </li>
                                 <li class="divider"></li>
                                 <li class="">

+ 20 - 1
views/guest.py

@@ -67,6 +67,24 @@ def show():
     for os_template in os_templates_ret['data']:
         os_templates_mapping_by_id[os_template['id']] = os_template
 
+    guests_uuid = list()
+
+    for guest in guests_ret['data']:
+        guests_uuid.append(guest['uuid'])
+
+    guests_boot_jobs_ret = {'data': dict()}
+
+    if guests_uuid.__len__() > 0:
+        # 获取指定 Guest 的启动作业 ID
+        guests_boot_jobs_url = host_url + url_for('api_guests.r_get_boot_jobs', uuids=','.join(guests_uuid))
+        guests_boot_jobs_ret = requests.get(url=guests_boot_jobs_url)
+
+        guests_boot_jobs_ret = json.loads(guests_boot_jobs_ret.content)
+
+        # 统一单个、多个的返回JSON格式
+        if guests_uuid.__len__() == 1:
+            guests_boot_jobs_ret['data'] = {guests_uuid[0]: guests_boot_jobs_ret['data']}
+
     last_page = int(ceil(guests_ret['paging']['total'] / float(page_size)))
     page_length = 5
     pages = list()
@@ -89,7 +107,8 @@ def show():
                 break
 
     return render_template('guests_show.html', guests_ret=guests_ret, resource_path=resource_path,
-                           os_templates_mapping_by_id=os_templates_mapping_by_id, page=page,
+                           os_templates_mapping_by_id=os_templates_mapping_by_id,
+                           guests_boot_jobs_ret=guests_boot_jobs_ret, page=page,
                            page_size=page_size, keyword=keyword, pages=pages, last_page=last_page)