[PATCH] [Wok] Save notifications in memory instead of object store

Notifications are temporary data structure, so save it in memory instead of object store, allowing it to work even when there is no disk space. Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/notifications.py | 6 +++++ src/wok/model/notifications.py | 52 +++++++++++++++++++++++++++++----------- src/wok/objectstore.py | 36 ---------------------------- src/wok/server.py | 4 ---- 4 files changed, 44 insertions(+), 54 deletions(-) diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py index 37d45f2..b57595e 100644 --- a/src/wok/control/notifications.py +++ b/src/wok/control/notifications.py @@ -21,6 +21,11 @@ from wok.control.base import Collection, Resource from wok.control.utils import UrlSubNode +NOTIFICATION_REQUESTS = { + 'DELETE': {'default': "UI notification deleted: %(ident)s"}, +} + + @UrlSubNode('notifications', True) class Notifications(Collection): def __init__(self, model): @@ -31,6 +36,7 @@ class Notifications(Collection): class Notification(Resource): def __init__(self, model, id): super(Notification, self).__init__(model, id) + self.log_map = NOTIFICATION_REQUESTS @property def data(self): diff --git a/src/wok/model/notifications.py b/src/wok/model/notifications.py index 77184db..79bed03 100644 --- a/src/wok/model/notifications.py +++ b/src/wok/model/notifications.py @@ -17,40 +17,64 @@ # 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 datetime import datetime + from wok.exception import NotFoundError, OperationFailed from wok.message import WokMessage +from wok.utils import wok_log + + +notificationsStore = {} + + +def add_notification(code, args={}, plugin_name=None): + if not code: + wok_log.error("Unable to add notification: invalid code '%(code)s'" % + {'code': str(code)}) + return + + global notificationsStore + notification = notificationsStore.get(code) + + # do not update timestamp if notification already exists + timestamp = datetime.now().isoformat() if notification is None else \ + notification['timestamp'] + + args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) + notificationsStore[code] = args class NotificationsModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass def get_list(self): - with self.objstore as session: - return session.get_list('notification') + global notificationsStore + return notificationsStore.keys() class NotificationModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass def lookup(self, id): - with self.objstore as session: - notification = session.get('notification', str(id)) + global notificationsStore + notification = notificationsStore.get(str(id)) - # use WokMessage to translate the notification - if notification: - timestamp = notification['timestamp'] - plugin = notification.pop('_plugin_name', None) - message = WokMessage(id, notification, plugin).get_text() - return {"code": id, "message": message, "timestamp": timestamp} + # use WokMessage to translate the notification + if notification: + timestamp = notification['timestamp'] + plugin = notification.pop('_plugin_name', None) + message = WokMessage(str(id), notification, plugin).get_text() + return {"code": id, "message": message, "timestamp": timestamp} raise NotFoundError("WOKNOT0001E", {'id': str(id)}) def delete(self, id): + global notificationsStore + try: - with self.objstore as session: - session.delete('notification', str(id)) + del notificationsStore[str(id)] except Exception as e: raise OperationFailed("WOKNOT0002E", {'id': str(id), 'msg': e.msg()}) diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py index ff3796c..59354f3 100644 --- a/src/wok/objectstore.py +++ b/src/wok/objectstore.py @@ -23,8 +23,6 @@ import sqlite3 import threading import traceback -from datetime import datetime - try: from collections import OrderedDict except ImportError: @@ -146,37 +144,3 @@ class ObjectStore(object): # exception again wok_log.error(traceback.format_exc()) return False - - -def add_notification(code, args={}, plugin_name=None): - if not code: - wok_log.error("Unable to add notification: invalid code '%(code)s'" % - {'code': str(code)}) - return - - try: - with ObjectStore() as session: - notification = session.get('notification', code) - except NotFoundError: - notification = None - - try: - # do not update timestamp if notification already exists - timestamp = datetime.now().isoformat() if notification is None else \ - notification['timestamp'] - args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) - - with ObjectStore() as session: - session.store('notification', code, args) - except Exception as e: - wok_log.error("Unable to store notification: %s" % e.message) - - -def clean_notifications(): - try: - with ObjectStore() as session: - notifications = session.get_list('notification') - for item in notifications: - session.delete('notification', item) - except Exception as e: - wok_log.error("Unable to clean notifications: %s" % e.message) diff --git a/src/wok/server.py b/src/wok/server.py index a329ed4..902d4bf 100644 --- a/src/wok/server.py +++ b/src/wok/server.py @@ -33,7 +33,6 @@ from wok.config import config as configParser from wok.config import paths, PluginConfig, WokConfig from wok.control import sub_nodes from wok.model import model -from wok.objectstore import clean_notifications from wok.proxy import start_proxy, terminate_proxy from wok.reqlogger import RequestLogger from wok.root import WokRoot @@ -107,9 +106,6 @@ class Server(object): if dev_env: cherrypy.log.screen = True - # clean object store notifications - clean_notifications() - # 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 -- 1.9.1

