InPanel 1.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. inpanel/__init__.py +29 -0
  2. inpanel/acme.py +289 -0
  3. inpanel/aliyuncs.py +269 -0
  4. inpanel/app.py +514 -0
  5. inpanel/apt.py +223 -0
  6. inpanel/base.py +200 -0
  7. inpanel/config.py +139 -0
  8. inpanel/data/config.ini +29 -0
  9. inpanel/data/history +5 -0
  10. inpanel/data/runlogs.ini +12 -0
  11. inpanel/data/update_info.ini +4 -0
  12. inpanel/dnf.py +225 -0
  13. inpanel/lib/__init__.py +9 -0
  14. inpanel/lib/async_process.py +98 -0
  15. inpanel/lib/filelock.py +82 -0
  16. inpanel/lib/magic.py +233 -0
  17. inpanel/lib/pxssh.py +310 -0
  18. inpanel/lib/pyDes.py +867 -0
  19. inpanel/mod/__init__.py +0 -0
  20. inpanel/mod/apt.py +316 -0
  21. inpanel/mod/certificate.py +268 -0
  22. inpanel/mod/config.py +372 -0
  23. inpanel/mod/cron.py +315 -0
  24. inpanel/mod/disk.py +322 -0
  25. inpanel/mod/dnf.py +239 -0
  26. inpanel/mod/file.py +722 -0
  27. inpanel/mod/firewall.py +199 -0
  28. inpanel/mod/firewall_base.py +137 -0
  29. inpanel/mod/firewall_firewalld.py +170 -0
  30. inpanel/mod/firewall_iptables.py +176 -0
  31. inpanel/mod/firewall_macos.py +213 -0
  32. inpanel/mod/firewall_ufw.py +128 -0
  33. inpanel/mod/ftp.py +231 -0
  34. inpanel/mod/httpd.py +1205 -0
  35. inpanel/mod/lighttpd.py +26 -0
  36. inpanel/mod/login.py +98 -0
  37. inpanel/mod/mysql.py +577 -0
  38. inpanel/mod/named.py +26 -0
  39. inpanel/mod/nginx.py +2327 -0
  40. inpanel/mod/package.py +33 -0
  41. inpanel/mod/package_apt.py +62 -0
  42. inpanel/mod/package_base.py +77 -0
  43. inpanel/mod/package_dnf.py +62 -0
  44. inpanel/mod/package_map.py +366 -0
  45. inpanel/mod/package_yum.py +64 -0
  46. inpanel/mod/php.py +289 -0
  47. inpanel/mod/process.py +291 -0
  48. inpanel/mod/proftpd.py +26 -0
  49. inpanel/mod/pureftpd.py +26 -0
  50. inpanel/mod/query.py +108 -0
  51. inpanel/mod/server.py +1319 -0
  52. inpanel/mod/service.py +262 -0
  53. inpanel/mod/setting.py +228 -0
  54. inpanel/mod/shell.py +78 -0
  55. inpanel/mod/ssh.py +280 -0
  56. inpanel/mod/system.py +220 -0
  57. inpanel/mod/task.py +1337 -0
  58. inpanel/mod/ufw.py +14 -0
  59. inpanel/mod/user.py +306 -0
  60. inpanel/mod/vsftpd.py +67 -0
  61. inpanel/mod/yum.py +243 -0
  62. inpanel/plugins/__init__.py +10 -0
  63. inpanel/plugins/__pycache__/__init__.cpython-313.pyc +0 -0
  64. inpanel/plugins/acme/static/index.html +10 -0
  65. inpanel/plugins/acme/static/index.js +13 -0
  66. inpanel/plugins/shadowsocks-libev/__pycache__/info.cpython-313.pyc +0 -0
  67. inpanel/plugins/shadowsocks-libev/info.py +73 -0
  68. inpanel/plugins/shadowsocks-libev/static/index.html +70 -0
  69. inpanel/plugins/shadowsocks-libev/static/index.js +18 -0
  70. inpanel/public/css/global.css +138 -0
  71. inpanel/public/favicon.ico +0 -0
  72. inpanel/public/images/alipay.jpg +0 -0
  73. inpanel/public/images/loading.gif +0 -0
  74. inpanel/public/images/weixin.jpg +0 -0
  75. inpanel/public/index.html +94 -0
  76. inpanel/public/js/controllers/controllers.js +566 -0
  77. inpanel/public/js/controllers/database.js +590 -0
  78. inpanel/public/js/controllers/ecs.js +624 -0
  79. inpanel/public/js/controllers/file.js +940 -0
  80. inpanel/public/js/controllers/plugins.js +105 -0
  81. inpanel/public/js/controllers/service.js +1460 -0
  82. inpanel/public/js/controllers/site.js +1241 -0
  83. inpanel/public/js/controllers/utils.js +2319 -0
  84. inpanel/public/js/core.js +221 -0
  85. inpanel/public/js/directives.js +784 -0
  86. inpanel/public/js/filters.js +395 -0
  87. inpanel/public/js/services.js +257 -0
  88. inpanel/public/lib/angular/1.0.2/angular-resource.min.js +10 -0
  89. inpanel/public/lib/angular/1.0.2/angular.min.js +158 -0
  90. inpanel/public/lib/bootstrap/css/bootstrap-theme.css +587 -0
  91. inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +1 -0
  92. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +6 -0
  93. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +1 -0
  94. inpanel/public/lib/bootstrap/css/bootstrap.css +6757 -0
  95. inpanel/public/lib/bootstrap/css/bootstrap.css.map +1 -0
  96. inpanel/public/lib/bootstrap/css/bootstrap.min.css +6 -0
  97. inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +1 -0
  98. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  99. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  100. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  101. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  102. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  103. inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  104. inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  105. inpanel/public/lib/bootstrap/js/bootstrap.js +2377 -0
  106. inpanel/public/lib/bootstrap/js/bootstrap.min.js +7 -0
  107. inpanel/public/lib/bootstrap/js/npm.js +13 -0
  108. inpanel/public/lib/codemirror/codemirror-compressed.js +1 -0
  109. inpanel/public/lib/codemirror/codemirror.css +173 -0
  110. inpanel/public/lib/jquery/jquery-1.12.4.min.js +5 -0
  111. inpanel/public/lib/md5/md5.js +379 -0
  112. inpanel/public/lib/md5/md5.min.js +1 -0
  113. inpanel/public/partials/database/index.html +172 -0
  114. inpanel/public/partials/database/mysql/dbedit.html +462 -0
  115. inpanel/public/partials/database/mysql/dbnew.html +348 -0
  116. inpanel/public/partials/database/mysql/useredit.html +310 -0
  117. inpanel/public/partials/database/mysql/usernew.html +97 -0
  118. inpanel/public/partials/directives/message.html +20 -0
  119. inpanel/public/partials/directives/navbar.html +25 -0
  120. inpanel/public/partials/directives/selector.html +57 -0
  121. inpanel/public/partials/directives/srvbase.html +72 -0
  122. inpanel/public/partials/directives/srvext.html +34 -0
  123. inpanel/public/partials/directives/srvfile.html +23 -0
  124. inpanel/public/partials/directives/srvinstall.html +34 -0
  125. inpanel/public/partials/directives/srvlog.html +23 -0
  126. inpanel/public/partials/directives/srvminiop.html +28 -0
  127. inpanel/public/partials/directives/srvuninstall.html +38 -0
  128. inpanel/public/partials/directives/srvupdate.html +30 -0
  129. inpanel/public/partials/ecs/account.html +156 -0
  130. inpanel/public/partials/ecs/ecs.html +198 -0
  131. inpanel/public/partials/ecs/index.html +40 -0
  132. inpanel/public/partials/ecs/setings.html +459 -0
  133. inpanel/public/partials/file/file.html +501 -0
  134. inpanel/public/partials/file/trash.html +95 -0
  135. inpanel/public/partials/ftp.html +36 -0
  136. inpanel/public/partials/log.html +83 -0
  137. inpanel/public/partials/login.html +79 -0
  138. inpanel/public/partials/logout.html +22 -0
  139. inpanel/public/partials/main.html +534 -0
  140. inpanel/public/partials/plugins/index.html +55 -0
  141. inpanel/public/partials/plugins/plugins.html +13 -0
  142. inpanel/public/partials/secure.html +13 -0
  143. inpanel/public/partials/service/apache.html +147 -0
  144. inpanel/public/partials/service/cron.html +71 -0
  145. inpanel/public/partials/service/index.html +293 -0
  146. inpanel/public/partials/service/iptables.html +40 -0
  147. inpanel/public/partials/service/lighttpd.html +63 -0
  148. inpanel/public/partials/service/mariadb.html +113 -0
  149. inpanel/public/partials/service/memcache.html +36 -0
  150. inpanel/public/partials/service/minio.html +44 -0
  151. inpanel/public/partials/service/mongodb.html +44 -0
  152. inpanel/public/partials/service/mysql.html +113 -0
  153. inpanel/public/partials/service/named.html +61 -0
  154. inpanel/public/partials/service/nginx.html +296 -0
  155. inpanel/public/partials/service/ntp.html +40 -0
  156. inpanel/public/partials/service/php.html +250 -0
  157. inpanel/public/partials/service/proftpd.html +59 -0
  158. inpanel/public/partials/service/pureftpd.html +59 -0
  159. inpanel/public/partials/service/redis.html +40 -0
  160. inpanel/public/partials/service/samba.html +58 -0
  161. inpanel/public/partials/service/sendmail.html +40 -0
  162. inpanel/public/partials/service/ssh.html +186 -0
  163. inpanel/public/partials/service/tomcat.html +65 -0
  164. inpanel/public/partials/service/vsftpd.html +195 -0
  165. inpanel/public/partials/setting.html +299 -0
  166. inpanel/public/partials/site/apache/site.html +277 -0
  167. inpanel/public/partials/site/index.html +344 -0
  168. inpanel/public/partials/site/nginx/site.html +558 -0
  169. inpanel/public/partials/sorry.html +19 -0
  170. inpanel/public/partials/storage/autofm.html +103 -0
  171. inpanel/public/partials/storage/backup.html +42 -0
  172. inpanel/public/partials/storage/index.html +360 -0
  173. inpanel/public/partials/storage/migrate.html +93 -0
  174. inpanel/public/partials/storage/movedata.html +98 -0
  175. inpanel/public/partials/storage/remote.html +77 -0
  176. inpanel/public/partials/utils/cron.html +486 -0
  177. inpanel/public/partials/utils/firewall.html +266 -0
  178. inpanel/public/partials/utils/index.html +193 -0
  179. inpanel/public/partials/utils/network.html +118 -0
  180. inpanel/public/partials/utils/process.html +239 -0
  181. inpanel/public/partials/utils/repository.html +373 -0
  182. inpanel/public/partials/utils/shell.html +28 -0
  183. inpanel/public/partials/utils/ssl.html +319 -0
  184. inpanel/public/partials/utils/time.html +109 -0
  185. inpanel/public/partials/utils/user.html +359 -0
  186. inpanel/public/robots.txt +2 -0
  187. inpanel/remote.py +109 -0
  188. inpanel/templates/file/preview.html +34 -0
  189. inpanel/templates/index.html +93 -0
  190. inpanel/utils.py +282 -0
  191. inpanel/web.py +1811 -0
  192. inpanel/yum.py +756 -0
  193. inpanel-1.2.1.dist-info/METADATA +399 -0
  194. inpanel-1.2.1.dist-info/RECORD +198 -0
  195. inpanel-1.2.1.dist-info/WHEEL +5 -0
  196. inpanel-1.2.1.dist-info/entry_points.txt +2 -0
  197. inpanel-1.2.1.dist-info/licenses/LICENSE +30 -0
  198. inpanel-1.2.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,239 @@
