[PATCH] [Wok] Fixed radio and checkbox focus event v3
by sguimaraes943@gmail.com
From: Samuel Guimarães <sguimaraes943(a)gmail.com>
This patch fixes focus event and keyboard navigation with radio and checkboxes input fields.
v2 - Fixes checkbox pointer cursor
v3 - Fixes focus ring color when checkbox is active
samhenri (1):
Fixed radio and checkbox focus event
ui/css/src/modules/_wok-forms.scss | 11 ++++++--
ui/css/wok.css | 57 ++++++++++++++++++++++++++++++--------
2 files changed, 54 insertions(+), 14 deletions(-)
--
1.9.3
8 years, 7 months
[PATCH] [Wok] Fix pep8 E126 (continuation line) issues
by Jose Ricardo Ziviani
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
tests/test_config.py.in | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/tests/test_config.py.in b/tests/test_config.py.in
index 28c7a57..23eeca2 100644
--- a/tests/test_config.py.in
+++ b/tests/test_config.py.in
@@ -136,77 +136,77 @@ class ConfigTests(unittest.TestCase):
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/fontawesome-webfont.ttf' % paths.fontawesome_dir
+ '%s/fontawesome-webfont.ttf' % paths.fontawesome_dir
},
'/fonts/OpenSans-LightItalic.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-LightItalic.ttf' % paths.opensans_dir
+ '%s/OpenSans-LightItalic.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-Bold.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-Bold.ttf' % paths.opensans_dir
+ '%s/OpenSans-Bold.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-Italic.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-Italic.ttf' % paths.opensans_dir
+ '%s/OpenSans-Italic.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-Semibold.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-Semibold.ttf' % paths.opensans_dir
+ '%s/OpenSans-Semibold.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-Light.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-Light.ttf' % paths.opensans_dir
+ '%s/OpenSans-Light.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-SemiboldItalic.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-SemiboldItalic.ttf' % paths.opensans_dir
+ '%s/OpenSans-SemiboldItalic.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-ExtraBold.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-ExtraBold.ttf' % paths.opensans_dir
+ '%s/OpenSans-ExtraBold.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-BoldItalic.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-BoldItalic.ttf' % paths.opensans_dir
+ '%s/OpenSans-BoldItalic.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-ExtraBoldItalic.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-ExtraBoldItalic.ttf' % paths.opensans_dir
+ '%s/OpenSans-ExtraBoldItalic.ttf' % paths.opensans_dir
},
'/fonts/OpenSans-Regular.ttf': {
'tools.wokauth.on': False,
'tools.nocache.on': False,
'tools.staticfile.on': True,
'tools.staticfile.filename':
- '%s/OpenSans-Regular.ttf' % paths.opensans_dir
+ '%s/OpenSans-Regular.ttf' % paths.opensans_dir
}
}
--
1.9.1
8 years, 7 months
[PATCH] [Wok] Bugfix 33: Implement a multiprocess file handler for log system
by Jose Ricardo Ziviani
- This commit adds a new watched file handler, used in Wok, but it uses
a recursive lock before emitting the log register to avoid possible
concurrency issues since multiple processes will write in the same
log file.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
*NOTE*: based on '[PATCH] [Wok] Bugfix 30: Duplicated log messages'
src/wok/safewatchedfilehandler.py | 44 +++++++++++++++++++++++++++++++++++++++
src/wok/server.py | 4 ++--
2 files changed, 46 insertions(+), 2 deletions(-)
create mode 100644 src/wok/safewatchedfilehandler.py
diff --git a/src/wok/safewatchedfilehandler.py b/src/wok/safewatchedfilehandler.py
new file mode 100644
index 0000000..c5fad85
--- /dev/null
+++ b/src/wok/safewatchedfilehandler.py
@@ -0,0 +1,44 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2016
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from logging.handlers import WatchedFileHandler
+from multiprocessing import RLock
+
+
+class SafeWatchedFileHandler(WatchedFileHandler):
+
+ def __init__(self, filename, mode='a', encoding=None, delay=0):
+ WatchedFileHandler.__init__(self, filename, mode, encoding, delay)
+ self._lock = RLock()
+
+ def close(self):
+ self._lock.acquire(timeout=2)
+ try:
+ WatchedFileHandler.close(self)
+
+ finally:
+ self._lock.release()
+
+ def emit(self, record):
+ self._lock.acquire(timeout=2)
+ try:
+ WatchedFileHandler.emit(self, record)
+
+ finally:
+ self._lock.release()
diff --git a/src/wok/server.py b/src/wok/server.py
index 13851e8..75b41d5 100644
--- a/src/wok/server.py
+++ b/src/wok/server.py
@@ -35,6 +35,7 @@ from wok.control import sub_nodes
from wok.model import model
from wok.proxy import start_proxy, terminate_proxy
from wok.root import WokRoot
+from wok.safewatchedfilehandler import SafeWatchedFileHandler
from wok.utils import get_enabled_plugins, import_class
LOGGING_LEVEL = {"debug": logging.DEBUG,
@@ -122,8 +123,7 @@ class Server(object):
cherrypy.log.access_log.addHandler(h)
# Create handler to error log file
- h = logging.handlers.WatchedFileHandler(options.error_log, 'a',
- delay=1)
+ h = SafeWatchedFileHandler(options.error_log, 'a', delay=1)
h.setLevel(logLevel)
h.setFormatter(cherrypy._cplogging.logfmt)
--
1.9.1
8 years, 7 months
[PATCH] [Wok] Bugfix 30: Duplicated log messages
by Jose Ricardo Ziviani
- today we have two file handlers pointing to the same file, this
commit closes the standard file handler to use the watched
file handler.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
src/wok/server.py | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/wok/server.py b/src/wok/server.py
index 80c1da2..13851e8 100644
--- a/src/wok/server.py
+++ b/src/wok/server.py
@@ -101,6 +101,17 @@ class Server(object):
if dev_env:
cherrypy.log.screen = True
+ # close standard file handlers because we are going to use a
+ # watchedfiled handler, otherwise we will have two file handlers
+ # pointing to the same file, duplicating log enries
+ for handler in cherrypy.log.access_log.handlers[:]:
+ if isinstance(handler, logging.FileHandler):
+ cherrypy.log.access_log.removeHandler(handler)
+
+ for handler in cherrypy.log.error_log.handlers[:]:
+ if isinstance(handler, logging.FileHandler):
+ cherrypy.log.error_log.removeHandler(handler)
+
# Create handler to access log file
h = logging.handlers.WatchedFileHandler(options.access_log, 'a',
delay=1)
--
1.9.1
8 years, 7 months
[PATCH v2] [Kimchi 0/8] Network API change + VEPA network support
by dhbarboza82@gmail.com
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
v2:
- changes on the existing network backend
This patch set implements two major changes in the network
backend and API of Kimchi:
- first 4 patches: changed the API to allow networks to be created
with more than one interface
Changing 'interface' to 'interfaces' in the network backend
to allow more than one interface to be added to a network. Existing
networks that use only one interface were adapted to use
interfaces[0] instead. UI changes were made to comply with this
change.
- last 4 patches: second version of the VEPA network patch set.
VEPA networks are somewhat similar to macvtap networks that tunnels
traffic between VMs by using an external VEPA-enabled switch that will
process and forward the frames faster than the host
CPU/OS can do.
The UI support is similar to what we already have for the macvtap
network. ATM the UI doesn't support multiple physical devices being
assigned to a single VEPA network but the backend does. This can
be enhanced in the future with an UI patch. The idea was to have
some UI support to get the feature alive ASAP.
To create a VEPA network the process is similar to the bridge
network, allowing more interfaces to be declared in the new
'interfaces' parameter of the networks backend.
This is the XML created when adding a VEPA network using
one interface:
<network>
<name>vepa_net</name>
<uuid>d6a3c86b-0592-4ccf-abf0-0abb353870b3</uuid>
<forward dev='enp0s25' mode='vepa'>
<interface dev='enp0s25'/>
</forward>
</network>
This is how a VM can declare a interface that belongs to this network:
<interface type='network'>
<mac address='52:54:00:9c:be:bd'/>
<source network='vepa_net'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
This is how the XML looks like when turning on the VM. Libvirt
will take care of the creation of the VEPA tunnel by using the
assigned physical interface in the network. If more interfaces
were added to the network, libvirt will do a load balance
between them and the VMs:
<interface type='direct'>
<mac address='52:54:00:9c:be:bd'/>
<source network='vepa_net' dev='enp0s25' mode='vepa'/>
<target dev='macvtap0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Daniel Henrique Barboza (8):
Changing network API 'interface' to array: docs and API
Changing network API: control and model changes
Changing network API: unit test changes
Changing network API: UI changes
VEPA network support: API and i18n changes
VEPA network support - models and xmlutils changes
VEPA network support: additional backend unit tests
VEPA network support: UI changes
API.json | 8 ++---
control/networks.py | 4 +--
docs/API.md | 15 +++++----
i18n.py | 7 +++--
model/networks.py | 61 +++++++++++++++++++++++-------------
tests/test_mock_network.py | 11 ++-----
tests/test_model_network.py | 13 +++++---
tests/test_networkxml.py | 44 +++++++++++++++++++++++++-
tests/test_template.py | 12 ++++---
ui/js/src/kimchi.network.js | 5 +--
ui/js/src/kimchi.network_add_main.js | 12 +++----
ui/pages/network-add.html.tmpl | 5 +--
xmlutils/network.py | 10 +++++-
13 files changed, 140 insertions(+), 67 deletions(-)
--
2.5.0
8 years, 7 months
[PATCH] [Wok] Fixed radio and checkbox focus event v2
by sguimaraes943@gmail.com
From: Samuel Guimarães <sguimaraes943(a)gmail.com>
This patch fixes focus event and keyboard navigation with radio and checkboxes input fields.
v2 - Fixes checkboxes
Samuel Guimarães (1):
Fixed radio and checkbox focus event
ui/css/src/modules/_wok-forms.scss | 11 ++++++--
ui/css/wok.css | 57 ++++++++++++++++++++++++++++++--------
2 files changed, 54 insertions(+), 14 deletions(-)
--
1.9.3
8 years, 7 months
Scrum meeting time
by Aline Manera
Hi all,
As discussed in the last scrum meeting, the scrum meeting time will
change from now on.
It will be 10AM BRT/BRST (UTC-3/UTC-2).
See you there on Wednesday.
Regards,
Aline Manera
8 years, 7 months
[PATCH] [Wok] Fixed radio and checkbox focus event
by sguimaraes943@gmail.com
From: Samuel Guimarães <sguimaraes943(a)gmail.com>
This patch fixes focus event and keyboard navigation with radio and checkboxes input fields.
Samuel Guimarães (1):
Fixed radio and checkbox focus event
ui/css/src/modules/_wok-forms.scss | 9 ++++++-
ui/css/wok.css | 55 ++++++++++++++++++++++++++++++--------
2 files changed, 52 insertions(+), 12 deletions(-)
--
1.9.3
8 years, 7 months
[PATCH] [Kimchi] [RFC] Max memory front-end
by sguimaraes943@gmail.com
From: Samuel Guimarães <sguimaraes943(a)gmail.com>
This patch adds a hidden "Max Memory" numbered input in Edit Guests. It also changes memory "text" input in Edit Templates to "number" to match Edit Guests ui.
Validation (form submission) wasn't added as the selected guest json doesn't have a "max memory" key.
Signed-off-by: Samuel Guimarães <sguimaraes943(a)gmail.com>
---
ui/css/kimchi.css | 27 ++++++++++++++++++++-------
ui/css/src/modules/_edit-guests.scss | 14 +++++++++++++-
ui/js/src/kimchi.guest_edit_main.js | 9 ++++++++-
ui/pages/guest-edit.html.tmpl | 9 ++++++++-
ui/pages/i18n.json.tmpl | 2 ++
ui/pages/template-edit.html.tmpl | 2 +-
6 files changed, 52 insertions(+), 11 deletions(-)
diff --git a/ui/css/kimchi.css b/ui/css/kimchi.css
index 88ae7de..d032c4c 100644
--- a/ui/css/kimchi.css
+++ b/ui/css/kimchi.css
@@ -78,7 +78,7 @@
#guest-add-window.modal-content label.box-iso-outer span.box-iso-border {
display: block;
border: 3px solid transparent;
- transition: all .1s ease-in-out;
+ transition: all 0.1s ease-in-out;
}
#template-add-window.modal-content label.box-iso-outer .iso-radio-hidden:checked + span.box-iso-border,
@@ -100,7 +100,7 @@
display: block;
border: 1px solid transparent;
background: #fff;
- transition: all .1s ease-in-out;
+ transition: all 0.1s ease-in-out;
}
#template-add-window.modal-content ul.list-template,
@@ -666,10 +666,20 @@
position: relative;
}
-#guest-edit-window #form-guest-edit-general #guest-edit-memory-textbox {
+#guest-edit-window #form-guest-edit-general #guest-max-memory-panel {
+ display: none;
+}
+
+#guest-edit-window #form-guest-edit-general #guest-edit-memory-textbox,
+#guest-edit-window #form-guest-edit-general #guest-edit-max-memory-textbox {
width: 590px;
}
+#guest-edit-window #form-guest-edit-general #guest-edit-memory-textbox,
+#guest-edit-window #form-guest-edit-general #guest-show-max-memory {
+ display: inline-block;
+}
+
#guest-edit-window #form-guest-edit-interface .column-actions {
width: 23%;
}
@@ -1007,7 +1017,7 @@
border: 1px solid #eee !important;
margin-bottom: 3px;
display: block;
- padding: .2em .6em .3em;
+ padding: 0.2em 0.6em 0.3em;
font-weight: 700;
line-height: 1;
text-align: left;
@@ -1250,7 +1260,7 @@
height: 664px;
width: 2164px;
left: 0;
- transition: left .2s ease-in-out;
+ transition: left 0.2s ease-in-out;
}
#template-add-window.modal-content p {
@@ -1526,7 +1536,9 @@
padding-right: 35px !important;
}
-#templates-root-container .wok-vm-gallery .item-hidden.column-type, #templates-root-container .wok-vm-gallery .item-hidden.column-version, #templates-root-container .wok-vm-gallery .item-hidden.column-processors {
+#templates-root-container .wok-vm-gallery .item-hidden.column-type,
+#templates-root-container .wok-vm-gallery .item-hidden.column-version,
+#templates-root-container .wok-vm-gallery .item-hidden.column-processors {
padding-bottom: 11px;
}
@@ -2067,7 +2079,8 @@
white-space: nowrap;
}
-.storage-modal .filter-select.popable .popover ul li:hover, .storage-modal .filter-select.popable .popover ul li:focus,
+.storage-modal .filter-select.popable .popover ul li:hover,
+.storage-modal .filter-select.popable .popover ul li:focus,
.storage-modal .storage-target-input .popover ul li:hover,
.storage-modal .storage-target-input .popover ul li:focus,
.storage-modal .storage-add-input .popover ul li:hover,
diff --git a/ui/css/src/modules/_edit-guests.scss b/ui/css/src/modules/_edit-guests.scss
index 4d642f3..057aad9 100644
--- a/ui/css/src/modules/_edit-guests.scss
+++ b/ui/css/src/modules/_edit-guests.scss
@@ -25,9 +25,21 @@
position: relative;
}
#form-guest-edit-general {
- #guest-edit-memory-textbox {
+
+ #guest-max-memory-panel {
+ display: none;
+ }
+
+ #guest-edit-memory-textbox,
+ #guest-edit-max-memory-textbox {
width: 590px;
}
+
+ #guest-edit-memory-textbox,
+ #guest-show-max-memory {
+ display: inline-block;
+ }
+
}
#form-guest-edit-interface {
.column-actions {
diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js
index 136469b..aa09b65 100644
--- a/ui/js/src/kimchi.guest_edit_main.js
+++ b/ui/js/src/kimchi.guest_edit_main.js
@@ -669,9 +669,16 @@ kimchi.guest_edit_main = function() {
wok.window.open('plugins/kimchi/guest-storage-add.html', 'extendCreateStorage');
});
if ((kimchi.thisVMState === "running") || (kimchi.thisVMState === "paused")) {
- $("#form-guest-edit-general input").not("#guest-edit-memory-textbox").prop("disabled", true);
+ $("#form-guest-edit-general input").not("#guest-edit-memory-textbox, #guest-edit-max-memory-textbox").prop("disabled", true);
}
+ $('#guest-show-max-memory').on('click', function(e) {
+ e.preventDefault;
+ $('#guest-max-memory-panel').slideToggle();
+ var text = $('#guest-show-max-memory span.text').text();
+ $('#guest-show-max-memory span.text').text(text == i18n['KCHVMED6008M'] ? i18n['KCHVMED6009M'] : i18n['KCHVMED6008M']);
+ });
+
var onAttached = function(params) {
refreshCDROMs();
};
diff --git a/ui/pages/guest-edit.html.tmpl b/ui/pages/guest-edit.html.tmpl
index 0ad635c..b3e5817 100644
--- a/ui/pages/guest-edit.html.tmpl
+++ b/ui/pages/guest-edit.html.tmpl
@@ -50,7 +50,14 @@
</div>
<div class="form-group">
<label for="guest-edit-memory-textbox">$_("Memory (MB)")</label>
- <input id="guest-edit-memory-textbox" class="form-control" name="memory" type="number" min="1024" step="1024" />
+ <div id="guest-memory">
+ <input id="guest-edit-memory-textbox" class="form-control" name="memory" type="number" min="1024" step="1024" />
+ <button id="guest-show-max-memory" class="btn btn-primary" type="button"><i class="fa fa-plus-circle"></i> <span class="text">$_("More")</span></button>
+ </div>
+ </div>
+ <div id="guest-max-memory-panel" class="form-group">
+ <label for="guest-edit-max-memory-textbox">$_("Max Memory (MB)")</label>
+ <input id="guest-edit-max-memory-textbox" class="form-control" name="max-memory" type="number" min="1024" step="1024" />
</div>
<div class="form-group">
<label for="guest-edit-icon-textbox">$_("Icon")</label>
diff --git a/ui/pages/i18n.json.tmpl b/ui/pages/i18n.json.tmpl
index 8bc8683..c06b9be 100644
--- a/ui/pages/i18n.json.tmpl
+++ b/ui/pages/i18n.json.tmpl
@@ -78,6 +78,8 @@
"KCHVMED6005M": "$_("drive_type:")",
"KCHVMED6006M": "$_("model:")",
"KCHVMED6007M": "$_("Affected devices:")",
+ "KCHVMED6008M": "$_("More")",
+ "KCHVMED6009M": "$_("Less")",
"KCHNET6001E": "$_("The VLAN id must be between 1 and 4094.")",
diff --git a/ui/pages/template-edit.html.tmpl b/ui/pages/template-edit.html.tmpl
index 478ccd5..47d4175 100644
--- a/ui/pages/template-edit.html.tmpl
+++ b/ui/pages/template-edit.html.tmpl
@@ -82,7 +82,7 @@
<input id="template-edit-version-textbox" class="form-control" name="os_version" type="text" disabled="disabled" />
</div>
<div class="template-edit-wrapper-controls">
- <input id="template-edit-memory-textbox" class="form-control" name="memory" type="text" />
+ <input id="template-edit-memory-textbox" class="form-control" name="memory" type="number" step="1" min="1" />
</div>
<div class="template-edit-wrapper-controls templ-edit-cdrom">
<input id="template-edit-cdrom-textbox" class="form-control" name="cdrom" type="text" disabled="disabled" />
--
1.9.3
8 years, 7 months
[PATCH v5] [Kimchi 0/8] Web serial console
by Jose Ricardo Ziviani
v5:
- fixed test config
+ '/serial': {
+ 'tools.nocache.on': True,
+ 'tools.wokauth.on': True,
+ 'tools.staticdir.dir': paths.serial_dir,
+ 'tools.staticdir.on': True
+ },
- fixed parent method calling from websocket.py
def get_target(self, target_plugin, path):
- target = super(CustomHandler, self).get_target(target_plugin, path)
+ if issubclass(CustomHandler, object):
+ target = super(CustomHandler, self).get_target(target_plugin,
+ path)
+ else:
+ target = request_proxy.get_target(self, target_plugin, path)
+
v4:
- fix patch encoding to utf-8
v3:
- applied code review
- removed favicon from this patch
v2:
- applied code review
- updated the build system
This is the initial version of a web serial console for kimchi/libvirt
VMs.
When a VM is turned on, a new action is displayed named "Connect
Serial", this will open a new tab with an interface like the existing
novnc.
That interface opens a websocket to kimchi webserver (nginx), then
it is redirected to websockify. Websockify will proxy that connection to
a local unix socket server to finally communicate with the guest
console.
I chose to create one server per guest because that's the way websockify
was designed (it was born inside novnc), so I could reuse the token
security plugin implemented in websockify. In order to avoid wasting
resources I decided to user unix socket, a local/lightweight/reliable
socket if compared with internet sockets, this uses files instead of
ports to accept connections.
When a connection is established no one else can get that console (I'm
not multiplexing it but it's possible in future). The serial console
will be available again if the current user does one of:
- type ctrl+q
- close the tab
- 2 min. timeout
Thanks
Jose Ricardo Ziviani (8):
Rename vnc.py to websocket.py
Implement the web serial console server
Implement the backend to support web serial console
Import term.js to Kimchi project
Implement the web serial console front-end
Implement the Kimchi front-end for the web serial console
Update the build system to make the serial console
Add test case for the socket server
COPYING | 2 +
Makefile.am | 4 +-
config.py.in | 6 +-
configure.ac | 3 +
control/vms.py | 3 +-
i18n.py | 3 +
model/vms.py | 43 +-
root.py | 6 +-
serialconsole.py | 315 +++
tests/test_config.py.in | 6 +
tests/test_model.py | 28 +-
ui/Makefile.am | 2 +-
ui/js/src/kimchi.api.js | 27 +
ui/js/src/kimchi.guest_main.js | 14 +-
ui/pages/guest.html.tmpl | 5 +-
ui/serial/Makefile.am | 21 +
ui/serial/html/Makefile.am | 21 +
ui/serial/html/serial.html | 99 +
ui/serial/libs/Makefile.am | 21 +
ui/serial/libs/term.js | 5973 ++++++++++++++++++++++++++++++++++++++++
vnc.py | 92 -
websocket.py | 127 +
22 files changed, 6711 insertions(+), 110 deletions(-)
create mode 100644 serialconsole.py
create mode 100644 ui/serial/Makefile.am
create mode 100644 ui/serial/html/Makefile.am
create mode 100644 ui/serial/html/serial.html
create mode 100644 ui/serial/libs/Makefile.am
create mode 100644 ui/serial/libs/term.js
delete mode 100644 vnc.py
create mode 100644 websocket.py
--
1.9.1
8 years, 7 months