banter 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +1 -1
  4. data/Gemfile +1 -4
  5. data/README.md +0 -33
  6. data/Rakefile +0 -28
  7. data/banter.gemspec +2 -5
  8. data/lib/banter.rb +1 -1
  9. data/lib/banter/configuration.rb +2 -4
  10. data/lib/banter/notifier.rb +16 -0
  11. data/lib/banter/publisher.rb +1 -1
  12. data/lib/banter/railtie.rb +0 -4
  13. data/lib/banter/server/client_queue_listener.rb +4 -37
  14. data/lib/banter/server/rabbit_mq_subscriber.rb +6 -6
  15. data/lib/banter/server/subscriber_server.rb +0 -13
  16. data/lib/banter/version.rb +1 -1
  17. data/spec/banter/notifier_spec.rb +40 -0
  18. data/spec/banter/server/client_queue_listener_spec.rb +36 -84
  19. data/spec/banter/server/rabbitmq_subscriber_spec.rb +14 -10
  20. data/spec/banter/server/subscriber_server_spec.rb +0 -60
  21. data/spec/banter/subscriber_spec.rb +0 -81
  22. data/spec/spec_helper.rb +1 -8
  23. data/spec/support/test_notifier.rb +17 -0
  24. metadata +33 -100
  25. data/.ruby-version +0 -1
  26. data/lib/banter/web.rb +0 -34
  27. data/lib/banter/web/application.rb +0 -85
  28. data/lib/banter/web/helpers.rb +0 -13
  29. data/lib/banter/web/models/banter_message.rb +0 -124
  30. data/lib/banter/web/models/banter_worker.rb +0 -72
  31. data/lib/banter/web/serializers/banter_message_serializer.rb +0 -35
  32. data/lib/banter/web/serializers/banter_worker_serializer.rb +0 -40
  33. data/lib/banter/web/serializers/subscriber_serializer.rb +0 -26
  34. data/spec/banter/web/application_spec.rb +0 -181
  35. data/spec/banter/web/serializers/banter_message_serializer_spec.rb +0 -42
  36. data/spec/banter/web/serializers/banter_worker_serializer_spec.rb +0 -44
  37. data/spec/factories/banter_messages.rb +0 -28
  38. data/spec/factories/banter_workers.rb +0 -17
  39. data/spec/mongoid.yml +0 -7
  40. data/web/assets/javascripts/banter.js +0 -449
  41. data/web/assets/javascripts/dashboard_app/app.coffee +0 -4
  42. data/web/assets/javascripts/dashboard_app/controllers/message_controller.coffee +0 -28
  43. data/web/assets/javascripts/dashboard_app/controllers/messages_controller.coffee +0 -58
  44. data/web/assets/javascripts/dashboard_app/controllers/subscribers_controller.coffee +0 -25
  45. data/web/assets/javascripts/dashboard_app/controllers/worker_controller.coffee +0 -30
  46. data/web/assets/javascripts/dashboard_app/controllers/workers_list_controller.coffee +0 -28
  47. data/web/assets/javascripts/dashboard_app/routes.coffee +0 -82
  48. data/web/assets/javascripts/dashboard_app/services/common_methods_service.coffee +0 -6
  49. data/web/assets/javascripts/dashboard_app/services/message_methods_service.coffee +0 -18
  50. data/web/assets/javascripts/dashboard_app/services/messages_service.coffee +0 -17
  51. data/web/assets/javascripts/dashboard_app/services/subscribers_service.coffee +0 -8
  52. data/web/assets/javascripts/dashboard_app/services/worker_methods_service.coffee +0 -11
  53. data/web/assets/javascripts/dashboard_app/services/worker_service.coffee +0 -15
  54. data/web/assets/javascripts/ng-prettyjson.js +0 -15
  55. data/web/assets/stylesheets/banter.css +0 -78
  56. data/web/views/_message.haml +0 -74
  57. data/web/views/_messages.haml +0 -77
  58. data/web/views/_subscribers.haml +0 -22
  59. data/web/views/_worker.haml +0 -52
  60. data/web/views/_workers_list.haml +0 -35
  61. data/web/views/index.haml +0 -19
  62. data/web/views/layout.haml +0 -51
