exception_notification_server 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b1a9b32025e7310064da7e1af6dd5b89a7be29b
4
- data.tar.gz: e60b53ecc73a96ae53f430aeac97c76f530d95d0
3
+ metadata.gz: ff6c4b7d7d6d97d6904d24ee91605c7e5c14b2b6
4
+ data.tar.gz: db3b49e19a0f56b3c96ad6a6360bf7e73c87600a
5
5
  SHA512:
6
- metadata.gz: e30a714c2c40b7f0c443176fd5df8b019786793b3b51e2ef9863082697d297ecd1648c68f07bf002cdc3baaf0b4bef600067a4fea27f55647c5475c3981fd5fc
7
- data.tar.gz: 52eaf7c726a26ebf863f63875f4c8c211d22a6c0b3cacbd3b9941eaab497a4bee183cee7491737186866fb9762cbcfbbc383847967e79aee9198197d2fceb0b5
6
+ metadata.gz: 49d28e04e01f321f6d40c0325bd4f9846b965f58a1264e484cdd4438544692e64b11e9990c4eb563cb21bd2c48dbc19374c3f268a78bc5bbbddda1163cfd8857
7
+ data.tar.gz: 933ace4582c0c80ddbd9597728c92c9248542b21200d12e0e5f859339800fa6d29ffbf7663914e72d113a4e76dbef4383ac7e107c1a5bbb80765b2a99ba4203a
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -1,3 +1,17 @@
1
+ @initialize_links = ->
2
+ $('.actions a').on 'click', (e)->
3
+ e.preventDefault()
4
+ e.stopPropagation()
5
+ ids = $("input[type='checkbox'][name='ids[]']").serializeArray().map((item)-> item.value)
6
+ return if ids.length == 0
7
+ $.ajax
8
+ url: $(this).attr('href')
9
+ type: $(this).data('ajax-method') || 'put'
10
+ dataType: 'json'
11
+ data:
12
+ ids: ids
13
+ success: ->
14
+ $('.filter form').trigger('submit.rails')
1
15
  $ ->
2
16
  $('body.notifications_show').each ->
3
17
  options =
@@ -11,5 +25,9 @@ $ ->
11
25
  xaxis:
12
26
  mode: 'time',
13
27
  timeformat: "%m/%d/%y",
14
- tickSize: [7, "day"],
28
+ tickSize: [7, 'day'],
15
29
  $('.graph').plot([$('.graph').data('values')], options)
30
+ $('body.notifications_index').each ->
31
+ initialize_links()
32
+ $(document).on 'change', "input[type='checkbox'][name='ids-select-all']", ->
33
+ $("input[type='checkbox'][name='ids[]']").prop('checked', $(this).prop('checked'))
@@ -4,11 +4,11 @@ module ExceptionNotificationServer
4
4
  password: ExceptionNotificationServer.configuration.password, only: :create
5
5
  respond_to :html, :json, :js
6
6
 
7
- before_filter :load_notification, only: [:show, :update, :investigate, :fix, :renew]
7
+ before_filter :load_notification, only: [:show, :update]
8
8
  skip_before_filter :redirect_to_root, only: [:create]
9
9
 
10
10
  def index
11
- params[:env] ||= Rails.env
11
+ params[:env] ||= 'all'
12
12
  params[:status] ||= :new
13
13
  @notifications = Notification.base_notifications(params[:status])
14
14
  .application(params[:application])
@@ -18,7 +18,6 @@ module ExceptionNotificationServer
18
18
  .group('"exception_notification_server_notifications"."id"')
19
19
  .order('count(ensn.id) DESC')
20
20
  .paginate(page: params[:page], per_page: 10)
21
- # .where('last month')
22
21
  respond_with @notifications
23
22
  end
24
23
 
@@ -35,29 +34,24 @@ module ExceptionNotificationServer
35
34
  end
36
35
 
37
36
  def update
38
- @notification.send("update#{'_recursive' if params[:recursive]}", notification_params_update)
37
+ update_notification(@notification, notification_params_update, params[:recursive])
39
38
  respond_with @notification
40
39
  end
41
40
 
42
41
  def investigate
43
- params[:recursive] = true
44
- params[:notification] ||= {}
45
- params[:notification][:status] = :investigating
46
- update
42
+ notifications_actions { |notification| update_notification(notification, { status: :investigating }, true) }
47
43
  end
48
44
 
49
45
  def fix
50
- params[:recursive] = true
51
- params[:notification] ||= {}
52
- params[:notification][:status] = :fixed
53
- update
46
+ notifications_actions { |notification| update_notification(notification, { status: :fixed }, true) }
54
47
  end
55
48
 
56
49
  def renew
57
- params[:recursive] = true
58
- params[:notification] ||= {}
59
- params[:notification][:status] = :new
60
- update
50
+ notifications_actions { |notification| update_notification(notification, { status: :new }, true) }
51
+ end
52
+
53
+ def destroy
54
+ notifications_actions(&:destroy_recursive)
61
55
  end
62
56
 
63
57
  protected
@@ -93,5 +87,17 @@ module ExceptionNotificationServer
93
87
  def notification_params_update
