appstats 0.12.5 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- appstats (0.12.5)
4
+ appstats (0.13.0)
5
5
  daemons
6
6
  net-scp
7
7
  rails (>= 2.3.0)
@@ -0,0 +1,9 @@
1
+ class AddAppstatsLogCollectorLocalFilename < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :appstats_log_collectors, :local_filename, :string
4
+ end
5
+
6
+ def self.down
7
+ remove_column :appstats_log_collectors, :local_filename
8
+ end
9
+ end
data/db/schema.rb CHANGED
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended to check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(:version => 20110223212232) do
13
+ ActiveRecord::Schema.define(:version => 20110225192624) do
14
14
 
15
15
  create_table "appstats_actions", :force => true do |t|
16
16
  t.string "name"
@@ -89,6 +89,7 @@ ActiveRecord::Schema.define(:version => 20110223212232) do
89
89
  t.string "status"
90
90
  t.datetime "created_at"
91
91
  t.datetime "updated_at"
92
+ t.string "local_filename"
92
93
  end
93
94
 
94
95
  add_index "appstats_log_collectors", ["host"], :name => "index_appstats_log_collectors_on_host"
@@ -5,11 +5,15 @@ module Appstats
5
5
  class LogCollector < ActiveRecord::Base
6
6
  set_table_name "appstats_log_collectors"
7
7
 
8
- attr_accessible :host, :filename, :status
8
+ attr_accessible :host, :filename, :status, :local_filename
9
9
  has_many :entries, :table_name => 'appstats_entries', :foreign_key => 'appstats_log_collector_id', :order => 'action'
10
10
 
11
- def local_filename
12
- File.expand_path("#{File.dirname(__FILE__)}/../../log/appstats_remote_log_#{id}.log")
11
+ def calculated_local_filename
12
+ if Appstats::LogCollector.downloaded_log_directory.nil?
13
+ File.expand_path("#{File.dirname(__FILE__)}/../../log/appstats_remote_log_#{id}.log")
14
+ else
15
+ File.expand_path("#{Appstats::LogCollector.downloaded_log_directory}/appstats_remote_log_#{id}.log")
16
+ end
13
17
  end
14
18
 
15
19
  def processed_filename
@@ -30,6 +34,14 @@ module Appstats
30
34
  true
31
35
  end
32
36
 
37
+ def self.downloaded_log_directory=(value)
38
+ @@downloaded_log_directory = value
39
+ end
40
+
41
+ def self.downloaded_log_directory
42
+ @@downloaded_log_directory
43
+ end
44
+
33
45
  def self.should_process(last_time)
34
46
  return true if last_time.nil?
35
47
  Time.now.day > last_time.day
@@ -91,18 +103,19 @@ module Appstats
91
103
  password = normalized_logins[host][:password]
92
104
  begin
93
105
  Net::SCP.start( host, user, :password => password ) do |scp|
94
- scp.download!( log_collector.filename, log_collector.local_filename )
106
+ scp.download!( log_collector.filename, log_collector.calculated_local_filename )
95
107
  end
96
108
  rescue Exception => e
97
109
  Appstats.log(:error,"Something bad occurred during Appstats::LogCollector#download_remote_files")
98
110
  Appstats.log(:error,e.message)
99
111
  end
100
- if File.exists?(log_collector.local_filename)
101
- Appstats.log(:info," - #{user}@#{host}:#{log_collector.filename} > #{log_collector.local_filename}")
112
+ if File.exists?(log_collector.calculated_local_filename)
113
+ log_collector.local_filename = log_collector.calculated_local_filename
102
114
  log_collector.status = 'downloaded'
115
+ Appstats.log(:info," - #{user}@#{host}:#{log_collector.filename} > #{log_collector.local_filename}")
103
116
  count += 1
104
117
  else
105
- Appstats.log(:error, "File #{log_collector.local_filename} did not download.")
118
+ Appstats.log(:error, "File #{log_collector.calculated_local_filename} did not download.")
106
119
  log_collector.status = 'failed_download'
107
120
  end
108
121
  log_collector.save
@@ -20,7 +20,7 @@ module Appstats
20
20
  @@filename_template ||= 'appstats'
21
21
  @@filename_template
22
22
  end
23
-
23
+
24
24
  def self.filename
25
25
  "#{filename_template}_#{today}.log"
26
26
  end
