Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Манай төслүүд ихэвчлэн бүс нутгийнх бөгөөд үйлчлүүлэгчид нь ихэвчлэн яамд байдаг. Гэхдээ төрийн салбараас гадна хувийн хэвшлийн байгууллагууд ч манай системийг ашигладаг. Тэдэнтэй холбоотой асуудал бараг байдаггүй.

Тэгэхээр гол төслүүд нь бүс нутгийн шинжтэй, заримдаа тэдэнтэй холбоотой асуудал гардаг. Жишээлбэл, бүтээгдхүүний серверүүд дээр шинэ функцуудыг нэвтрүүлэх хугацаанд бүс нутагт манай 20 мянга гаруй үнэ цэнэтэй хэрэглэгчид байдаг бол гүйцэтгэлийн хувьд. Энэ бол өвдөлт…

Намайг Руслан гэдэг, би BARS группын мэдээллийн системийг дэмждэг хүчирхийллийн цуврал DBA-д зориулсан алуурчин ботыг хөгжүүлэх. Энэ бичлэг нь сул дорой хүмүүст зориулагдаагүй - маш олон захидал, зураг байдаг.

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

/awr

Манай зарим програмууд Oracle DBMS дээр ажилладаг. PostgreSQL DBMS дээр төслүүд бас бий. Oracle-д гайхалтай зүйл бий - DBMS дээрх ачааллын статистик мэдээллийг цуглуулж, одоо байгаа асуудлуудыг онцолж, бүр арилгах зөвлөмжийг өгдөг - Автомат ачааллын хадгалах газар (AWR). Нэгэн цагт (ялангуяа өвдөлтийн үед) хөгжүүлэгчид цуглуулахыг байнга хүсдэг Гүйцэтгэлийн шинжилгээнд зориулсан AWR тайлан. Бид чин сэтгэлээсээ DBMS серверт очиж, тайлан цуглуулж, бидэн рүү аваачиж, шинжилгээнд зориулж үйлдвэрлэл рүү илгээсэн. 5 дахь удаагаа эгдүүцмээр... 10 дахь удаагаа эгдүүцмээр...

Нэгээс олон удаа хийж байгаа бүх зүйлийг автоматжуулах хэрэгтэй гэсэн санааг манай нэг хамт олон хэлж байсан удаатай. Үнэнийг хэлэхэд, уурлах мөч хүртэл би энэ талаар огт бодоогүй бөгөөд автоматжуулж болох бүх зүйлийг автоматжуулахыг оролдсон боловч ихэнхдээ энэ нь эрэлт хэрэгцээтэй байдаггүй бөгөөд хэрэглээний шинж чанараас илүү судалгааны шинж чанартай байдаг.

Тэгээд би бодлоо: "Админууд тайлан гаргах шаардлагагүй...". Эцсийн эцэст, тайлан цуглуулна гэдэг нь @$ORACLE_HOME/rdbms/admin/awrrpt.sql sql скриптийг ажиллуулж, тайланг серверээс өөрийн газар руу аваачна гэсэн үг юм ... Өө тийм, бид үйлдвэрлэлд зориулж хөгжүүлэлтийг зөвшөөрдөггүй.

Дараа нь би Google-д шаардлагатай мэдээллийг хайж, тестийн бааз дээрх нийтлэлээс функцийг бүтээж, скрипт болон гайхамшгийг ажиллуулсан - тайланг эмхэтгэсэн бөгөөд үүнийг дотооддоо хадгалах боломжтой. AWR тайлангууд ихэвчлэн шаардлагатай байдаг функцүүдийг үүсгэж, тэдгээрийг хэрхэн ашиглахыг хөгжүүлэгчдэд зааж өгсөн.

Энэ үед би чөлөөт цагаараа @BotFather-тэй ярилцсаны дараа өөртөө зориулж Telegram бот үүсгэсэн. Би тэнд энгийн функцийг хийсэн - одоогийн цаг, валютын ханш, цаг агаарыг харуулж, хуваарийн дагуу эхнэртээ (дараа нь найз охиндоо) магтаал илгээхийг зааж өгсөн. Магадгүй тэр үед магтаал илгээх нь миний роботын хамгийн алдартай функц байсан бөгөөд эхнэр маань үүнийг үнэлдэг байв.

