banter 1.4.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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" }