1
+ <div navbar ng-init="currentItem='utils.process'"></div>
2
+ <div ng-show="!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="loaded" style="display:none">
7
+ <div class="module-header">
8
+ <h3>进程管理</h3>
9
+ </div>
10
+
11
+ <div class="tabbable" ng-init="load()">
12
+ <ul class="nav nav-tabs">
13
+ <li ng-class="'active' | iftrue:activeTabName=='list'"><a href="#list" ng-click="tab_sec('list')" data-toggle="tab">进程列表</a></li>
14
+ <li ng-class="'active' | iftrue:activeTabName=='other'"><a href="#other" ng-click="tab_sec('other')" data-toggle="tab">待续</a></li>
15
+ <li class="pull-right" ng-show="activeTabName=='list'">
16
+ <button class="btn btn-default btn-sm" title="当前进程数量" ng-show="process && process.total">数量: {{process.total}}</button>
17
+ <div class="btn-group btn-group-sm">
18
+ <button class="btn btn-default" title="刷新进程列表" ng-click="refresh()" ng-disabled="auto_refresh"><i class="glyphicon glyphicon-refresh"></i></button>
19
+ <button class="btn btn-default" title="开启自动刷新" ng-click="auto_refresh_open()" ng-disabled="auto_refresh"><i class="glyphicon glyphicon-play"></i></button>
20
+ <button class="btn btn-default" title="关闭自动刷新" ng-click="auto_refresh_close()" ng-disabled="!auto_refresh"><i class="glyphicon glyphicon-stop"></i></button>
21
+ </div>
22
+ </li>
23
+ </ul>
24
+ <div class="tab-content">
25
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='list'" id="list">
26
+ <div ng-show="init_process"><div waiting></div></div>
27
+ <div ng-show="!init_process">
28
+ <table class="table table-hover table-bordered table-condensed">
29
+ <thead>
30
+ <tr>
31
+ <th style="width:50px;">#</th>
32
+ <th style="width:50px;">状态</th>
33
+ <th style="width:50px;">PID</th>
34
+ <th>名称</th>
35
+ <th>父进程</th>
36
+ <th>文件句柄</th>
37
+ <th>物理内存</th>
38
+ <th>虚拟内存</th>
39
+ <th style="width:130px">操作</th>
40
+ </tr>
41
+ </thead>
42
+ <tbody>
43
+ <tr ng-repeat="info in process.process">
44
+ <td>{{$index+1}}</td>
45
+ <td ng-bind-html-unsafe="info.state | process.status"></td>
46
+ <td>{{info.pid}}</td>
47
+ <td>{{info.name}}</td>
48
+ <td>{{info.ppid}}</td>
49
+ <td>{{info.fdsize}}</td>
50
+ <td>{{info.vmrss * 1024 | bytes2human}}</td>
51
+ <td>{{info.vmsize * 1024 | bytes2human}}</td>
52
+ <td>
53
+ <button class="btn btn-default btn-xs" ng-click="process_detail(info)">查看</button>
54
+ <button class="btn btn-default btn-xs" ng-click="processkillconfirm(info)">终止</button>
55
+ </td>
56
+ </tr>
57
+ </tbody>
58
+ </table>
59
+ </div>
60
+ </div>
61
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='other'" id="other">
62
+ 待开发功能
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ </div>
68
+
69
+
70
+ <div id="processkillconfirm" class="modal fade">
71
+ <div class="modal-dialog">
72
+ <div class="modal-content">
73
+ <div class="modal-header">
74
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
75
+ <h3 class="modal-title">终止进程 {{delete_process.name}}</h3>
76
+ </div>
77
+ <div class="modal-body">
78
+ <p>确定终止进程 {{delete_process.name}} [PID: {{delete_process.pid}}] 吗?</p>
79
+ </div>
80
+ <div class="modal-footer">
81
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
82
+ <button class="btn btn-danger" onclick="$('#processkillconfirm').modal('hide')" ng-click="processkill()">确认</button>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+
88
+ <div id="process_detail_dialog" class="modal fade">
89
+ <div class="modal-dialog">
90
+ <div class="modal-content">
91
+ <div class="modal-header">
92
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
93
+ <h3 class="modal-title">进程详情 {{current_process.name}}</h3>
94
+ </div>
95
+ <div class="modal-body">
96
+ <div class="tabbable">
97
+ <ul class="nav nav-tabs" role="tablist">
98
+ <li role="presentation" class="active"><a href="#info" aria-controls="info" role="tab" data-toggle="tab">信息</a></li>
99
+ <li role="presentation"><a href="#status" aria-controls="status" role="tab" data-toggle="tab">状态</a></li>
100
+ <li role="presentation"><a href="#file" aria-controls="file" role="tab" data-toggle="tab">文件</a></li>
101
+ <li role="presentation"><a href="#io" aria-controls="io" role="tab" data-toggle="tab">IO</a></li>
102
+ <li role="presentation"><a href="#memory" aria-controls="memory" role="tab" data-toggle="tab">内存</a></li>
103
+ <li role="presentation"><a href="#network" aria-controls="network" role="tab" data-toggle="tab">网络</a></li>
104
+ <button class="btn btn-default pull-right" title="刷新" ng-click="load_detial(current_process.pid)"><i class="glyphicon glyphicon-refresh"></i></button>
105
+ </ul>
106
+ <div class="tab-content">
107
+ <div class="tab-pane active" id="info" role="tabpanel">
108
+ <div ng-show="!current_process_loaded.info">
109
+ <div waiting ng-init="waitingText='正在加载中,请稍候...'"></div>
110
+ </div>
111
+ <div ng-show="current_process_loaded.info && current_process.info">
112
+ {{current_process.info}}
113
+ </div>
114
+ </div>
115
+ <div class="tab-pane" id="status" role="tabpanel">
116
+ <div ng-show="!current_process_loaded.status">
117
+ <div waiting ng-init="waitingText='正在加载中,请稍候...'"></div>
118
+ </div>
119
+ <table class="table table-bordered table-condensed" ng-show="current_process_loaded.status && current_process.status">
120
+ <tbody>
121
+ <tr><td>Name</td><td>{{current_process.status.name}}</td></tr>
122
+ <tr><td>Tgid</td><td>{{current_process.status.tgid}}</td></tr>
123
+ <tr><td>Pid</td><td>{{current_process.status.pid}}</td></tr>
124
+ <tr><td>状态</td><td ng-bind-html-unsafe="current_process.status.state | process.status"></td></tr>
125
+ <tr><td>PPid</td><td>{{current_process.status.ppid}}</td></tr>
126
+ <tr><td>FDSize</td><td>{{current_process.status.fdsize}}</td></tr>
127
+ <tr><td>Groups</td><td>{{current_process.status.groups}}</td></tr>
128
+ <tr><td>VmPeak</td><td>{{current_process.status.vmpeak[0]}} {{current_process.status.vmpeak[1]}}</td></tr>
129
+ <tr><td>VmSize</td><td>{{current_process.status.vmsize[0]}} {{current_process.status.vmsize[1]}}</td></tr>
130
+ <tr><td>VmLck</td><td>{{current_process.status.vmlock[0]}} {{current_process.status.vmlock[1]}}</td></tr>
131
+ <tr><td>VmHWM</td><td>{{current_process.status.vmhwm[0]}} {{current_process.status.vmhwm[1]}}</td></tr>
132
+ <tr><td>VmRSS</td><td>{{current_process.status.vmrss[0]}} {{current_process.status.vmrss[1]}}</td></tr>
133
+ <tr><td>VmData</td><td>{{current_process.status.vmdata[0]}} {{current_process.status.vmdata[1]}}</td></tr>
134
+ <tr><td>VmStk</td><td>{{current_process.status.vmstk[0]}} {{current_process.status.vmstk[1]}}</td></tr>
135
+ <tr><td>VmExe</td><td>{{current_process.status.vmexe[0]}} {{current_process.status.vmexe[1]}}</td></tr>
136
+ <tr><td>VmLib</td><td>{{current_process.status.vmlib[0]}} {{current_process.status.vmlib[1]}}</td></tr>
137
+ <tr><td>VmPTE</td><td>{{current_process.status.vmpte[0]}} {{current_process.status.vmpte[1]}}</td></tr>
138
+ <tr><td>VmSwap</td><td>{{current_process.status.vmswap[0]}} {{current_process.status.vmswap[1]}}</td></tr>
139
+ </tbody>
140
+ </table>
141
+ </div>
142
+ <div class="tab-pane" id="file" role="tabpanel">
143
+ <div ng-show="!current_process_loaded.file">
144
+ <div waiting ng-init="waitingText='正在加载中,请稍候...'"></div>
145
+ </div>
146
+ <div ng-show="current_process_loaded.file && current_process.file">
147
+ {{current_process.file}}
148
+ </div>
149
+ </div>
150
+ <div class="tab-pane" id="io" role="tabpanel">
151
+ <div ng-show="!current_process_loaded.io">
152
+ <div waiting ng-init="waitingText='正在加载中,请稍候...'"></div>
153
+ </div>
154
+ <table class="table table-bordered table-condensed" ng-show="current_process_loaded.io && current_process.io">
155
+ <thead>
156
+ <tr>
157
+ <th class="text-center">已读取</th>
158
+ <th class="text-center">已写入</th>
159
+ <th class="text-center">总读取</th>
160
+ <th class="text-center">总写入</th>
161
+ <th class="text-center">取消写入</th>
162
+ <th class="text-center">读取次数</th>
163
+ <th class="text-center">写入次数</th>
164
+ </tr>
165
+ </thead>
166
+ <tbody>
167
+ <tr>
168
+ <td class="text-center" title="实际从磁盘中读取的字节总数">{{current_process.io.read_bytes | bytes2human}}</td>
169
+ <td class="text-center" title="实际写入到磁盘中的字节总数">{{current_process.io.write_bytes | bytes2human}}</td>
170
+ <td class="text-center" title="读出的总字节数">{{current_process.io.rchar | bytes2human}}</td>
171
+ <td class="text-center" title="写入的总字节数">{{current_process.io.wchar | bytes2human}}</td>
172
+ <td class="text-center" title="取消写入的总字节数">{{current_process.io.cancelled_write_bytes | bytes2human}}</td>
173
+ <td class="text-center" title="读取磁盘的调用次数">{{current_process.io.syscr}}</td>
174
+ <td class="text-center" title="写入磁盘的调用次数">{{current_process.io.syscw}}</td>
175
+ </tr>
176
+ </tbody>
177
+ </table>
178
+ <div class="alert alert-info">
179
+ <p>说明:</p>
180
+ <ul>
181
+ <li>已读取:实际从磁盘中读取的字节总数</li>
182
+ <li>已写入:实际写入到磁盘中的字节总数</li>
183
+ <li>总读取:读出的总字节数,read()或者pread()中的长度参数总和(pagecache中统计而来,不代表实际磁盘的读入)</li>
184
+ <li>总写入:写入的总字节数,write()或者pwrite()中的长度参数总和</li>
185
+ <li>取消写入:取消写入的总字节数,由于截断pagecache导致应该发生而没有发生的写入字节数</li>
186
+ <li>读取次数:读取磁盘的调用次数,read()或者pread()总的调用次数</li>
187
+ <li>写入次数:写入磁盘的调用次数,write()或者pwrite()总的调用次数</li>
188
+ </ul>
189
+ </div>
190
+ </div>
191
+ <div class="tab-pane" id="memory" role="tabpanel">
192
+ <div ng-show="!current_process_loaded.memory">
193
+ <div waiting ng-init="waitingText='正在加载中,请稍候...'"></div>
194
+ </div>
195
+ <div>正在调试</div>
196
+ <table class="table table-bordered table-condensed" ng-show="current_process_loaded.memory && current_process.memory">
197
+ <thead>
198
+ <tr>
199
+ <th class="text-center">虚拟空间</th>
200
+ <th class="text-center">物理内存</th>
201
+ <th class="text-center">共享</th>
202
+ <th class="text-center">可执行内存</th>
203
+ <th class="text-center">虚拟库</th>
204
+ <th class="text-center">数据栈</th>
205
+ <th class="text-center">脏页数量</th>
206
+ </tr>
207
+ </thead>
208
+ <tbody>
209
+ <tr>
210
+ <td class="text-center" title="任务虚拟地址空间大小">{{(current_process.memory[0] * 4096) | bytes2human}}</td>
211
+ <td class="text-center" title="正在使用的物理内存大小">{{(current_process.memory[1] * 4096) | bytes2human}}</td>
212
+ <td class="text-center" title="共享页数">{{(current_process.memory[2]*4096) | bytes2human}}</td>
213
+ <td class="text-center" title="程序所拥有的可执行虚拟内存大小">{{(current_process.memory[3]*4096) | bytes2human}}</td>
214
+ <td class="text-center" title="被映像倒任务的虚拟内存空间的库的大小">{{(current_process.memory[4]*4096) | bytes2human}}</td>
215
+ <td class="text-center" title="程序数据段和用户态的栈的大小">{{(current_process.memory[5]*4096) | bytes2human}}</td>
216
+ <td class="text-center" title="脏页数量">{{current_process.memory[6]}}</td>
217
+ </tr>
218
+ </tbody>
219
+ </table>
220
+ </div>
221
+ <div class="tab-pane" id="network" role="tabpanel">
222
+ <div ng-show="!current_process_loaded.network">
223
+ <div waiting ng-init="waitingText='正在加载中,请稍候...'"></div>
224
+ </div>
225
+ <div ng-show="current_process_loaded.network && current_process.network">
226
+ {{current_process.network}}
227
+ </div>
228
+ </div>
229
+ </div>
230
+ </div>
231
+
232
+ </div>
233
+ <div class="modal-footer">
234
+ <!-- <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">关闭</button> -->
235
+ <button class="btn btn-default" onclick="$('#process_detail_dialog').modal('hide')" ng-click="process_detail_close()">关闭</button>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ </div>
@@ -0,0 +1,373 @@
1
+ <div navbar ng-init="currentItem='utils.repository'"></div>
2
+ <div ng-show="!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="loaded" style="display:none">
7
+ <div class="module-header">
8
+ <h3>软件仓库</h3>
9
+ </div>
10
+
11
+ <div class="tabbable" ng-init="load()">
12
+ <ul class="nav nav-tabs">
13
+ <li ng-class="'active' | iftrue:activeTabName=='yum'" ng-show="supported.yum"><a href="#yum" ng-click="tab_sec('yum')" data-toggle="tab">YUM</a></li>
14
+ <li ng-class="'active' | iftrue:activeTabName=='apt'" ng-show="supported.apt"><a href="#apt" ng-click="tab_sec('apt')" data-toggle="tab">APT</a></li>
15
+ <li ng-class="'active' | iftrue:activeTabName=='pacman'" ng-show="supported.pacman"><a href="#pacman" ng-click="tab_sec('pacman')" data-toggle="tab">Pacman</a></li>
16
+ <li ng-class="'active' | iftrue:activeTabName=='dnf'" ng-show="supported.dnf"><a href="#dnf" ng-click="tab_sec('dnf')" data-toggle="tab">DNF</a></li>
17
+ <li ng-class="'active' | iftrue:activeTabName=='zypper'" ng-show="supported.zypper"><a href="#zypper" ng-click="tab_sec('zypper')" data-toggle="tab">Zypper</a></li>
18
+ </ul>
19
+ <div class="tab-content">
20
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='yum'" id="yum">
21
+ <div class="clearfix">
22
+ <div class="pull-left"><h5>软件仓库源列表 for YUM</h5></div>
23
+ <div class="pull-right">
24
+ <div class="btn-group btn-group-sm">
25
+ <button class="btn btn-default" title="刷新配置列表" ng-click="load_yum(true)" ng-disabled="loading.yum"><i class="glyphicon glyphicon-refresh"></i></button>
26
+ <button class="btn btn-default" title="添加配置源" ng-click="yum_add_confirm()" ng-disabled="loading.yum"><i class="glyphicon glyphicon-plus"></i></button>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ <div ng-show="loading.yum"><div waiting></div></div>
31
+ <table class="table table-hover table-bordered table-condensed" ng-hide="loading.yum">
32
+ <thead>
33
+ <tr>
34
+ <th style="width:50px;">序号</th>
35
+ <th>名称</th>
36
+ <th style="width:130px">操作</th>
37
+ </tr>
38
+ </thead>
39
+ <tbody>
40
+ <tr ng-repeat="repo in repos_yum">
41
+ <td class="text-right">{{$index+1}}</td>
42
+ <td>{{repo}}</td>
43
+ <td>
44
+ <button class="btn btn-default btn-xs" ng-click="yum_mod_confirm($index)">修改</button>
45
+ <button class="btn btn-default btn-xs" ng-click="yum_del_confirm($index)">删除</button>
46
+ </td>
47
+ </tr>
48
+ </tbody>
49
+ </table>
50
+ </div>
51
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='apt'" id="apt">
52
+ <div class="clearfix">
53
+ <div class="pull-left"><h5>软件仓库列表 for Ubuntu and Debian</h5></div>
54
+ <div class="pull-right">
55
+ <div class="btn-group btn-group-sm">
56
+ <button class="btn btn-default" title="刷新配置列表" ng-click="load_apt(true)" ng-disabled="loading.apt"><i class="glyphicon glyphicon-refresh"></i></button>
57
+ <button class="btn btn-default" title="添加配置源" ng-click="apt_add_confirm()" ng-disabled="loading.apt"><i class="glyphicon glyphicon-plus"></i></button>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ <div ng-show="loading.apt"><div waiting></div></div>
62
+ <table class="table table-hover table-bordered table-condensed" ng-hide="loading.apt">
63
+ <thead>
64
+ <tr>
65
+ <th style="width:50px;">序号</th>
66
+ <th>名称</th>
67
+ <th style="width:130px">操作</th>
68
+ </tr>
69
+ </thead>
70
+ <tbody>
71
+ <tr ng-repeat="repo in repos_apt">
72
+ <td class="text-right">{{$index+1}}</td>
73
+ <td>{{repo}}</td>
74
+ <td>
75
+ <button class="btn btn-default btn-xs" ng-click="apt_mod_confirm($index)">修改</button>
76
+ <button class="btn btn-default btn-xs" ng-click="apt_del_confirm($index)">删除</button>
77
+ </td>
78
+ </tr>
79
+ </tbody>
80
+ </table>
81
+ </div>
82
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='pacman'" id="pacman">
83
+ <div class="clearfix">
84
+ <div class="pull-left"><h5>软件仓库列表 for Arch</h5></div>
85
+ <div class="pull-right">
86
+ <div class="btn-group btn-group-sm">
87
+ <button class="btn btn-default" title="刷新配置列表" ng-click="load_pacman(true)" ng-disabled="loading.pacman"><i class="glyphicon glyphicon-refresh"></i></button>
88
+ <button class="btn btn-default" title="添加配置源" ng-click="add_pacman()" ng-disabled="loading.pacman"><i class="glyphicon glyphicon-plus"></i></button>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ <div ng-show="loading.pacman"><div waiting></div></div>
93
+ <table class="table table-hover table-bordered table-condensed" ng-hide="loading.pacman">
94
+ <thead>
95
+ <tr>
96
+ <th style="width:50px;">序号</th>
97
+ <th>名称</th>
98
+ <th style="width:130px">操作</th>
99
+ </tr>
100
+ </thead>
101
+ <tbody>
102
+ <tr ng-repeat="repo in repos_pacman">
103
+ <td class="text-right">{{$index+1}}</td>
104
+ <td>{{repo}}</td>
105
+ <td>
106
+ <button class="btn btn-default btn-xs" ng-click="usermodconfirm($index)">修改</button>
107
+ <button class="btn btn-default btn-xs" ng-click="userdelconfirm($index)">删除</button>
108
+ </td>
109
+ </tr>
110
+ </tbody>
111
+ </table>
112
+ </div>
113
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='dnf'" id="dnf">
114
+ <div class="clearfix">
115
+ <div class="pull-left"><h5>软件仓库列表 for Fedora</h5></div>
116
+ <div class="pull-right">
117
+ <div class="btn-group btn-group-sm">
118
+ <button class="btn btn-default" title="刷新配置列表" ng-click="load_dnf(true)" ng-disabled="loading.dnf"><i class="glyphicon glyphicon-refresh"></i></button>
119
+ <button class="btn btn-default" title="添加配置源" ng-click="dnf_add_confirm()" ng-disabled="loading.dnf"><i class="glyphicon glyphicon-plus"></i></button>
120
+ </div>
121
+ </div>
122
+ </div>
123
+ <div ng-show="loading.dnf"><div waiting></div></div>
124
+ <table class="table table-hover table-bordered table-condensed" ng-hide="loading.dnf">
125
+ <thead>
126
+ <tr>
127
+ <th style="width:50px;">序号</th>
128
+ <th>名称</th>
129
+ <th style="width:130px">操作</th>
130
+ </tr>
131
+ </thead>
132
+ <tbody>
133
+ <tr ng-repeat="repo in repos_dnf">
134
+ <td class="text-right">{{$index+1}}</td>
135
+ <td>{{repo}}</td>
136
+ <td>
137
+ <button class="btn btn-default btn-xs" ng-click="dnf_mod_confirm($index)">修改</button>
138
+ <button class="btn btn-default btn-xs" ng-click="dnf_del_confirm($index)">删除</button>
139
+ </td>
140
+ </tr>
141
+ </tbody>
142
+ </table>
143
+ </div>
144
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='zypper'" id="zypper">
145
+ <div class="clearfix">
146
+ <div class="pull-left"><h5>软件仓库列表 for openSUSE</h5></div>
147
+ <div class="pull-right">
148
+ <div class="btn-group btn-group-sm">
149
+ <button class="btn btn-default" title="刷新配置列表" ng-click="load_zypper(true)" ng-disabled="loading.zypper"><i class="glyphicon glyphicon-refresh"></i></button>
150
+ <button class="btn btn-default" title="添加配置源" ng-click="add_zypper()" ng-disabled="loading.zypper"><i class="glyphicon glyphicon-plus"></i></button>
151
+ </div>
152
+ </div>
153
+ </div>
154
+ <div ng-show="loading.zypper"><div waiting></div></div>
155
+ <table class="table table-hover table-bordered table-condensed" ng-hide="loading.zypper">
156
+ <thead>
157
+ <tr>
158
+ <th style="width:50px;">序号</th>
159
+ <th>名称</th>
160
+ <th style="width:130px">操作</th>
161
+ </tr>
162
+ </thead>
163
+ <tbody>
164
+ <tr ng-repeat="repo in repos_zypper">
165
+ <td class="text-right">{{$index+1}}</td>
166
+ <td>{{repo}}</td>
167
+ <td>
168
+ <button class="btn btn-default btn-xs" ng-click="usermodconfirm($index)">修改</button>
169
+ <button class="btn btn-default btn-xs" ng-click="userdelconfirm($index)">删除</button>
170
+ </td>
171
+ </tr>
172
+ </tbody>
173
+ </table>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ </div>
178
+
179
+
180
+ <div id="yum-add-confirm" class="modal fade">
181
+ <div class="modal-dialog">
182
+ <div class="modal-content">
183
+ <div class="modal-header">
184
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
185
+ <h3 class="modal-title">添加YUM</h3>
186
+ </div>
187
+ <div class="modal-body">
188
+ <form class="form-horizontal" onsubmit="return false">
189
+ <div class="form-group form-inline">
190
+ <label class="col-sm-3 control-label">配置文件:</label>
191
+ <div class="col-sm-9">
192
+ <input class="form-control" type="text" ng-model="currepo.repo" placeholder=".repo配置文件">
193
+ </div>
194
+ </div>
195
+ <div class="form-group form-inline">
196
+ <label class="col-sm-3 control-label">仓库标识ID:</label>
197
+ <div class="col-sm-9">
198
+ <input class="form-control" type="text" ng-model="currepo.serverid" placeholder="仓库标识ID,ID需唯一">
199
+ </div>
200
+ </div>
201
+ <div class="form-group form-inline">
202
+ <label class="col-sm-3 control-label">仓库名称:</label>
203
+ <div class="col-sm-9">
204
+ <input class="form-control" type="text" ng-model="currepo.name" placeholder="仓库名称">
205
+ </div>
206
+ </div>
207
+ <div class="form-group form-inline">
208
+ <label class="col-sm-3 control-label">仓库路径:</label>
209
+ <div class="col-sm-9">
210
+ <input class="form-control" type="text" ng-model="currepo.baseurl" placeholder="仓库路径">
211
+ </div>
212
+ </div>
213
+ <div class="form-group form-inline">
214
+ <label class="col-sm-3 control-label">密钥监测:</label>
215
+ <div class="col-sm-9 checkbox">
216
+ <label><input type="checkbox" ng-checked="currepo.gpgcheck"> 是否检查密钥?</label>
217
+ </div>
218
+ </div>
219
+ <div class="form-group form-inline">
220
+ <label class="col-sm-3 control-label">状态:</label>
221
+ <div class="col-sm-9 checkbox">
222
+ <label><input type="checkbox" ng-model="currepo.enabled"> 是否启用?</label>
223
+ </div>
224
+ </div>
225
+ </form>
226
+ </div>
227
+ <div class="modal-footer">
228
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
229
+ <button class="btn btn-primary" onclick="$('#yum-add-confirm').modal('hide')" ng-click="yum_add()">添加</button>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ </div>
234
+
235
+ <div id="yum-del-confirm" class="modal fade">
236
+ <div class="modal-dialog">
237
+ <div class="modal-content">
238
+ <div class="modal-header">
239
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
240
+ <h3 class="modal-title">删除YUM源</h3>
241
+ </div>
242
+ <div class="modal-body">
243
+ <p>确定要删除YUM源配置文件 {{delrepo}} 吗?</p>
244
+ </div>
245
+ <div class="modal-footer">
246
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
247
+ <button class="btn btn-danger" onclick="$('#yum-del-confirm').modal('hide')" ng-click="yum_del()">确认删除</button>
248
+ </div>
249
+ </div>
250
+ </div>
251
+ </div>
252
+
253
+ <div id="dnf-add-confirm" class="modal fade">
254
+ <div class="modal-dialog">
255
+ <div class="modal-content">
256
+ <div class="modal-header">
257
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
258
+ <h3 class="modal-title">添加DNF</h3>
259
+ </div>
260
+ <div class="modal-body">
261
+ <form class="form-horizontal" onsubmit="return false">
262
+ <div class="form-group form-inline">
263
+ <label class="col-sm-3 control-label">配置文件:</label>
264
+ <div class="col-sm-9">
265
+ <input class="form-control" type="text" ng-model="curdnf.repo" placeholder=".repo配置文件">
266
+ </div>
267
+ </div>
268
+ <div class="form-group form-inline">
269
+ <label class="col-sm-3 control-label">仓库标识ID:</label>
270
+ <div class="col-sm-9">
271
+ <input class="form-control" type="text" ng-model="curdnf.serverid" placeholder="仓库标识ID,ID需唯一">
272
+ </div>
273
+ </div>
274
+ <div class="form-group form-inline">
275
+ <label class="col-sm-3 control-label">仓库名称:</label>
276
+ <div class="col-sm-9">
277
+ <input class="form-control" type="text" ng-model="curdnf.name" placeholder="仓库名称">
278
+ </div>
279
+ </div>
280
+ <div class="form-group form-inline">
281
+ <label class="col-sm-3 control-label">仓库路径:</label>
282
+ <div class="col-sm-9">
283
+ <input class="form-control" type="text" ng-model="curdnf.baseurl" placeholder="仓库路径">
284
+ </div>
285
+ </div>
286
+ <div class="form-group form-inline">
287
+ <label class="col-sm-3 control-label">密钥监测:</label>
288
+ <div class="col-sm-9 checkbox">
289
+ <label><input type="checkbox" ng-checked="curdnf.gpgcheck"> 是否检查密钥?</label>
290
+ </div>
291
+ </div>
292
+ <div class="form-group form-inline">
293
+ <label class="col-sm-3 control-label">状态:</label>
294
+ <div class="col-sm-9 checkbox">
295
+ <label><input type="checkbox" ng-model="curdnf.enabled"> 是否启用?</label>
296
+ </div>
297
+ </div>
298
+ </form>
299
+ </div>
300
+ <div class="modal-footer">
301
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
302
+ <button class="btn btn-primary" onclick="$('#dnf-add-confirm').modal('hide')" ng-click="dnf_add()">添加</button>
303
+ </div>
304
+ </div>
305
+ </div>
306
+ </div>
307
+
308
+ <div id="dnf-del-confirm" class="modal fade">
309
+ <div class="modal-dialog">
310
+ <div class="modal-content">
311
+ <div class="modal-header">
312
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
313
+ <h3 class="modal-title">删除DNF源</h3>
314
+ </div>
315
+ <div class="modal-body">
316
+ <p>确定要删除DNF源配置文件 {{deldnf}} 吗?</p>
317
+ </div>
318
+ <div class="modal-footer">
319
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
320
+ <button class="btn btn-danger" onclick="$('#dnf-del-confirm').modal('hide')" ng-click="dnf_del()">确认删除</button>
321
+ </div>
322
+ </div>
323
+ </div>
324
+ </div>
325
+
326
+ <div id="apt-add-confirm" class="modal fade">
327
+ <div class="modal-dialog">
328
+ <div class="modal-content">
329
+ <div class="modal-header">
330
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
331
+ <h3 class="modal-title">添加APT源</h3>
332
+ </div>
333
+ <div class="modal-body">
334
+ <form class="form-horizontal" onsubmit="return false">
335
+ <div class="form-group form-inline">
336
+ <label class="col-sm-3 control-label">配置文件:</label>
337
+ <div class="col-sm-9">
338
+ <input class="form-control" type="text" ng-model="curapt.source" placeholder="如: sources.list.d/custom.list">
339
+ </div>
340
+ </div>
341
+ <div class="form-group form-inline">
342
+ <label class="col-sm-3 control-label">配置内容:</label>
343
+ <div class="col-sm-9">
344
+ <textarea class="form-control" rows="6" ng-model="curapt.content" placeholder="deb http://archive.ubuntu.com/ubuntu/ jammy main restricted"></textarea>
345
+ </div>
346
+ </div>
347
+ </form>
348
+ </div>
349
+ <div class="modal-footer">
350
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
351
+ <button class="btn btn-primary" onclick="$('#apt-add-confirm').modal('hide')" ng-click="apt_add()">添加</button>
352
+ </div>
353
+ </div>
354
+ </div>
355
+ </div>
356
+
357
+ <div id="apt-del-confirm" class="modal fade">
358
+ <div class="modal-dialog">
359
+ <div class="modal-content">
360
+ <div class="modal-header">
361
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
362
+ <h3 class="modal-title">删除APT源</h3>
363
+ </div>
364
+ <div class="modal-body">
365
+ <p>确定要删除APT源配置文件 {{delapt}} 吗?</p>
366
+ </div>
367
+ <div class="modal-footer">
368
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
369
+ <button class="btn btn-danger" onclick="$('#apt-del-confirm').modal('hide')" ng-click="apt_del()">确认删除</button>
370
+ </div>
371
+ </div>
372
+ </div>
373
+ </div>