94
88
  params.require(:notification).permit!
95
89
  end
90
+
91
+ def update_notification(notification, notification_params = notification_params_update, recursive = true)
92
+ notification.send("update#{'_recursive_all' if recursive}", notification_params)
93
+ notification.remove_data if recursive && notification_params[:status] == :fixed
94
+ notification.recover_data if recursive && notification_params[:status] == :new && notification.status == 'fixed'
95
+ end
96
+
97
+ def notifications_actions(&block)
98
+ notications = Notification.where(id: params[:ids] || params[:id])
99
+ notications.each(&block)
100
+ params[:id] && notications.first ? respond_with(notications.first) : respond_with({}, location: root_path)
101
+ end
96
102
  end
97
103
  end
@@ -18,7 +18,7 @@ module ExceptionNotificationServer
18
18
  end
19
19
 
20
20
  def environment_options(options)
21
- default_environment = %w(production staging development test)
21
+ default_environment = %w(all production staging development test)
22
22
  options_for_select((default_environment + Notification.group(:env).pluck(:env)).uniq.map { |env| [env.humanize, env] }, options[:selected])
23
23
  end
24
24
 
@@ -15,7 +15,7 @@ module ExceptionNotificationServer
15
15
  scope "#{status}_notifications", -> { where(status: status) }
16
16
  end
17
17
  scope :application, ->(application = nil) { application.present? ? where(application: application) : all }
18
- scope :env, ->(env = nil) { where(env: env || Rails.env) }
18
+ scope :env, ->(env = nil) { env == 'all' ? all : where(env: env || Rails.env) }
19
19
 
20
20
  before_create do
21
21
  self.status = :new
@@ -45,10 +45,29 @@ module ExceptionNotificationServer
45
45
  end
46
46
 
47
47
  def update_recursive(updates)
48
- base_id = parent_id || id
48
+ Notification.where(parent_id: base_id).update_all(updates) if base_id.present?
49
+ end
50
+
51
+ def update_recursive_all(updates)
49
52
  Notification.where(arel_table[:id].eq(base_id).or(arel_table[:parent_id].eq(base_id))).update_all(updates) if base_id.present?
50
53
  end
51
54
 
55
+ # Those 4 fields can contain a lot of information (like 0.22mb), so we wanna decrease it by removing this info from children notification.
56
+ # I think it is enough to have this info in base notification.
57
+ def remove_data
58
+ update_recursive(data: nil, request: nil, session: nil, environment: nil)
59
+ end
60
+
61
+ # We recover information from base notification. Better solution is just use base info but i wanna divide notifications.
62
+ def recover_data
63
+ base_notification = Notification.find(base_id)
64
+ update_recursive(data: base_notification.data, request: base_notification.request, session: base_notification.session, environment: base_notification.environment)
65
+ end
66
+
67
+ def destroy_recursive
68
+ Notification.where(arel_table[:id].eq(base_id).or(arel_table[:parent_id].eq(base_id))).delete_all if base_id.present?
69
+ end
70
+
52
71
  protected
53
72
 
54
73
  def graph_data(from)
@@ -65,5 +84,9 @@ module ExceptionNotificationServer
65
84
  def gen_exception_hash
66
85
  Digest::SHA1.hexdigest("#{application}#{exception_class}#{exception_message}#{backtrace.to_s.gsub(rails_root, '')}")
67
86
  end
87
+
88
+ def base_id
89
+ parent_id || id
90
+ end
68
91
  end
69
92
  end
@@ -2,10 +2,13 @@
2
2
  count = local_assigns.fetch :count, true
3
3
  last_time = local_assigns.fetch :last_time, true
4
4
  env = local_assigns.fetch :env, false
5
+ checkbox = local_assigns.fetch :checkbox, false
5
6
  %table
6
7
  %thead
7
8
  %tr
8
9
  %th
10
+ - if checkbox
11
+ %th= check_box_tag 'ids-select-all', 'select-all'
9
12
  %th.hide-md Class
10
13
  %th Message
11
14
  %th.hide-md.hide-lg{style: 'width: 100px'} Server
@@ -22,6 +25,8 @@
22
25
  - notifications.each do |notification|
23
26
  %tr
24
27
  %td= link_to notification.id, notification_path(notification)
28
+ - if checkbox
29
+ %td= check_box_tag 'ids[]', notification.id
25
30
  %td.hide-md= link_to notification.exception_class, notification_path(notification)
26
31
  %td= link_to notification.exception_message, notification_path(notification)
27
32
  %td.hide-md.hide-lg= link_to notification.server, notification_path(notification)
@@ -3,5 +3,10 @@
3
3
  = select_tag :status, status_options(selected: params[:status]), onchange: '$(this.form).trigger(\'submit.rails\')'
4
4
  = select_tag :application, application_options(selected: params[:application]), prompt: 'All', onchange: '$(this.form).trigger(\'submit.rails\')'
5
5
  = select_tag :env, environment_options(selected: params[:env]), onchange: '$(this.form).trigger(\'submit.rails\')'
