whoops 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,19 +15,13 @@ class Whoops::Event
15
15
 
16
16
  def self.record(params)
17
17
  params = params.with_indifferent_access
18
-
19
- event_group_params = params.slice(*Whoops::EventGroup.field_names)
20
- event_group_params[:identifier] = params[:event_group_identifier]
18
+
19
+ event_group_params = params.slice(*Whoops::EventGroup.field_names)
20
+ event_group_params[:identifier] = params[:event_group_identifier]
21
21
  event_group_params[:last_recorded_at] = params[:event_time]
22
+ event_group_params
23
+ event_group = Whoops::EventGroup.handle_new_event(event_group_params)
22
24
 
23
- event_group = Whoops::EventGroup.first(:conditions => event_group_params.slice(*Whoops::EventGroup.identifying_fields))
24
- if event_group
25
- event_group.attributes = event_group_params
26
- event_group.save
27
- else
28
- event_group = Whoops::EventGroup.create(event_group_params)
29
- end
30
-
31
25
  event_params = params.slice(*Whoops::Event.field_names)
32
26
  event_group.events.create(event_params)
33
27
  end
@@ -3,17 +3,46 @@ class Whoops::EventGroup
3
3
  include Mongoid::Document
4
4
  include FieldNames
5
5
 
6
- [:service, :environment, :event_type, :message, :identifier, :logging_strategy_name].each do |string_field|
6
+ [
7
+ :service,
8
+ :environment,
9
+ :event_type,
10
+ :message,
11
+ :identifier,
12
+ :logging_strategy_name
13
+ ].each do |string_field|
7
14
  field string_field, :type => String
8
15
  end
16
+
9
17
  field :last_recorded_at, :type => DateTime
18
+ field :archived, :type => Boolean, :default => false
10
19
  field :notify_on_next_occurrence, :type => Boolean, :default => true
11
20
 
21
+ class << self
22
+ def handle_new_event(params)
23
+ identifying_params = params.slice(*Whoops::EventGroup.identifying_fields)
24
+ event_group = Whoops::EventGroup.first(:conditions => identifying_params)
25
+
26
+ if event_group
27
+ event_group.attributes = params
28
+ else
29
+ event_group = Whoops::EventGroup.new(params)
30
+ end
31
+
32
+ if event_group.valid?
33
+ event_group.send_notifications
34
+ event_group.save
35
+ end
36
+
37
+ event_group
38
+ end
39
+ end
40
+
12
41
  has_many :events, :class_name => "Whoops::Event"
13
42
 
14
43
  validates_presence_of :identifier, :event_type, :service, :message
15
44
 
16
- after_validation :send_notifications
45
+ before_save :handle_archival
17
46
 
18
47
  def self.identifying_fields
19
48
  field_names - ["message", "last_recorded_at"]
@@ -32,11 +61,22 @@ class Whoops::EventGroup
32
61
  end
33
62
  services
34
63
  end
64
+
65
+ def handle_archival
66
+ if self.archived_change && !self.new_record?
67
+ if self.archived
68
+ self.notify_on_next_occurrence = false
69
+ else
70
+ self.notify_on_next_occurrence = true
71
+ end
72
+ end
73
+ end
74
+
35
75
 
36
76
  def send_notifications
77
+ return unless self.notify_on_next_occurrence
37
78
  matcher = Whoops::NotificationRule::Matcher.new(self)
38
- Whoops::NotificationMailer.event_notification(self, matcher.matches)
79
+ Whoops::NotificationMailer.event_notification(self, matcher.matches).deliver unless matcher.matches.empty?
39
80
  self.notify_on_next_occurrence = false
40
81
  end
41
-
42
82
  end
@@ -39,7 +39,7 @@ class Whoops::NotificationRule
39
39
  end
40
40
 
41
41
  def matches
42
- Whoops::NotificationRule.where(:matchers => /^#{event_group.service}/)
42
+ @matches ||= Whoops::NotificationRule.where(:matchers => /^#{event_group.service}/)
43
43
  end
44
44
  end
45
45
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoops
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 7
10
- version: 0.1.7
9
+ - 8
10
+ version: 0.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Higginbotham
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-02 00:00:00 -04:00
18
+ date: 2011-08-26 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -151,7 +151,7 @@ dependencies:
151
151
  type: :development
152
152
  version_requirements: *id009
153
153
  - !ruby/object:Gem::Dependency
154
- name: mocha
154
+ name: fabrication
155
155
  prerelease: false
156
156
  requirement: &id010 !ruby/object:Gem::Requirement
157
157
  none: false
@@ -165,7 +165,7 @@ dependencies:
165
165
  type: :development
166
166
  version_requirements: *id010
167
167
  - !ruby/object:Gem::Dependency
168
- name: fabrication
168
+ name: faker
169
169
  prerelease: false
170
170
  requirement: &id011 !ruby/object:Gem::Requirement
171
171
  none: false
@@ -178,24 +178,10 @@ dependencies:
178
178
  version: "0"
179
179
  type: :development
180
180
  version_requirements: *id011
181
- - !ruby/object:Gem::Dependency
182
- name: faker
183
- prerelease: false
184
- requirement: &id012 !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- hash: 3
190
- segments:
191
- - 0
192
- version: "0"
193
- type: :development
194
- version_requirements: *id012
195
181
  - !ruby/object:Gem::Dependency
196
182
  name: capybara
197
183
  prerelease: false
198
- requirement: &id013 !ruby/object:Gem::Requirement
184
+ requirement: &id012 !ruby/object:Gem::Requirement
199
185
  none: false
200
186
  requirements:
201
187
  - - ">="
@@ -207,7 +193,7 @@ dependencies:
207
193
  - 0
208
194
  version: 0.4.0
209
195
  type: :development
210
- version_requirements: *id013
196
+ version_requirements: *id012
211
197
  description: A Rails engine which receives logs and provides an interface for them
212
198
  email:
213
199
  executables: []