Skip to content

bakhirev/assayo-crawler

Repository files navigation

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π»ΠΎΠ³ Ρ„Π°ΠΉΠ»ΠΎΠ² git`Π° (demo, install, docker, reddit, habr).

ЦСль модуля: автоматичСский сбор ΠΈ объСдинСниС log Ρ„Π°ΠΉΠ»ΠΎΠ² git`Π°.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Ρ€Π΅ΡˆΠ°Π΅Ρ‚:

  • автоматичСскоС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ свСТих Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ;
  • просмотр объСдинСнного Π»ΠΎΠ³Π° ΠΏΠΎ Π³Ρ€ΡƒΠΏΠΏΠ΅ микросСрвисов;

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

АрхитСктура прилоТСния

  1. Reports showcase UI ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список доступных ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ состоит ΠΈΠ· названия, описания ΠΈ списка Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π².
  2. Crawler service (Π²Ρ‹ Ρ‚ΡƒΡ‚) собираСт Π»ΠΎΠ³ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² для ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°.
  3. Log visualization UI ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ Π»ΠΎΠ³ Ρ„Π°ΠΉΠ».

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹

  1. ОТиданиС Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° запуска (Ρ‚Π°ΠΉΠΌΠ΅Ρ€, запрос, событиС);
  2. ΠžΠ±Ρ…ΠΎΠ΄ списка Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²;
  3. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ рСпозитория;
  4. ОбъСдинСниС Π»ΠΎΠ³ΠΎΠ² Π² ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹;
  5. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 1.

Π Π΅ΠΆΠΈΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипт Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ для Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большой вСс. ДоступныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • Π₯Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ. Π’ этом случаС расходуСтся ΠΌΠ½ΠΎΠ³ΠΎ дискового пространства, Π½ΠΎ увСличиваСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π° списка Π·Π°Π΄Π°Ρ‡ ΠΈ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ΡΡ сСтСвыС расходы для получСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.
  • Π£Π΄Π°Π»ΡΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сразу послС получСния Π»ΠΎΠ³Π°. ΠŸΡ€ΠΈ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ трСбуСтся мСньший ΠΎΠ±ΡŠΡ‘ΠΌ дискового пространства, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ вСсь Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π΅. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списка ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌ сСтСвого Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.

Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ?

Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

Π’ процСссС своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвис сохраняСт Π΄Π°Π½Π½Ρ‹Π΅. Π’.ΠΊ. Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСльзя, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Docker ΠΎΠ±Ρ€Π°Π· ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π² ΠΊ Π½Π΅ΠΌΡƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ.

  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ Π½Π° дискС. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π΅Ρ‘ ΠΏΡƒΡ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ /c/YouFolder (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠΊΠ°Π·Π°Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для Windows ΠΏΡƒΡ‚ΠΈ Ρ‚ΠΈΠΏΠ° C:/YouFolder). ΠŸΡƒΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ.
  • Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ΠΉ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС ΠΏΡƒΡ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: docker run --name assayo-crawler -p 80:80 --mount type=bind,source=/c/YouFolder,destination=/usr/src/assayo_crawler/input --mount type=bind,source=/c/YouFolder,destination=/usr/src/assayo_crawler/output -d assayo-crawler;
  • Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Docker ΠΎΠ±Ρ€Π°Π· с Docker Hub.
  • ЗапуститС ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ шагС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ source. ΠœΡ‹ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²Π΅ ΠΏΠ°ΠΏΠΊΠΈ (для Π»ΠΎΠ³ΠΎΠ² ΠΈ для Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²), Π½ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ C:/YouFolder. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΡƒΠΊΠ°Π·Π°Π² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ°ΠΏΠΊΠΈ для хранСния Π»ΠΎΠ³ΠΎΠ² ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π².
  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сСрвис Π±ΡƒΠ΄Π΅Ρ‚ доступСн ΠΏΠΎ адрСсу localhost
  • ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ запустился.
  • ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ список Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ путями (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, запрос ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ сСрвСру, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· локального JSON Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚.ΠΏ.). Но самый простой способ: ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ JSON Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΏΠΎ адрСсу http://localhost, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈ ΠΊΠΈΠ½ΡƒΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠΊΠ½ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

Из исходников

  1. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ ΠΈ установитС NodeJS
  2. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ»ΠΈ скачайтС этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
  3. УстановитС зависимыС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ npm install
  4. ΠŸΠΎΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ настройки прилоТСния Π² Ρ„Π°ΠΉΠ»Π΅ src/configs/app.json
  5. ΠŸΠΎΠΏΡ€Π°Π²ΡŒΡ‚Π΅ список Π·Π°Π΄Π°Ρ‡ (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, список Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ) Π² Ρ„Π°ΠΉΠ»Π΅ /src/configs/reports.json
  6. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cd node && node index.js

Экспорт списка Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΈΠ· Bitbucket ΠΈ Gitlab

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ URL адрСса Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ скрипт для парсинга страницы Bitbucket ΠΈΠ»ΠΈ Gitlab

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ;
  2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‘ Π² Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈ;
  3. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ свойства Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданной Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈ ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π² ΠΏΠΎΠ»Π΅ URL этот скрипт:
javascript:(()=>{function getConfig(code, repositories) {return code && repositories.length ? [{status: 1,log: {name: code},repositories: {folder: code,list: repositories,}}] : [];}function getRepositories(selector, getUrl) {const elements=document.body.querySelectorAll(selector);return Array.from(elements).map((node)=>({url: getUrl(node),}));}function getConfigFromBitbucketPage() {const domain=location.origin;const code=location.pathname.toLowerCase().split('/').pop()||'';const repositories=getRepositories('.aui-iconfont-repository-small + .repository-name span',node=>[domain, '/scm/', code, '/', node.innerText, '.git'].join(''));return getConfig(code, repositories);}function getConfigFromGitlabPage() {const code=(location.pathname.split('/')?.[1]||'')?.replace(/-/gim, '_');const repositories=getRepositories('li[itemprop=owns] > div > a', node=>(node.href + '.git'));return getConfig(code, repositories);}function downloadForChrome(blob, suggestedName) {window.showSaveFilePicker({ suggestedName }).then(async (file)=>{const writable=await file.createWritable();await writable.write(blob);await writable.close();});}function downloadForAll(blob, filename) {const a=document.createElement('a');const url=URL.createObjectURL(blob);a.href=url;a.download=filename;document.body.appendChild(a);a.click();setTimeout(function() {document.body.removeChild(a);window.URL.revokeObjectURL(url);}, 0);}function download(text, filename) {const blob=new Blob([text], { type: 'application/json' });if (window.navigator.msSaveOrOpenBlob) {window.navigator.msSaveOrOpenBlob(blob, filename);} else if (window.showSaveFilePicker) {downloadForChrome(blob, filename);} else {downloadForAll(blob, filename)}}function getFileName(code) {const defaultFileName=[code||'tasks', '.json'].join('');return window.showSaveFilePicker? defaultFileName: (prompt('File name for save?', defaultFileName)||defaultFileName);}const config=[...getConfigFromBitbucketPage(),...getConfigFromGitlabPage(),];const fileName=getFileName(config?.[0]?.code);download(JSON.stringify(config, 2, 2), fileName);})();
  1. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния;

Экспорт

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Bitbucket ΠΈΠ»ΠΈ Gitlab Π½Π° страницС со списком Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²;
  2. РаскройтС Π³Ρ€ΡƒΠΏΠΏΡ‹, Ссли Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ (ΠΏΡƒΠ½ΠΊΡ‚ для Gitlab);
  3. НаТмитС Π½Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΡƒ со скриптом;
  4. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»;

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

Π‘ΠΏΡ€ΠΈΠΏΡ‚ сохранил список Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ "списка Π·Π°Π΄Π°Ρ‡".

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΠ² Π² ΠΎΠΊΠ½ΠΎ Π±Ρ€Π°Π·Π΅Ρ€Π° (Ссли ΡƒΠΆΠ΅ запустили сСрвис) ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² node/configs/reports.json (Ссли ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ локально).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚Π΄Π΅Π» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ области (bitbucket) ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ (gitlab). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ скрипт ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ для всСго списка, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»Ρƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ список Π½Π° нСсколько Π»ΠΎΠ³ Ρ„Π°ΠΉΠ»ΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ², Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ frontend ΠΎΡ‚ backend ΠΈΠ»ΠΈ QA Π³Ρ€ΡƒΠΏΠΏΡ‹.

ΠžΠ±Ρ‰ΠΈΠ΅ настройки

Настройки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ сразу ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… источников. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния:

  1. Из внСшнСго источника;
  2. Из ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния;
  3. Из Ρ„Π°ΠΉΠ»Π°.

Π€Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅ src/configs/app.json (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ заполнСния public/assets/example/app.json)

Бвойство Π’ΠΈΠΏ значСния Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΠ΅ ОписаниС
canUpdateConfigFromUI boolean true МоТно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ настройки ΠΎΡ‚ UI?
loadConfigFromUrl JSON НуТно Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ настройки ΠΈΠ· внСшнСго источника?
loadConfigFromUrl.url string URL-адрСс запроса.
loadConfigFromUrl.method string ΠœΠ΅Ρ‚ΠΎΠ΄ запроса.
loadConfigFromUrl.headers JSON Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ запроса Π² Π²ΠΈΠ΄Π΅ json ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
loadConfigFromUrl.body any Π’Π΅Π»ΠΎ запроса.
canUpdateTasksFromUI boolean true МоТно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ список Π·Π°Π΄Π°Ρ‡ ΠΎΡ‚ UI?
loadTasksFromUrl JSON НуТно Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ список Π·Π°Π΄Π°Ρ‡ ΠΈΠ· внСшнСго источника?
loadTasksFromUrl.url string URL-адрСс запроса.
loadTasksFromUrl.method string ΠœΠ΅Ρ‚ΠΎΠ΄ запроса.
loadTasksFromUrl.headers JSON Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ запроса Π² Π²ΠΈΠ΄Π΅ json ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
loadTasksFromUrl.body any Π’Π΅Π»ΠΎ запроса.
output.folder string "logs" Папка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π»ΠΎΠ³ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
output.needCreateAfterInit boolean true НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эту ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния.
input.folder string "repositories" Папка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Ρ€Π΅ΠΏΠΈΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² спискС Π·Π°Π΄Π°Ρ‡.
input.needCreateAfterInit boolean true НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эту ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния.
input.needRemoveAfterUse boolean false НуТно ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ эту ΠΏΠ°ΠΏΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сбора Π»ΠΎΠ³ΠΎΠ².

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния

Бвойство Π’ΠΈΠΏ значСния Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΠ΅ ОписаниС
PORT number 3007 ΠŸΠΎΡ€Ρ‚ запуска прилоТСния.
LOAD_CONFIG_UI boolean МоТно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ настройки ΠΎΡ‚ UI.
LOAD_CONFIG_URL string true URL-адрСс для запроса для настроСк прилоТСния.
LOAD_CONFIG_METHOD string ΠœΠ΅Ρ‚ΠΎΠ΄ запроса.
LOAD_CONFIG_HEADERS JSON like string Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ запроса Π² Π²ΠΈΠ΄Π΅ json ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
LOAD_CONFIG_BODY any Π’Π΅Π»ΠΎ запроса.
LOAD_REPORTS_UI boolean true МоТно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ список Π·Π°Π΄Π°Ρ‡ ΠΎΡ‚ UI.
LOAD_REPORTS_URL string URL-адрСс для запроса списка Π·Π°Π΄Π°Ρ‡.
LOAD_REPORTS_METHOD string ΠœΠ΅Ρ‚ΠΎΠ΄ запроса.
LOAD_REPORTS_HEADERS JSON like string Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ запроса Π² Π²ΠΈΠ΄Π΅ json ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
LOAD_REPORTS_BODY any Π’Π΅Π»ΠΎ запроса.
OUTPUT_FOLDER string "logs" Папка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π»ΠΎΠ³ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
OUTPUT_NEED_CREATE_AFTER_INIT boolean true НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эту ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния.
INPUT_FOLDER string "repositories" Папка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Ρ€Π΅ΠΏΠΈΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² спискС Π·Π°Π΄Π°Ρ‡.
INPUT_NEED_CREATE_AFTER_INIT boolean true НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эту ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния.
INPUT_NEED_CLEAR_AFTER_USE boolean false НуТно ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ эту ΠΏΠ°ΠΏΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сбора Π»ΠΎΠ³ΠΎΠ².

Настройка списка Π·Π°Π΄Π°Ρ‡

Бписок Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ сразу ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… источников. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния:

  1. Из внСшнСго источника;
  2. Из Ρ„Π°ΠΉΠ»Π°.

Π€Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅ src/configs/reports.json (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ заполнСния public/assets/example/reports.json)

Бвойство Π’ΠΈΠΏ значСния ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ОписаниС
code string Π΄Π° Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС названия ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.
folder string Π½Π΅Ρ‚ ДочСрняя ΠΏΠ°ΠΏΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ». По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ„Π°ΠΉΠ» помСщаСтся Π² ΠΏΠ°ΠΏΠΊΡƒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π² ΠΎΠ±Ρ‰ΠΈΡ… настройках (output.folder)
repositories[] object[] Π΄Π° Бписок Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
repositories[].url string Π΄Π° URL-адрСс для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ рСпозитория.
repositories[].folder string Π½Π΅Ρ‚ ДочСрняя ΠΏΠ°ΠΏΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
repositories[].needRemoveAfterUse boolean Π½Π΅Ρ‚ НуТно ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ эту ΠΏΠ°ΠΏΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сбора Π»ΠΎΠ³ΠΎΠ².

API

ΠœΠ΅Ρ‚ΠΎΠ΄ URL Π’Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° ОписаниС
GET /api/v1.0/start { message: string } Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ списка Π·Π°Π΄Π°Ρ‡
GET /api/v1.0/stop { message: string } ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ списка Π·Π°Π΄Π°Ρ‡
GET /api/v1.0/restart { message: string } ΠŸΠ΅Ρ€Π΅-Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ списка Π·Π°Π΄Π°Ρ‡
POST /api/v1.0/update/configs { message: string } ΠŸΠ΅Ρ€Π΅-Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ списка Π·Π°Π΄Π°Ρ‡
POST /api/v1.0/update/reports { message: string } ΠŸΠ΅Ρ€Π΅-Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ списка Π·Π°Π΄Π°Ρ‡
GET /api/v1.0/get/status { message: string } ΠŸΠ΅Ρ€Π΅-Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ списка Π·Π°Π΄Π°Ρ‡
GET /check { message: string } ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ статус прилоТСния (health check)

Как ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ?

Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

  • run npm run build
  • run docker build -t assayo-crawler .
  • visually check the image docker run --name assayo-crawler -p 80:80 --mount type=bind,source=/c/work/assayo-crawler/node/input,destination=/usr/src/assayo_crawler/input --mount type=bind,source=/c/work/assayo-crawler/node/output,destination=/usr/src/assayo_crawler/output -d assayo-crawler;
  • add tag docker tag assayo-crawler bakhirev/assayo-crawler:latest;
  • push image to Docker Hub docker push bakhirev/assayo-crawler:latest;

ПоТСлания, прСдлоТСния, замСчания

Releases

No releases published

Packages

No packages published