[Kimchi-devel] [RFC] asynchronous (websocket based) notification (Wok #16)

Aline Manera alinefm at linux.vnet.ibm.com
Mon Feb 13 14:47:47 UTC 2017


Hi Daniel,

On 02/08/2017 05:07 PM, Daniel Henrique Barboza wrote:
> Hi everyone,
>
> I want to start a discussion on 
> https://github.com/kimchi-project/wok/issues/16,
> "Asynchronous event notification".
>
> As most of you are aware, WoK does not have any sort of push 
> notification. WoK
> UI works based on a polling strategy using the Notifications API to 
> fetch for any
> backend notifications. This polling is on a 3 second interval to not 
> overload the server
> with these requests. The problems with this approach are obvious: the 
> cost of
> the polling process for both UI and backend, the interval for a 
> backend event to be
> delivered to the UI and so forth.
>
> - The idea
>
> This work aims to implement an asynchronous strategy to deliver server 
> to client
> messages. The idea is to use websockets* to establish a socket 
> connection between
> the UI and the backend. The backend can send any message using this 
> socket and
> the UI, after receiving it, can act upon immediately.
>
>
> - Push server implementation
>
> This socket in the backend side would act as a 'push server' that will 
> receive the
> connections and push the same messages to all of them. Only server to 
> client
> messages will be sent.
>
> This push server can be implemented in two ways:
>
> * from scratch
>
> * using an external library
>
> One library that seems to do this asynchronous socket implementation 
> is tornado
> ( https://github.com/tornadoweb/tornado ). It is present in all 
> distros we support
> and it has Apache 2.0 licensing. I'll experiment with it and see if it 
> helps. I am
> opened to any other suggestion of libraries that can be used in the 
> push server
> implementation. If no library is good enough for us, I'll have to 
> implement it from
> scratch.
>

I am OK in using it as it is available for Fedora 25, Ubuntu 16.10, 
openSUSE 42.2 and centOS 7.

It would be good to confirm it is also available for Debian 8 as Lucio 
is working to get the package into the official distro.

>
> - WoK backend design
>
> In WoK backend, my idea is to reuse the 'add_notification' method from the
> existing Notifications API. When adding a notification, fire a message 
> to the
> push server and notify all the listeners too.
>

Could you elaborate more on that?
For example, in Kimchi, after adding/starting/deleting a VM we will need 
to notify all the browsers sessions to update the data in UI.
Or on Wok, after enabling/disabling a plugin.

How will that be done with the notifications API?

 From the documentation, the notifications API is as below:

* **GET**: Retrieve the full description of the Notification
     * code: message ID
     * message: message text already translated
     * timestamp: first time notification was emitted

> This approach has the following advantages:
>
> - it will work out of the box for all backend messages in all plug-ins 
> that
> uses the 'add_notification' method;
>

Today, the notifications API is only shown on UI as a warning message to 
the user.
So I think much UI changes will be required.

> - we can re-use the same JSON message format of the Notifications API,
> reducing the amount of UI work we'll have to adapt the existing UIs;
>

Same I commented above.

> - it will be harmless to implement. Given that the push server will send
> messages to all connected UI endpoints, if no endpoint is connect
> no message will be sent.
>
>
> - WoK frontend design
>
> For any tab that wants to receive the push notifications, just connect
> to the push server via websocket and react to the messages sent - just
> like it is done today with the notifications API but without the need of
> sending the GET /notifications messages.
>
> We will need to be careful to not open unnecessary websockets when
> tab switching. We will need to pay attention to closing up the connections
> we don't need anymore.
>

Why do not open just one on Wok and reuse for all the plugins?

> I am planning to do a proof of concept of an UI working with this new
> push server notifications in the 'User Log' tab, together with this 
> backend
> work. When a new log entry is created, a push notification is sent and the
> UI would refresh automatically. This implementation would be used as a 
> base
> for the other tabs/plug-ins.
>
>
> Let me know what you think!
>
>
> Daniel
>
>
> PS: for the record, before deciding to use websockets I've considered 
> using SSE
> (Server-side Events), a HTML5 standard, but gave up due to lack of SSE 
> support
> from Microsoft browsers.
>
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/kimchi-devel/attachments/20170213/64a4794a/attachment-0001.html>


More information about the Kimchi-devel mailing list