Reviewed-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com> On Fri, May 06, 2016 at 06:09:08PM -0300, Lucio Correia wrote:
Notifications are temporary data structure, so save it in memory instead of object store, allowing it to work even when there is no disk space.
Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/notifications.py | 6 +++++ src/wok/model/notifications.py | 52 +++++++++++++++++++++++++++++----------- src/wok/objectstore.py | 36 ---------------------------- src/wok/server.py | 4 ---- 4 files changed, 44 insertions(+), 54 deletions(-)
diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py index 37d45f2..b57595e 100644 --- a/src/wok/control/notifications.py +++ b/src/wok/control/notifications.py @@ -21,6 +21,11 @@ from wok.control.base import Collection, Resource from wok.control.utils import UrlSubNode
+NOTIFICATION_REQUESTS = { + 'DELETE': {'default': "UI notification deleted: %(ident)s"}, +} + + @UrlSubNode('notifications', True) class Notifications(Collection): def __init__(self, model): @@ -31,6 +36,7 @@ class Notifications(Collection): class Notification(Resource): def __init__(self, model, id): super(Notification, self).__init__(model, id) + self.log_map = NOTIFICATION_REQUESTS
@property def data(self): diff --git a/src/wok/model/notifications.py b/src/wok/model/notifications.py index 77184db..79bed03 100644 --- a/src/wok/model/notifications.py +++ b/src/wok/model/notifications.py @@ -17,40 +17,64 @@ # 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 datetime import datetime + from wok.exception import NotFoundError, OperationFailed from wok.message import WokMessage +from wok.utils import wok_log + + +notificationsStore = {} + + +def add_notification(code, args={}, plugin_name=None): + if not code: + wok_log.error("Unable to add notification: invalid code '%(code)s'" % + {'code': str(code)}) + return + + global notificationsStore + notification = notificationsStore.get(code) + + # do not update timestamp if notification already exists + timestamp = datetime.now().isoformat() if notification is None else \ + notification['timestamp'] + + args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) + notificationsStore[code] = args
class NotificationsModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass
def get_list(self): - with self.objstore as session: - return session.get_list('notification') + global notificationsStore + return notificationsStore.keys()
class NotificationModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass
def lookup(self, id): - with self.objstore as session: - notification = session.get('notification', str(id)) + global notificationsStore + notification = notificationsStore.get(str(id))
- # use WokMessage to translate the notification - if notification: - timestamp = notification['timestamp'] - plugin = notification.pop('_plugin_name', None) - message = WokMessage(id, notification, plugin).get_text() - return {"code": id, "message": message, "timestamp": timestamp} + # use WokMessage to translate the notification + if notification: + timestamp = notification['timestamp'] + plugin = notification.pop('_plugin_name', None) + message = WokMessage(str(id), notification, plugin).get_text() + return {"code": id, "message": message, "timestamp": timestamp}
raise NotFoundError("WOKNOT0001E", {'id': str(id)})
def delete(self, id): + global notificationsStore + try: - with self.objstore as session: - session.delete('notification', str(id)) + del notificationsStore[str(id)] except Exception as e: raise OperationFailed("WOKNOT0002E", {'id': str(id), 'msg': e.msg()}) diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py index ff3796c..59354f3 100644 --- a/src/wok/objectstore.py +++ b/src/wok/objectstore.py @@ -23,8 +23,6 @@ import sqlite3 import threading import traceback
-from datetime import datetime - try: from collections import OrderedDict except ImportError: @@ -146,37 +144,3 @@ class ObjectStore(object): # exception again wok_log.error(traceback.format_exc()) return False - - -def add_notification(code, args={}, plugin_name=None): - if not code: - wok_log.error("Unable to add notification: invalid code '%(code)s'" % - {'code': str(code)}) - return - - try: - with ObjectStore() as session: - notification = session.get('notification', code) - except NotFoundError: - notification = None - - try: - # do not update timestamp if notification already exists - timestamp = datetime.now().isoformat() if notification is None else \ - notification['timestamp'] - args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) - - with ObjectStore() as session: - session.store('notification', code, args) - except Exception as e: - wok_log.error("Unable to store notification: %s" % e.message) - - -def clean_notifications(): - try: - with ObjectStore() as session: - notifications = session.get_list('notification') - for item in notifications: - session.delete('notification', item) - except Exception as e: - wok_log.error("Unable to clean notifications: %s" % e.message) diff --git a/src/wok/server.py b/src/wok/server.py index a329ed4..902d4bf 100644 --- a/src/wok/server.py +++ b/src/wok/server.py @@ -33,7 +33,6 @@ from wok.config import config as configParser from wok.config import paths, PluginConfig, WokConfig from wok.control import sub_nodes from wok.model import model -from wok.objectstore import clean_notifications from wok.proxy import start_proxy, terminate_proxy from wok.reqlogger import RequestLogger from wok.root import WokRoot @@ -107,9 +106,6 @@ class Server(object): if dev_env: cherrypy.log.screen = True
- # clean object store notifications - clean_notifications() - # 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 -- 1.9.1
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel

Reviewed-by: Paulo Ricardo Paz Vital <pvital@linux.vnet.ibm.com> On May 06 06:09PM, Lucio Correia wrote:
Notifications are temporary data structure, so save it in memory instead of object store, allowing it to work even when there is no disk space.
Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/notifications.py | 6 +++++ src/wok/model/notifications.py | 52 +++++++++++++++++++++++++++++----------- src/wok/objectstore.py | 36 ---------------------------- src/wok/server.py | 4 ---- 4 files changed, 44 insertions(+), 54 deletions(-)
diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py index 37d45f2..b57595e 100644 --- a/src/wok/control/notifications.py +++ b/src/wok/control/notifications.py @@ -21,6 +21,11 @@ from wok.control.base import Collection, Resource from wok.control.utils import UrlSubNode
+NOTIFICATION_REQUESTS = { + 'DELETE': {'default': "UI notification deleted: %(ident)s"}, +} + + @UrlSubNode('notifications', True) class Notifications(Collection): def __init__(self, model): @@ -31,6 +36,7 @@ class Notifications(Collection): class Notification(Resource): def __init__(self, model, id): super(Notification, self).__init__(model, id) + self.log_map = NOTIFICATION_REQUESTS
@property def data(self): diff --git a/src/wok/model/notifications.py b/src/wok/model/notifications.py index 77184db..79bed03 100644 --- a/src/wok/model/notifications.py +++ b/src/wok/model/notifications.py @@ -17,40 +17,64 @@ # 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 datetime import datetime + from wok.exception import NotFoundError, OperationFailed from wok.message import WokMessage +from wok.utils import wok_log + + +notificationsStore = {} + + +def add_notification(code, args={}, plugin_name=None): + if not code: + wok_log.error("Unable to add notification: invalid code '%(code)s'" % + {'code': str(code)}) + return + + global notificationsStore + notification = notificationsStore.get(code) + + # do not update timestamp if notification already exists + timestamp = datetime.now().isoformat() if notification is None else \ + notification['timestamp'] + + args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) + notificationsStore[code] = args
class NotificationsModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass
def get_list(self): - with self.objstore as session: - return session.get_list('notification') + global notificationsStore + return notificationsStore.keys()
class NotificationModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass
def lookup(self, id): - with self.objstore as session: - notification = session.get('notification', str(id)) + global notificationsStore + notification = notificationsStore.get(str(id))
- # use WokMessage to translate the notification - if notification: - timestamp = notification['timestamp'] - plugin = notification.pop('_plugin_name', None) - message = WokMessage(id, notification, plugin).get_text() - return {"code": id, "message": message, "timestamp": timestamp} + # use WokMessage to translate the notification + if notification: + timestamp = notification['timestamp'] + plugin = notification.pop('_plugin_name', None) + message = WokMessage(str(id), notification, plugin).get_text() + return {"code": id, "message": message, "timestamp": timestamp}
raise NotFoundError("WOKNOT0001E", {'id': str(id)})
def delete(self, id): + global notificationsStore + try: - with self.objstore as session: - session.delete('notification', str(id)) + del notificationsStore[str(id)] except Exception as e: raise OperationFailed("WOKNOT0002E", {'id': str(id), 'msg': e.msg()}) diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py index ff3796c..59354f3 100644 --- a/src/wok/objectstore.py +++ b/src/wok/objectstore.py @@ -23,8 +23,6 @@ import sqlite3 import threading import traceback
-from datetime import datetime - try: from collections import OrderedDict except ImportError: @@ -146,37 +144,3 @@ class ObjectStore(object): # exception again wok_log.error(traceback.format_exc()) return False - - -def add_notification(code, args={}, plugin_name=None): - if not code: - wok_log.error("Unable to add notification: invalid code '%(code)s'" % - {'code': str(code)}) - return - - try: - with ObjectStore() as session: - notification = session.get('notification', code) - except NotFoundError: - notification = None - - try: - # do not update timestamp if notification already exists - timestamp = datetime.now().isoformat() if notification is None else \ - notification['timestamp'] - args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) - - with ObjectStore() as session: - session.store('notification', code, args) - except Exception as e: - wok_log.error("Unable to store notification: %s" % e.message) - - -def clean_notifications(): - try: - with ObjectStore() as session: - notifications = session.get_list('notification') - for item in notifications: - session.delete('notification', item) - except Exception as e: - wok_log.error("Unable to clean notifications: %s" % e.message) diff --git a/src/wok/server.py b/src/wok/server.py index a329ed4..902d4bf 100644 --- a/src/wok/server.py +++ b/src/wok/server.py @@ -33,7 +33,6 @@ from wok.config import config as configParser from wok.config import paths, PluginConfig, WokConfig from wok.control import sub_nodes from wok.model import model -from wok.objectstore import clean_notifications from wok.proxy import start_proxy, terminate_proxy from wok.reqlogger import RequestLogger from wok.root import WokRoot @@ -107,9 +106,6 @@ class Server(object): if dev_env: cherrypy.log.screen = True
- # clean object store notifications - clean_notifications() - # 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 -- 1.9.1
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
-- Paulo Ricardo Paz Vital Linux Technology Center, IBM Systems http://www.ibm.com/linux/ltc/