Тэгэхээр. Хөгжүүлэгчид бидэнд Telegram дээр бичдэг, бид тэдэнд Telegram дээр тайлан илгээдэг ... Тэд бидэнд биш, харин бот руу бичвэл яах вэ? Эцсийн эцэст, энэ нь хүн бүрт илүү дээр байх болно, тайланг илүү хурдан хүлээн авах болно, хамгийн чухал нь биднийг тойрч гарах болно. Миний роботын анхны түгээмэл функцын санаа ингэж төрсөн юм.

Би хэрэгжүүлж эхэлсэн. Би үүнийг чадах чинээгээрээ PHP дээр хийсэн (манай програм өөрөө PHP дээр байдаг, би үүнийг Python-оос илүү сайн мэддэг). Би сайн кодлогч биш болохоор кодоо харуулахгүй ээ :)

Бот нь манай корпорацийн сүлжээнд амьдардаг бөгөөд зорилтот мэдээллийн сан зэрэг тодорхой төслүүдэд хандах боломжтой. Баг эсвэл цэс дэх параметрүүдэд санаа зовохгүй байхын тулд би энэ функцийг хяналтын мэдэгдэл бүхий групп чат руу нэмсэн. Ингэснээр бот ямар мэдээллийн сангаас тайлан цуглуулахыг шууд мэддэг.

гэх мэт тушаал хүлээн авлаа /авр Н, энд N нь тайлан гаргах шаардлагатай бүтэн цагийн тоо (анхдагчаар - 1 цаг), долоо хоногийн турш ч гэсэн мэдээллийн баазыг дахин эхлүүлээгүй бол робот тэр даруй ажиллаж, тайланг цуглуулж, нийтэлдэг. вэб хуудас болон нэн даруй (бараг тэнд) нэн шаардлагатай тайлангийн холбоосыг өгдөг.

Холбоосыг дагана уу, энд AWR тайлан байна:

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Хүлээгдэж байсанчлан хөгжүүлэгчид ийм тайлан гаргах ажлыг даван туулж, зарим нь бидэнд талархаж байсан.

Багийн тав тухыг үнэлсний дараа бусад бүс нутгийн төслийн менежерүүд үүнийг хүсч байсан, учир нь тэд үйлчлүүлэгчээс хамгийн их зүйлийг авч, системийн гүйцэтгэл, хүртээмжийн талаар санаа зовдог. Би бусад чат руу бот нэмсэн. Тэд одоо ч үүнийг ашигладаг бөгөөд би үүнд баяртай байна.

Хожим нь ААНОАТ-ын хамт олон бидний тайланг хэрхэн цуглуулдаг талаар олж мэдээд бас үүнийг хийхийг хүссэн. Би тэднийг чатдаа нэмээгүй, хуваарийн дагуу болон хүсэлтийн дагуу тайлан гаргах тусдаа чат үүсгэсэн.

/pgBadger

Бидэнд мөн PostgreSQL-тэй хамт PHP дээр өөр програмууд байдаг. Би бүлгийн чат дээр ижил зарчмыг ашиглан тусламж хэрэгтэй хүмүүст зориулсан pgBadger тайлангийн цуглуулгыг хэрэгжүүлсэн. Эхлээд тэд үүнийг ашигладаг байсан ч дараа нь тэд зогссон. Энэ функцийг шаардлагагүй гэж хассан.

/үүрэг

