Compare commits

..

166 Commits

Author SHA1 Message Date
786b5a0a1d Merge pull request '[Л/Р 6] Лямзина Мария' (#147) from 2510maria2002/distributed-computing:lyamzina-ma-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/147
2023-12-20 23:48:57 +04:00
1651f8cf81 Merge pull request '[Л/Р 8] Халитова Ангелина' (#143) from angelina/distributed-computing:khalitova-am-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/143
2023-12-20 23:48:38 +04:00
197273b91d Merge pull request '[Л/Р 6] Гренадерова Анастасия' (#146) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/146
2023-12-20 23:47:49 +04:00
65475bebd9 Merge pull request '[Л/Р 4] Никифорова Татьяна' (#144) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/144
2023-12-20 23:47:32 +04:00
f1e0a666f9 Merge pull request '[Л/Р 5] Никифорова Татьяна' (#142) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/142
2023-12-20 23:47:13 +04:00
5bda987e73 Merge pull request '[Л/Р 6] Никифорова Татьяна' (#141) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/141
2023-12-20 23:46:25 +04:00
2f451b0ca0 Merge pull request '[Л/Р 5] Дунаев Олег' (#140) from oleggitea/distributed-computing:dunaev-oi-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/140
2023-12-20 23:46:10 +04:00
621a6f948d Merge pull request '[Л/Р 7] Никифорова Татьяна' (#139) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/139
2023-12-20 23:45:48 +04:00
4c6fd5082e Merge pull request '[Л/Р 8] Никифорова Татьяна' (#138) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/138
2023-12-20 23:45:10 +04:00
5e6687666b Merge pull request '[Л/Р 5] Лямзина Мария' (#137) from 2510maria2002/distributed-computing:lyamzina-ma-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/137
2023-12-20 23:44:55 +04:00
23a6a111df Merge pull request '[Л/Р 5] Мельников Кирилл' (#136) from KirillMelnikov/distributed-computing:melnikov-ky-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/136
2023-12-20 23:44:04 +04:00
93ea084b31 Merge pull request '[Л/Р 4] Лямзина Мария' (#134) from 2510maria2002/distributed-computing:lyamzina-ma-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/134
2023-12-20 23:41:53 +04:00
122a27af02 Merge pull request '[Л/Р 5] Гренадерова Анастасия' (#133) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/133
2023-12-20 23:41:36 +04:00
2285ead933 Merge pull request '[Л/Р 4] Гренадерова Анастасия' (#132) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/132
2023-12-20 23:41:20 +04:00
0f304ab81f Merge pull request '[Л/Р 3] Гренадерова Анастасия' (#131) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/131
2023-12-20 23:17:22 +04:00
28c518c07d Merge pull request '[Л/Р 4] Мельников Кирилл' (#130) from KirillMelnikov/distributed-computing:melnikov-ky-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/130
2023-12-20 23:16:46 +04:00
2545fe13e8 Merge pull request '[Л/Р 3] Лямзина Мария' (#129) from 2510maria2002/distributed-computing:lyamzina-ma-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/129
2023-12-20 23:16:30 +04:00
160382688b Merge pull request '[Л/Р 3] Мельников Кирилл' (#126) from KirillMelnikov/distributed-computing:melnikov-ky-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/126
2023-12-20 23:15:42 +04:00
a594ca3222 Merge pull request '[Л/Р 8] Казаков Евгений' (#124) from EugeneKazakov/distributed-computing:kazakov-ev-lab8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/124
2023-12-20 23:14:54 +04:00
025f0a93eb Merge pull request '[Л/Р 7] Казаков Евгений' (#123) from EugeneKazakov/distributed-computing:kazakov-ev-lab_7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/123
2023-12-20 23:14:40 +04:00
a2abab3fc2 Merge pull request '[Л/Р 6] Казаков Евгений' (#122) from EugeneKazakov/distributed-computing:kazakov-ev-lab6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/122
2023-12-20 23:14:28 +04:00
ae70c8ddb5 Merge pull request '[Л/Р 5] Казаков Евгений' (#121) from EugeneKazakov/distributed-computing:kavakov-ev-lab_5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/121
2023-12-20 23:14:02 +04:00
ee1836ba9a Merge pull request '[Л/Р 4] Казаков Евгений' (#120) from EugeneKazakov/distributed-computing:kazakov-ev-lab_4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/120
2023-12-20 23:13:21 +04:00
678e641b10 Merge pull request '[Л/Р 3] Казаков Евгений' (#119) from EugeneKazakov/distributed-computing:kazakov-ev-lab_3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/119
2023-12-20 23:13:00 +04:00
7ff232fe5a Merge pull request '[Л/Р 7] Халитова Ангелина' (#118) from angelina/distributed-computing:khalitova-am-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/118
2023-12-20 23:12:38 +04:00
54deb90655 Merge pull request '[Л/Р 6] Халитова Ангелина' (#117) from angelina/distributed-computing:khalitova-am-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/117
2023-12-20 23:12:15 +04:00
85cd6991da Merge pull request '[Л/Р 4] Халитова Ангелина' (#115) from angelina/distributed-computing:khalitova-am-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/115
2023-12-20 23:11:42 +04:00
e8fb644580 Merge pull request '[Л/Р 3] Халитова Ангелина' (#114) from angelina/distributed-computing:khalitova-am-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/114
2023-12-20 23:10:59 +04:00
f789f9a6d7 Merge pull request '[Л/Р 8] Плаксина Александра' (#113) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/113
2023-12-20 23:10:04 +04:00
d0f2541ff0 Merge pull request '[Л/Р 7 ] Плаксина Александра' (#112) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/112
2023-12-20 23:09:33 +04:00
2510m
96890e4dca commitLaba6 2023-12-18 18:10:49 +04:00
Khalitova Angelina
b21fcd2faa upd report 2023-12-18 18:01:15 +04:00
944e82ce84 6 laba 2023-12-18 17:57:57 +04:00
d14694390c Lab_4 2023-12-18 17:52:08 +04:00
Khalitova Angelina
f6f2364157 add report 2023-12-18 17:51:19 +04:00
73a33347fe Lab_5 2023-12-18 17:45:19 +04:00
25f5a7f4fa Lab_6 2023-12-18 17:42:12 +04:00
c117a58277 commit1 2023-12-18 17:38:52 +04:00
de4b5875d7 Lab_7 2023-12-18 17:38:27 +04:00
0e8a8d4e92 aa 2023-12-18 17:37:09 +04:00
60cc7dc5de Lab-8 2023-12-18 17:32:00 +04:00
ee67442f96 aa 2023-12-18 17:30:42 +04:00
2510m
f4d6a8b23c commitLaba5 2023-12-18 16:49:43 +04:00
b924bffbc0 commit1 2023-12-18 16:46:40 +04:00
2510m
36815227e1 commitLaba4 2023-12-18 16:41:19 +04:00
4a7abe77e3 5 laba 2023-12-18 16:34:36 +04:00
044d78e382 4 laba 2023-12-18 16:32:53 +04:00
e94714ed8f commit1 2023-12-18 16:21:58 +04:00
2510m
cddc864fe2 commitLABA3 2023-12-18 16:15:17 +04:00
77387845a5 commit lab 3 2023-12-18 16:09:13 +04:00
e6e89afa88 commit1 2023-12-18 16:06:00 +04:00
b269c252b6 lab8 2023-12-18 12:25:26 +03:00
e8b7c46d06 lab6 2023-12-18 12:24:48 +03:00
04fddac710 lab6 2023-12-18 12:24:13 +03:00
507761bc7a lab_5 2023-12-18 12:23:21 +03:00
b2f3e95aeb lab_4 2023-12-18 12:22:22 +03:00
342f04c02f lab_3 2023-12-18 12:17:09 +03:00
Khalitova Angelina
998f8ce03c num lab 2023-12-18 12:43:31 +04:00
Khalitova Angelina
4f4dfc2086 add report 2023-12-18 12:43:04 +04:00
Khalitova Angelina
9aa9ec7bd6 upd 2023-12-18 12:39:27 +04:00
Khalitova Angelina
eb3226406f add 2023-12-18 12:35:33 +04:00
Khalitova Angelina
5bca7da18d add 2023-12-18 12:25:15 +04:00
efd9d1bd47 Merge pull request '[Л/Р 5] Халитова Ангелина' (#116) from angelina/distributed-computing:khalitova-am-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/116
2023-12-18 11:25:57 +04:00
Khalitova Angelina
d04e2f8c23 rep 2023-12-18 10:39:35 +04:00
Khalitova Angelina
e64bed2d07 add 2023-12-18 10:38:04 +04:00
Khalitova Angelina
7481362080 Пересоздала ветку от main 2023-12-18 09:52:45 +04:00
Khalitova Angelina
6cb7ae26b8 Пересоздала ветку от main 2023-12-18 09:47:42 +04:00
6f6cbac2a3 lab8_done 2023-12-18 02:37:30 +04:00
9855bb264a lab8_done 2023-12-18 02:36:54 +04:00
d15b374999 lab7_done 2023-12-18 01:35:05 +04:00
a21123fbd8 Merge pull request '[Л/Р 8] Островская Софья' (#98) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/98
2023-12-17 23:50:45 +04:00
274f304374 Merge pull request '[Л/Р 7] Островская Софья' (#97) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/97
2023-12-17 23:45:48 +04:00
5844b9b63c Merge pull request '[Л/Р 6] Островская Софья' (#96) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/96
2023-12-17 23:45:07 +04:00
4769eadfec Merge pull request '[Л/Р 5] Островская Софья' (#95) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/95
2023-12-17 23:43:35 +04:00
eff4d671f3 Merge pull request '[Л/Р 6] Плаксина Александра' (#94) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/94
2023-12-17 23:42:26 +04:00
21bb9f5e7b Merge pull request '[Л/Р 5] Плаксина Александра' (#93) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/93
2023-12-17 23:39:50 +04:00
bcbaf031e9 Merge pull request '[Л/Р 4] Зиновьева Анна' (#92) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/92
2023-12-17 23:38:36 +04:00
b4272099f1 Merge pull request '[Л/Р 3] Зиновьева Анна' (#91) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/91
2023-12-17 23:38:07 +04:00
45618a1799 Merge pull request '[Л/Р 8] Савицкий Александр' (#90) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/90
2023-12-17 23:37:44 +04:00
e6c80fd353 Merge pull request '[Л/Р 7] Савицкий Александр' (#89) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/89
2023-12-17 23:33:07 +04:00
9b6eb0794c Merge pull request '[Л/Р 6] Савицкий Александр' (#88) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/88
2023-12-17 23:28:36 +04:00
faa5f5206a Merge pull request '[Л/Р 8] Миронов Евгений' (#85) from MironovEvgeniy/distributed-computing:mironov-eo-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/85
2023-12-17 23:26:09 +04:00
3e23cc1880 Merge pull request '[Л/Р 7] Миронов Евгений' (#84) from MironovEvgeniy/distributed-computing:mironov-eo-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/84
2023-12-17 23:18:20 +04:00
fcb6fb0e4e Merge pull request '[Л/Р 8] Клементьева Жанна' (#83) from klementeva/distributed-computing:klementeva-ja-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/83
2023-12-17 23:17:02 +04:00
cc2092323d Merge pull request '[Л/Р 7] Клементьева Жанна' (#82) from klementeva/distributed-computing:klementeva-ja-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/82
2023-12-17 23:16:22 +04:00
8313a92d16 Merge pull request '[Л/Р 6] Клементьева Жанна' (#81) from klementeva/distributed-computing:klementeva-ja-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/81
2023-12-17 23:15:28 +04:00
961c8885f5 Merge pull request '[Л/Р 4] Плаксина Александра' (#80) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/80
2023-12-17 23:14:58 +04:00
8e69835321 Merge pull request '[Л/Р 3] Плаксина Александра' (#79) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/79
2023-12-17 23:07:41 +04:00
196d2d2a1b Merge pull request '[Л/Р 5] Савицкий Александр' (#78) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/78
2023-12-17 23:05:30 +04:00
915b8bb68c Merge pull request '[Л/Р 4] Островская Софья' (#77) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/77
2023-12-17 23:05:11 +04:00
8ad85b8049 Merge pull request '[Л/Р 4] Савицкий Александр' (#75) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/75
2023-12-17 23:03:46 +04:00
ed7d0467c3 Merge pull request '[Л/Р 3] Савицкий Александр' (#74) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/74
2023-12-17 23:00:30 +04:00
4b7ceb94c1 Merge pull request '[Л/Р 5] Клементьева Жанна' (#73) from klementeva/distributed-computing:klementeva-ja-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/73
2023-12-17 23:00:12 +04:00
210a7480ed Merge pull request '[Л/Р 4] Клементьева Жанна' (#72) from klementeva/distributed-computing:klementeva-ja-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/72
2023-12-17 22:58:36 +04:00
1f6f04f1af Merge pull request '[Л/Р 3] Островская Софья' (#70) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/70
2023-12-17 22:55:15 +04:00
9c060b9fbf Merge pull request '[Л/Р 3] Клементьева Жанна' (#67) from klementeva/distributed-computing:klementeva-ja-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/67
2023-12-17 22:51:22 +04:00
a92812b322 Merge pull request '[Л/Р 2,3] Горбылева Антонина' (#66) from antonina_gorbyleva/distributed-computing:gorbyleva-ai-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/66
2023-12-17 22:50:44 +04:00
7020bd0de9 Merge pull request '[Л/Р 6] Миронов Евгений' (#60) from MironovEvgeniy/distributed-computing:mironov-eo-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/60
2023-12-17 22:47:11 +04:00
3da11c8b28 Merge pull request '[Л/Р 2] Савицкий Александр' (#55) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab_2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/55
2023-12-17 22:42:56 +04:00
4c75073793 Merge pull request '[Л/Р 5] Миронов Евгений' (#53) from MironovEvgeniy/distributed-computing:mironov-eo-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/53
2023-12-17 22:38:52 +04:00
ca99bd565c Merge pull request '[Л/Р 4] Миронов Евгений' (#52) from MironovEvgeniy/distributed-computing:mironoveo-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/52
2023-12-17 22:38:15 +04:00
ae0ecc8743 Merge pull request '[Л/Р 3] Миронов Евгений' (#49) from MironovEvgeniy/distributed-computing:mironov-eo-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/49
2023-12-17 22:14:57 +04:00
fd35de8f4f Merge pull request '[Л/Р 2] Горбылева Антонина' (#47) from antonina_gorbyleva/distributed-computing:gorbyleva-ai-lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/47
2023-12-17 22:11:43 +04:00
40105e274e Merge pull request '[Л/Р 1] Савицкий Александр' (#45) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab_1 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/45
2023-12-17 22:10:12 +04:00
d5b14449e3 Merge pull request '[Л/Р 1] Костенко Карина' (#41) from karinakostenko/distributed-computing:lab1-kostenko-kd into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/41
2023-12-17 22:05:08 +04:00
a16e0f20c5 Merge pull request '[Л/Р 1,2] Клементьева Жанна' (#38) from klementeva/distributed-computing:klementeva-ja-lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/38
2023-12-17 22:03:59 +04:00
986d9359e6 Merge pull request '[Л/Р 2] Миронов Евгений' (#36) from MironovEvgeniy/distributed-computing:mironov-eo-lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/36
2023-12-17 22:02:36 +04:00
ab129e6d5e Merge pull request '[Л/Р 2] Никифорова Татьяна' (#28) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/28
2023-12-17 22:01:51 +04:00
Софья Островская
9a5dca9616 laba done 2023-12-17 16:11:55 +04:00
Софья Островская
7c9f835e1e laba done 2023-12-17 15:48:27 +04:00
Софья Островская
f75432d5f7 fix readme 2023-12-17 15:31:55 +04:00
Софья Островская
6dc434cbf3 . 2023-12-17 15:30:42 +04:00
Софья Островская
267ba3b73c laba done 2023-12-17 14:35:09 +04:00
Софья Островская
bc1845c05d . 2023-12-17 14:10:19 +04:00
Софья Островская
3ab942f78a gitignore 2023-12-17 13:50:01 +04:00
Софья Островская
40ce78dc39 . 2023-12-17 13:48:12 +04:00
Софья Островская
9afb8e93d6 . 2023-12-17 13:45:21 +04:00
Софья Островская
a308ede4ad laba done 2023-12-17 13:37:17 +04:00
e6cb8bd420 lab6_done 2023-12-17 00:55:54 +04:00
1627b65411 lab5_done 2023-12-16 23:31:32 +04:00
6bcfec3c0f fix 2023-12-16 21:04:41 +04:00
07a0377cbb laba done 2023-12-16 20:09:40 +04:00
0c1493a9d9 laba done 2023-12-16 16:41:40 +04:00
cedaaa513f lab 8 2023-12-16 16:14:20 +04:00
abd3959270 lab 7 2023-12-16 16:09:46 +04:00
3afd35140d lab6 2023-12-16 15:58:30 +04:00
Софья Островская
8679c69ca6 . 2023-12-16 14:54:30 +04:00
a9933fb842 mironov-eo-lab-8 2023-12-16 12:02:18 +03:00
615783c819 mironov-eo-lab-7 2023-12-16 11:12:30 +03:00
873c3cab34 Lab 8 Ready 2023-12-16 11:48:57 +04:00
a88ad333ab Lab 7 Ready 2023-12-16 11:47:24 +04:00
f52723e603 Lab 6 Ready 2023-12-16 11:45:24 +04:00
ab801f7c01 fix_lab4 2023-12-16 02:07:00 +04:00
918816654a lab4_done 2023-12-16 01:46:18 +04:00
083170f861 lab3_done 2023-12-15 22:14:31 +04:00
f269126281 lab 5 2023-12-15 21:02:23 +04:00
Софья Островская
7ea3ef3097 laba done 2023-12-15 19:09:53 +04:00
2415d60373 lab 4 2023-12-15 14:24:54 +04:00
d2143a8034 lab 3 2023-12-15 14:17:16 +04:00
0a02071d52 Lab 5 ready 2023-12-15 14:03:54 +04:00
8fb52539f0 Lab 4 ready 2023-12-15 13:58:35 +04:00
Софья Островская
32a64d3455 . 2023-12-15 03:06:09 +04:00
Софья Островская
6ecf75ae4e laba done 2023-12-15 03:04:47 +04:00
Софья Островская
8badb568b7 check 2023-12-15 02:50:10 +04:00
c7730ffee2 Lab 3 Ready 2023-12-14 13:53:47 +04:00
824ea4bf47 [Л/Р 3] Горбылева Антонина 2023-12-13 23:35:57 +04:00
19eebbbd5d Add other lws 2023-12-13 10:55:00 +04:00
b36b4f8587 mironov-eo-lab-6 2023-12-12 22:45:59 +03:00
7103a914a5 Merge pull request 'lr 3' (#2) from v.moiseev/distributed-computing:main into main
Reviewed-on: http://student.git.athene.tech/angelina/distributed-computing/pulls/2
2023-12-07 18:07:14 +04:00
a1a2cd75c8 lab_2 2023-12-07 00:34:42 +04:00
774069d984 mironov-eo-lab-5 2023-12-06 13:58:56 +03:00
67d9a7be51 mironov-eo-lab-4 2023-12-06 00:12:01 +03:00
993d701ee6 mironor-eo-lab-3 2023-12-04 23:02:10 +03:00
04436abf69 [Л/Р 2] Горбылева Антонина 2023-12-03 21:12:57 +04:00
fd8b56ad1e fix 2023-12-03 20:11:27 +03:00
458057c4ea Merge branch 'Nikiforova-TS-lab-1' into Nikiforova-TS-Lab-2 2023-12-02 11:00:12 +04:00
cf0e532652 иСПРАВ 2023-12-02 10:45:25 +04:00
4aef01c1bf add_lab_1 2023-11-30 20:25:59 +04:00
39090162a2 Merge pull request 'Добавление работы 4' (#42) from lw4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/42
2023-11-30 18:01:33 +04:00
Софья Островская
930c316a5d create folder 2023-11-29 12:53:21 +04:00
6c7ee0909b fixes 2023-11-22 20:57:32 +04:00
befd5915f6 lab1 2023-11-10 15:46:28 +03:00
953738c4d7 Created Lab 2 2023-11-03 22:22:15 +04:00
1cdac31a5d lab-2 2023-10-30 23:41:47 +03:00
6a5999478a Перенос в tasks 2023-10-18 22:29:14 +04:00
ca857e1581 Готовый отчет/удалила ветвь1 2023-10-18 10:45:47 +04:00
1184 changed files with 50091 additions and 4 deletions

View File

@@ -9,7 +9,7 @@
2. [Разработка простейшего распределённого приложения](labs/lab_2/README.md)
3. [REST API, Gateway и синхронный обмен между микросервисами](labs/lab_3/README.md)
4. [Работа с брокером сообщений](labs/lab_4/README.md)
5. TBA
6. TBA
7. TBA
8. TBA
5. [Параллельное умножение матриц](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_5.md)
6. [Параллельный поиск значения детерминанта матрицы](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_6.md)
7. [Балансировка нагрузки в распределённых системах](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_7.md)
8. [Про устройство распределенных систем](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_8.md)

View File

@@ -0,0 +1,38 @@
# Отчет по лабораторной работе №5
Выполнил студент гр. ИСЭбд-41 Дунаев О.И.
## Создание приложения
Выбрал язык C#, Windows Forms.
Приложение имеет три текстовых поля, в которых можно через пробел вносить элементы матрицы. В матрицы-множители значения можно сгенерировать внутри программы. Размерность можно регулировать от 2 до 1000 в специальном поле. При необходимости можно очистить все матрицы. Также есть флажок выключения вывода значений матриц в текстовые поля, т.к. это занимает слишком много времени. Количество потоков в параллельном алгоритме регулируется в соответствующем поле.
Попробуем запустить обычный и паралелльный алгоритмы на матрицах 10х10 и зафиксировать результат выполнения по времени.
![](pic/1.png)
![](pic/2.png)
## Бенчмарки
Протестируем обычный и параллельный алгоритм матрицах 100х100, 300х300 и 500х500.
Сверху отображен результат обычного алгоритма, снизу паралелльного.
Матрицы 100х100
![](pic/3.png)
![](pic/4.png)
Матрицы 300х300
![](pic/5.png)
![](pic/6.png)
Матрицы 500х500
![](pic/7.png)
![](pic/8.png)
Вывод: Параллельный алгоритм работает быстрее только при наличии большого количества операций и данных. Если элементов не так много, то обычный алгоритм справляется быстрее. Также была обнаружено оптимальное количество потоков для лучшей работы обработки матриц 500х500 - 4 потока.

View File

@@ -0,0 +1,484 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from `dotnet new gitignore`
# dotenv files
.env
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
.idea
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# Vim temporary swap files
*.swp

View File

@@ -0,0 +1,34 @@
namespace RVIP_Lab5
{
public class Alg1
{
static int[,] MultiplyMatrices(int[,] matrix1, int[,] matrix2)
{
int rows1 = matrix1.GetLength(0);
int cols1 = matrix1.GetLength(1);
int cols2 = matrix2.GetLength(1);
int[,] result = new int[rows1, cols2];
for (int i = 0; i < rows1; i++)
{
for (int j = 0; j < cols2; j++)
{
for (int k = 0; k < cols1; k++)
{
result[i, j] += matrix1[i, k] * matrix2[k, j];
}
}
}
return result;
}
public int[,] Begin(int[,] matrix1, int[,] matrix2)
{
int[,] result = MultiplyMatrices(matrix1, matrix2);
return result;
}
}
}

View File

@@ -0,0 +1,50 @@
namespace RVIP_Lab5
{
public class Alg2
{
public int[,] Begin(int[,] matrix1, int[,] matrix2, int numThreads)
{
int rowsA = matrix1.GetLength(0);
int columnsA = matrix1.GetLength(1);
int rowsB = matrix2.GetLength(0);
int columnsB = matrix2.GetLength(1);
int[,] resultMatrix = new int[rowsA, columnsB];
int rowsPerThread = rowsA / numThreads;
Thread[] threads = new Thread[numThreads];
for (int i = 0; i < numThreads; i++)
{
int startRow = i * rowsPerThread;
int endRow = (i == numThreads - 1) ? rowsA : startRow + rowsPerThread;
threads[i] = new Thread(() => MultiplyRows(startRow, endRow, matrix1, matrix2, resultMatrix));
threads[i].Start();
}
foreach (Thread thread in threads)
{
thread.Join();
}
return resultMatrix;
}
static void MultiplyRows(int startRow, int endRow, int[,] matrixA, int[,] matrixB, int[,] resultMatrix)
{
for (int i = startRow; i < endRow; i++)
{
for (int j = 0; j < matrixB.GetLength(1); j++)
{
int sum = 0;
for (int k = 0; k < matrixA.GetLength(1); k++)
{
sum += matrixA[i, k] * matrixB[k, j];
}
resultMatrix[i, j] = sum;
}
}
}
}
}

View File

@@ -0,0 +1,77 @@
using System.Drawing;
namespace RVIP_Lab5
{
public class Controller
{
public string PrintResultMatrix(int[,] result)
{
string resultString = "";
for (int i = 0; i < result.GetLength(0); i++)
{
for (int j = 0; j < result.GetLength(1); j++)
{
resultString += result[i, j];
if (j != result.GetLength(1) - 1)
{
resultString += " ";
}
}
resultString += Environment.NewLine;
}
return resultString;
}
public int[,] GetMatrixFromTextbox(string inputText)
{
string[] lines = inputText.Split(Environment.NewLine);
int numRows = lines.Length;
int numCol = lines[0].Split(' ').Length;
int[,] matrix = new int[numRows, numCol];
for (int i = 0; i < numRows; i++)
{
string[] elements = lines[i].Split(' ');
for (int j = 0; j < numCol; j++)
{
matrix[i, j] = int.Parse(elements[j]);
}
}
return matrix;
}
public string GetTextFromFile(string filePath)
{
string text = "";
using (StreamReader sr = new StreamReader(filePath))
{
text = sr.ReadToEnd();
}
return text;
}
public int[,] GenerateNewMatrix(int count)
{
Random random = new Random();
int[,] matrix = new int[count, count];
for (int i = 0; i < count; i++)
{
for (int j = 0; j < count; j++)
{
matrix[i, j] = random.Next(1, 26);
}
}
return matrix;
}
}
}

View File

@@ -0,0 +1,262 @@
namespace RVIP_Lab5
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
textBoxMatrix1 = new TextBox();
textBoxResult = new TextBox();
buttonAlg1 = new Button();
label1 = new Label();
textBoxMatrix2 = new TextBox();
label2 = new Label();
buttonAlg2 = new Button();
openFileDialog1 = new OpenFileDialog();
label3 = new Label();
labelResultTime = new Label();
label4 = new Label();
countStream = new NumericUpDown();
label5 = new Label();
genCountRowCol = new NumericUpDown();
button1 = new Button();
buttonGenerateMatrix2 = new Button();
buttonGenerateMatrix1 = new Button();
((System.ComponentModel.ISupportInitialize)countStream).BeginInit();
((System.ComponentModel.ISupportInitialize)genCountRowCol).BeginInit();
SuspendLayout();
//
// textBoxMatrix1
//
textBoxMatrix1.Location = new Point(12, 50);
textBoxMatrix1.Multiline = true;
textBoxMatrix1.Name = "textBoxMatrix1";
textBoxMatrix1.Size = new Size(258, 258);
textBoxMatrix1.TabIndex = 0;
//
// textBoxResult
//
textBoxResult.Location = new Point(768, 50);
textBoxResult.Multiline = true;
textBoxResult.Name = "textBoxResult";
textBoxResult.Size = new Size(258, 258);
textBoxResult.TabIndex = 1;
//
// buttonAlg1
//
buttonAlg1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
buttonAlg1.Location = new Point(1080, 60);
buttonAlg1.Name = "buttonAlg1";
buttonAlg1.Size = new Size(258, 40);
buttonAlg1.TabIndex = 2;
buttonAlg1.Text = "Обычный алгоритм";
buttonAlg1.UseVisualStyleBackColor = true;
buttonAlg1.Click += buttonAlg1_Click;
//
// label1
//
label1.AutoSize = true;
label1.BackColor = Color.Transparent;
label1.Font = new Font("Segoe UI", 72F, FontStyle.Regular, GraphicsUnit.Point);
label1.Location = new Point(276, 117);
label1.Name = "label1";
label1.Size = new Size(111, 128);
label1.TabIndex = 3;
label1.Text = "X";
//
// textBoxMatrix2
//
textBoxMatrix2.Location = new Point(378, 50);
textBoxMatrix2.Multiline = true;
textBoxMatrix2.Name = "textBoxMatrix2";
textBoxMatrix2.Size = new Size(258, 258);
textBoxMatrix2.TabIndex = 4;
//
// label2
//
label2.AutoSize = true;
label2.BackColor = Color.Transparent;
label2.Font = new Font("Segoe UI", 72F, FontStyle.Regular, GraphicsUnit.Point);
label2.Location = new Point(642, 117);
label2.Name = "label2";
label2.Size = new Size(120, 128);
label2.TabIndex = 5;
label2.Text = "=";
//
// buttonAlg2
//
buttonAlg2.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
buttonAlg2.Location = new Point(1080, 117);
buttonAlg2.Name = "buttonAlg2";
buttonAlg2.Size = new Size(258, 39);
buttonAlg2.TabIndex = 8;
buttonAlg2.Text = "Паралелльный алгоритм";
buttonAlg2.UseVisualStyleBackColor = true;
buttonAlg2.Click += buttonAlg2_Click;
//
// openFileDialog1
//
openFileDialog1.FileName = "openFileDialog1";
//
// label3
//
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point);
label3.Location = new Point(574, 349);
label3.Name = "label3";
label3.Size = new Size(111, 30);
label3.TabIndex = 9;
label3.Text = "Результат:";
//
// labelResultTime
//
labelResultTime.AutoSize = true;
labelResultTime.Font = new Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point);
labelResultTime.Location = new Point(719, 349);
labelResultTime.Name = "labelResultTime";
labelResultTime.Size = new Size(0, 30);
labelResultTime.TabIndex = 10;
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(15, 394);
label4.Name = "label4";
label4.Size = new Size(123, 15);
label4.TabIndex = 12;
label4.Text = "Количество потоков:";
//
// countStream
//
countStream.Location = new Point(144, 392);
countStream.Maximum = new decimal(new int[] { 10, 0, 0, 0 });
countStream.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
countStream.Name = "countStream";
countStream.Size = new Size(66, 23);
countStream.TabIndex = 13;
countStream.Value = new decimal(new int[] { 4, 0, 0, 0 });
//
// label5
//
label5.AutoSize = true;
label5.Location = new Point(15, 349);
label5.Name = "label5";
label5.Size = new Size(166, 15);
label5.TabIndex = 16;
label5.Text = "Размерность при генерации:";
//
// genCountRowCol
//
genCountRowCol.Location = new Point(187, 347);
genCountRowCol.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
genCountRowCol.Minimum = new decimal(new int[] { 2, 0, 0, 0 });
genCountRowCol.Name = "genCountRowCol";
genCountRowCol.Size = new Size(66, 23);
genCountRowCol.TabIndex = 17;
genCountRowCol.Value = new decimal(new int[] { 10, 0, 0, 0 });
//
// button1
//
button1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
button1.Location = new Point(1080, 171);
button1.Name = "button1";
button1.Size = new Size(258, 46);
button1.TabIndex = 22;
button1.Text = "Очистить матрицы";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// buttonGenerateMatrix2
//
buttonGenerateMatrix2.Location = new Point(447, 12);
buttonGenerateMatrix2.Name = "buttonGenerateMatrix2";
buttonGenerateMatrix2.Size = new Size(122, 32);
buttonGenerateMatrix2.TabIndex = 15;
buttonGenerateMatrix2.Text = "Сгенерировать";
buttonGenerateMatrix2.UseVisualStyleBackColor = true;
buttonGenerateMatrix2.Click += buttonGenerateMatrix2_Click;
//
// buttonGenerateMatrix1
//
buttonGenerateMatrix1.Location = new Point(75, 12);
buttonGenerateMatrix1.Name = "buttonGenerateMatrix1";
buttonGenerateMatrix1.Size = new Size(122, 32);
buttonGenerateMatrix1.TabIndex = 14;
buttonGenerateMatrix1.Text = "Сгенерировать";
buttonGenerateMatrix1.UseVisualStyleBackColor = true;
buttonGenerateMatrix1.Click += buttonGenerateMatrix1_Click;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1507, 446);
Controls.Add(button1);
Controls.Add(genCountRowCol);
Controls.Add(label5);
Controls.Add(buttonGenerateMatrix2);
Controls.Add(buttonGenerateMatrix1);
Controls.Add(countStream);
Controls.Add(label4);
Controls.Add(labelResultTime);
Controls.Add(label3);
Controls.Add(buttonAlg2);
Controls.Add(label2);
Controls.Add(textBoxMatrix2);
Controls.Add(label1);
Controls.Add(buttonAlg1);
Controls.Add(textBoxResult);
Controls.Add(textBoxMatrix1);
Name = "Form1";
Text = "Перемножение матриц: Дунаев О.И. ИСЭбд-41";
((System.ComponentModel.ISupportInitialize)countStream).EndInit();
((System.ComponentModel.ISupportInitialize)genCountRowCol).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private TextBox textBoxMatrix1;
private TextBox textBoxResult;
private Button buttonAlg1;
private Label label1;
private TextBox textBoxMatrix2;
private Label label2;
private Button buttonAlg2;
private OpenFileDialog openFileDialog1;
private Label label3;
private Label labelResultTime;
private Label label4;
private NumericUpDown countStream;
private Label label5;
private NumericUpDown genCountRowCol;
private Button button1;
private Button buttonGenerateMatrix2;
private Button buttonGenerateMatrix1;
}
}

View File

@@ -0,0 +1,121 @@
using System.Diagnostics;
namespace RVIP_Lab5
{
public partial class Form1 : Form
{
public Controller service;
public Alg1 Alg1;
public Alg2 Alg2;
public Stopwatch stopwatch;
public int[,] matrixA;
public int[,] matrixB;
public Form1()
{
InitializeComponent();
this.service = new Controller();
this.Alg1 = new Alg1();
this.Alg2 = new Alg2();
this.stopwatch = new Stopwatch();
}
private void buttonAlg1_Click(object sender, EventArgs e)
{
try
{
stopwatch.Start();
int[,] matrixResult = Alg1.Begin(matrixA, matrixB);
stopwatch.Stop();
labelResultTime.Text = "" + stopwatch.Elapsed;
textBoxResult.Text = service.PrintResultMatrix(matrixResult);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
stopwatch.Reset();
}
private void buttonAlg2_Click(object sender, EventArgs e)
{
try
{
stopwatch.Start();
int[,] matrixResult = Alg2.Begin(matrixA, matrixB, (int)countStream.Value);
stopwatch.Stop();
labelResultTime.Text = "" + stopwatch.Elapsed;
textBoxResult.Text = service.PrintResultMatrix(matrixResult);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
stopwatch.Reset();
}
private void buttonLoadMatrix1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
string filePath = openFileDialog1.FileName;
string result = service.GetTextFromFile(filePath);
textBoxMatrix1.Text = result;
matrixA = service.GetMatrixFromTextbox(result);
}
private void buttonLoadMatrix2_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
string filePath = openFileDialog1.FileName;
string result = service.GetTextFromFile(filePath);
textBoxMatrix2.Text = result;
matrixB = service.GetMatrixFromTextbox(result);
}
private void buttonGenerateMatrix1_Click(object sender, EventArgs e)
{
matrixA = service.GenerateNewMatrix((int)genCountRowCol.Value);
textBoxMatrix1.Text = service.PrintResultMatrix(matrixA);
}
private void buttonGenerateMatrix2_Click(object sender, EventArgs e)
{
matrixB = service.GenerateNewMatrix((int)genCountRowCol.Value);
textBoxMatrix2.Text = service.PrintResultMatrix(matrixB);
}
private void button1_Click(object sender, EventArgs e)
{
textBoxMatrix1.Text = "";
textBoxMatrix2.Text = "";
textBoxResult.Text = "";
matrixA = null;
matrixB = null;
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>7, 19</value>
</metadata>
</root>

View File

@@ -0,0 +1,17 @@
namespace RVIP_Lab5
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32811.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RVIP_Lab5", "RVIP_Lab5.csproj", "{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7B6008C5-2210-4BAA-B61A-F6C7D82930FA}
EndGlobalSection
EndGlobal

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

477
tasks/gorbyleva-ai/lab_2/.gitignore vendored Normal file
View File

@@ -0,0 +1,477 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk

View File

@@ -0,0 +1,69 @@
# Отчёт по лабораторной работе №2
Выполнил: студентка гр. ИСЭбд-41 Горбылева Антонина
Вариант программы 1 (вариант 4): Формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data.
Вариант программы 2 (вариант 2): Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
## Создание приложений
Создадим 2 приложения.
Был выбран язык C# и технология .NET 7.
Для создания обычных консольных приложений воспользуемся командами:
dotnet new console -o worker-1
dotnet new console -o worker-2
Согласно варианту программа 1 должна брать все файлы из папки `/var/data`, и записывать длины имен файлов в `/var/result/data.txt`.
[Исходный текст программы worker-1](worker-1/Program.cs)
Согласно варианту программа 2 должна найти наименьшее число из файла `/var/data/data.txt` и сохранить его третью степень в `/var/result/result.txt`.
[Исходный текст программы worker-2](worker-2/Program.cs)
Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего.
## Настройка окружения
Для связи двух приложений воспользуемся следующей схемой:
1. Каталог ./data должен быть примонтирован в каталог /var/data для программы 1.
Оттуда будут браться исходные данные.
2. Каталог ./result-1 должен быть примонтирован в каталог /var/result для программы 2.
Туда будут складываться промежуточные данные.
3. Каталог ./result-1 также должен быть примонтирован в каталог /var/data для программы 2.
Оттуда будут браться промежуточные результаты.
4. Каталог ./result должен быть примонтирован в каталог /var/result для программы 2.
Туда будут складывать результаты финальной обработки.
Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки.
Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения.
Дополнительно был создан файл [.dockerignore](.dockerignore) и дополнен [.gitignore](.gitignore), чтобы исключить для сборки и коммита всё лишнее.
## Сборка и запуск
В каталог ./data помещены 3 файла.
3 файла с общим количеством символов в названии 12
Для запуска приложения необходимо ввести команду docker compose up ---build.
Результат запуска после сборки:
[+] Running 2/0
- Container lab_2-worker-1-1 Created
- Container lab_2-worker-2-1 Created
Attaching to lab_2-worker-1-1, lab_2-worker-2-1
lab_2-worker-1-1 | Начало обработки файла /var/data/another data.txt
lab_2-worker-1-1 | Начало обработки файла /var/data/data.txt
lab_2-worker-1-1 exited with code 0
lab_2-worker-2-1 | Чисел для обработки: 8
lab_2-worker-2-1 exited with code 0
В результате в каталоге ./result создался файл result.txt с содержимым 12, что соответствует входным данным.
В результате в каталоге `./result` создался файл `result.txt` с содержимым `1728`, что соответствует входным данным, так как наименьшим числом в нашем случае является `12`.

View File

@@ -0,0 +1,13 @@
version: "3.1"
services:
worker-1:
build: ./worker-1
volumes:
- ./data:/var/data
- ./result:/var/result
worker-2:
build: ./worker-2
volumes:
- ./result:/var/result
depends_on:
- worker-1

View File

@@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{EBC8C06D-600B-4767-944D-108047DEDCDC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{70B6ABE2-A602-4881-931E-65DC63DC03D0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Release|Any CPU.Build.0 = Release|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,15 @@
#указываем образ из которого будем брать все слои
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
#наша папка, с которой будем работать
WORKDIR /App
#копируем файл в рабочую дерикторию
COPY . ./
#запускаем команду
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
#копирует не из файловой системы хоста, а из того, что собрали на прерыдущей стадии
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "worker-1.dll"]

View File

@@ -0,0 +1,34 @@
using System;
using System.IO;
using System.Net.Http;
var dir = new DirectoryInfo("/var/data");
var files = dir.GetFiles();
string resultFilePath = "/var/result/data.txt";
try
{
int[] mass = new int[files.Length];
int i = 0;
// Создаем новый файл или перезаписываем существующий
using (StreamWriter writer = new StreamWriter(resultFilePath, false))
{
foreach (var file in files)
{
// Записываем в файл количество символов в имени каждого файла
writer.WriteLine(file.Name.Length);
mass[i] = file.Name.Length;
i++;
}
}
Console.WriteLine("Успешно! Результат: ");
foreach (var item in mass)
{
Console.WriteLine(item);
}
}
catch (Exception ex)
{
Console.WriteLine("Ошибка: " + ex.Message);
}

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<RootNamespace>worker_1</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,15 @@
#указываем образ из которого будем брать все слои
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
#наша папка, с которой будем работать
WORKDIR /App
#копируем файл в рабочую дерикторию
COPY . ./
#запускаем команду
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
#копирует не из файловой системы хоста, а из того, что собрали на прерыдущей стадии
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "worker-2.dll"]

View File

@@ -0,0 +1,34 @@
using System.ComponentModel.DataAnnotations;
using System;
using System.IO;
string inputFile = "/var/data/data.txt";
string resultFilePath = "/var/result/result.txt";
using (StreamWriter writer = new StreamWriter(resultFilePath, false))
{
int min = int.MaxValue;
using (StreamReader sr = new StreamReader(inputFile))
{
string line;
int i = 0;
while ((line = sr.ReadLine()) != null)
{
i++;
if (int.TryParse(line, out int value))
{
if (value < min)
{
min = value;
}
}
}
Console.WriteLine("Наименьшее число: " + min.ToString());
}
double triplemin = Math.Pow(min, 3);
writer.WriteLine(triplemin.ToString());
Console.WriteLine("Файл успешно создан: " + resultFilePath);
}

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<RootNamespace>worker_2</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

477
tasks/gorbyleva-ai/lab_3/.gitignore vendored Normal file
View File

@@ -0,0 +1,477 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk

View File

@@ -0,0 +1,85 @@
# Отчёт по лабораторной работе №3
Выполнила: студентка группы ИСЭбд-41 Горбылева Антонина Игоревна
Используемые сущности: Автомобили - Car, марка автомобиля - Marka, модель - model, номер - number
## REST API, Gateway и синхронный обмен между микросервисами
## Создание микросервисов
Команда `dotnet new web -n worker-1` создает в терминале микросервис worker-1.
Команда `dotnet new sln`для создания решения для проекта.
Команда `dotnet sln worker-1.sln add worker-1.csproj`связывает созданное решение с проектом.
Аналогично, создаем второй микросервис и добавляем оба проекта в единое решение.
Команда `dotnet run` для запуска проекта.
Скриншоты API приложений:
![](picture/sworker-1.png)
![](picture/sworker-2.png)
## Реализация синхронного обмена
Реализован механизм синхронного обмена сообщениями между микросервисами.
```cs
app.MapGet("/Company/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetRequests")
.WithOpenApi();
```
## Реализация gateway при помощи nginx
Шлюз на основе прозрачного прокси-сервера nginx
```conf
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}
```
Результаты, после вызова команды `docker-compose up`:
Docker Desktop:
![](picture/docker.png)
index.html на gateway-1:
![](picture/test.png)
worker-1:
![](picture/lworker-1.png)
worker-2:
![](picture/lworker-2.png)

View File

@@ -0,0 +1,15 @@
version: "3.1"
services:
worker-1:
build: ./worker-1
worker-2:
build: ./worker-2
depends_on:
- worker-1
gateway:
image: nginx:latest
ports:
- 8080:8080
volumes:
- ./static:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

View File

@@ -0,0 +1,14 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,26 @@
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Лабараторная работа №3</title>
</head>
<body>
<p>Горбылева Антонина студентка ИСЭбд-41</p>
<p><a href="/worker-1/">Запрос к "worker-1"</a></p>
<p><a href="/worker-2/">Запрос к "worker-2"</a></p>
</body>
</html>

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-1.dll"]

View File

@@ -0,0 +1,118 @@
List<Cars > Cars = new()
{
new Cars () { Uuid= Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd"), Model = "Programming Basics", GosNumber = "Programming" },
new Cars () { Uuid= Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e"), Model = "Advanced Algorithms", GosNumber = "Programming" },
new Cars () { Uuid= Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9"), Model = "Romantic Journey", GosNumber = "Romance" },
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return Cars.Select(r => new CarEntityDto()
{
Uuid = r.Uuid,
Model = r.Model,
GosNumber = r.GosNumber,
});
})
.WithMarka("GetCars")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var Car = Cars.FirstOrDefault(r => r.Uuid == uuid);
if (Car == null)
return Results.NotFound();
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("GetCarByGUID")
.WithOpenApi();
app.MapPost("/{Model}/{GosNumber}", (string Model, string GosNumber) =>
{
Guid NewGuid = Guid.NewGuid();
Cars.Add(new Cars() { Uuid = NewGuid, Model = (string)Model, GosNumber = (string)GosNumber});
var Car = Cars.FirstOrDefault(r => r.Uuid == NewGuid);
if (Car == null)
return Results.NotFound();
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("PostCar")
.WithOpenApi();
app.MapPatch("/{uuid}/{Model}/{GosNumber}", (Guid uuid, string ?Model, string ?GosNumber) =>
{
var Car = Cars.FirstOrDefault(r => r.Uuid == uuid);
if (Car == null)
return Results.NotFound();
if (Model != null) Car.Model = Model;
if (GosNumber != ",") Car.GosNumber = GosNumber;
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("UpdateCar")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var Car = Cars.FirstOrDefault(r => r.Uuid == uuid);
if (Car == null)
return Results.NotFound();
Cars.Remove(Car);
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("DeleteCarByGUID")
.WithOpenApi();
app.Run();
public class Cars
{
public Guid Uuid { get; set; }
public string Model { get; set; } = string.Empty;
public string GosNumber { get; set; } = string.Empty;
}
public class CarEntityDto : Cars { }

View File

@@ -0,0 +1,37 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:28800",
"sslPort": 44397
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5108",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7126;http://localhost:5108",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_1</RootNamespace>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1.csproj", "{AEF383BD-8E80-4FF5-A579-1B601B7D1464}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-2.dll"]

View File

@@ -0,0 +1,139 @@
List<Authors> authors = new()
{
new Authors() { Uuid= Guid.NewGuid(), Number = "1", Name = "Programming Basics", IdBook = Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd") },
new Authors() { Uuid= Guid.NewGuid(), Number = "2", Name = "Advanced Algorithms", IdBook = Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9") },
new Authors() { Uuid= Guid.NewGuid(), Number = "3", Name = "Romantic Journey", IdBook = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
new Authors() { Uuid= Guid.NewGuid(), Number = "3А", Name = "Mystery Island", IdBook = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return authors.Select(r => new AuthorEntityDto()
{
Uuid = r.Uuid,
Number = r.Number,
Name = r.Name,
IdBook = r.IdBook,
});
})
.WithName("GetAuthors")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var author = authors.FirstOrDefault(r => r.Uuid == uuid);
if (author == null)
return Results.NotFound();
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("GetAuthorByGUID")
.WithOpenApi();
app.MapPost("/{number}/{name}/{IdBook}", (string? Number, string Name, Guid IdBook) =>
{
Guid NewGuid = Guid.NewGuid();
authors.Add(new Authors() { Uuid = NewGuid, Number = (string)Number, Name = (string)Name, IdBook = (Guid)IdBook });
var author = authors.FirstOrDefault(r => r.Uuid == NewGuid);
if (author == null)
return Results.NotFound();
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("PostAuthor")
.WithOpenApi();
app.MapPatch("/{uuid}/{number}/{name}/{IdBook}", (Guid uuid, string ?number, string name, Guid IdBook) =>
{
var author = authors.FirstOrDefault(r => r.Uuid == uuid);
if (author == null)
return Results.NotFound();
if (number != ",") author.Number = number;
if (name != author.Name) author.Name = name;
if (IdBook != author.IdBook) author.IdBook = IdBook;
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("UpdateAuthor")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var author = authors.FirstOrDefault(r => r.Uuid == uuid);
if (author == null)
return Results.NotFound();
authors.Remove(author);
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("DeleteAuthor")
.WithOpenApi();
app.MapGet("/Authors/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetBooks")
.WithOpenApi();
app.Run();
public class Authors
{
public Guid Uuid { get; set; }
public string Number { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public Guid IdBook { get; set; }
}
public class AuthorEntityDto : Authors { }
public class Books
{
public Guid Uuid { get; set; }
public string Title { get; set; } = string.Empty;
public string Genre { get; set; } = string.Empty;
}
public class BookEntityDto : Books { }

View File

@@ -0,0 +1,37 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:24157",
"sslPort": 44320
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5082",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7130;http://localhost:5082",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,83 @@
# Отчёт по лабораторной работе №3
Выполнила: студентка гр. ИСЭбд-41 Никифорова Татьяна Сергеевна.
## REST API, Gateway и синхронный обмен между микросервисами
## Создание микросервисов
Использовала команду `dotnet new web -n worker-1` в терминале для создания моего первого микросервиса.
Далее, с помощью команды `dotnet new sln`, создала решение для проекта. Затем использовала команду `dotnet sln worker-1.sln add worker-1.csproj`, чтобы связать созданное решение с проектом.
Повторила те же действия для второго микросервиса, добавила оба проекта в единое решение.
Добавил библиотеку Swagger и OpenAi в проекты и запустил с помощью команды `dotnet run`".
Скриншоты API приложений:
![](picture/sworker-1.png)
![](picture/sworker-2.png)
## Реализация синхронного обмена
Реализовала механизм синхронного обмена сообщениями между микросервисами.
```cs
app.MapGet("/Authors/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetRequests")
.WithOpenApi();
```
## Реализация gateway при помощи nginx
Реализовала шлюз на основе прозрачного прокси-сервера nginx.
```conf
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}
```
Результаты, после вызова команды `docker-compose up`:
Docker Desktop:
![](picture/docker.png)
index.html на gateway-1:
![](picture/test.png)
worker-1:
![](picture/lworker-1.png)
worker-2:
![](picture/lworker-2.png)

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_2</RootNamespace>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2.csproj", "{46EE043B-ED4D-44D1-82AF-3A180AD32532}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

484
tasks/grenaderova-aa/lab_3/.gitignore vendored Normal file
View File

@@ -0,0 +1,484 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from `dotnet new gitignore`
# dotenv files
.env
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
.idea
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# Vim temporary swap files
*.swp

View File

@@ -0,0 +1,85 @@
# Отчет по лабораторной работе №3
Выполнила студентка гр. ИСЭбд-41 Гренадерова А.А.
## REST API, Gateway и синхронный обмен между микросервисами
## Создание микросервисов
1. С помощью команды `dotnet new web -n worker-1` в терминале создала первый микросервис
2. Добавила решение командой `dotnet new sln`
3. Связала решение и проект командой `dotnet sln worker-1.sln add worker-1.csproj`
4. Повторила действие для второго микросервиса
5. Добавила библиотеку Swagger и OpenAi в проекты и запустила с помощью команды `dotnet run`
Скриншот протестированного микросервиса:
![](screens/1.png)
## Реализация синхронного обмена
Реализовала код, который вызывает сихронно данные из соседнего микросервиса.
```cs
//worker-2
app.MapGet("/Houses/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetStreets")
.WithOpenApi();
```
## Реализация gateway при помощи nginx
Добавила nginx.conf:
```conf
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}
```
Результат, после выполнения команды `docker-compose up`:
Docker:
![](screens/2.png)
index.html на gateway-1:
![](screens/3.png)
worker-1:
![](screens/4.png)
worker-2:
![](screens/5.png)

View File

@@ -0,0 +1,15 @@
version: "3.1"
services:
worker-1:
build: ./worker-1
worker-2:
build: ./worker-2
depends_on:
- worker-1
gateway:
image: nginx:latest
ports:
- 8080:8080
volumes:
- ./static:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

View File

@@ -0,0 +1,26 @@
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Тестовое приложение для л/р 3</title>
</head>
<body>
<p>Гренадерова А.А. ИСЭбд-41.</p>
<p><a href="/worker-1/">Отправить запрос к worker-1</a></p>
<p><a href="/worker-2/">Отправить запрос к worker-2</a></p>
</body>
</html>

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-1.dll"]

View File

@@ -0,0 +1,111 @@
List<Phones> phones = new()
{
new Phones() { Uuid= Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd"), Model = "Galaxy A", Brand = "Samsung"},
new Phones() { Uuid= Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e"), Model = "XS", Brand = "Apple"},
new Phones() { Uuid= Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9"), Model = "Redmi Note 10", Brand = "Xiaomi"},
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return phones.Select(r => new PhoneEntityDto()
{
Uuid = r.Uuid,
Model = r.Model,
Brand = r.Brand,
});
})
.WithName("GetPhones")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var phone = phones.FirstOrDefault(r => r.Uuid == uuid);
if (phone == null)
return Results.NotFound();
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("GetPhoneByGUID")
.WithOpenApi();
app.MapPost("/{model}/{brand}", (string Model, string Brand) =>
{
Guid NewGuid = Guid.NewGuid();
phones.Add(new Phones() { Uuid = NewGuid, Model = (string)Model, Brand = (string)Brand});
var phone = phones.FirstOrDefault(r => r.Uuid == NewGuid);
if (phone == null)
return Results.NotFound();
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("PostPhone")
.WithOpenApi();
app.MapPatch("/{uuid}/{model}/{brand}", (Guid uuid, string ?model, string ?brand) =>
{
var phone = phones.FirstOrDefault(r => r.Uuid == uuid);
if (phone == null)
return Results.NotFound();
if (model != null) phone.Model = model;
if (brand != null) phone.Brand = brand;
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("UpdatePhone")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var phone = phones.FirstOrDefault(r => r.Uuid == uuid);
if (phone == null)
return Results.NotFound();
phones.Remove(phone);
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("DeletePhoneByGUID")
.WithOpenApi();
app.Run();
public class Phones
{
public Guid Uuid { get; set; }
public string Model { get; set; } = string.Empty;
public string Brand { get; set; } = string.Empty;
}
public class PhoneEntityDto : Phones { }

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51956",
"sslPort": 44303
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5197",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7027;http://localhost:5197",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_1</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1.csproj", "{90F6C7BD-78E2-47C8-A702-DD47E74D3865}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-2.dll"]

View File

@@ -0,0 +1,139 @@
List<SpareParts> spareParts = new()
{
new SpareParts() { Uuid= Guid.NewGuid(), Name = "battery", IsSingleSparePart = true, IdPhone = Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd") },
new SpareParts() { Uuid= Guid.NewGuid(), Name = "microphone", IsSingleSparePart = false, IdPhone = Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9") },
new SpareParts() { Uuid= Guid.NewGuid(), Name = "camera", IsSingleSparePart = false, IdPhone = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
new SpareParts() { Uuid= Guid.NewGuid(), Name = "cable", IsSingleSparePart = true, IdPhone = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return spareParts.Select(r => new SparePartEntityDto()
{
Uuid = r.Uuid,
Name = r.Name,
IsSingleSparePart = r.IsSingleSparePart,
IdPhone = r.IdPhone,
});
})
.WithName("GetSpareParts")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == uuid);
if (sparePart == null)
return Results.NotFound();
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("GetSparePartByGUID")
.WithOpenApi();
app.MapPost("/{name}/{isSingleSparePart}/{idPhone}", (string? Name, bool IsSingleSparePart, Guid IdPhone) =>
{
Guid NewGuid = Guid.NewGuid();
spareParts.Add(new SpareParts() { Uuid = NewGuid, Name = (string)Name, IsSingleSparePart = (bool)IsSingleSparePart, IdPhone = (Guid)IdPhone });
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == NewGuid);
if (sparePart == null)
return Results.NotFound();
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("PostSparePart")
.WithOpenApi();
app.MapPatch("/{uuid}/{name}/{isSingleSparePart}/{idPhone}", (Guid uuid, string ?name, bool isSingleSparePart, Guid idPhone) =>
{
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == uuid);
if (sparePart == null)
return Results.NotFound();
if (name != ",") sparePart.Name = name;
if (isSingleSparePart != sparePart.IsSingleSparePart) sparePart.IsSingleSparePart = isSingleSparePart;
if (idPhone != sparePart.IdPhone) sparePart.IdPhone = idPhone;
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("UpdateSparePart")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == uuid);
if (sparePart == null)
return Results.NotFound();
spareParts.Remove(sparePart);
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("DeleteSparePart")
.WithOpenApi();
app.MapGet("/SpareParts/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetPhones")
.WithOpenApi();
app.Run();
public class SpareParts
{
public Guid Uuid { get; set; }
public string Name { get; set; } = string.Empty;
public bool IsSingleSparePart { get; set; }
public Guid IdPhone { get; set; }
}
public class SparePartEntityDto : SpareParts { }
public class Phones
{
public Guid Uuid { get; set; }
public string Model { get; set; } = string.Empty;
public string Brand { get; set; } = string.Empty;
}
public class PhoneEntityDto : Phones { }

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:36404",
"sslPort": 44384
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5101",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7125;http://localhost:5101",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_2</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2.csproj", "{C9D63524-2C63-4E86-91B6-D86955CFA5F8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C9D63524-2C63-4E86-91B6-D86955CFA5F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9D63524-2C63-4E86-91B6-D86955CFA5F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9D63524-2C63-4E86-91B6-D86955CFA5F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C9D63524-2C63-4E86-91B6-D86955CFA5F8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

3
tasks/grenaderova-aa/lab_4/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/lab_4.iml" filepath="$PROJECT_DIR$/.idea/lab_4.iml" />
</modules>
</component>
</project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
</component>
</project>

View File

@@ -0,0 +1,111 @@
# Отчет по лабораторной работе №4
Выполнила студентка гр. ИСЭбд-41 Гренадерова А.А.
## Прохождение tutorial
Установила rabbitMQ server, erlang и зашла в брокер под гостем по http://localhost:15672/#/
Туториал 1:
![](screens/4.png)
Туториал 2:
![](screens/5.png)
Туториал 3:
![](screens/6.png)
## Разработка демонстрационных приложений
Предметная область: Городское планирование и архитектура.
Разработала три приложения согласно предметной области.
1. Publisher
```py
import pika
import time
import random
collection = ["Buildings", "Streets", "Parks", "Transport", "Lighting"]
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='Entities', exchange_type='fanout')
while True:
message = f"Message: {random.choice(collection)}"
channel.basic_publish(exchange='Entities', routing_key='', body=message)
time.sleep(1)
connection.close()
```
2. Consumer 1.
```py
import pika
import time
def process_message(ch, method, properties, body):
print(f"Получено сообщение: {body}")
time.sleep(3)
print("Сообщение обработано")
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='Entities', queue=queue_name)
channel.basic_consume(queue=queue_name, on_message_callback=process_message, auto_ack=True)
print('Ожидание сообщений')
channel.start_consuming()
```
3. Consumer 2.
```py
import pika
def process_message(ch, method, properties, body):
print(f"Получено сообщение: {body}")
print("Сообщение обработано")
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='Entities', queue=queue_name)
channel.basic_consume(queue=queue_name, on_message_callback=process_message, auto_ack=True)
print('Ожидание сообщений')
channel.start_consuming()
```
## Результаты выполнения лабораторной работы
Результат отработки Consumer_1:
![](screens/2.png)
Результат отработки Consumer_2:
![](screens/3.png)
![](screens/1.png)
Вывод: Consumer_2 нагружает меньше памяти, чем Consumer_1 и принимает сообщения гораздо быстрее, тем самым не позволяя очереди накапливать огромное количество сообщений.

View File

@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@@ -0,0 +1 @@
Consumer_2.py

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.12 (python4Lab)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (python4Lab)" project-jdk-type="Python SDK" />
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/python4Lab.iml" filepath="$PROJECT_DIR$/.idea/python4Lab.iml" />
</modules>
</component>
</project>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../../.." vcs="Git" />
</component>
</project>

View File

@@ -0,0 +1,20 @@
import pika
import time
def process_message(ch, method, properties, body):
print(f"Получено сообщение: {body}")
time.sleep(3)
print("Сообщение обработано")
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='Entities', queue=queue_name)
channel.basic_consume(queue=queue_name, on_message_callback=process_message, auto_ack=True)
print('Ожидание сообщений')
channel.start_consuming()

View File

@@ -0,0 +1,19 @@
import pika
def process_message(ch, method, properties, body):
print(f"Получено сообщение: {body}")
print("Сообщение обработано")
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='Entities', queue=queue_name)
channel.basic_consume(queue=queue_name, on_message_callback=process_message, auto_ack=True)
print('Ожидание сообщений')
channel.start_consuming()

View File

@@ -0,0 +1,19 @@
import pika
import time
import random
collection = ["Buildings", "Streets", "Parks", "Transport", "Lighting"]
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='Entities', exchange_type='fanout')
while True:
message = f"Message: {random.choice(collection)}"
channel.basic_publish(exchange='Entities', routing_key='', body=message)
time.sleep(1)
connection.close()

View File

@@ -0,0 +1,160 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

View File

@@ -0,0 +1,25 @@
import pika, sys, os
def main():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='GrenaderovaLogs')
def callback(ch, method, properties, body):
print(f" [x] Получено сообщение: {body}")
channel.basic_consume(queue='GrenaderovaLogs', on_message_callback=callback, auto_ack=True)
print(' [*] Ожидание сообщений. Для завершения CTRL+C')
channel.start_consuming()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('Произошла ошибка')
try:
sys.exit(0)
except SystemExit:
os._exit(0)

Some files were not shown because too many files have changed in this diff Show More