governmentbg / opendata

Това хранилище е извадено от употреба. Актуално хранилище:
https://github.com/governmentbg/data-gov-bg
MIT License
27 stars 6 forks source link

Инструменти за автоматично качване #35

Open Glamdring opened 8 years ago

Glamdring commented 8 years ago

Нужна е базова функционалност за автоматично качване на масиви от компютри в администрацията.

Функционалността е:

Трябва да работи под windows.

Приложението може да бъде с CLI, вкл. да бъде python скрипт и да изисква инсталация на python на машината. Няма нужда от GUI. Конфигурирането на периодичността може да бъде приложението или в windows scheduler. Ако е в приложението, то то следва да се регистрира като windows service. Допуска се добавянето като service или като scheduled task да бъде ръчно или с отделен .bat скрипт.

antitoxic commented 8 years ago

ref за GUI (ако потрябва): https://www.npmjs.com/package/nativefier

antitoxic commented 8 years ago

@banzsh обърни внимание, че минимума е просто скрипт, който ползва различни бази данни и съдържа инструкции как да се добави във windows scheduler или windows service.

А максимумът е скрипт, който се инсталира като windows service, за да е жив след рестарт.

antitoxic commented 8 years ago

Минимален вариант е:

  1. Portable/zip на python с инструкции къде да се сложи
  2. Написан скрипт, който включва конфигурация
  3. Конфигурация, която указва къде е python, къде е базата, каква заявка да се прави, колко често. Ако е файл къде е файла.
  4. Инструкции как да се конфигурира windows scheduler/service с скрипт от 2)

//cc @banzsh

antitoxic commented 8 years ago

ref:

banzsh commented 8 years ago

@antitoxic, @Glamdring, когато не създаваме нов ресурс, override като upsert или delete+create да се разбира?

banzsh commented 8 years ago

Избрах https://github.com/ckan/ckanapi за интерфейс със CKAN. Изглежда по-елегантно и ще отнеме тежестта за гадаене коя ckan версия какви endpoints има (не че има разлика в контекста на задачата).

antitoxic commented 8 years ago

Избрах https://github.com/ckan/ckanapi

:+1:

@antitoxic, @Glamdring, когато не създаваме нов ресурс, override като upsert или delete+create да се разбира?

@banzsh дай малко контекст? Не съм запознат с възможностите на CKAN на 100%. Може ли да се пазят версии (dataset versioning)? Тоест ако не създаваш нов ресурс, да му създадеш нова версия? Предполагам не може?

Ако може -> просто качваш нова версия. Ако не може виж: https://github.com/governmentbg/opendata/issues/31#issuecomment-174581342 . Предлагам, когато не се създава нов ресурс, просто да да се добавя нов, а на остарелия да му се слага expired_on текущата дата и причина за expiry -> Automatic update

Но, по-важното в момента не се фокусирай на updates. Нека направим инструмент, който чете от данни от различни източници и просто блъска нови данни.

Btw, видя ли https://github.com/obshtestvo/opendata-data-provider? Това е разработено преди година и работи със CSV.

banzsh commented 8 years ago

@antitoxic, видях https://github.com/obshtestvo/opendata-data-provider, форкнах го, ще използвам някои неща от него и мисля към него да пускам PR. Watcha think? Или друго репо да правим?

antitoxic commented 8 years ago

Добавих opendata-data-provider към repo-тата, до които имаш достъп в obshtestvo. Директно редактирай него. Имаш push достъп разбира се.

antitoxic commented 8 years ago

@banzsh проучих малко вчера нещата. Игнорирай разговора вчера. Целим mysql, postgres, csv, excel. Това е всичко за начало, за да направим MVP release. Ползвай SQLAlchemy или каквото беше решил.

antitoxic commented 8 years ago

Refs:

Lightweight виртуалка на XP: http://demin.ws/blog/english/2011/02/23/microxp/

banzsh commented 8 years ago

Refs, ако се тръгне с nodejs: https://sqlectron.github.io/ - билднато с nodejs+electron, има поддръжка на postgresql, mysql и mssql. И е opensource и decoupled - https://github.com/sqlectron

antitoxic commented 8 years ago

@banzsh изглежда много добро. Къде видя mssql? Тук са само 2: https://github.com/sqlectron/sqlectron-term#current-supported-databases

banzsh commented 8 years ago

В https://github.com/sqlectron/sqlectron-core са писали и ms поддръжка.

antitoxic commented 8 years ago

ref: node + oracle на windows изглежда като да не е много portable: https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#winbins

The destination computer's PATH needs to include Visual Studio redistributables. If you used Oracle client 11.2 then the Visual Studio 2005 restributable is required. For Oracle client 12.1, use the Visual Studio 2010 redistributable.

mitio commented 8 years ago

@antitoxic Идеята на тези redistributables е да могат да се инсталират, ако нямаш инсталирано Visual Studio.

Могат да се свалят и сложат с отделен инсталатор, който може да се свали безплатно:

Определено е по-малко portable от това просто да се изсипят едни файлове някъде, но е изискване, което би трябвало в повечето случаи да е лесно изпълнимо. Инсталаторът може да е част от общия пакет.

banzsh commented 8 years ago

Може да сте попадали, но когато ми трябва да тествам нещо под windows (по-точно IE), ползвам тези VMs - https://github.com/xdissent/ievms

banzsh commented 8 years ago

@antitoxic пробвах node, не ми хареса през какво минаваш, за да достигнеш до executable. Още повече, че sqlectron не тръгна. Стартирайки sqlectron, след инсталация ми бумна коравосърдечното "C:\Program Files\Sqlectron\Sqlectron.exe is not a valid Win32 application." По-скоро е направено за GUI-та, базирани на html, и за Win7+

Пробвах https://github.com/mitchellh/gox, написах тест, който достъпва MySQL сървър и изпълнява select клауза, крос-компилирах с gox и тествах на чисто XP - profit (отделно, че получаваме байнърита за куп други операционни).

Мисля да продължа с Go, но ми трябват тестови сървъри, MySQL и PostgreSQL мога да си вдигна локално, но по останалите бази нямам знания и не съм сигурен, че мога да сетъпна работещи инстанции.

antitoxic commented 8 years ago

@banzsh Малко коментари, за да се започнем вече работа с дадена технология.

@antitoxic пробвах node, не ми хареса през какво минаваш, за да достигнеш до executable. По-скоро е направено за GUI-та.

През какво минаваш? Питам с идеята, че не целим да е лесно компилирането, а да е portable след това. Няма нужда да е .exe. Може да bundle-ваме node.exe просто.

но по останалите бази нямам знания и не съм сигурен, че мога да сетъпна работещи инстанции.

ползвай неща като това: https://github.com/fgrehm/vagrant-mssql-express

gox

За какво ни е? Не build-ваме ли само за windows? Или това е единствения начин да се build-не за windows от линукс?

GO - работил съм отдавна и малко. Чисто е, просто е, не е лошо. Ако го изберем губим JS разбираемостта и печелим oracle драйвер: https://github.com/golang/go/wiki/SQLDrivers . Имай предвид, че @peperon проверява дали с .NET може лесно да се направи executable, което ще има една единствена цел -> приема SQL за инпут, връща резултати (csv) за output. Ако пробата даде позитивни резултати ще можем да отдъхнем за DB драйвъри.

Какво мислиш?

antitoxic commented 8 years ago

ref: informix with docker: https://github.com/0x1fff/docker-informix

PS: @banzsh тия неща ги намирам просто като търся в github или google за "mssql vagrant", "informix docker", "informix vagrant"...

banzsh commented 8 years ago

Относно docker и vagrant - не ми мина през ума, ще ги ползвам за тестове :)


nodejs се оказа, че има повече за четене от go, относно как да си направиш приложението да работи под windows. Чисто самият апп се ангажира с това как да бъде билднат. В go не видях такова нещо. Пишеш си приложението, билдваш през gox и то бълва .exe, което просто върви.

В момента не мога да намеря източник, но ми се стори, че за да билднеш нещо на electron (който всъщност не ползва V8), трябва да го пишеш на платформата, за която билдваш.

И пак да кажа, sqlectron не върви на XP (http://electron.atom.io/docs/v0.36.5/tutorial/supported-platforms/#windows)

banzsh commented 8 years ago

Друго, което пробвах за node е https://github.com/igorklopov/enclose, но е платен - http://enclosejs.com/buy и билдва на конретната платформа: https://github.com/igorklopov/enclose/blob/master/bin/enclose.js#L46

antitoxic commented 8 years ago

@banzsh а ако оставим настрана electron и просто ползваме node.exe + nashiq_skcript.js ?

banzsh commented 8 years ago

Тествах. Този подход работи при mysql. Като вдигна другите бази ще имам яснота дали ни върши работа.

peperon commented 8 years ago

Йо. Малък ъпдейт от мен за .net и Informix.

IBM предоставя библиотеки за комуникация с базата, прочетох малко докумнентация за тях(тук и тук). За съжаление не можах да тествам реално нищо, защото download линка на страницата беше временно unavailable(пробвах го в петък и ме навигираше ок, но за съжаление нищо не свалих тогава :disappointed: ).

За да се ползват драйверите трябва да се инсталира client SDK, което е е малко кофти. Теоретично може да се автоматизира с инсталатор, но за момента нямаше как да проверя това.

Ще поразгледам и някой друг подход ако е възможен пък до тогава да се надяваме днес страницата им да бъде достъпна отново...

Има ли смисъл да гледам за други драйвери с друга база данни за .net?

peperon commented 8 years ago

Една малко random идея. Какво ще кажете вместо комуникацията с базите данни да става на ниво клиент, да имаме отделен web service който да го прави? По този начин клиента ще бъде доста простичък, ще има ролята на trigger за качването на данни, и няма да има нужда да се притесняваме как точно да го инсталираме на клиентските компютри. Въртят ми се следните сценарии:

  1. Качване на данни от файл на локалната машина от сорта на excel и т.н. - В този случай клиента ще изпраща файла на сървъра и сървъра ще го обработва до csv и ще го качва в ckan.
    • Потенциални проблеми биха били ако нямаме права(от легална гледна точка) да получаваме такъв файл на нашия сървър.
    • Още един потенциален проблем би бил ако файловете за защитени с някаква credentials, в този случай ще трябва клиента да ни изпраща тези credentials.
    • Също така нашия service ще трябва да имаме някакво security.
  2. Качване на данни от някоя база данни като Oracle/Informix/.. - в този случай клиента ще изпраща заявката, service-ът ще я изпълнява, ще обработва резултата до csv и ще качва данните в ckan.
    • Потенциален проблем би било ако сървърът няма достъп до тази база данни по причини от сорта - трябва да си в локална мрежа за да достъпиш тази база.
    • Отново ще ни е нужно някакво security.

Ползите от този подход биха били, че няма да се притесняваме какво и как точно да инсталираме на клиентските машини, т.е. дали клиента ни е portable отпада като притенсение. Например за Informix трябва да се инсталира client sdk на машините от които трябва да достъпваме базата. Подозирам, че бихме има доста такива проблеми в бъдеще и ако контрола на комуникациите с базите данни е по-лесно достъпен за нас би било по-лесно.

Както споменах под всеки от сценариите има и недостатъци. Не съм съвсем сигурен, но този подход може да усложни решението. Също така ще имаме нужда и от някакво security.

Мнения?

antitoxic commented 8 years ago

@peperon

Потенциален проблем би било ако сървърът няма достъп до тази база данни по причини от сорта - трябва да си в локална мрежа за да достъпиш тази база. Отново ще ни е нужно някакво security.

Show-stopper. Няма как да го направим. Най-малкото за достъп до цялата база отвънка. Други причини бол, bandwidth, legal, ...

Пиши като можеш да сайта вече не е down :smiley_cat: и пробваш .net и informix/oracle.

peperon commented 8 years ago

Предполагах, но реших да питам все пак, защото кой знае, може статутър ни да го позволява. :)

За Oracle има build-in client в .NEТ и няма да имаме проблеми с него, но ще го тествам днес.

peperon commented 8 years ago

Recap от мен.

  1. Informix - прегледах им документацията, разгледах демо app-ът им и успях да го билдна. За съжаление не успях да го тествам с реална база, защото много бавно се инсталираше, а трябва да бягам за днес. Ще продължа с това другата седмица. Като цяло впечатленията ми са, че може би ще успеем да го използваме, но ще трябва да си инсталираме SDK на клиентската машина. Има вероятност да тръгне и без SDK-то, само ако се redistribute-не един .dll, но честно казано ме съмнява. Ако тръгне по този начин ще има някакви лимитации(така пише в тяхната документация). От друга гледна точка ние ще правим само SELECT-и, т.е. колко да ни лимитира. :)
  2. Oracle - Успях да го тествам и работи ок. За съжаление отново има SDK, но за мен проработи и само с копирането на няколко файла, както е описано тук.

Другата седмица ще тествам с Informix и евентуално как да автоматизираме install-ът.

banzsh commented 8 years ago

@antitoxic ще направиш ли един nodejs бранч в репото, да не отива зян това, което са направили момчетата в https://github.com/obshtestvo/opendata-data-provider

Прогрес: имаме работещи и тествани csv, mysql и postgresql. Не можах да вдигна mssql vagrant-та и реших да не пилея сега време, за да довърша другите адаптери. По-късно ще добавя README и едно todo, че има какво да се разкрасява (e.g. ditch callbacks). Ще пушна като имам бранч.

mitio commented 8 years ago

@banzsh, извинявай за забавянето. Аз ще направя каквото ти трябва, само ми кажи пак какво, че не можах да разбера:

Не разбрах и какво ще стане зян, ако го няма този бранч.

Много въпроси, знам и звуча малко неориентирано, за което се извинявам :bow:

banzsh commented 8 years ago

@mitio С Тони се разбрахме да работим в https://github.com/obshtestvo/opendata-data-provider, който към момента съдържа код от някакъв хакатон. Тъй като това, което направих няма нищо общо с това, което е в бранчовете, ще е по-добре нов чист бранч, в който да си пушна nodejs проекта. До колкото виждам имам самo push права, не мога да създавам бранчое.

mitio commented 8 years ago

@banzsh, готово. Бранчът nodejs е базиран на master. Изтрий си вътре каквото не ти трябва.

mitio commented 8 years ago

@Glamdring виждам, че си започнал някаква работа в тази посока в това хранилище: https://github.com/governmentbg/opendata-ckan-pusher

Няколко човека от Open Data Node се свързаха с нас, проявявайки интерес към българския opendata портал и предлагайки да разгледаме техния OSS проект, базиран на CKAN. Преглеждайки материалите на сайта им, виждам, че може би те имат имплементирано нещо подобно на това (извадката по-долу е от тук):

Support for correct publishing

In order to publish Open Data properly, i.e. using Open formats, in machine readable form and in timely manner, Open Data Node does following:

  • it extracts (harvests) data from internal systems using any available interface and method to do that safely, effectively, with low costs,
  • it processes that data, performing format conversions, cleansing, anonymization, enrichment, linking, etc. (and as part of that also compiling some metadata about that data)
  • it stores the results (data and metadata too), serving effectively as cache, protecting internal systems from overloading in case of high demand for data from users,
  • it makes the results available to the general public and businesses supporting both common users (with usual office tools on PCs or other devices) and application developers (equipped with powerful software development tools and above average hardware), implementing also automated and efficient distribution of updated data increments and dataset replication (including metadata),
  • it allows all this to be automated, easy to use and easy to maintain.

Ще опитам да се разбера с тях за разговор, за да получа повече информация и ще споделя.

Тук има техническа информация за ODN:

Между другото, ODN е съвкупност от няколко компонента, един от които е CKAN. Имат собствен CKAN форк: https://github.com/OpenDataNode/odn-ckan

/cc @mihail-ivanov

Glamdring commented 8 years ago

Аз си говорих с тях, те ми пратиха конкретни реализации, и точно това, което ни трябва за първа стъпка (с минимално усилие и поддръжка да спестим ръчното качване), ми изглежда, че го нямат.