From ab4a79e37fcf0e0b0114920dc1fd511054139c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=BB=D0=B0=20=D0=9C=D1=83=D1=82?= =?UTF-8?q?=D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2?= Date: Sun, 7 Jan 2024 21:16:34 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9C=D1=83=D1=82=D1=80=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=94.=D0=A1.=20=D0=9B=D0=A03?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/mutriskov-ds/lab_3/.gitignore | 477 ++++++++++++++++++ tasks/mutriskov-ds/lab_3/README.md | 107 ++++ tasks/mutriskov-ds/lab_3/docker-compose.yml | 15 + tasks/mutriskov-ds/lab_3/images/Docker.png | Bin 0 -> 23415 bytes .../lab_3/images/ProfessionApi.png | Bin 0 -> 41458 bytes tasks/mutriskov-ds/lab_3/images/SkillApi.png | Bin 0 -> 39419 bytes tasks/mutriskov-ds/lab_3/images/gateway.png | Bin 0 -> 8761 bytes .../lab_3/images/professionResponse.png | Bin 0 -> 11100 bytes .../lab_3/images/skillsResponse.png | Bin 0 -> 26397 bytes tasks/mutriskov-ds/lab_3/nginx.conf | 26 + tasks/mutriskov-ds/lab_3/static/index.html | 12 + tasks/mutriskov-ds/lab_3/worker-1/Dockerfile | 11 + tasks/mutriskov-ds/lab_3/worker-1/Program.cs | 165 ++++++ .../worker-1/Properties/launchSettings.json | 37 ++ .../worker-1/appsettings.Development.json | 8 + .../lab_3/worker-1/appsettings.json | 9 + .../lab_3/worker-1/worker-1.csproj | 15 + .../mutriskov-ds/lab_3/worker-1/worker-1.sln | 22 + tasks/mutriskov-ds/lab_3/worker-2/Dockerfile | 11 + tasks/mutriskov-ds/lab_3/worker-2/Program.cs | 110 ++++ .../worker-2/Properties/launchSettings.json | 37 ++ .../worker-2/appsettings.Development.json | 8 + .../lab_3/worker-2/appsettings.json | 9 + .../lab_3/worker-2/worker-2.csproj | 15 + .../mutriskov-ds/lab_3/worker-2/worker-2.sln | 22 + 25 files changed, 1116 insertions(+) create mode 100644 tasks/mutriskov-ds/lab_3/.gitignore create mode 100644 tasks/mutriskov-ds/lab_3/README.md create mode 100644 tasks/mutriskov-ds/lab_3/docker-compose.yml create mode 100644 tasks/mutriskov-ds/lab_3/images/Docker.png create mode 100644 tasks/mutriskov-ds/lab_3/images/ProfessionApi.png create mode 100644 tasks/mutriskov-ds/lab_3/images/SkillApi.png create mode 100644 tasks/mutriskov-ds/lab_3/images/gateway.png create mode 100644 tasks/mutriskov-ds/lab_3/images/professionResponse.png create mode 100644 tasks/mutriskov-ds/lab_3/images/skillsResponse.png create mode 100644 tasks/mutriskov-ds/lab_3/nginx.conf create mode 100644 tasks/mutriskov-ds/lab_3/static/index.html create mode 100644 tasks/mutriskov-ds/lab_3/worker-1/Dockerfile create mode 100644 tasks/mutriskov-ds/lab_3/worker-1/Program.cs create mode 100644 tasks/mutriskov-ds/lab_3/worker-1/Properties/launchSettings.json create mode 100644 tasks/mutriskov-ds/lab_3/worker-1/appsettings.Development.json create mode 100644 tasks/mutriskov-ds/lab_3/worker-1/appsettings.json create mode 100644 tasks/mutriskov-ds/lab_3/worker-1/worker-1.csproj create mode 100644 tasks/mutriskov-ds/lab_3/worker-1/worker-1.sln create mode 100644 tasks/mutriskov-ds/lab_3/worker-2/Dockerfile create mode 100644 tasks/mutriskov-ds/lab_3/worker-2/Program.cs create mode 100644 tasks/mutriskov-ds/lab_3/worker-2/Properties/launchSettings.json create mode 100644 tasks/mutriskov-ds/lab_3/worker-2/appsettings.Development.json create mode 100644 tasks/mutriskov-ds/lab_3/worker-2/appsettings.json create mode 100644 tasks/mutriskov-ds/lab_3/worker-2/worker-2.csproj create mode 100644 tasks/mutriskov-ds/lab_3/worker-2/worker-2.sln diff --git a/tasks/mutriskov-ds/lab_3/.gitignore b/tasks/mutriskov-ds/lab_3/.gitignore new file mode 100644 index 0000000..154e127 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/.gitignore @@ -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 diff --git a/tasks/mutriskov-ds/lab_3/README.md b/tasks/mutriskov-ds/lab_3/README.md new file mode 100644 index 0000000..963e457 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/README.md @@ -0,0 +1,107 @@ +# Отчет по лабораторной работе №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` +6. Заложил в приложения следующую логику : + + worker-1 - CRUD для сущности Skill + + worker-2 - CRUD для сущности Profession + + К одной Profession относится много Skill + +Скриншоты API обоих приложений: +![](images/SkillApi.png) +![](images/ProfessionApi.png) + +## Реализация синхронного обмена + +Реализовал простое хранилище, которое при инициализации обращается вызывает сихронно данные из соседнего микросервиса. +Далее эти данные используются при обработке запросов к API + +```cs +public class Storage +{ + public static Profession[] Professions { get; set; } + + public static List Skills { get; set; } + + static Storage() + { + var client = new HttpClient(); + string Url = "http://worker-2:80/Professions/"; + Professions = client.GetFromJsonAsync(Url).Result; + + Skills = new List() + { + new Skill() { Id = Guid.NewGuid(), Name = "Knowledge of programming", Level = Levels.Expert, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Software Developer").Id }, + new Skill() { Id = Guid.NewGuid(), Name = "Stress resistance", Level = Levels.Expert, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Software Developer").Id }, + new Skill() { Id = Guid.NewGuid(), Name = "The ability to cook", Level = Levels.Middle, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Cook").Id }, + new Skill() { Id = Guid.NewGuid(), Name = "Knowledge of plumbing", Level = Levels.Middle, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Plumber").Id } + }; + } +} +``` + +## Реализация 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:80/; + 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:80/; + 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: + +![](images/Docker.png) + +index.html на gateway-1: + +![](images/gateway.png) + + +worker-2: + +![](images/professionsResponse.png) + +worker-2: + +professionId - берется из другого приложения. Идентификаторы совпали -> все отработало корректно +![](images/skillResponse.png) \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/docker-compose.yml b/tasks/mutriskov-ds/lab_3/docker-compose.yml new file mode 100644 index 0000000..83d0eb7 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.1" +services: + worker-2: + build: ./worker-2 + worker-1: + build: ./worker-1 + depends_on: + - worker-2 + gateway: + image: nginx:latest + ports: + - 8080:8080 + volumes: + - ./static:/usr/share/nginx/html:ro + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/images/Docker.png b/tasks/mutriskov-ds/lab_3/images/Docker.png new file mode 100644 index 0000000000000000000000000000000000000000..d42df7375ca26b5d7c11710d04e8f18d24c290b2 GIT binary patch literal 23415 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 literal 0 HcmV?d00001 diff --git a/tasks/mutriskov-ds/lab_3/images/ProfessionApi.png b/tasks/mutriskov-ds/lab_3/images/ProfessionApi.png new file mode 100644 index 0000000000000000000000000000000000000000..f229786eeb472cffb00450bbae605bc9515d3269 GIT binary patch literal 41458 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 XbYj43#CCPu1E8X)p@5Kk^Z7pjj!%8N literal 0 HcmV?d00001 diff --git a/tasks/mutriskov-ds/lab_3/images/professionResponse.png b/tasks/mutriskov-ds/lab_3/images/professionResponse.png new file mode 100644 index 0000000000000000000000000000000000000000..56cc5ff49f068143e3d32f7146e49966c7e43cfc GIT binary patch literal 11100 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 literal 0 HcmV?d00001 diff --git a/tasks/mutriskov-ds/lab_3/images/skillsResponse.png b/tasks/mutriskov-ds/lab_3/images/skillsResponse.png new file mode 100644 index 0000000000000000000000000000000000000000..0c740d2fede19ab1b9f5bdab79743142703301b1 GIT binary patch literal 26397 zcmb??byQUC+b#woAOa#FN+?K|bb}%#2uKb+BHhvqH7MQE(k0#9Al)EcGD9~EFu)KK zXMBBs-}kMv&L8Kjbyy45-m{t=7mc?9&#%df-hmqxXSJ)C&0^l4fKchi=XbkC4JTWnxgvKYmkD6 z!o{k4hWXaWNOBXOJA&z%M~C8iTaB~DnD2pO8NuGF!I;{*V z@t=>`!buWjLx$*O%*=v!3g0RQt59aY*-1`kSju46(C*2E%a{EcdaWz41vWHVl%Q8U zKI-hMOTQerNM~r0%M2u~cuDBG+IE1EvsS!Hq5krJT;so&ZdJ*Z`DZcGoa&(f%f-i3 zkLUAMx#-CFZtK+Z7m-&75q?>#Hh+!Bq;kxp%%Yqk%xm?@N?MVM`f1|&SPP!g8nn~6 zrjo>`{5#v0fMIfoe@Wx{|NctGx4nrBc(;@A0b`!UcbCdvvTmW zU!U_7(Ec5;zI^ajDMGR!nP081zx7rh)xE4+|6F-hJ}Uad<=3qTmF6O*)>d1c0r%HQ z@BI3E*OLNk>sAwDZW_V#?3vStQk5EAhUzIFeqL=0ub01zJIZ5wU1Vy(Nz_p+22VIlsC z!E`KW%74fCDMoleqA2Ave2q+O8eyf5yvxgq0Qp5*RW;u+23hC9#9LHxv3xCh2NWZ zf8qxbG6K0;&JBBw{O5Y9vRIbekZE65RWuJy8}W}w$s}=y$(L6@FY(C~1q4pBPrADq z-o9lx?Z7BqV_emKn_03ixqNJOx9Pg zXcax1WcMO4OQLq7H6Nk+XO-s-PH;p}P*8@CdB5|xRFYt^He13&kqx3?TF?0a{Pj;8 zh^*bXOI_)Mw+~*!w6Kpn-ga!wu~t_nfTxlgZxOHK{dv25xdpLtJ<%0AW+0dO*M4D7 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 JMM#^5{4Z>YBf|gy literal 0 HcmV?d00001 diff --git a/tasks/mutriskov-ds/lab_3/nginx.conf b/tasks/mutriskov-ds/lab_3/nginx.conf new file mode 100644 index 0000000..f65313a --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/nginx.conf @@ -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:80/; + 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:80/; + 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; + } +} \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/static/index.html b/tasks/mutriskov-ds/lab_3/static/index.html new file mode 100644 index 0000000..2b41dad --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/static/index.html @@ -0,0 +1,12 @@ + + + + + + Тестовое приложение для л/р 3 + + +

Мутрисков Д.С. ИСЭбд-41.

+

Отправить запрос к worker-1

+

Отправить запрос к worker-2

+ \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/worker-1/Dockerfile b/tasks/mutriskov-ds/lab_3/worker-1/Dockerfile new file mode 100644 index 0000000..13313fb --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-1/Dockerfile @@ -0,0 +1,11 @@ +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"] \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/worker-1/Program.cs b/tasks/mutriskov-ds/lab_3/worker-1/Program.cs new file mode 100644 index 0000000..edd0bd8 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-1/Program.cs @@ -0,0 +1,165 @@ +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("/Skills/", () => +{ + return Results.Ok(Storage.Skills.ToArray()); +}) + .WithName("List") + .WithOpenApi(); + +app.MapGet("/Skills/{skillId}", (Guid skillId) => +{ + var skill = Storage.Skills.FirstOrDefault(s => s.Id == skillId); + + if (skill == null) + { + return Results.NotFound($" {skillId}"); + } + + return Results.Json(new Skill() + { + Id = skill.Id, + Name = skill.Name, + Level = skill.Level, + ProfessionId = skill.ProfessionId + }); +}) + .WithName("Get") + .WithOpenApi(); + +app.MapPost("/Skills/", (SkillRequest request) => +{ + if (Storage.Professions.FirstOrDefault(p => p.Id == request.ProfessionId) is null) + { + return Results.NotFound($" {request.ProfessionId}"); + } + + var skillId = Guid.NewGuid(); + + Storage.Skills.Add(new Skill() + { + Id = skillId, + Name = request.Name, + Level = request.Level, + ProfessionId = request.ProfessionId + }); + + return Results.Ok(skillId); +}) + .WithName("Create") + .WithOpenApi(); + +app.MapPatch("/Skills/{skillId}", (Guid skillId, SkillRequest request) => +{ + var skill = Storage.Skills.FirstOrDefault(s => s.Id == skillId); + if (skill == null) + { + Results.NotFound($" {skillId}"); + } + + if (!string.IsNullOrEmpty(request.Name)) + { + skill.Name = request.Name; + } + + if (!string.IsNullOrEmpty(request.Name)) + { + skill.Level = request.Level; + } + + if (!string.IsNullOrEmpty(request.Name)) + { + skill.ProfessionId = request.ProfessionId; + } + + return Results.Ok(skill); +}) + .WithName("Update") + .WithOpenApi(); + +app.MapDelete("/Skills/{skillId}", (Guid skillId) => +{ + var skill = Storage.Skills.FirstOrDefault(s => s.Id == skillId); + if (skill == null) + { + Results.NotFound($" {skillId}"); + } + + Storage.Skills.Remove(skill); + return Results.Ok(skillId); +}) + .WithName("Delete") + .WithOpenApi(); + +app.Run(); + + +public class Profession +{ + public Guid Id { get; set; } + + public string Name { get; set; } +} + +public class Skill +{ + public Guid Id { get; set; } + + public string Name { get; set; } + + public Levels Level { get; set; } + + public Guid ProfessionId { get; set; } +} + +public class SkillRequest +{ + public string Name { get; set; } + + public Levels Level { get; set; } + + public Guid ProfessionId { get; set; } +} + +public enum Levels +{ + None = 0, + Basic = 1, + Middle = 2, + Expert = 3 +} + +public class Storage +{ + public static Profession[] Professions { get; set; } + + public static List Skills { get; set; } + + static Storage() + { + var client = new HttpClient(); + string Url = "http://worker-2:80/Professions/"; + Professions = client.GetFromJsonAsync(Url).Result; + + Skills = new List() + { + new Skill() { Id = Guid.NewGuid(), Name = "Knowledge of programming", Level = Levels.Expert, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Software Developer").Id }, + new Skill() { Id = Guid.NewGuid(), Name = "Stress resistance", Level = Levels.Expert, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Software Developer").Id }, + new Skill() { Id = Guid.NewGuid(), Name = "The ability to cook", Level = Levels.Middle, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Cook").Id }, + new Skill() { Id = Guid.NewGuid(), Name = "Knowledge of plumbing", Level = Levels.Middle, ProfessionId = Professions.FirstOrDefault(p => p.Name == "Plumber").Id } + }; + } +} \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/worker-1/Properties/launchSettings.json b/tasks/mutriskov-ds/lab_3/worker-1/Properties/launchSettings.json new file mode 100644 index 0000000..e6200f4 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-1/Properties/launchSettings.json @@ -0,0 +1,37 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:2117", + "sslPort": 44312 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5035", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7148;http://localhost:5035", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tasks/mutriskov-ds/lab_3/worker-1/appsettings.Development.json b/tasks/mutriskov-ds/lab_3/worker-1/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-1/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/tasks/mutriskov-ds/lab_3/worker-1/appsettings.json b/tasks/mutriskov-ds/lab_3/worker-1/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-1/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/tasks/mutriskov-ds/lab_3/worker-1/worker-1.csproj b/tasks/mutriskov-ds/lab_3/worker-1/worker-1.csproj new file mode 100644 index 0000000..1b61a49 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-1/worker-1.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + enable + enable + worker_1 + + + + + + + + diff --git a/tasks/mutriskov-ds/lab_3/worker-1/worker-1.sln b/tasks/mutriskov-ds/lab_3/worker-1/worker-1.sln new file mode 100644 index 0000000..5be65b4 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-1/worker-1.sln @@ -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", "{D9A74609-009B-4FD3-A9BC-5DE37D241ABE}" +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 + {D9A74609-009B-4FD3-A9BC-5DE37D241ABE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9A74609-009B-4FD3-A9BC-5DE37D241ABE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9A74609-009B-4FD3-A9BC-5DE37D241ABE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9A74609-009B-4FD3-A9BC-5DE37D241ABE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/mutriskov-ds/lab_3/worker-2/Dockerfile b/tasks/mutriskov-ds/lab_3/worker-2/Dockerfile new file mode 100644 index 0000000..8f44787 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-2/Dockerfile @@ -0,0 +1,11 @@ +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"] \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/worker-2/Program.cs b/tasks/mutriskov-ds/lab_3/worker-2/Program.cs new file mode 100644 index 0000000..eb6ccae --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-2/Program.cs @@ -0,0 +1,110 @@ +using Microsoft.AspNetCore.Mvc; + +List professions = new() +{ + new Profession() { Id = Guid.NewGuid(), Name = "Software Developer" }, + new Profession() { Id = Guid.NewGuid(), Name = "Plumber" }, + new Profession() { Id = Guid.NewGuid(), Name = "Cook" } +}; + +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("/Professions/", () => +{ + return Results.Ok(professions.ToArray()); +}) + .WithName("List") + .WithOpenApi(); + +app.MapGet("/Professions/{professionId}", (Guid professionId) => +{ + var proffesion = professions.FirstOrDefault(p => p.Id == professionId); + + if (proffesion is null) + { + return Results.NotFound($" {professionId}"); + } + + return Results.Json(new Profession() + { + Id = proffesion.Id, + Name = proffesion.Name + }); +}) + .WithName("Get") + .WithOpenApi(); + +app.MapPost("/Professions/", (ProfessionRequest request) => +{ + Guid proffesionId = Guid.NewGuid(); + professions.Add(new Profession() + { + Id = proffesionId, + Name = request.Name + }); +}) + .WithName("Create") + .WithOpenApi(); + +app.MapPatch("/Professions/{professionId}", (Guid professionId, ProfessionRequest request) => +{ + var profession = professions.FirstOrDefault(p => p.Id == professionId); + + if (profession is null) + { + return Results.NotFound($" {professionId}"); + } + + if (!string.IsNullOrEmpty(request.Name)) + { + profession.Name = request.Name; + } + + return Results.Ok(profession); +}) + .WithName("Update") + .WithOpenApi(); + +app.MapDelete("/Professions/{professionId}", (Guid professionId) => +{ + var profession = professions.FirstOrDefault(p => p.Id == professionId); + + if (profession is null) + { + return Results.NotFound($" {professionId}"); + } + + professions.Remove(profession); + + return Results.Ok(professionId); +}) + .WithName("Delete") + .WithOpenApi(); + +app.Run(); + + +public class Profession +{ + public Guid Id { get; set; } + + public string Name { get; set; } +} + +public class ProfessionRequest +{ + public string Name { get; set; } +} \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_3/worker-2/Properties/launchSettings.json b/tasks/mutriskov-ds/lab_3/worker-2/Properties/launchSettings.json new file mode 100644 index 0000000..0aa76f0 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-2/Properties/launchSettings.json @@ -0,0 +1,37 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:20053", + "sslPort": 44371 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5074", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7121;http://localhost:5074", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tasks/mutriskov-ds/lab_3/worker-2/appsettings.Development.json b/tasks/mutriskov-ds/lab_3/worker-2/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-2/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/tasks/mutriskov-ds/lab_3/worker-2/appsettings.json b/tasks/mutriskov-ds/lab_3/worker-2/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-2/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/tasks/mutriskov-ds/lab_3/worker-2/worker-2.csproj b/tasks/mutriskov-ds/lab_3/worker-2/worker-2.csproj new file mode 100644 index 0000000..4d95491 --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-2/worker-2.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + enable + enable + worker_2 + + + + + + + + diff --git a/tasks/mutriskov-ds/lab_3/worker-2/worker-2.sln b/tasks/mutriskov-ds/lab_3/worker-2/worker-2.sln new file mode 100644 index 0000000..0c1c46e --- /dev/null +++ b/tasks/mutriskov-ds/lab_3/worker-2/worker-2.sln @@ -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", "{6B6458D3-45F9-4FB7-8E89-EECCDE5B636A}" +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 + {6B6458D3-45F9-4FB7-8E89-EECCDE5B636A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B6458D3-45F9-4FB7-8E89-EECCDE5B636A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B6458D3-45F9-4FB7-8E89-EECCDE5B636A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B6458D3-45F9-4FB7-8E89-EECCDE5B636A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal -- 2.25.1 From 2ed2f3277532b0e8056eb420c264c729a2341dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=BB=D0=B0=20=D0=9C=D1=83=D1=82?= =?UTF-8?q?=D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2?= Date: Sun, 7 Jan 2024 21:17:41 +0400 Subject: [PATCH 2/2] fix --- tasks/mutriskov-ds/lab_3/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/mutriskov-ds/lab_3/README.md b/tasks/mutriskov-ds/lab_3/README.md index 963e457..6d8c638 100644 --- a/tasks/mutriskov-ds/lab_3/README.md +++ b/tasks/mutriskov-ds/lab_3/README.md @@ -99,9 +99,9 @@ index.html на gateway-1: worker-2: -![](images/professionsResponse.png) +![](images/professionResponse.png) worker-2: professionId - берется из другого приложения. Идентификаторы совпали -> все отработало корректно -![](images/skillResponse.png) \ No newline at end of file +![](images/skillsResponse.png) \ No newline at end of file -- 2.25.1