Манай хэлтэс шөнийн ээлжтэй, үүний дагуу цагийн хуваарьтай. Энэ нь Google Sheets дээр байна. Холбоос хайх, диаграм нээх, өөрийгөө хайх нь үргэлж тохиромжтой байдаггүй ... Миний хуучин хамт олон Telegram боттойгоо тоглож, манай хэлтсийн чат руу нэвтрүүлсэн. хэлтсийн ажилтнуудын ажлын ээлж эхлэх тухай мэдэгдэл. Бот нь хуваарийг задлан шинжилж, одоогийн огноогоор жижүүрийг тодорхойлж, хуваарийн дагуу эсвэл хүсэлтийн дагуу өнөөдөр жижүүрийн талаар мэдээлдэг. Энэ нь гайхалтай бөгөөд тохиромжтой болсон. Үнэн, би мессежийн хэлбэрт үнэхээр дургүй байсан. Мөн өөр хэлтсийн ажилчдын хувьд (жишээлбэл, "Анагаах ухаан" гэх мэт) өөр чиглэлд жижүүрийн талаархи мэдээлэл үнэхээр шаардлагагүй боловч асуудал гарсан тохиолдолд "Анагаах ухаан" -д хэн үүрэг гүйцэтгэж байгааг мэдэх хэрэгтэй. Би уг функцийг "зээлэхээр" шийдсэн боловч таалагдаагүй зүйлээ өөрчилсөн. Би шаардлагагүй мэдээллийг устгаж, өөртөө болон бусдад тохиромжтой мессежийн формат хийсэн.

/tnls

Telegram бот ашиглан автоматжуулалтыг туршиж үзсэний дараа олон янзын санаа гарч ирсэн ч би маш хэрэгтэй зүйлийг хийхийг хүссэн. Би удирдахаар шийдсэн хүсэлтийн статистик. Үйлчлүүлэгчдийнхээ төслүүдэд хандахын тулд бид "jump server" буюу дамжуулагч серверийг хэрэгжүүлсэн. Үүн дээр VPN холболтууд тавигдаж, дараа нь програмын портууд, мэдээллийн сан болон бусад туслах дамжуулалтыг ssh-ээр дамжуулан манай дотоод сүлжээнд дамжуулж, VPN холболттой холбоотой асуудалгүйгээр ажилтнуудынхаа төслүүдэд хялбар хандах боломжтой. Та хийх ёстой зүйл бол манай корпорацийн сүлжээнд VPN холболтыг тохируулах явдал юм.

Хүсэлтийн статистик мэдээллээс үзэхэд хонгилын аль нэг нь бүтэлгүйтсэний дараа (жишээлбэл, сүлжээний саатал гарсан тохиолдолд) хүмүүс төсөлд нэвтрэх эрхийг сэргээх талаар бидэнтэй холбогддог. Ихэнх тохиолдолд холболтыг дахин эхлүүлэхэд хангалттай бөгөөд бүх зүйл хэвийн байна. Үүнийг өөрөө хийцгээе. Энд тушаал байна:
Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Та хүссэн цэсний зүйл рүү "унаж", төслөө сонгоод, түр хүлээнэ үү, бүгд аз жаргалтай, сэтгэл хангалуун байна ...

Командыг хүлээн авсны дараа байт болон битүүдийн бага зэрэг хөдөлгөөнөөр бот нь дамжуулагч серверт холбогдож, аль дамжуулалтыг дахин эхлүүлэх шаардлагатайг урьдчилан мэдэж, ажлаа хийдэг - төслийн холболтыг сэргээдэг. Ийм асуудлуудыг өөрөө шийдэж болохын тулд би зааварчилгаа бичсэн. Мөн өгсөн хэрэгсэл нь ажиллахгүй байхад л хүмүүс бидэнтэй холбогдож...

/ecp_to_pem

Цаашдын статистик мэдээллээс харахад ихэвчлэн хөрвүүлэх шаардлагатай байдаг Pem форматтай EDS Crypto Pro(Суурь64) янз бүрийн интеграцид зориулагдсан бөгөөд бидэнд маш олон байдаг. Даалгавар: савыг аваад, P12FromGostCSP хэрэглүүрийг суулгасан (төлбөртэй, дашрамд) Windows компьютерт хуулж, pfx болгон хөрвүүлж, OpenSSL (ГОСТ шифрлэлтийн дэмжлэгтэй) ашиглан pfx-г pem болгон хөрвүүлнэ. Энэ нь тийм ч тохиромжтой биш, гэхдээ та үүнийг хуруугаараа хурдан хийхийг хүсч байна.

