+20
-16
app/firehose_stream.rb
+20
-16
app/firehose_stream.rb
···
38
38
end
39
39
40
40
if @log_status
41
-
@sky.on_connecting { |u| puts "Connecting to #{u}..." }
41
+
@sky.on_connecting { |u| log "Connecting to #{u}..." }
42
42
@sky.on_connect {
43
43
@replaying = !!(cursor)
44
-
puts "Connected #{Time.now} ✓"
44
+
log "Connected ✓"
45
45
}
46
46
@sky.on_disconnect {
47
-
puts
48
-
puts "Disconnected #{Time.now}"
47
+
log "Disconnected."
49
48
save_cursor(sky.cursor)
50
49
}
51
-
@sky.on_reconnect { puts "Connection lost, reconnecting..." }
52
-
@sky.on_error { |e| puts "ERROR: #{Time.now} #{e.class} #{e.message}" }
50
+
@sky.on_reconnect { log "Connection lost, reconnecting..." }
51
+
@sky.on_error { |e| log "ERROR: #{e.class} #{e.message}" }
53
52
end
54
53
55
54
@sky.connect
···
76
75
def process_message(msg)
77
76
if msg.is_a?(Skyfall::InfoMessage)
78
77
# AtProto error, the only one right now is "OutdatedCursor"
79
-
puts "InfoMessage: #{msg}"
78
+
log "InfoMessage: #{msg}"
80
79
elsif msg.is_a?(Skyfall::HandleMessage)
81
80
# use these events if you want to track handle changes:
82
-
# puts "Handle change: #{msg.repo} => #{msg.handle}"
81
+
# log "Handle change: #{msg.repo} => #{msg.handle}"
83
82
elsif msg.is_a?(Skyfall::UnknownMessage)
84
-
puts "Unknown message type: #{msg.type} (#{msg.seq})"
83
+
log "Unknown message type: #{msg.type} (#{msg.seq})"
85
84
end
86
85
87
86
return unless msg.type == :commit
88
87
89
88
if @replaying
90
-
puts "Replaying events since #{msg.time.getlocal} -->"
89
+
log "Replaying events since #{msg.time.getlocal} -->"
91
90
@replaying = false
92
91
end
93
92
···
125
124
126
125
begin
127
126
if op.raw_record.nil?
128
-
puts "Error: missing expected record data in operation: #{op.uri} (#{msg.seq})"
127
+
log "Error: missing expected record data in operation: #{op.uri} (#{msg.seq})"
129
128
return
130
129
end
131
130
rescue CBOR::UnpackError => e
132
-
puts "Error: couldn't decode record data for #{op.uri} (#{msg.seq}): #{e}"
131
+
log "Error: couldn't decode record data for #{op.uri} (#{msg.seq}): #{e}"
133
132
return
134
133
end
135
134
···
138
137
post_time = Time.parse(op.raw_record['createdAt'])
139
138
return if post_time < msg.time - 86400
140
139
rescue StandardError => e
141
-
puts "Skipping post with invalid timestamp: #{op.raw_record['createdAt'].inspect} (#{op.repo}, #{msg.seq})"
140
+
log "Skipping post with invalid timestamp: #{op.raw_record['createdAt'].inspect} (#{op.repo}, #{msg.seq})"
142
141
return
143
142
end
144
143
···
178
177
179
178
print '.' if @show_progress && @log_posts != :all
180
179
rescue StandardError => e
181
-
puts "Error in #process_post: #{e}"
180
+
log "Error in #process_post: #{e}"
182
181
183
182
unless e.message == "nesting of 100 is too deep"
184
-
p msg
185
-
puts e.backtrace.reject { |x| x.include?('/ruby/') }
183
+
log msg.inspect
184
+
log e.backtrace.reject { |x| x.include?('/ruby/') }
186
185
end
186
+
end
187
+
188
+
def log(text)
189
+
puts if @show_progress
190
+
puts "[#{Time.now}] #{text}"
187
191
end
188
192
189
193
def inspect
+9
-2
bin/firehose
+9
-2
bin/firehose
···
71
71
end
72
72
end
73
73
74
-
trap("SIGINT") { puts "Stopping..."; firehose.stop }
75
-
trap("SIGTERM") { puts; puts "Shutting down the service..."; firehose.stop }
74
+
trap("SIGINT") {
75
+
firehose.log "Stopping..."
76
+
firehose.stop
77
+
}
78
+
79
+
trap("SIGTERM") {
80
+
firehose.log "Shutting down the service..."
81
+
firehose.stop
82
+
}
76
83
77
84
firehose.start