6
- = render partial: 'exception_notification_server/notifications/notifications', object: @notifications, as: :notifications
6
+ .actions
7
+ = link_to 'Investigate', investigate_notifications_path, data: {ajax_method: :put}
8
+ = link_to 'Fix', fix_notifications_path, data: {ajax_method: :put}
9
+ = link_to 'Renew', renew_notifications_path, data: {ajax_method: :put}
10
+ = link_to 'Destroy', notifications_path, data: {ajax_method: :delete}
11
+ = render partial: 'exception_notification_server/notifications/notifications', object: @notifications, as: :notifications, locals: {env: true, checkbox: true}
7
12
  = will_paginate @notifications, remote: true
@@ -1,2 +1,3 @@
1
- $('body > .content').html("#{escape_javascript( render file: 'exception_notification_server/notifications/index', layout: false, formats: [:html] )}");
1
+ $('body > .content').html("#{escape_javascript( render file: 'exception_notification_server/notifications/index', layout: false, formats: [:html], locals: {env: true, checkbox: true} )}");
2
2
  initialize_sparkline();
3
+ initialize_links();
@@ -2,6 +2,7 @@
2
2
  = link_to 'Investigate', investigate_notification_path, data: {method: :put} if @notification.status.to_sym == :new
3
3
  = link_to 'Fix', fix_notification_path, data: {method: :put} if @notification.status.to_sym == :investigating
4
4
  = link_to 'Renew', renew_notification_path, data: {method: :put} if @notification.status.to_sym == :fixed
5
+ = link_to 'Destroy', notification_path, data: {method: :delete}
5
6
  .graphic
6
7
  %h3 Last 3 month count:
7
8
  .graph{data: {values: @notification.similar_count_flot.to_json}}
data/config/routes.rb CHANGED
@@ -1,10 +1,16 @@
1
1
  ExceptionNotificationServer::Engine.routes.draw do
2
- resources :notifications, only: [:index, :create, :show, :update] do
2
+ resources :notifications, only: [:index, :create, :show, :update, :destroy] do
3
3
  member do
4
4
  put :investigate
5
5
  put :fix
6
6
  put :renew
7
7
  end
8
+ collection do
9
+ put :investigate
10
+ put :fix
11
+ put :renew
12
+ delete :destroy
13
+ end
8
14
  end
9
15
  root to: 'notifications#index'
10
16
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ['lib']
13
13
  s.authors = ['Anatoliy Varanitsa']
14
- s.date = '2015-10-15'
14
+ s.date = '2015-10-19'
15
15
  s.description = 'Gem that receive errors from exception_notification gem and show it grouped on pages'
16
16
  s.email = 'Prizrack13@mail.ru'
17
17
  s.extra_rdoc_files = [
@@ -1,3 +1,3 @@
1
1
  module ExceptionNotificationServer
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/readme.md CHANGED
@@ -1,5 +1,60 @@
1
- gem install exception_notification_server
1
+ # Exception Notification Server
2
2
 
3
+ **THIS README IS FOR THE MASTER BRANCH AND REFLECTS THE WORK CURRENTLY EXISTING ON THE MASTER BRANCH. IF YOU ARE WISHING TO USE A NON-MASTER BRANCH OF EXCEPTION NOTIFICATION, PLEASE CONSULT THAT BRANCH'S README AND NOT THIS ONE.**
4
+
5
+ -
6
+
7
+ The Exception Notification Server gem provides a engine for receiving notifications from Exception Notification gem (webhook-notifier).
8
+
9
+
10
+ ## Requirements
11
+
12
+ * Ruby 1.9.2 or greater
13
+ * Rails 4.1 or greater.
14
+
15
+ For previous releases, please checkout [this](#versions).
16
+
17
+
18
+ ## Getting Started
19
+
20
+ Add the following line to your application's Gemfile:
21
+
22
+ ```ruby
3
23
  gem 'exception_notification_server'
24
+ ```
4
25
 
26
+ Run
5
27
  rails g exception_notification_server:install
28
+
29
+ This command generates an initialize file (`config/initializers/exception_notification_server.rb`) where you can customize your configurations, migration and add routes.
30
+
31
+ ### Webhook notifier
32
+
33
+ This notifier ships notifications over the HTTP protocol.
34
+
35
+ #### Usage
36
+
37
+ Just add the [HTTParty](https://github.com/jnunemaker/httparty) gem to your `Gemfile`:
38
+
39
+ ```ruby
40
+ gem 'httparty'
41
+ ```
42
+
43
+ To configure it, you need to set the `url` option, like this:
44
+
45
+ ```ruby
46
+ ExceptionNotification.configure do |config|
47
+ config.add_notifier :webhook, {
48
+ url: 'http://domain.com:5555/notifier/notifications.json',
49
+ verify: false,
50
+ basic_auth: {
51
+ username: 'username',
52
+ password: 'password'
53
+ },
54
+ body: {
55
+ application: 'application_name',
56
+ env: Rails.env
57
+ }
58
+ }
59
+ end
60
+ ```
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception_notification_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anatoliy Varanitsa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-15 00:00:00.000000000 Z
11
+ date: 2015-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails