-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
77 lines (60 loc) · 4.22 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
========================================================================
Описание задачи:
========================================================================
Есть некоторое количество генераторов, производящих произвольные
натуральные числа. Генераторы работают с разной скоростью.
Генерируемые даные поступают на вход системы посредством вызова http
api метода /put. Система должна собирать входной поток данных и
вычленять из него непрерывные монотонно возрастающие цепочки, а также
уметь выводить N (задается в конфигурационном файле) самых длинных
цепочек посредством вызова http api метода /get. Запрещено хранить
данные где-либо, кроме оперативной памяти.
Требования к системе:
----------------------------------
- Система должна уметь работать с большим количеством генераторов и с большим объемом входных данных в течение длительного времени.
- API (put. get) должен удовлетворять требованиям REST.
- Система должна быть документирована в достаточном для понимания принципов ее работы виде.
- Создавать тестовые генераторы не требуется - необходимо только предоставить API, но если кандидат создаст генераторы - то это будет являться плюсом.
- Задача выполняется на языке erlang с использованием web-сервера yaws.
- Рекомендуется использовать OTP.
========================================================================
Реализация, настройка и тестирование
========================================================================
Архитектура:
* chain_app.erl (application) - модуль приложений
* chain_sup.erl (supervisor) - главный супервизор
* chain_detector.erl (gen_server) - процесс определяющий и сохраняющий цепочки
* chain.erl - шорткаты для запуска/останова приложения
* yapp_mod.erl - appmod для Yaws сервера, реализующий REST протокол
* generators.erl - простая реализация генераторов
Кол-во хранимых цепочек задается в файле include/settings.hrl
-define(MAX_CHAINS, 10).
Для запуска необходимо добавить в конфиг yaws.conf нижеследующе строки и перезапустить yaws сервер
ebin_dir = /opt/yaws/lib/yapp/ebin
ebin_dir = /home/.../chain/ebin # где находится chain приложение
runmod = yapp
<server external_server>
port = 8000
listen = 0.0.0.0
docroot = /opt/yaws/var/yaws/www
arg_rewrite_mod = yapp
<opaque>
yapp_server_id = external
bootstrap_yapps = chain
</opaque>
</server>
Проверка через curl
curl -XPUT -d "1" http://127.0.0.1:8000/chain/
curl -XPUT -d "2" http://127.0.0.1:8000/chain/
curl -XPUT -d "3" http://127.0.0.1:8000/chain/
curl -XPUT -d "1" http://127.0.0.1:8000/chain/
curl http://127.0.0.1:8000/chain/
должен вернуть [undefined,undefined,undefined,undefined,[1,2,3]]
Проверка через запуск генераторов
cd ebin
erl
1> Pids = generators:start(5).
в соседней консоли можно смотреть изменение цепочек
curl http://127.0.0.1:8000/chain/
остановить генераторы:
3> generators:stop(Pids).