Integrated Notifications Center

Hi Community,

In our latest v12 release we have introduced a new Notifications Center. The existing notifications dropdown (which shows a count of open documents) and the energy point notifications dropdown have been merged into a single notifications center:

The Notifications section will include notifications for:

  1. Mentions in comments
  2. Assignments
  3. Documents shared
  4. Energy Points (if enabled)

Notifications can be configured through Notification Settings:

  • System notifications can be enabled/disabled
  • DocTypes for which you want to show open documents can be selected (Subscribed Documents)
  • Email notifications can be enabled/disabled (for all types, or individual types)

Feel free to provide any feedback/report bugs regarding this feature here.

15 Likes

Notification Settings this is not visible under the to Tools section.

@glz Notification Settings can be viewed by clicking the Settings link in the notifications dropdown:

1 Like

I get this whole bunch of errors when trying to update to the latest version with the new notification center:

Traceback (most recent call last):
File “/usr/lib/python3.6/runpy.py”, line 193, in _run_module_as_main
main”, mod_spec)
File “/usr/lib/python3.6/runpy.py”, line 85, in _run_code
exec(code, run_globals)
File “/home/octo5/frappe-bench/apps/frappe/frappe/utils/bench_helper.py”, line 97, in
main()
File “/home/octo5/frappe-bench/apps/frappe/frappe/utils/bench_helper.py”, line 18, in main
click.Group(commands=commands)(prog_name=‘bench’)
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 764, in call
return self.main(*args, **kwargs)
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 717, in main
rv = self.invoke(ctx)
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 555, in invoke
return callback(*args, **kwargs)
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/click/decorator s.py”, line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File “/home/octo5/frappe-bench/apps/frappe/frappe/commands/init.py”, line 25, in _func
ret = f(frappe.dict(ctx.obj), *args, **kwargs)
File “/home/octo5/frappe-bench/apps/frappe/frappe/commands/site.py”, line 233, in migrate
migrate(context.verbose, rebuild_website=rebuild_website, skip_failing=skip
failing)
File “/home/octo5/frappe-bench/apps/frappe/frappe/migrate.py”, line 40, in mig rate
clear_global_cache()
File “/home/octo5/frappe-bench/apps/frappe/frappe/cache_manager.py”, line 48, in clear_global_cache
clear_website_cache()
File “/home/octo5/frappe-bench/apps/frappe/frappe/website/render.py”, line 295 , in clear_cache
frappe.clear_cache(“Guest”)
File “/home/octo5/frappe-bench/apps/frappe/frappe/init.py”, line 563, in c lear_cache
frappe.cache_manager.clear_user_cache(user)
File “/home/octo5/frappe-bench/apps/frappe/frappe/cache_manager.py”, line 31, in clear_user_cache
clear_notifications(user)
File “/home/octo5/frappe-bench/apps/frappe/frappe/desk/notifications.py”, line 120, in clear_notifications
config = get_notification_config()
File “/home/octo5/frappe-bench/apps/frappe/frappe/desk/notifications.py”, line 198, in get_notification_config
return frappe.cache().hget(“notification_config”, frappe.session.user, _get)
File “/home/octo5/frappe-bench/apps/frappe/frappe/utils/redis_wrapper.py”, lin e 172, in hget
value = super(RedisWrapper, self).hget(_name, key)
File "/home/octo5/frappe-bench/env/lib/python3.6/site-packages/redis/client.py ", line 1963, in hget
return self.execute_command(‘HGET’, name, key)
File "/home/octo5/frappe-bench/env/lib/python3.6/site-packages/redis/client.py ", line 668, in execute_command
return self.parse_response(connection, command_name, **options)
File "/home/octo5/frappe-bench/env/lib/python3.6/site-packages/redis/client.py ", line 680, in parse_response
response = connection.read_response()
File “/home/octo5/frappe-bench/env/lib/python3.6/site-packages/redis/connectio n.py”, line 629, in read_response
raise response
redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wr ong kind of value

Seen them. :+1:t5:

Okay now my instance is broken. Trying to run bench update threw up this error and i had to turn maintenance mode off and now Accounts Module has disappeared from my desk and bench clear-cache repeats this error.

Hi @flexy2ky

Sorry about that. The general workaround to the error you encountered has been to reboot the server. It solves the issue (at least for the moment) but it’s not exactly the most ideal solution… especially in production environments

Cheers!

Hi @prssannad

This is great work! Notifications are now a lot more organized. Thanks for the info

Cheers!

@wale Thanks for the feedback. But if i thought it was bad now it’s truly gone berserk.

Prior to rebooting, only the Accounting module was broken. But after rebooting i get this on the site:

pymysql.err.ProgrammingError: (‘DocType’, ‘Server Script’)

That’s my day getting from a hand grenade to a nuclear blast. The entire instance is now unaccessible.

Hi @flexy2ky

Have you run bench update again? You need to do that now that your server has rebooted. This time, it should complete successfully without the error and your site should be accessible… Accounts module n all

@wale these patches broke my system:

Executing execute:frappe.reload_doc(‘core’, ‘doctype’, ‘communication_link’) #2019-10-02 in erp.octo5.co (_0fa56694735f44cb)
Success: Done in 0.101s
Executing execute:frappe.reload_doc(‘core’, ‘doctype’, ‘communication’) #2019-10-02 in erp.octo5.co (_0fa56694735f44cb)
Success: Done in 0.675s
Executing execute:frappe.reload_doc(‘desk’, ‘doctype’, ‘notification_log’) in erp.octo5.co (_0fa56694735f44cb)
Success: Done in 0.29s
Executing execute:frappe.reload_doc(‘desk’, ‘doctype’, ‘notification_settings’) in erp.octo5.co (_0fa56694735f44cb)
Success: Done in 0.335s
Executing erpnext.patches.v12_0.replace_accounting_with_accounts_in_home_settings in erp.octo5.co (_0fa56694735f44cb)
Success: Done in 0.089s
Updating DocTypes for frappe : [========================================]
Updating DocTypes for erpnext : [========================================]
Updating customizations for Address
Generating Website Theme Files…

I ran bench update again after rebooting and the patches ran this time but after updating my instance came online but the modules were blank. So i ran bench build and had this error midway:

Built frappe/css/email.css

<— Last few GCs —>

[2519:0x3ee16f0] 66861 ms: Scavenge 596.9 (724.6) → 590.7 (724.6) MB, 153.9 / 6.7 ms allocation failure
[2519:0x3ee16f0] 67512 ms: Scavenge 603.0 (724.6) → 595.6 (724.6) MB, 108.5 / 9.7 ms allocation failure
[2519:0x3ee16f0] 68037 ms: Scavenge 607.8 (724.6) → 598.7 (724.6) MB, 128.7 / 10.1 ms allocation failure
[2519:0x3ee16f0] 69322 ms: Scavenge 626.1 (738.6) → 618.1 (738.6) MB, 119.7 / 0.0 ms allocation failure

<— JS stacktrace —>
Cannot get stack trace in GC.
FATAL ERROR: NewSpace::Rebalance Allocation failed - process out of memory
1: node::Abort() [/usr/bin/node]
2: 0x8cd49c [/usr/bin/node]
3: v8::Utils::ReportOOMFailure(char const*, bool) [/usr/bin/node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/bin/node]
5: 0xa6813b [/usr/bin/node]
6: v8::internal::MarkCompactCollector::Evacuate() [/usr/bin/node]
7: v8::internal::MarkCompactCollector::CollectGarbage() [/usr/bin/node]
8: v8::internal::Heap::MarkCompact() [/usr/bin/node]
9: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/usr/bin/node]
10: v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/bin/node]
11: v8::internal::factory::NewUninitializedFixedArray(int) [/usr/bin/node]
12: 0xd84b1c [/usr/bin/node]
13: 0xd9c3f5 [/usr/bin/node]
14: v8::internal::JSObject::AddDataElement(v8::internal::Handlev8::internal::JSObject, unsigned int, v8::internal::Handlev8::internal::Object, v8::internal::PropertyAttributes, v8::internal::Object::ShouldThrow) [/usr/bin/node]
15: v8::internal::Object::AddDataProperty(v8::internal::LookupIterator*, v8::internal::Handlev8::internal::Object, v8::internal::PropertyAttributes, v8::internal::Object::ShouldThrow, v8::internal::Object::StoreFromKeyed) [/usr/bin/node]
16: v8::internal::Object::SetProperty(v8::internal::LookupIterator*, v8::internal::Handlev8::internal::Object, v8::internal::LanguageMode, v8::internal::Object::StoreFromKeyed) [/usr/bin/node]
17: v8::internal::Runtime_SetProperty(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/bin/node]
18: 0xeb9095842fd
Aborted (core dumped)
error Command failed with exit code 134.
info Visit yarn run | Yarn for documentation about this command.

My system has enough memory so this error is unusual. Upside though is after the nuclear blast and aftershock, no visible damage is evident yet as my instance is back up (thankfully!). I’m still investigating the source of the error so i can explore means of preventing or mitigating it in future.

1 Like

Apparently this issue had been reported 5 days ago re:

https://github.com/frappe/frappe/pull/8431#commitcomment-35654704

but it seems there has either been no response or action towards fixing the error. I should have been more vigilant before trying to update as my notification is now broken. I can’t re-enable notifications and all previous notifications are no more listed.

Awesome! Thank you Frappe!

you are a brave soul if updating the production environment
wouldn’t it be wiser to clone it and update the clone?

@auliabismar well i did not have any inclination that this was not production-ready. If i had known i would not have pushed the update to my production instance. Moreover, there were other fixes with the update which i needed in my production environment so you could say i had no choice since i could not have been able to pick and choose which update to install.

Notification is completely broken now for me but at least my instance works. I just hope the developers of the new feature will look at the issue and try to fix it.

Hi @flexy2ky

I’m not sure why exactly you’re experiencing that issue. I also had to do a restart and everything’s fine… including notifications

Please try the following:

bench --site your-site-name migrate
bench update --patch

After running those 2 commands, check if the issue persists

Kind regards,

1 Like

flexy2ky probably refers to this Error: No module named Expense Claim Request

एक न.:relaxed::ok_hand:
Awesome!
Thank you !

A test environment with prod data is a best practice that makes proactive sense here. To simply update production, business risks facing and must react to possible devastating consequences no!?