@@ -1,77 +0,0 @@
1
- .clearfix
2
-
3
- %div.extra-bold.pull-left.btn.font-size-lg{data: {'ng-show' => "worker", 'ng-class' => "{'bg-danger' : !isWorkerAlive(worker), 'bg-success': isWorkerExecuting(worker) && isWorkerAlive(worker), 'bg-info': !isWorkerExecuting(worker) && isWorkerAlive(worker)}" }}
4
- %span{data: { 'ng-show' => 'isWorkerExecuting(worker)'}}
5
- %span.glyphicon.glyphicon-refresh.spin
6
- WORKING
7
- %span{data: { 'ng-show' => '!isWorkerExecuting(worker) && isWorkerAlive(worker)'}}
8
- %span.glyphicon.glyphicon-play-circle
9
- IDLE
10
- %span{data: { 'ng-show' => '!isWorkerAlive(worker)'}}
11
- %span.glyphicon.glyphicon-off
12
- DEAD
13
-
14
-
15
- .pull-right
16
- .btn-group{data: { 'ng-show' => "!isAutoUpdating()"}}
17
- %a.btn.btn-default{data: { 'ng-click' => 'getFirstPage()', 'ng-disabled' => "!isAutoUpdating() && page == 1"}}
18
- %span.glyphicon.glyphicon-fast-backward
19
- %a.btn.btn-default{data: { 'ng-click' => 'getPreviousPage()', 'ng-disabled' => "!isAutoUpdating() && page == 1"}}
20
- %span.glyphicon.glyphicon-backward
21
- %a.btn.btn-default{data: { 'ng-click' => 'getNextPage()'}}
22
- %span.glyphicon.glyphicon-forward
23
-
24
- %a.btn.btn-primary{data: { 'ng-click' => 'pauseUpdating()', 'ng-show' => "isAutoUpdating()"}}
25
- %span.glyphicon.glyphicon-pause
26
- Pause Polling
27
- %a.btn.btn-primary{data: { 'ng-click' => 'resumeUpdating()', 'ng-show' => "!isAutoUpdating()"}}
28
- %span.glyphicon.glyphicon-play
29
- Resume Polling
30
- %h2{data: { 'ng-if' => '!worker && !subscriber'}}
31
- Messages
32
- %h2{data: { 'ng-if' => 'subscriber'}}
33
- Messages for {{subscriber}}
34
-
35
- .clearfix
36
- %div{ data: {'ng-if' => 'worker'}}
37
- %h2
38
- Messages processed on {{worker.process_name}} (PID: {{worker.pid}} )
39
- {{ worker.job_count }}
40
-  
41
- (
42
- %span.text-success {{worker.success_count}} Succeeded
43
- \/
44
- %span.text-warning {{worker.failed_count}} Failed
45
- )
46
-
47
- .table.table-responsive.margin-top-md
48
- %table.table.table-striped.table-bordered.table-hover
49
- %thead
50
- %tr
51
- %th Worker
52
- %th Subscriber
53
- %th Status
54
- %th Time Taken
55
- %th Started
56
- %th Finished
57
- %th
58
- %tbody
59
- %tr{data: { 'ng-repeat' => 'message in messages', 'ng-class' => "{'danger': isMessageFailed(message)}"}}
60
- %td
61
- %a{data: { 'ng-href' => dashboard_path("workers/{{message.worker.id}}")}}
62
- {{ message.worker.process_name}}\#{{message.worker.pid}}
63
- %td
64
- %a{data: {'ng-href' => dashboard_path("subscribers/{{message.subscriber_class}}/messages")}}
65
- {{ message.subscriber_class }}
66
- %td {{ message.status }}
67
- %td
68
- %div{data: {'ng-if' => 'message.done_at' }}
69
- {{ timeElapsed(message) }}ms
70
- %td {{ asTime(message.started_at) | amDateFormat:'MM/DD/YYYY, h:mm:ss a' }}
71
- %td
72
- %div{data: {'ng-if' => 'message.done_at' }}
73
- {{ asTime(message.done_at) | amDateFormat:'MM/DD/YYYY, h:mm:ss a' }}
74
- %th
75
- %a{data: { 'ng-href' => dashboard_path("messages/{{message.id}}") }}
76
- View
77
- %span.glyphicon.glyphicon-chevron-right
@@ -1,22 +0,0 @@
1
- %h2 Subscribers
2
- .table.table-responsive
3
- %table.table.table-striped.table-bordered.table-hover
4
- %thead
5
- %tr
6
- %th Subscriber
7
- %th Messages Processed
8
- %th Processing
9
- %th Succeeded
10
- %th Errored
11
- %th Validation Failed
12
- %tbody
13
- %tr{data: {'ng-repeat' => 'subscriber in subscribers'}}
14
- %td
15
- %a{data: { 'ng-href' => dashboard_path("subscribers/{{subscriber.class_name}}/messages")}}
16
- {{ subscriber.class_name }}
17
- %td {{ subscriber.total }}
18
- %td {{ subscriber.started_count }}
19
- %td {{ subscriber.success_count }}
20
- %td {{ subscriber.errored_count }}
21
- %td {{ subscriber.validation_failed_count }}
22
-
@@ -1,52 +0,0 @@
1
- .clearfix
2
- %div.extra-bold.pull-right.padding-large.font-size-lg.rounded-corners-md{data: { 'ng-class' => "{'bg-danger' : !isWorkerAlive(worker), 'bg-success': isWorkerExecuting(worker) && isWorkerAlive(worker), 'bg-info': !isWorkerExecuting(worker) && isWorkerAlive(worker)}" }}
3
- %span{data: { 'ng-show' => 'isWorkerExecuting(worker)'}}
4
- %span.glyphicon.glyphicon-refresh.spin
5
- WORKING
6
- %span{data: { 'ng-show' => '!isWorkerExecuting(worker)'}}
7
- %span.glyphicon.glyphicon-play-circle
8
- IDLE
9
- %span{data: { 'ng-show' => '!isWorkerAlive(worker)'}}
10
- %span.glyphicon.glyphicon-off
11
- DEAD
12
- %h2
13
- Worker
14
-
15
- %ul.list-group
16
- %li.list-group-item.row
17
- .col-sm-3.bold Host Name
18
- .col-sm-9 {{ worker.hostname }}
19
- %li.list-group-item.row
20
- .col-sm-3.bold Process Name
21
- .col-sm-9 {{ worker.process_name}} (PID: {{worker.pid}}
22
- %li.list-group-item.row
23
- .col-sm-3.bold Subscriber Classes
24
- .col-sm-9
25
- %div{data: { 'ng-repeat' => "worker_class in worker.worker_classes" }}
26
- %a{data: {'ng-href' => dashboard_path("subscribers/{{worker_class}}/messages")}} {{worker_class}}
27
- %li.list-group-item.row
28
- .col-sm-3.bold Started Time
29
- .col-sm-9 {{ asTime(worker.started_at) | amCalendar }}
30
- %li.list-group-item.row{data: { 'ng-if' => 'worker.stopped_at'}}
31
- .col-sm-3.bold Stopped Time
32
- .col-sm-9 {{ asTime(worker.stopped_at) | amCalendar }}
33
- %li.list-group-item.row
34
- .col-sm-3.bold
35
- %a{data: { 'ng-href' => dashboard_path("workers/{{worker.id}}/messages")}} Messages Processed
36
- .col-sm-9
37
- %a{data: { 'ng-href' => dashboard_path("workers/{{worker.id}}/messages")}} {{ worker.job_count }}
38
-  
39
- (
40
- %span.text-success {{worker.success_count}} Succeeded
41
- \/
42
- %span.text-warning {{worker.failed_count}} Failed
43
- )
44
- %li.list-group-item.row{data: { 'ng-if' => "isWorkerExecuting(worker)"}}
45
- .col-sm-3.bold
46
- %a{href: "#{root_path}messages/{{worker.current_message['_id']}}"} Current Job
47
- .col-sm-9
48
- {{ worker.current_message.subscriber_class }}
49
- %li.list-group-item.row{data: { 'ng-if' => "isWorkerExecuting(worker)"}}
50
- .col-sm-3.bold Current Payload
51
- .col-sm-9
52
- %pre{data: { 'pretty-json' => 'worker.current_message.payload'}}
@@ -1,35 +0,0 @@
1
- %h2
2
- Workers
3
-
4
- .table.table-responsive{data: { 'ng-if' => "workers.length > 0"} }
5
- %table.table.table-striped.table-bordered.table-hover
6
- %thead
7
- %tr
8
- %th Hostname
9
- %th Process Name
10
- %th PID
11
- %th Started
12
- %th Subscribers
13
- %th Current Job
14
- %tbody
15
- %tr{data: {'ng-repeat' => 'worker in workers'}}
16
- %td
17
- %a{data: { 'ng-href' => dashboard_path("workers/{{worker.id}}")}} {{ worker.hostname }}
18
- %td {{ worker.process_name }}
19
- %td {{ worker.pid }}
20
- %td
21
- {{ asTime(worker.started_at) | amCalendar }}
22
- %td
23
- %div{data: {'ng-if' => 'worker.worker_classes.length > 2'}}
24
- {{worker.worker_classes.length}} Subscribers
25
- %div{data: {'ng-if' => 'worker.worker_classes.length <= 2'}}
26
- %div{data: { 'ng-repeat' => 'worker_class in worker.worker_classes'}}
27
- %a{data: { 'ng-href' => dashboard_path("subscribers/{{worker_class}}/messages")}}{{ worker_class }}
28
-
29
- %td
30
- %div{data: { 'ng-show' => 'worker.current_message'}}
31
- %a{data: { 'ng-href' => dashboard_path("messages/{{worker.current_message.id}}")}}
32
- {{ worker.current_message.subscriber_class }}
33
- %span.glyphicon.glyphicon-refresh.spin
34
- %div{data: { 'ng-show' => '!worker.current_message'}}
35
- Idle
@@ -1,19 +0,0 @@
1
- %base{href: "#{root_path}dashboard/"}
2
- %div{data: { 'ng-app' => "dashboardApp"}}
3
- %div{data: { 'ng-view' => ''}}
4
-
5
- %script{type: 'text/ng-template', id: 'banter/workers-list.html'}
6
- = haml :_workers_list
7
-
8
- %script{type: 'text/ng-template', id: 'banter/worker.html'}
9
- = haml :_worker
10
-
11
- %script{type: 'text/ng-template', id: 'banter/message.html'}
12
- = haml :_message
13
-
14
- %script{type: 'text/ng-template', id: 'banter/messages.html'}
15
- = haml :_messages
16
-
17
- %script{type: 'text/ng-template', id: 'banter/subscribers.html'}
18
- = haml :_subscribers
19
-
@@ -1,51 +0,0 @@
1
- !!! 5
2
- %html(lang="en")
3
- %head
4
- %meta(charset="utf-8")
5
- %meta(http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1")
6
- %meta(name="viewport" content="width=device-width, initial-scale=1.0")
7
- %title Banter
8
- / Le HTML5 shim, for IE6-8 support of HTML elements
9
- /[if lt IE 9]
10
- %script{src: "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.1/html5shiv.js" }
11
- %link{:href=>"//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css", :rel=>"stylesheet"}
12
- %link{href: 'http://fonts.googleapis.com/css?family=Open+Sans:700,800,400', rel: 'stylesheet', type:'text/css'}
13
- %link{href: "#{root_path}stylesheets/banter.css", rel: 'stylesheet', type:'text/css'}
14
-
15
-
16
- %body
17
- %nav.navbar.navbar-default.navbar-fixed-top
18
- .container
19
- .navbar-header
20
- %button.navbar-toggle{type: 'button', data: { toggle: 'collapse', target: '#banter-navbar-collapse'}}
21
- %span.icon-bar
22
- %span.icon-bar
23
- %span.icon-bar
24
- %a.navbar-brand{href: root_path} Banter
25
- .collapse.navbar-collapse#banter-navbar-collapse
26
- %ul.nav.navbar-nav
27
- %li
28
- %a{href: dashboard_path} Workers
29
- %li
30
- %a{href: dashboard_path("subscribers")} Subscribers
31
- %li
32
- %a{href: dashboard_path("messages")} Messages
33
-
34
- .container{style: 'margin-top: 55px; padding-top: 10px'}
35
- = yield
36
- %footer
37
- %p
38
- Banter &copy; #{Date.today.year} (Developed & Maintained by
39
- %a{href: 'https://www.honest.com'} The Honest Company
40
- )
41
- :javascript
42
- window.Banter || (window.Banter = {});
43
- window.Banter.rootPath = "#{root_path}";
44
-
45
- %script{:src=>"//code.jquery.com/jquery-2.1.1.min.js"}
46
- %script{:src=>"//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"}
47
- %script{src: '//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.js' }
48
- %script{src: '//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.18/angular-route.min.js' }
49
- %script{src: '//cdnjs.cloudflare.com/ajax/libs/moment.js/2.7.0/moment.min.js' }
50
- %script{src: '//cdnjs.cloudflare.com/ajax/libs/angular-moment/0.7.1/angular-moment.min.js' }
51
- %script{src: "#{root_path}javascripts/banter.js" }