##// END OF EJS Templates
channelstream: added testing panel for live-notifications.
marcink -
r1274:2537ec98 default
parent child Browse files
Show More
@@ -566,6 +566,10 b' def make_map(config):'
566 566 '/my_account/toggle_visibility',
567 567 action='my_notifications_toggle_visibility',
568 568 conditions={'method': ['POST']})
569 m.connect('my_account_notifications_test_channelstream',
570 '/my_account/test_channelstream',
571 action='my_account_notifications_test_channelstream',
572 conditions={'method': ['POST']})
569 573
570 574 # NOTIFICATION REST ROUTES
571 575 with rmap.submapper(path_prefix=ADMIN_PREFIX,
@@ -24,13 +24,16 b' my account controller for RhodeCode admi'
24 24 """
25 25
26 26 import logging
27 import datetime
27 28
28 29 import formencode
29 30 from formencode import htmlfill
31 from pyramid.threadlocal import get_current_registry
30 32 from pylons import request, tmpl_context as c, url, session
31 33 from pylons.controllers.util import redirect
32 34 from pylons.i18n.translation import _
33 35 from sqlalchemy.orm import joinedload
36 from webob.exc import HTTPBadGateway
34 37
35 38 from rhodecode import forms
36 39 from rhodecode.lib import helpers as h
@@ -41,6 +44,8 b' from rhodecode.lib.base import BaseContr'
41 44 from rhodecode.lib.utils import jsonify
42 45 from rhodecode.lib.utils2 import safe_int, md5, str2bool
43 46 from rhodecode.lib.ext_json import json
47 from rhodecode.lib.channelstream import channelstream_request, \
48 ChannelstreamException
44 49
45 50 from rhodecode.model.validation_schema.schemas import user_schema
46 51 from rhodecode.model.db import (
@@ -430,3 +435,33 b' class MyAccountController(BaseController'
430 435 user.update_userdata(notification_status=new_status)
431 436 Session().commit()
432 437 return user.user_data['notification_status']
438
439 @auth.CSRFRequired()
440 @jsonify
441 def my_account_notifications_test_channelstream(self):
442 message = 'Test message sent via Channelstream by user: {}, on {}'.format(
443 c.rhodecode_user.username, datetime.datetime.now())
444 payload = {
445 'type': 'message',
446 'timestamp': datetime.datetime.utcnow(),
447 'user': 'system',
448 #'channel': 'broadcast',
449 'pm_users': [c.rhodecode_user.username],
450 'message': {
451 'message': message,
452 'level': 'info',
453 'topic': '/notifications'
454 }
455 }
456
457 registry = get_current_registry()
458 rhodecode_plugins = getattr(registry, 'rhodecode_plugins', {})
459 channelstream_config = rhodecode_plugins.get('channelstream', {})
460
461 try:
462 channelstream_request(channelstream_config, [payload], '/message')
463 except ChannelstreamException as e:
464 log.exception('Failed to send channelstream data')
465 return {"response": 'ERROR: {}'.format(e.__class__.__name__)}
466 return {"response": 'Channelstream data sent. '
467 'You should see a new live message now.'}
@@ -5,13 +5,22 b''
5 5 content-type="application/json"
6 6 loading="{{changeNotificationsLoading}}"
7 7 on-response="handleNotifications"
8 handle-as="json"></iron-ajax>
8 handle-as="json">
9 </iron-ajax>
10
11 <iron-ajax id="sendTestNotification"
12 method="post"
13 url="${url('my_account_notifications_test_channelstream')}"
14 content-type="application/json"
15 on-response="handleTestNotification"
16 handle-as="json">
17 </iron-ajax>
9 18
10 19 <div class="panel panel-default">
11 20 <div class="panel-heading">
12 21 <h3 class="panel-title">${_('Your Live Notification Settings')}</h3>
13 22 </div>
14 <div class="panel-body">
23 <div class="panel-body">
15 24
16 25 <p><strong>IMPORTANT:</strong> This feature requires enabled channelstream websocket server to function correctly.</p>
17 26
@@ -27,13 +36,29 b''
27 36 <rhodecode-toggle id="live-notifications" active="[[changeNotificationsLoading]]" on-change="toggleNotifications" ${'checked' if c.rhodecode_user.get_instance().user_data.get('notification_status') else ''}></rhodecode-toggle>
28 37 </div>
29 38 </div>
30 <div class="buttons">
31 <a class="btn btn-default" id="test-notification" on-tap="testNotifications">Test notification</a>
32 </div>
33 39 </div>
34 40 </div>
41 </div>
42 </div>
35 43
36 </div>
44 <div class="panel panel-default">
45 <div class="panel-heading">
46 <h3 class="panel-title">${_('Test Notifications')}</h3>
47 </div>
48 <div class="panel-body">
49
50
51 <div style="padding: 0px 0px 20px 0px">
52 <button class="btn" id="test-notification" on-tap="testNotifications">Test flash message</button>
53 <button class="btn" id="test-notification-live" on-tap="testNotificationsLive">Test live notification</button>
54 </div>
55 <h4 id="test-response"></h4>
56 </div>
57
58 </div>
59
60
61
37 62 </div>
38 63
39 64 <script type="text/javascript">
@@ -45,7 +70,7 b''
45 70 var ctrlr = $('#notificationsPage')[0];
46 71 ctrlr.toggleNotifications = function(event){
47 72 var ajax = $('#toggleNotifications')[0];
48 ajax.headers = {"X-CSRF-Token": CSRF_TOKEN}
73 ajax.headers = {"X-CSRF-Token": CSRF_TOKEN};
49 74 ajax.body = {notification_status:event.target.active};
50 75 ajax.generateRequest();
51 76 };
@@ -58,13 +83,25 b''
58 83 var level = levels[Math.floor(Math.random()*levels.length)];
59 84 var payload = {
60 85 message: {
61 message: 'This is a test notification.',
86 message: 'This is a test notification. ' + new Date(),
62 87 level: level,
63 88 force: true
64 89 }
65 90 };
66 91 $.Topic('/notifications').publish(payload);
67 }
92 };
93 ctrlr.testNotificationsLive = function(event){
94 var ajax = $('#sendTestNotification')[0];
95 ajax.headers = {"X-CSRF-Token": CSRF_TOKEN};
96 ajax.body = {test_msg: 'Hello !'};
97 ajax.generateRequest();
98 };
99 ctrlr.handleTestNotification = function(event){
100 var reply = event.detail.response.response;
101 reply = reply || 'no reply form server';
102 $('#test-response').html(reply);
103 };
68 104
69 105 </script>
106
70 107 </template>
General Comments 0
You need to be logged in to leave comments. Login now