
var initUI = function() { diff --git a/ui/js/wok.user-log.js b/ui/js/wok.user-log.js index 0e8fb09..083b6c3 100644 --- a/ui/js/wok.user-log.js +++ b/ui/js/wok.user-log.js @@ -153,6 +153,12 @@ wok.initUserLogContent = function() { $("#user-log-grid").bootgrid("search"); wok.initUserLogConfigGridData(); }); +
+ wok.addNotificationListener('userlog', function(message) { + if (message === 'new_log_entry') { + $("#refresh-button").click(); + } + });
Backend is sending a notification with 'new_log_entry' and you are registering a notification for 'userlog'. How is it working?
'userlog' is the identifier of the listener that will be used in the hash wok.notificationListeners.
Where does the backend make reference to it? On backend, I am only seeing the message as 'new_log_entry'. How does the UI assumes 'userlog' as the identifier?
There is no connection to the backend. This is simply an listener identifier of the tab "user log". It is an UI information only.
The backend can send the information in the format we've discussed. the UI can name its event listener freely. Or course we can standardize the name. Perhaps using the tab_id or something.
Why do we need a second identifier? Why isn't the message id (new_log_entry) enough?
Do you want me to split this contribution in two patches, one for backend and other for frontend, to make it clearer what is backend or frontend only code?
It is up to you. I am only trying to understand the whole flow.
Shouldn't the 'name' required by addNotificationListener be 'new_log_entry'? So wok would be redirect to the function automatically? Why do you need to distinguish the 'new_log_entry' later?
Also, we will need to create a pattern message for notification to avoid having a plugin overwriting a notification from another plugin.
Agree. I was aware that this 'new_log_entry' was going to be changed by something more formal.
That said, my suggestion is: <plugin>_<resource>_<action> which will result in something like:
wok_log_create kimchi_vms_create kimchi_vm_update kimchi_vm_start ginger_backups_create ginger_backup_restore
and so on.
That way, we can automatically add the notification on control/base.py which will work for everyone. And then, the plugin just need to register the listener on UI. Something like:
@model/base.py #Collection.index and Resource.index (need to cover both) def index(...): (...) # on sucsess notification = "%s_%s_%s" % (plugin_name, resource/collection, action) send_websocket_notification(notification)
def _generate_action_handler_base(...): (...) # on success notification = "%s_%s_%s" % (plugin_name, resource/collection, action) send_websocket_notification(notification)
What do you think?
I think we can work with this plugin_name/entity/action format, perhaps adding an 'args' field to it.
Which 'args'?
For example, /ginger/Users/create. Which user was created? This is something we would like to inform too.
Really? Why? On an notification received the UI will refresh the whole page. I don't think knowing the user will make difference.
In the case of this patch we would have 'wok/userlog/create' or something similar.
We need to also consider task handling in this context. We can change the default success/failure handles to also automatically report the status to the UI via websocket.
It already exists today for the user log. So we just need to link the log_request() to the send_notification_message() and we are all covered.
In fact, we need to consider a lot of standardization with this feature. For this patch, I we can start by doing the action handler changes you've proposed to implement the user log changes. I have no problems putting the notification under the 'index' of both Collection and Resource models too.
Daniel
};
wok.initUserLogWindow = function() {