1
+ require 'progressbar'
2
+
1
3
class Main
2
4
PARTIAL_VOLUME_FILE_NAME = "dataN.txt"
3
5
4
6
def initialize ( options : { } )
5
7
@source_file_name = options [ :source_file_name ] || 'data_large.txt'
6
8
@count_lines = options [ :count_lines ]
7
9
@with_gc = options [ :with_gc ] || true
10
+ @read_progress_bar = options [ :with_progress_bar ] ? ProgressBar . create ( title : "Read" ) : nil
11
+ @process_file_progress_bar = options [ :with_progress_bar ] ? ProgressBar . create ( title : "Process file" ) : nil
12
+ @collect_report_progress_bar = options [ :with_progress_bar ] ? ProgressBar . create ( title : "Collect report" ) : nil
13
+ @write_to_result_file_progress_bar = options [ :with_progress_bar ] ? ProgressBar . create ( title : "Write to result file" ) : nil
8
14
end
9
15
10
16
def call
@@ -15,11 +21,12 @@ def call
15
21
16
22
private
17
23
18
- attr_reader :source_file_name , :count_lines , :with_gc
24
+ attr_reader :source_file_name , :count_lines , :with_gc , :read_progress_bar , :process_file_progress_bar , :collect_report_progress_bar , :write_to_result_file_progress_bar
19
25
20
26
def work
21
27
`head -n #{ count_lines } #{ source_file_name } > #{ PARTIAL_VOLUME_FILE_NAME } ` if count_lines
22
28
file_lines = File . read ( count_lines ? PARTIAL_VOLUME_FILE_NAME : source_file_name ) . split ( "\n " )
29
+ read_progress_bar &.progress = 100
23
30
24
31
users = [ ]
25
32
sessions = [ ]
@@ -34,7 +41,7 @@ def work
34
41
sessions << session
35
42
end
36
43
end
37
-
44
+ process_file_progress_bar &. progress = 100
38
45
# Отчёт в json
39
46
# - Сколько всего юзеров +
40
47
# - Сколько всего уникальных браузеров +
@@ -104,13 +111,15 @@ def work
104
111
collect_stats_from_users ( report , users_objects ) do |user |
105
112
{ 'alwaysUsedChrome' => user . sessions . map { |s | s [ 'browser' ] } . all? { |b | b . upcase =~ /CHROME/ } }
106
113
end
107
-
114
+
108
115
# Даты сессий через запятую в обратном порядке в формате iso8601
109
116
collect_stats_from_users ( report , users_objects ) do |user |
110
117
{ 'dates' => user . sessions . map { |s | s [ 'date' ] } . map { |d | Date . strptime ( d , '%Y-%m-%d' ) } . sort . reverse . map { |d | d . iso8601 } }
111
118
end
119
+ collect_report_progress_bar &.progress = 100
112
120
113
121
File . write ( 'result.json' , "#{ report . to_json } \n " )
122
+ write_to_result_file_progress_bar &.progress = 100
114
123
end
115
124
116
125
def parse_user ( fields )
0 commit comments