On 05/06/2016 06:09 PM, Lucio Correia wrote:
Notifications are temporary data structure, so save it in memory instead of object store, allowing it to work even when there is no disk space.
Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/notifications.py | 6 +++++ src/wok/model/notifications.py | 52 +++++++++++++++++++++++++++++----------- src/wok/objectstore.py | 36 ---------------------------- src/wok/server.py | 4 ---- 4 files changed, 44 insertions(+), 54 deletions(-)
diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py index 37d45f2..b57595e 100644 --- a/src/wok/control/notifications.py +++ b/src/wok/control/notifications.py @@ -21,6 +21,11 @@ from wok.control.base import Collection, Resource from wok.control.utils import UrlSubNode
+NOTIFICATION_REQUESTS = { + 'DELETE': {'default': "UI notification deleted: %(ident)s"}, +} + + @UrlSubNode('notifications', True) class Notifications(Collection): def __init__(self, model): @@ -31,6 +36,7 @@ class Notifications(Collection): class Notification(Resource): def __init__(self, model, id): super(Notification, self).__init__(model, id) + self.log_map = NOTIFICATION_REQUESTS
Should we log notifications events on user log activity? User log activity is to record any action user took on Wok. Although the user may close the notification box on UI, it should be transparent to user and do not impact the system.
@property def data(self): diff --git a/src/wok/model/notifications.py b/src/wok/model/notifications.py index 77184db..79bed03 100644 --- a/src/wok/model/notifications.py +++ b/src/wok/model/notifications.py @@ -17,40 +17,64 @@ # 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 datetime import datetime + from wok.exception import NotFoundError, OperationFailed from wok.message import WokMessage +from wok.utils import wok_log + + +notificationsStore = {} + + +def add_notification(code, args={}, plugin_name=None): + if not code: + wok_log.error("Unable to add notification: invalid code '%(code)s'" % + {'code': str(code)}) + return + + global notificationsStore + notification = notificationsStore.get(code) + + # do not update timestamp if notification already exists + timestamp = datetime.now().isoformat() if notification is None else \ + notification['timestamp'] + + args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) + notificationsStore[code] = args
class NotificationsModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass
def get_list(self): - with self.objstore as session: - return session.get_list('notification') + global notificationsStore + return notificationsStore.keys()
class NotificationModel(object): def __init__(self, **kargs): - self.objstore = kargs['objstore'] + pass
def lookup(self, id): - with self.objstore as session: - notification = session.get('notification', str(id)) + global notificationsStore + notification = notificationsStore.get(str(id))
- # use WokMessage to translate the notification - if notification: - timestamp = notification['timestamp'] - plugin = notification.pop('_plugin_name', None) - message = WokMessage(id, notification, plugin).get_text() - return {"code": id, "message": message, "timestamp": timestamp} + # use WokMessage to translate the notification + if notification: + timestamp = notification['timestamp'] + plugin = notification.pop('_plugin_name', None) + message = WokMessage(str(id), notification, plugin).get_text() + return {"code": id, "message": message, "timestamp": timestamp}
raise NotFoundError("WOKNOT0001E", {'id': str(id)})
def delete(self, id): + global notificationsStore + try: - with self.objstore as session: - session.delete('notification', str(id)) + del notificationsStore[str(id)] except Exception as e: raise OperationFailed("WOKNOT0002E", {'id': str(id), 'msg': e.msg()}) diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py index ff3796c..59354f3 100644 --- a/src/wok/objectstore.py +++ b/src/wok/objectstore.py @@ -23,8 +23,6 @@ import sqlite3 import threading import traceback
-from datetime import datetime - try: from collections import OrderedDict except ImportError: @@ -146,37 +144,3 @@ class ObjectStore(object): # exception again wok_log.error(traceback.format_exc()) return False - - -def add_notification(code, args={}, plugin_name=None): - if not code: - wok_log.error("Unable to add notification: invalid code '%(code)s'" % - {'code': str(code)}) - return - - try: - with ObjectStore() as session: - notification = session.get('notification', code) - except NotFoundError: - notification = None - - try: - # do not update timestamp if notification already exists - timestamp = datetime.now().isoformat() if notification is None else \ - notification['timestamp'] - args.update({"_plugin_name": plugin_name, "timestamp": timestamp}) - - with ObjectStore() as session: - session.store('notification', code, args) - except Exception as e: - wok_log.error("Unable to store notification: %s" % e.message) - - -def clean_notifications(): - try: - with ObjectStore() as session: - notifications = session.get_list('notification') - for item in notifications: - session.delete('notification', item) - except Exception as e: - wok_log.error("Unable to clean notifications: %s" % e.message) diff --git a/src/wok/server.py b/src/wok/server.py index a329ed4..902d4bf 100644 --- a/src/wok/server.py +++ b/src/wok/server.py @@ -33,7 +33,6 @@ from wok.config import config as configParser from wok.config import paths, PluginConfig, WokConfig from wok.control import sub_nodes from wok.model import model -from wok.objectstore import clean_notifications from wok.proxy import start_proxy, terminate_proxy from wok.reqlogger import RequestLogger from wok.root import WokRoot @@ -107,9 +106,6 @@ class Server(object): if dev_env: cherrypy.log.screen = True
- # clean object store notifications - clean_notifications() - # 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

On 09-05-2016 11:57, Aline Manera wrote:
On 05/06/2016 06:09 PM, Lucio Correia wrote:
Notifications are temporary data structure, so save it in memory instead of object store, allowing it to work even when there is no disk space.
Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/notifications.py | 6 +++++ src/wok/model/notifications.py | 52 +++++++++++++++++++++++++++++----------- src/wok/objectstore.py | 36 ---------------------------- src/wok/server.py | 4 ---- 4 files changed, 44 insertions(+), 54 deletions(-)
diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py index 37d45f2..b57595e 100644 --- a/src/wok/control/notifications.py +++ b/src/wok/control/notifications.py @@ -21,6 +21,11 @@ from wok.control.base import Collection, Resource from wok.control.utils import UrlSubNode
+NOTIFICATION_REQUESTS = { + 'DELETE': {'default': "UI notification deleted: %(ident)s"}, +} + + @UrlSubNode('notifications', True) class Notifications(Collection): def __init__(self, model): @@ -31,6 +36,7 @@ class Notifications(Collection): class Notification(Resource): def __init__(self, model, id): super(Notification, self).__init__(model, id) + self.log_map = NOTIFICATION_REQUESTS
Should we log notifications events on user log activity?
User log activity is to record any action user took on Wok. Although the user may close the notification box on UI, it should be transparent to user and do not impact the system.
Yes, I did it because it's user action. What impacts do you refer to? -- Lucio Correia Software Engineer IBM LTC Brazil

On 05/09/2016 01:28 PM, Lucio Correia wrote:
On 09-05-2016 11:57, Aline Manera wrote:
On 05/06/2016 06:09 PM, Lucio Correia wrote:
Notifications are temporary data structure, so save it in memory instead of object store, allowing it to work even when there is no disk space.
Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/notifications.py | 6 +++++ src/wok/model/notifications.py | 52 +++++++++++++++++++++++++++++----------- src/wok/objectstore.py | 36 ---------------------------- src/wok/server.py | 4 ---- 4 files changed, 44 insertions(+), 54 deletions(-)
diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py index 37d45f2..b57595e 100644 --- a/src/wok/control/notifications.py +++ b/src/wok/control/notifications.py @@ -21,6 +21,11 @@ from wok.control.base import Collection, Resource from wok.control.utils import UrlSubNode
+NOTIFICATION_REQUESTS = { + 'DELETE': {'default': "UI notification deleted: %(ident)s"}, +} + + @UrlSubNode('notifications', True) class Notifications(Collection): def __init__(self, model): @@ -31,6 +36,7 @@ class Notifications(Collection): class Notification(Resource): def __init__(self, model, id): super(Notification, self).__init__(model, id) + self.log_map = NOTIFICATION_REQUESTS
Should we log notifications events on user log activity?
User log activity is to record any action user took on Wok. Although the user may close the notification box on UI, it should be transparent to user and do not impact the system.
Yes, I did it because it's user action.
What impacts do you refer to?
It does not change the system configuration. It is only an internal mechanism used by Wok to notify user about something.

On 09-05-2016 13:49, Aline Manera wrote:
On 05/09/2016 01:28 PM, Lucio Correia wrote:
On 09-05-2016 11:57, Aline Manera wrote:
On 05/06/2016 06:09 PM, Lucio Correia wrote:
Notifications are temporary data structure, so save it in memory instead of object store, allowing it to work even when there is no disk space.
Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/notifications.py | 6 +++++ src/wok/model/notifications.py | 52 +++++++++++++++++++++++++++++----------- src/wok/objectstore.py | 36 ---------------------------- src/wok/server.py | 4 ---- 4 files changed, 44 insertions(+), 54 deletions(-)
diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py index 37d45f2..b57595e 100644 --- a/src/wok/control/notifications.py +++ b/src/wok/control/notifications.py @@ -21,6 +21,11 @@ from wok.control.base import Collection, Resource from wok.control.utils import UrlSubNode
+NOTIFICATION_REQUESTS = { + 'DELETE': {'default': "UI notification deleted: %(ident)s"}, +} + + @UrlSubNode('notifications', True) class Notifications(Collection): def __init__(self, model): @@ -31,6 +36,7 @@ class Notifications(Collection): class Notification(Resource): def __init__(self, model, id): super(Notification, self).__init__(model, id) + self.log_map = NOTIFICATION_REQUESTS
Should we log notifications events on user log activity?
User log activity is to record any action user took on Wok. Although the user may close the notification box on UI, it should be transparent to user and do not impact the system.
Yes, I did it because it's user action.
What impacts do you refer to?
It does not change the system configuration. It is only an internal mechanism used by Wok to notify user about something.
OK, I will send V2 without that. -- Lucio Correia Software Engineer IBM LTC Brazil
participants (4)
-
Aline Manera
-
joserz@linux.vnet.ibm.com
-
Lucio Correia
-
Paulo Ricardo Paz Vital