Skip to content

Commit 84c6b2a

Browse files
authored
Revert "Stream Export (#460)" (#462)
1 parent 5143639 commit 84c6b2a

File tree

1 file changed

+31
-59
lines changed

1 file changed

+31
-59
lines changed
Lines changed: 31 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module My
22
class HeartbeatsController < ApplicationController
3-
include ActionController::Live
43
before_action :ensure_current_user
54

5+
66
def export
77
all_data = params[:all_data] == "true"
88
if all_data
@@ -15,59 +15,29 @@ def export
1515
end_date = Date.current
1616
end
1717
else
18-
start_date =
19-
params[:start_date].present? ?
20-
Date.parse(params[:start_date]) :
21-
30.days.ago.to_date
22-
end_date =
23-
params[:end_date].present? ?
24-
Date.parse(params[:end_date]) :
25-
Date.current
18+
start_date = params[:start_date].present? ? Date.parse(params[:start_date]) : 30.days.ago.to_date
19+
end_date = params[:end_date].present? ? Date.parse(params[:end_date]) : Date.current
2620
start_time = start_date.beginning_of_day.to_f
2721
end_time = end_date.end_of_day.to_f
2822

29-
heartbeats =
30-
current_user.heartbeats.where(
31-
"time >= ? AND time <= ?",
32-
start_time,
33-
end_time
34-
).order(time: :asc)
23+
heartbeats = current_user.heartbeats
24+
.where("time >= ? AND time <= ?", start_time, end_time)
25+
.order(time: :asc)
3526
end
3627

37-
total_heartbeats = heartbeats.count
38-
total_duration_seconds = heartbeats.duration_seconds
39-
40-
filename =
41-
"heartbeats_#{current_user.slack_uid}_#{start_date.strftime('%Y%m%d')}_#{end_date.strftime('%Y%m%d')}.json"
42-
43-
response.headers["Content-Type"] = "application/json"
44-
response.headers["Content-Disposition"] =
45-
"attachment; filename=\"#{filename}\""
46-
response.headers["X-Accel-Buffering"] = "no"
47-
48-
response.stream.write "{"
49-
response.stream.write "\"export_info\": {"
50-
response.stream.write "\"exported_at\": \"" + Time.current.iso8601 + "\","
51-
response.stream.write "\"date_range\": {"
52-
response.stream.write "\"start_date\": \"" + start_date.iso8601 + "\","
53-
response.stream.write "\"end_date\": \"" + end_date.iso8601 + "\""
54-
response.stream.write "},"
55-
response.stream.write "\"total_heartbeats\": " + total_heartbeats.to_s + ","
56-
response.stream.write(
57-
"\"total_duration_seconds\": " + total_duration_seconds.to_s
58-
)
59-
response.stream.write "},"
60-
response.stream.write "\"heartbeats\": ["
6128

62-
first = true
63-
heartbeats.find_in_batches(batch_size: 1000) do |batch|
64-
batch.each do |heartbeat|
65-
if first
66-
first = false
67-
else
68-
response.stream.write ","
69-
end
70-
hb_json = {
29+
export_data = {
30+
export_info: {
31+
exported_at: Time.current.iso8601,
32+
date_range: {
33+
start_date: start_date.iso8601,
34+
end_date: end_date.iso8601
35+
},
36+
total_heartbeats: heartbeats.count,
37+
total_duration_seconds: heartbeats.duration_seconds
38+
},
39+
heartbeats: heartbeats.map do |heartbeat|
40+
{
7141
id: heartbeat.id,
7242
time: Time.at(heartbeat.time).iso8601,
7343
entity: heartbeat.entity,
@@ -90,24 +60,26 @@ def export
9060
source_type: heartbeat.source_type,
9161
created_at: heartbeat.created_at.iso8601,
9262
updated_at: heartbeat.updated_at.iso8601
93-
}.to_json
94-
response.stream.write hb_json
63+
}
9564
end
96-
end
65+
}
66+
67+
filename = "heartbeats_#{current_user.slack_uid}_#{start_date.strftime('%Y%m%d')}_#{end_date.strftime('%Y%m%d')}.json"
9768

98-
response.stream.write "]"
99-
response.stream.write "}"
100-
ensure
101-
response.stream.close
69+
respond_to do |format|
70+
format.json {
71+
send_data export_data.to_json,
72+
filename: filename,
73+
type: "application/json",
74+
disposition: "attachment"
75+
}
76+
end
10277
end
10378

10479
private
10580

10681
def ensure_current_user
107-
unless current_user
108-
redirect_to root_path,
109-
alert: "You must be logged in to view this page!!"
110-
end
82+
redirect_to root_path, alert: "You must be logged in to view this page!!" unless current_user
11183
end
11284
end
11385
end

0 commit comments

Comments
 (0)