[Kimchi-devel] [PATCH 3/4] Implement the package manager monitor frontend
Jose Ricardo Ziviani
joserz at linux.vnet.ibm.com
Sat Oct 3 12:25:46 UTC 2015
- Whenever Kimchi host tab is displayed this client will check if the package
manager is running, if so the logfile will be displayed in the Package Update
progress window.
Signed-off-by: Jose Ricardo Ziviani <joserz at linux.vnet.ibm.com>
---
plugins/kimchi/ui/js/src/kimchi.api.js | 39 +++++++++++++++++++++++++++++++++
plugins/kimchi/ui/js/src/kimchi.host.js | 29 ++++++++++++++++++++++++
plugins/kimchi/ui/pages/i18n.json.tmpl | 2 ++
3 files changed, 70 insertions(+)
diff --git a/plugins/kimchi/ui/js/src/kimchi.api.js b/plugins/kimchi/ui/js/src/kimchi.api.js
index c82d040..f5839f1 100644
--- a/plugins/kimchi/ui/js/src/kimchi.api.js
+++ b/plugins/kimchi/ui/js/src/kimchi.api.js
@@ -884,6 +884,45 @@ var kimchi = {
});
},
+ tailSoftwareUpdateLogs : function(suc, err, progress) {
+ var taskID = -1;
+ var onResponse = function(data) {
+ taskID = data['id'];
+ trackTask();
+ };
+
+ var trackTask = function() {
+ kimchi.getTask(taskID, onTaskResponse, err);
+ };
+
+ var onTaskResponse = function(result) {
+ var taskStatus = result['status'];
+ switch(taskStatus) {
+ case 'running':
+ progress && progress(result);
+ setTimeout(function() {
+ trackTask();
+ }, 1000);
+ break;
+ case 'finished':
+ case 'failed':
+ suc(result);
+ break;
+ default:
+ break;
+ }
+ };
+
+ wok.requestJSON({
+ url : 'plugins/kimchi/host/taillogs',
+ type : "POST",
+ contentType : "application/json",
+ dataType : "json",
+ success : onResponse,
+ error : err
+ });
+ },
+
updateSoftware : function(suc, err, progress) {
var taskID = -1;
var onResponse = function(data) {
diff --git a/plugins/kimchi/ui/js/src/kimchi.host.js b/plugins/kimchi/ui/js/src/kimchi.host.js
index c3765dc..c925fa1 100644
--- a/plugins/kimchi/ui/js/src/kimchi.host.js
+++ b/plugins/kimchi/ui/js/src/kimchi.host.js
@@ -258,6 +258,24 @@ kimchi.host_main = function() {
});
};
+ var startSoftwareUpdateProgress = function() {
+ var progressArea = $('#' + progressAreaID)[0];
+ $('#software-updates-progress-container').removeClass('hidden');
+ $(progressArea).text('');
+ !wok.isElementInViewport(progressArea) &&
+ progressArea.scrollIntoView();
+
+ kimchi.tailSoftwareUpdateLogs(function(result) {
+ reloadProgressArea(result);
+ wok.topic('kimchi/softwareUpdated').publish({
+ result: result
+ });
+ wok.message.warn(i18n['KCHUPD6010M']);
+ }, function(error) {
+ wok.message.error(i18n['KCHUPD6011M']);
+ }, reloadProgressArea);
+ };
+
var listSoftwareUpdates = function(gridCallback) {
kimchi.listSoftwareUpdates(function(softwareUpdates) {
if($.isFunction(gridCallback)) {
@@ -276,6 +294,17 @@ kimchi.host_main = function() {
$(updateButton).prop('disabled', softwareUpdates.length === 0);
}, function(error) {
var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+
+ // cannot get the list of packages because there is another
+ // package manager instance running, so follow that instance updates
+ if (message.indexOf("KCHPKGUPD0005E") !== -1) {
+ startSoftwareUpdateProgress();
+ if($.isFunction(gridCallback)) {
+ gridCallback([]);
+ }
+ return;
+ }
+
if($.isFunction(gridCallback)) {
gridCallback([]);
}
diff --git a/plugins/kimchi/ui/pages/i18n.json.tmpl b/plugins/kimchi/ui/pages/i18n.json.tmpl
index cd320e0..64045a9 100644
--- a/plugins/kimchi/ui/pages/i18n.json.tmpl
+++ b/plugins/kimchi/ui/pages/i18n.json.tmpl
@@ -103,6 +103,8 @@
"KCHUPD6007M": "$_("Updating...")",
"KCHUPD6008M": "$_("Failed to retrieve packages update information.")",
"KCHUPD6009M": "$_("Failed to update package(s).")",
+ "KCHUPD6010M": "$_("The package manager job is done.")",
+ "KCHUPD6011M": "$_("Failed to read the package manager logfile.")",
"KCHDR6001M": "$_("Debug report will be removed permanently and can't be recovered. Do you want to continue?")",
--
1.9.1
More information about the Kimchi-devel
mailing list