1
1
module My
2
2
class HeartbeatsController < ApplicationController
3
- include ActionController ::Live
4
3
before_action :ensure_current_user
5
4
5
+
6
6
def export
7
7
all_data = params [ :all_data ] == "true"
8
8
if all_data
@@ -15,59 +15,29 @@ def export
15
15
end_date = Date . current
16
16
end
17
17
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
26
20
start_time = start_date . beginning_of_day . to_f
27
21
end_time = end_date . end_of_day . to_f
28
22
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 )
35
26
end
36
27
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\" : ["
61
28
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
+ {
71
41
id : heartbeat . id ,
72
42
time : Time . at ( heartbeat . time ) . iso8601 ,
73
43
entity : heartbeat . entity ,
@@ -90,24 +60,26 @@ def export
90
60
source_type : heartbeat . source_type ,
91
61
created_at : heartbeat . created_at . iso8601 ,
92
62
updated_at : heartbeat . updated_at . iso8601
93
- } . to_json
94
- response . stream . write hb_json
63
+ }
95
64
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"
97
68
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
102
77
end
103
78
104
79
private
105
80
106
81
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
111
83
end
112
84
end
113
85
end
0 commit comments