Skip to content

Commit bdd8a43

Browse files
committed
chore: add progresssbar
1 parent 6f67219 commit bdd8a43

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ head -n N data_large.txt > dataN.txt # create smaller file from larger (take N f
102102
- [x] Построить дамп `stackprof` и проанализировать его с помощью `CLI`
103103
- [x] Построить дамп `stackprof` в `json` и проанализировать его с помощью `speedscope.app`
104104
- [x] Профилировать работающий процесс `rbspy`;
105-
- [ ] Добавить в программу `ProgressBar`;
105+
- [x] Добавить в программу `ProgressBar`;
106106
- [x] Постараться довести асимптотику до линейной и проверить это тестом;
107107
- [x] Написать простой тест на время работы: когда вы придёте к оптимизированному решению, замерьте, сколько оно будет работать на тестовом объёме данных; и напишите тест на то, что это время не превышается (чтобы не было ложных срабатываний, задайте время с небольшим запасом);
108108

spec/task-1_spec.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
require 'rspec'
42
require 'rspec-benchmark'
53
require_relative '../task-1'
@@ -10,7 +8,7 @@
108

119
RSpec.describe 'work' do
1210
it 'should be linear' do
13-
`head -n 1000000 data_large.txt > data.txt`
11+
`head -n 10000 data_large.txt > data.txt`
1412

1513
expect { work }.to perform_linear
1614
end

task-1.rb

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require 'json'
44
require 'pry'
55
require 'date'
6+
require 'ruby-progressbar'
67

78
class User
89
attr_reader :attributes, :sessions
@@ -40,8 +41,9 @@ def collect_stats_from_users(report, users_objects, &block)
4041
end
4142
end
4243

43-
def work
44+
def work(with_progressbar: false)
4445
file_lines = File.read('data.txt').split("\n")
46+
progressbar = ProgressBar.create(title: 'Parsing', total: file_lines.count) if with_progressbar
4547

4648
users = []
4749
sessions = []
@@ -55,6 +57,8 @@ def work
5557
cols[3] = upcased_browser[cols[3]] || (upcased_browser[cols[3]] = cols[3].upcase)
5658
sessions << parse_session(cols)
5759
end
60+
61+
progressbar.increment if with_progressbar
5862
end
5963

6064
# Отчёт в json
@@ -94,17 +98,24 @@ def work
9498
users_objects = []
9599

96100
sessions_by_user = sessions.group_by { |session| session['user_id'] }
101+
102+
progressbar = ProgressBar.create(title: 'Creating', total: sessions_by_user.count) if with_progressbar
103+
97104
users.each do |user|
98105
attributes = user
99106
user_sessions = sessions_by_user[user['id']] || []
100107
user_object = User.new(attributes: attributes, sessions: user_sessions)
101108
users_objects << user_object
109+
110+
progressbar.increment if with_progressbar
102111
end
103112

104113
report['usersStats'] = {}
105114

115+
progressbar = ProgressBar.create(title: 'Collecting', total: users_objects.count) if with_progressbar
116+
106117
collect_stats_from_users(report, users_objects) do |user|
107-
{
118+
data = {
108119
# Собираем количество сессий по пользователям
109120
'sessionsCount' => user.sessions.count,
110121
# Собираем количество времени по пользователям
@@ -120,6 +131,10 @@ def work
120131
# Даты сессий через запятую в обратном порядке в формате iso8601
121132
'dates' => user.sessions.map{|s| s['date']}.sort { |d1, d2| d2 <=> d1 },
122133
}
134+
135+
progressbar.increment if with_progressbar
136+
137+
data
123138
end
124139

125140
File.write('result.json', "#{report.to_json}\n")

work.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
require_relative 'task-1'
22

3-
work
3+
work(with_progressbar: true)

0 commit comments

Comments
 (0)