@@ -1,3 +1,3 @@
1
1
  module Appstats
2
- VERSION = "0.12.5"
2
+ VERSION = "0.13.0"
3
3
  end
@@ -1,3 +1,7 @@
1
1
 
2
- Appstats::Logger.filename_template = "log/appstats"
3
- Appstats::Logger.default_contexts[:app_name] = "YOUR_APP_NAME_HERE"
2
+ # LOGGER CONFIGURATIONS (i.e. what is integrated within all of your apps)
3
+ Appstats::Logger.filename_template = "log/appstats" # usually left as-is
4
+ Appstats::Logger.default_contexts[:app_name] = "YOUR_APP_NAME_HERE" # replace me with your app name
5
+
6
+ # LOG COLLECTOR (i.e. the process / app that downloads all remote logs and processed them)
7
+ Appstats::LogCollector.downloaded_log_directory = "/tmp" # only required for consolidated app
data/spec/entry_spec.rb CHANGED
@@ -193,18 +193,18 @@ module Appstats
193
193
  end
194
194
 
195
195
  it "should understand an entry without contexts" do
196
- entry = Entry.create_from_logger_string("0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
196
+ entry = Entry.create_from_logger_string("0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
197
197
  Entry.count.should == @before_count + 1
198
198
  entry.action.should == "address_search"
199
- entry.raw_entry.should == "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
199
+ entry.raw_entry.should == "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
200
200
  entry.occurred_at.should == Time.parse("2010-09-21 23:15:20")
201
201
  end
202
202
 
203
203
  it "should understand contexts" do
204
- entry = Entry.create_from_logger_string("0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
204
+ entry = Entry.create_from_logger_string("0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
205
205
  Entry.count.should == @before_count + 1
206
206
  entry.action.should == "address_filter"
207
- entry.raw_entry.should == "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
207
+ entry.raw_entry.should == "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
208
208
  entry.occurred_at.should == Time.parse("2010-09-21 23:15:20")
209
209
  entry.contexts.size.should == 2
210
210
  entry.contexts[0].context_key = "app_name"
@@ -214,10 +214,10 @@ module Appstats
214
214
  end
215
215
 
216
216
  it "should handle 'action' as a context" do
217
- entry = Entry.create_from_logger_string('0.12.5 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : action=save_ovcen : app_name=cdb')
217
+ entry = Entry.create_from_logger_string('0.13.0 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : action=save_ovcen : app_name=cdb')
218
218
  Entry.count.should == @before_count + 1
219
219
  entry.action.should == "page-view"
220
- entry.raw_entry.should == "0.12.5 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : action=save_ovcen : app_name=cdb"
220
+ entry.raw_entry.should == "0.13.0 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : action=save_ovcen : app_name=cdb"
221
221
  entry.occurred_at.should == Time.parse("2011-02-24 12:59:57")
222
222
  entry.contexts.size.should == 2
223
223
  entry.contexts[0].context_key = "action"
@@ -228,10 +228,10 @@ module Appstats
228
228
  end
229
229
 
230
230
  it "should handle multiple of the same 'context'" do
231
- entry = Entry.create_from_logger_string('0.12.5 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : app_name=market : app_name=cdb')
231
+ entry = Entry.create_from_logger_string('0.13.0 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : app_name=market : app_name=cdb')
232
232
  Entry.count.should == @before_count + 1
233
233
  entry.action.should == "page-view"
234
- entry.raw_entry.should == "0.12.5 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : app_name=market : app_name=cdb"
234
+ entry.raw_entry.should == "0.13.0 setup[:,=,-n] 2011-02-24 12:59:57 action=page-view : app_name=market : app_name=cdb"
235
235
  entry.occurred_at.should == Time.parse("2011-02-24 12:59:57")
236
236
  entry.contexts.size.should == 2
237
237
  entry.contexts[0].context_key = "app_name"
@@ -12,12 +12,14 @@ module Appstats
12
12
  @login = { :host => "myhost.localnet", :user => "deployer", :password => "pass" }
13
13
  @login2 = { :host => "yourhost.localnet", :user => "deployer", :password => "ssap" }
14
14
  @logins = [@login2, @login]
15
+ Appstats::LogCollector.downloaded_log_directory = nil
15
16
  end
16
17
 
17
18
  after(:each) do
18
19
  LogCollector.all.each do |log_collector|
19
- File.delete(log_collector.local_filename) if File.exists?(log_collector.local_filename)
20
+ File.delete(log_collector.local_filename) if !log_collector.local_filename.nil? && File.exists?(log_collector.local_filename)
20
21
  end
22
+ Appstats::LogCollector.downloaded_log_directory = nil
21
23
  end
22
24
 
23
25
  def simple_path(local_path_to_filename)
@@ -37,14 +39,19 @@ module Appstats
37
39
  it "should set status to unprocessed" do
38
40
  @log_collector.status.should == nil
39
41
  end
42
+
43
+ it "should set local_filename to nil" do
44
+ @log_collector.local_filename.should == nil
45
+ end
40
46
 
41
47
  it "should set on constructor" do
42
- log_collector = Appstats::LogCollector.new(:host => 'a', :filename => 'b', :status => 'c')
48
+ log_collector = Appstats::LogCollector.new(:host => 'a', :filename => 'b', :status => 'c', :local_filename => 'd')
43
49
  log_collector.host.should == 'a'
44
50
  log_collector.filename.should == 'b'
45
51
  log_collector.status.should == 'c'
52
+ log_collector.local_filename.should == 'd'
46
53
  end
47
-
54
+
48
55
  end
49
56
 
50
57
 
@@ -182,11 +189,21 @@ module Appstats
182
189
 
183
190
  end
184
191
 
185
- describe "#local_filename" do
192
+ describe "#calculated_local_filename" do
193
+
194
+ before(:each) do
195
+ Appstats::LogCollector.downloaded_log_directory = nil
196
+ end
186
197
 
187
198
  it "should return a standardized name with the log collector id" do
188
199
  log = LogCollector.create
189
- log.local_filename.should == simple_path("../log/appstats_remote_log_#{log.id}.log")
200
+ log.calculated_local_filename.should == simple_path("../log/appstats_remote_log_#{log.id}.log")
201
+ end
202
+
203
+ it "should use the downloaded_log_directory if set" do
204
+ Appstats::LogCollector.downloaded_log_directory = "/a/b/c"
205
+ log = LogCollector.create
206
+ log.calculated_local_filename.should == "/a/b/c/appstats_remote_log_#{log.id}.log"
190
207
  end
191
208
 
192
209
  end
@@ -241,8 +258,8 @@ module Appstats
241
258
  log1 = LogCollector.find_by_filename("/my/path/log/app1")
242
259
  log2 = LogCollector.find_by_filename("/my/path/log/app2")
243
260
 
244
- File.open(log1.local_filename, 'w') {|f| f.write("testfile - delete") }
245
- File.open(log2.local_filename, 'w') {|f| f.write("testfile - delete") }
261
+ File.open(log1.calculated_local_filename, 'w') {|f| f.write("testfile - delete") }
262
+ File.open(log2.calculated_local_filename, 'w') {|f| f.write("testfile - delete") }
246
263
 
247
264
 
248
265
  scp = mock(Net::SCP)
@@ -255,12 +272,16 @@ module Appstats
255
272
  LogCollector.download_remote_files(@logins).should == 2
256
273
 
257
274
  log1.reload and log2.reload
275
+
276
+ log1.local_filename.should == log1.calculated_local_filename
277
+ log2.local_filename.should == log2.calculated_local_filename
278
+
258
279
  log1.status.should == "downloaded"
259
280
  log2.status.should == "downloaded"
260
281
 
261
282
  LogCollector.load_remote_files(@login,"/my/path/log",["app3"]).should == 1
262
283
  log3 = LogCollector.find_by_filename("/my/path/log/app3")
263
- File.open(log3.local_filename, 'w') {|f| f.write("testfile - delete") }
284
+ File.open(log3.calculated_local_filename, 'w') {|f| f.write("testfile - delete") }
264
285
 
265
286
  localfile = simple_path("../log/appstats_remote_log_#{log3.id}.log")
266
287
  scp.should_receive(:download!).with("/my/path/log/app3",localfile)
@@ -291,6 +312,8 @@ module Appstats
291
312
  LogCollector.load_remote_files(@login,"/my/path/log",["appstats1"]).should == 1
292
313
  log3 = LogCollector.find_by_filename("/my/path/log/appstats1")
293
314
  log3.status = "downloaded" and log3.save.should == true
315
+ log3.local_filename = log3.calculated_local_filename
316
+ log3.save
294
317
  File.open(log3.local_filename, 'w') {|f| f.write(Appstats::Logger.entry_to_s("test_action1") + "\n" + Appstats::Logger.entry_to_s("test_action2")) }
295
318
 
296
319
  Appstats.should_receive(:log).with(:info,"About to process 1 file(s).")
@@ -310,6 +333,7 @@ module Appstats
310
333
  LogCollector.load_remote_files(@login,"/my/path/log",["appstats1"]).should == 1
311
334
  log3 = LogCollector.find_by_filename("/my/path/log/appstats1")
312
335
  log3.status = "downloaded" and log3.save.should == true
336
+ log3.local_filename = log3.calculated_local_filename
313
337
  File.open(log3.local_filename, 'w') {|f| f.write(Appstats::Logger.entry_to_s("test_action1") + "\n" + Appstats::Logger.entry_to_s("test_action2")) }
314
338
 
315
339
  File.stub!(:open).and_raise("bad error")
data/spec/logger_spec.rb CHANGED
@@ -115,7 +115,7 @@ module Appstats
115
115
 
116
116
  it "should accept numbers" do
117
117
  Appstats::Logger.entry(5, :blah => 6)
118
- Appstats::Logger.raw_read.should == ["0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=5 : blah=6"]
118
+ Appstats::Logger.raw_read.should == ["0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=5 : blah=6"]
119
119
  end
120
120
 
121
121
  end
@@ -124,7 +124,7 @@ module Appstats
124
124
 
125
125
  it "should look similar to regular entry" do
126
126
  Appstats::Logger.exception_entry(RuntimeError.new("blah"),:on => "login")
127
- Appstats::Logger.raw_read.should == ["0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=appstats-exception : error=blah : on=login"]
127
+ Appstats::Logger.raw_read.should == ["0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=appstats-exception : error=blah : on=login"]
128
128
  end
129
129
 
130
130
  end
@@ -141,47 +141,47 @@ module Appstats
141
141
 
142
142
  it "should handle a statistics entry" do
143
143
  expected = { :action => "address_search", :timestamp => "2010-09-21 23:15:20" }
144
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
144
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
145
145
  actual.should == expected
146
146
  end
147
147
 
148
148
  it "should handle contexts" do
149
149
  expected = { :action => "address_filter", :timestamp => "2010-09-21 23:15:20", :server => "Live", :app_name => 'Market' }
150
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
150
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
151
151
  actual.should == expected
152
152
  end
153
153
 
154
154
  it "should handle multiple actions" do
155
155
  expected = { :action => ["address_filter", "blah"], :timestamp => "2010-09-21 23:15:20", :server => "Live", :app_name => 'Market' }
156
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : action=blah : app_name=Market : server=Live")
156
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : action=blah : app_name=Market : server=Live")
157
157
  actual.should == expected
158
158
  end
159
159
 
160
160
  it "should handle multiple of same context" do
161
161
  expected = { :action => "address_filter", :timestamp => "2010-09-21 23:15:20", :server => "Live", :app_name => ['Sin','Market'] }
162
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Sin : app_name=Market : server=Live")
162
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Sin : app_name=Market : server=Live")
163
163
  actual.should == expected
164
164
  end
165
165
 
166
166
  it "should handle no actions" do
167
167
  expected = { :action => "UNKNOWN_ACTION", :timestamp => "2010-09-21 23:15:20", :server => "Live", :app_name => 'Market' }
168
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 app_name=Market : server=Live")
168
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 app_name=Market : server=Live")
169
169
  actual.should == expected
170
170
  end
171
171
 
172
172
  it "should handle actions with the delimiter (and change the delimiter)" do
173
173
  expected = { :action => "address:=search-n", :timestamp => "2010-09-21 23:15:20" }
174
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n")
174
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n")
175
175
  actual.should == expected
176
176
 
177
177
  expected = { :action => "address::search==--n", :timestamp => "2010-09-21 23:15:20" }
178
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n")
178
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n")
179
179
  actual.should == expected
180
180
  end
181
181
 
182
182
  it "should handle contexts with the delimiter (and change the delimiter)" do
183
183
  expected = { :action => "address", :timestamp => "2010-09-21 23:15:20", :server => "market:eval=-n" }
184
- actual = Appstats::Logger.entry_to_hash("0.12.5 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n")
184
+ actual = Appstats::Logger.entry_to_hash("0.13.0 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n")
185
185
  actual.should == expected
186
186
  end
187
187
 
@@ -190,66 +190,66 @@ module Appstats
190
190
  describe "#entry_to_s" do
191
191
 
192
192
  it "should handle a statistics entry" do
193
- expected = "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
193
+ expected = "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
194
194
  actual = Appstats::Logger.entry_to_s("address_search")
195
195
  actual.should == expected
196
196
  end
197
197
 
198
198
  it "should handle numbers" do
199
- expected = "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=1 : note=2.2"
199
+ expected = "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=1 : note=2.2"
200
200
  actual = Appstats::Logger.entry_to_s(1,:note => 2.2)
201
201
  actual.should == expected
202
202
  end
203
203
 
204
204
  it "should handle default contexts" do
205
205
  Appstats::Logger.default_contexts[:app_name] = "market"
206
- expected = "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : app_name=market"
206
+ expected = "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : app_name=market"
207
207
  actual = Appstats::Logger.entry_to_s("address_search")
208
208
  actual.should == expected
209
209
  end
210
210
 
211
211
  it "should handle contexts (and sort them by symbol)" do
212
- expected = "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
212
+ expected = "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
213
213
  actual = Appstats::Logger.entry_to_s("address_filter", { :server => "Live", :app_name => 'Market' })
214
214
  actual.should == expected
215
215
  end
216
216
 
217
217
  it "should handle actions with the delimiter (and change the delimiter)" do
218
- expected = "0.12.5 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n"
218
+ expected = "0.13.0 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n"
219
219
  actual = Appstats::Logger.entry_to_s("address:=search-n")
220
220
  actual.should == expected
221
221
 
222
- expected = "0.12.5 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n"
222
+ expected = "0.13.0 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n"
223
223
  actual = Appstats::Logger.entry_to_s("address::search==--n")
224
224
  actual.should == expected
225
225
  end
226
226
 
227
227
  it "should handle contexts with the delimiter (and change the delimiter)" do
228
- expected = "0.12.5 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n"
228
+ expected = "0.13.0 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n"
229
229
  actual = Appstats::Logger.entry_to_s("address", :server => 'market:eval=-n')
230
230
  actual.should == expected
231
231
  end
232
232
 
233
233
  it "should ignore spaces" do
234
- expected = "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address search"
234
+ expected = "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address search"
235
235
  actual = Appstats::Logger.entry_to_s("address search")
236
236
  actual.should == expected
237
237
  end
238
238
 
239
239
  it "should convert newlines in action" do
240
- expected = "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_-nsearch"
240
+ expected = "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_-nsearch"
241
241
  actual = Appstats::Logger.entry_to_s("address_\nsearch")
242
242
  actual.should == expected
243
243
  end
244
244
 
245
245
  it "should convert newlines in context" do
246
- expected = "0.12.5 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : blah=some-nlong-nstatement"
246
+ expected = "0.13.0 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : blah=some-nlong-nstatement"
247
247
  actual = Appstats::Logger.entry_to_s("address_search",:blah => "some\nlong\nstatement")
248
248
  actual.should == expected
249
249
  end
250
250
 
251
251
  it "should convert newlines based on the delimiter" do
252
- expected = "0.12.5 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=--nsearch-n"
252
+ expected = "0.13.0 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=--nsearch-n"
253
253
  actual = Appstats::Logger.entry_to_s("address:=\nsearch-n")
254
254
  actual.should == expected
255
255
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appstats
3
3
  version: !ruby/object:Gem::Version
4
- hash: 37
4
+ hash: 43
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 12
9
- - 5
10
- version: 0.12.5
8
+ - 13
9
+ - 0
10
+ version: 0.13.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew Forward
@@ -158,6 +158,7 @@ files:
158
158
  - db/migrations/20110217234136_add_appstats_results_contexts.rb
159
159
  - db/migrations/20110222215437_create_appstats_jobs.rb
160
160
  - db/migrations/20110223212232_add_appstats_entries_week_and_quarter.rb
161
+ - db/migrations/20110225192624_add_appstats_log_collector_local_filename.rb
161
162
  - db/schema.rb
162
163
  - lib/appstats.rb
163
164
  - lib/appstats/action.rb