Google дахин аврах ажилд ирлээ. Олдсон ямар нэг эелдэг хүний ​​ашиг тус. Би үүнийг README дээр бичсэнээр угсарсан - энэ нь ажилласан. Би ботыг хэрэглүүртэй ажиллахыг зааж, бараг агшин зуурын хөрвүүлэлтийг авсан.
Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Эцсийн хэрэгжилтийн үед шифрлэлтийн шинэ формат руу шилжих тушаал гарсан - gost-2012. Миний санаж байгаагаар тэр үед уг хэрэгсэл нь зөвхөн хуучин ГОСТ (2001)-тай ажилладаг байсан, магадгүй энэ нь өөр сайхан сэтгэлтэй хүний ​​​​үүнтэй төстэй хэрэгсэл байсан байх, би яг сайн санахгүй байна.
Шинэ ГОСТ руу шилжсэний дараа аюулгүй байдлын үүднээс bot-ын ажиллагааг устгасан. Үүнийг докерын саванд хэрэгжүүлсэн.

Dockerfile, хэрэв хэн нэгэнд хэрэгтэй бол:

FROM ubuntu:16.04                                                                                                                                                                        
RUN apt update && apt -y install git sudo wget unzip gcc g++ make &&                        
   cd /srv/ && git clone https://github.com/kov-serg/get-cpcert.git &&                     
   cd get-cpcert && chmod +x *.sh && ./prepare.sh && ./build.sh &&                         
   mkdir -p /srv/{in,out} &&                                                               
   echo '#!/bin/bash' > /srv/getpem.sh &&                                                  
   echo 'cd /srv/get-cpcert' >> /srv/getpem.sh &&                                          
   echo './get-cpcert /srv/in/$CONT.000 $PASS > /srv/out/$CONT.pem' >> /srv/getpem.sh &&   
   chmod +x /srv/getpem.sh                                                                  ENTRYPOINT /srv/getpem.sh

Хөрвүүлэхийн тулд та эх савыг (xxx.000 гэх мэт лавлах) /srv/in директорт байрлуулж, бэлэн болсон pem-ийг /srv/out руу аваачна.

Хөрвүүлэхийн тулд:

 docker run -t -i -e CONT='<имя директории с контейнером(без ".000")>' -e PASS='<пароль для контейнера>' -v /srv/in:/srv/in -v /srv/out:/srv/out --name ecptopem <адрес нашего репозитория>/med/ecptopem:latest 

/emstop болон /emstart

Нэг өдөр DBMS-ийн удирдлага, хөгжүүлэлтийн чиглэлээр асар их туршлагатай, маш дажгүй Oracle DBA манай компанид ажилд орсон. Тэр даруй ssh-ээр DBMS серверүүдтэй холбогдоход асуудалтай тулгарсан: тэр хаана, хэрхэн холбогдохоо мэдэхгүй, хандалтыг тодорхой тайлбарлаагүй эсвэл өөрт хэрэгтэй зүйлээ дамжуулж чадахгүй байна. За, бид туслахдаа баяртай байна, бид түүнд хэрхэн холбогдохыг хэлж, Enterprise Manager руу дамжуулав. Гэвч ssh-д бүх зүйл бүтсэнгүй. Манай хамт олон үүнийг энгийнээр тайлбарлав: цэвэр DBA :) Хэрэв бид сервер дээр ямар нэг зүйлийг өөрчлөх шаардлагатай бол бид өөрсдөө хийхээр шийдсэн.

EM заримдаа их ачаалалтай үед гацдаг бөгөөд үүнийг дахин эхлүүлэхийн тулд ... та ssh-ээр холбогдож терминалаар дамжуулан дахин эхлүүлэх хэрэгтэй. "Админууд үүнд сайн" гэж манай шинэ хамтрагч шийдэв. DBMS дээр их ачаалал өгөх нь бидний хувьд тийм ч ховор биш бөгөөд EM-г дахин эхлүүлэх хүсэлтүүд бас түгээмэл байдаг. Дараа нь ижил хувилбар: хурцадмал байдал, цочромтгой байдал, асуудлын шийдлийг хайх. Тиймээс ижил бүлгийн чатуудад дараах тушаалууд гарч ирэв. /emstop болон /emstart.

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

/ алах

Хэрэв мэдээллийн сан дээр хүчтэй өрсөлдөөн байгаа бөгөөд энэ нь заримдаа тохиолддог бол мэдээллийн санг хурдан буулгах шаардлагатай болдог. Хамгийн хурдан арга бол асуудалтай процессыг устгах ... Үүнийг хийхийн тулд ssh-ээр холбогдоорой, kill -9 ... Бот туслах болно!

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Алексей багийг үнэлж, түүнд эелдэг нэр өгсөн - "Килялка" эсвэл буу.
Нэгэн өдөр Алексей хэрхэн оролдож, зовж шаналж, үйл явц болгонд ххх руу орж / алахыг хараад би буундаа "олон баррель" нэмэхээр шийдэв.

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Ингэх нь дээр! Бүх зүйл танд зориулагдсан, Алексей, зүгээр л ажиллаарай, хонгор минь!

Мэдээжийн хэрэг, ийм чухал баг хязгаарлагдмал байсан user_id-ээр хандалт - "тодорхойгүй". Леша өгөгдлийн сангийн сервер дээрх процессуудыг хэрхэн чадварлаг устгаж байгааг хараад хэд хэдэн хүн санамсаргүй процессын дугаар бүхий тушаал оруулахыг оролдсон боловч та миний ухаалаг роботыг хуурч чадахгүй тул тэр даруй татгалзав.

/ дохиолол

За яахав, би ийм тушаал өгсөн:
/alertlog — заасан тооны дохиоллын мөрийг авах
Бот нь дохиоллын бүртгэлийг татаж аваад, үүнийг pyste гэж нэрлэдэг pastebin гэх мэт манай үйлчилгээ рүү илгээж, хүсэлтийн чат руу буулгах холбоосыг илгээдэг.

/шалгана

Дараа нь хүсэлт ирсэн манай програмын бодит гүйцэтгэлийг хянах. Одоогийн байдлаар төслийн техникийн дэмжлэг энэ мэдээллийг гараар цуглуулсан. хамаагүй! Манай зоригт тестерүүд үүнд зориулж туршилтын тохиолдлуудыг боловсруулсан. Туршилтын үр дүнгийн бүртгэлийг уншихад тийм ч тохиромжтой биш бөгөөд туршлагагүй хэрэглэгч ойлгоход удаан хугацаа шаардагдах бөгөөд шаардлагатай мэдээллийг тодруулах болно гэдэгт эргэлзэх болно. Мөн бид өөрсдийн гараар хийж чадахгүй зүйлээ гараар хийх дургүй ... Ботод зориулсан шинэ даалгавар!

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

/checks команд нь энгийн бөгөөд хоёрдмол утгагүй цэсийг харуулдаг бөгөөд энэ удаад манай залуус энэ командыг зааваргүйгээр хэрхэн ашиглахыг сурсан!

Та хүссэн зүйлээ сонгоход цэсний оронд тест эхлэх тухай мэдэгдэл гарч ирэх бөгөөд ингэснээр тэвчээргүй хэрэглэгчид манай тестийг 100500 удаа ажиллуулахгүй байх болно.

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Сонгосон цэсийн зүйлээс хамааран манай сүлжээнээс, тухайлбал бот амьдардаг машинаас (jmeter-ийг урьдчилан тохируулсан, шаардлагатай тестүүд байрладаг...) эсвэл шууд дата төвөөс (a програмын хажууд бэлтгэсэн машин), саатлыг турших үед сүлжээний холболтыг оруулахгүй байх, эсвэл хамгийн бага хэмжээнд хүртэл бууруулах зорилгоор.

Туршилтыг хийж, бүртгэлийг хүлээн авсны дараа бот үүнийг задлан шинжилж, үр дүнг "хүн унших боломжтой" хэлбэрээр гаргадаг.

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Хэмжилтийн цуглуулга

Үйл ажиллагаа нь ирсэн бөгөөд сонирхож буй төслийн менежерүүд бүс нутагтаа ийм функцийг хүлээн авсан. Нэгэн энэрэнгүй төслийн менежер хэлэхдээ: "Би цагийн статистиктай байхыг хүсч байна!" CIT-ийн хэн нэгэн түүнд Заббикс дээр энэ бүхнийг хянах нь тохиромжтой гэж хэлсэн. Заббикс, тэгэхээр Заббикс...

Би шийдлийг давтах хэрэгцээнд бэлтгэх хэрэгтэй гэж бодсон ... Би энэ санааг докерын саванд хийсэн. Контейнер дээр jmeter нь хуваарийн дагуу (10 минут тутамд нэг удаа) ажиллуулж, логыг тодорхой газар байрлуулж, php үүнийг задлан шинжилж, шаардлагатай өгөгдлийг вэб хуудас хэлбэрээр харуулдаг. Zabbix нь web.page.get түлхүүрийг ашиглан энэ хуудсыг хүлээн авч, тодорхой хамааралтай элементүүдэд шаардлагатай өгөгдлийг тогтмол сонгож, график үүсгэдэг.

Бид цаг, мэдрэл, хүний ​​цаг хэмнэдэг

Муу биш болсон гэж бодож байна. Графикийг ажигласнаар бид эхлээд програмын ойролцоо хурдыг харж, хэрэв график дээр оргилууд илэрсэн бол "залгуур" хаана байгааг ойролцоогоор мэддэг. Энэ бол энгийн. Одоогийн байдлаар энэ нь зөвхөн нэг бүс нутагт эрэлт хэрэгцээтэй байгаа боловч би сонирхсон хүмүүст үүнийг хуулбарлахад бэлэн байна.

Хэрэглээний хөгжүүлэлт

Сүүлийн үед ижил төстэй ажлуудын статистик тоо баримтаас харахад ажлыг хялбарчлах, хөнгөвчлөх олон санаа бий болсон. Зарим төслүүд дээр, програмын серверүүд дээр Crypto Pro гол контейнеруудыг суулгах шаардлагатай байдаг, тэдгээрийн олонх нь байдаг бөгөөд тоон гарын үсэг нь цаг хугацааны явцад дуусдаг. Заримдаа өдөрт 2 даалгавар ирдэг. Гэхдээ би эдгээр зорилгоор роботыг ашиглах нь аюултай гэж үзээд уг функцийг программ дээр шууд үүсгэхээр шийдсэн. Мэдээжийн хэрэг зөвшөөрөл, нэвтрэх эрхийг шалгах. Хэрэв танд шаардлагатай давуу эрх байгаа бол дижитал гарын үсэгтэй ажиллах, суулгах, устгах, мэдээлэл үзэх гэх мэт нэмэлт цэсийг ашиглах боломжтой. Одоогоор уг функцийг боловсруулж байна. Энэ нь тийм ч хэцүү биш бөгөөд та одоо байгаа зааврыг бага зэрэг уншиж, кодын жишээг харж, хөгжүүлэлтийн талаар илүү туршлагатай хамт ажиллагсдаас асууж, дараа нь үүнийг хийх хэрэгтэй. Судалгааны явцад өргөдөлд нэмэх санаанууд гарч ирэв. Би Наполеоны төлөвлөгөө гаргахгүй - хөгжил бий, хүн бүр өөрийн бизнесээ бодоорой. Гэхдээ энэ нь сонирхолтой ч би өөрөө үүнийг хийж байна.

Төлөвлөгөө

Миний хэлсэнчлэн манай роботыг ашиглахын тулд олон янзын санаанууд төрсөн бөгөөд ерөнхийдөө "автоматжуулалтын цэгүүд" гэсэн санаанууд гарч ирсэн, учир нь би тэдгээрийг бичих цаг завгүй байсан тул ихэнх нь мартагдсан байв. Одоо би санаанд орсон бүхнээ бичихийг хичээж, бусдад ч мөн адил хийхийг зөвлөж байна.

Гэхдээ Алексей хүслээ биелүүлэхээ мартдаггүй. Хамгийн сүүлийн үеийнхээс:
/kill_sql SQL_ID — энэ SQL_ID хүсэлтээр бүх сешнүүдийг устга
/kill_block - root блоклох сессийг устгах
/show_em — EM гүйцэтгэлийн зургийг харуул
Тэр зальтай залуу, утаснаасаа DBA оёх гэсэн юм =)

Эх орныхоо тусын тулд ингэж л зүтгэж байна даа!

Та ердийн, сонирхолгүй ажлаасаа хэрхэн ангижрах вэ?

Уншлага маань сонирхолтой, магадгүй хэн нэгэнд хэрэг болж, уншигчийг уйдаад амжаагүй байх гэж найдаж байна... Бид бүгдэд нь амжилт хүсье.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх