Morpheus - Funkční požadavky/přehled stávajícího řešení
Tabulka funkcí
Funkce | Popis funkcionality | Stávající funkce | Motivace/využití | Proveditelost/současný stav | Verze OS | Specifikace nové funcionality | Změny ve funkcionalitě | Nová funkce |
---|---|---|---|---|---|---|---|---|
Provádění příkazů | Provádí zadaný příkaz na daném klientu (PC) | doCom(array seznam_PC, string prikaz) |
| Aktuálně je spojení prováděno přes Powershell over SSH, takže provádění Powershell (PS) příkazů je nativní. Problematické jsou nyní převody z PHP do bashe a poté Powershellu, takže je spousta znaků escapováno a případně i požráno těmito převody. Ne každý příkaz tedy funguje a je nutné hlídat speciální znaky. | Win, Linux, macOS | Systém umožňuje provádění příkazů na vzdáleném stroji (klientovi). Uvedený příkaz je prováděn prostřednictvím Powershellu (PS) nebo bashe. Je možné provádět jak jeden (zřetězený) příkaz, tak bloky kódu. |
| ? |
Přihlášení lokálního uživatele | Přihlásí uživatele na lokální session daného klienta | logMeIn(array seznam_PC, string uzivatel, string heslo), logOut(array seznam_PC) |
| Momentálně je toto prováděno prostřednictvím nastavení tzv. autologinu ve Windows. Autologin je klíč v registru, jehož atributy je zapnutí autologinu (bool, 1=zapnuto), nastavení uživatele a hesla (oboje jsou stringy). Nyní je při zavolání logMeIn() vyplněn uživatel, heslo a zapnutý autologin. logOut() smaže uživatelské údaje a vypne autologin. | Win | Systém umožní vynutit přihlášení specifického uživatele na lokální session daného klienta. |
| ? |
Bootuj jiný systém | Na klientovi nastartuje OS pro psaní testů. | logPEF(array seznam_PC) |
| Nyní je fuknční pouze nastavení bootování systému prostřednictvím PXE - startuje se přijímačkový linux (upravený Slax), připravený na síťovém úložisti. Samotné provedení tohoto nastavení spočívá ve vygenerování souboru, jehož název je 01-MAC_ADR_KLIENTA, přičemž MAC_ADR_KLIENTA je ve tvaru XX-XX-XX-XX-XX-XX. Obsah souboru pro bootování přijímačkového linuxu: default menu.c32 Klienti jsou na tento způsob bootování už připraveni - mají defaultní bootování ze sítě, zapnuté PXE a DPCH je správně nakonfigurován. Netřeba řešit programově. | - | Systém umí vynutit nabootování jiného systému na klientovi. Funguje jak na multiboot systémech, tak pro bootování PXE image |
| bootOS(PC,system) |
Zjisti informace o stroji | Vynutí načtení informací o daném klientu. | refreshInfo(array seznam_PC) |
| Probíhá spuštěním skriptu, který se k PC přihlásí a vytáhne z něj všechny požadované informace. Momentálně je tato funkce provolávána prostřednictvím CRON skriptů jednou za cca 4 minuty (tj. je vyvolána externě, mimo systém Morpheus). Nově by měl systém sám udržovat a spravovat dobu refreshe automaticky sám, nezávisle na OS. Informace ukládané do databáze lze rozdělit na ty, které jsou uložené:
Část obsah tabulky PC je uložen staticky - nazev, ucebna, pos_X, pos_Y MAC, IP. Ostatní informace jsou měněny funkcí refreshInfo(). Tato funkce spustí na backendu skript, který nejprve zjistí informace pomocí pingu a potom se na stroj přihlásí a provádí rutiny, které zjišťují:
Tyto informace postupně zapíše do tabulek running_processes, session a pc. Více viz skript refresh.sh. | Win, Linux, macOS | Systém umožňuje vynutit vynucení získání informací z klienta. |
| ? |
Další info o stroji |
| cron scripty |
| Mimo to jsou cronem (s mnohem menší časovou periodou) spouštěny skripty, které se přihlásí na PC a zjistí, jaký je na něm nainstalován software a ten uloží do tabulek software a installed_software. Z těchto tabulek je potom schopen propárovat info s tabulkou sessions, ve které jsou vidět odkazy do | Win, Linux, macOS |
|
|
|
Smaž uživatelský profil | Smaže uživatelský profil ve Windows (C:\Users a klíče v registru) | delProf(array seznam_PC) | Uživatelské profily na frekventovaných strojích zabírají i desítky GB diskového prostoru. Jejich promazání umožní na strojích s ubývajícím místem toto napravit. Dalším účelem promazávání je při ladění defaulního uživatelského profilu, ze kterého se kopírují všechny uživatelské profily v dané učebně. | V současné verzi systému je mazání profilů provedeno tak, že se stáhne ze síťového úložiště PS skript, který promaže všechny uživatelské profily mimo explicitně zadaných (hardcoded ve skriptu) a aktuálně přihlášených. Skript pro promazávání je přílohou.
| Win | Systém umožňuje promazat uživatelské profily ve Windows, tj. jak adresáře v C:\Users, tak i odpovídající klíče z registrů. Zároveň systém umožňuje udělit výjimku pro některé profily (např. uživatelů, kteří si to specificky nepřejí). Systém nesmí smazat profil aktuálně přihlášených uživatelů. | ? |
|
Zapni/vypni/zrestartuj stroj |
| reboot(array seznam_PC) shutdown(array seznam_PC) wakeUp(array seznam_PC) |
| Funkcionalita je teď rozdělena - shutdown() a reboot() jsou prováděny pomocí příkazů v systému (shutdown /r /t 2 pro restart a stop-computer -force pro vypnutí). Zapnutí je pak prováděno pomocí zaslání tzv. Magic Packetu na broadcastovou adresu počítače. Kvůli tomu musí být udržována informace o tom, jakou broadcastovou adresu má počítač. Formát Magic Packetu je v podstatě 16x MAC adresa daného rozhraní a fuknce musí být zapnutá v BIOSu. Pokud je toto korektně nastaveno, tak automaticky po obdržení MP stroj přepne do ACPI S0 stavu. Funkce se často nazývá WakeOnLAN. Klienti jsou na tento způsob buzení už připraveni, netřeba řešit programově. | Win, Linux (omezeně macOS) | Systém umožňuje vzdáleně zapnout/vypnout/zrestartovat klienta. |
| ? |
Vrať info o ... | ...seznamu učeben. Funkce vrací seznam všech učeben (místností), které jsou v systému evidovány. | getAllClassrooms() |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje obsah tabulky ucebny. |
| ...seznamu učeben. Funkce vrací seznam všech učeben (místností), které jsou v systému evidovány. |
|
|
...seznamu PC v dané učebně. Vrací seznam všech počítačů v zadané učebně. | getPC(string ucebna) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje obsah tabulky PC, které mají jako učebnu daný string. |
| ...seznamu PC v dané učebně. Vrací seznam všech počítačů v zadané učebně. |
|
| |
...IP adrese daného počítače (počítačů). Vrátí IP adresu daného stroje v DB. | getIP(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje IP z tabulky PC, které mají jako název daný string. |
| ...IP adrese daného počítače (počítačů). Vrátí seznam, které jsou v daném stroji přístupné. Vždy jedna z adres je hlavní, tj. ta, na kterou lze poslat Magic Packet. |
|
| |
...MAC adrese daného počítače (počítačů) v DB. | getMAC(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje MAC z tabulky PC, které mají jako název daný string. |
| ...MAC adrese daného počítače (počítačů). Vrátí seznam, které jsou v daném stroji přístupné. Vždy jedna z adres je hlavní, tj. ta, na kterou lze poslat Magic Packet. |
|
| |
...učebně, ve které je daný počítač. | getClassroom(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje učebnu z tabulky PC, které mají jako název daný string. |
|
|
|
| |
...dostupnosti daného stroje (zapnutý/vypnutý). | getAvailability(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje dostupnost z tabulky PC, které mají jako název daný string. Aktuální hodnoty nabývají těchto stavů: 0=zapnutý |
|
|
|
| |
...nabootovaném systému na daném stroji. | getSystem(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje systém z tabulky PC, které mají jako název daný string. Aktuální hodnoty nabývají těchto stavů: 1=Windows |
|
|
|
| |
...tom, jak je daný stroj nastavený pro autologon | getAutoLoginInfo(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje autlogin info z tabulky PC, které mají jako název daný string. Evidovány jsou informace o uživateli, hesle, uživatelské doméně a stavu autologinu (0,1). |
|
|
|
| |
...pozici PC v učebně | getPosition(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje pozici info z tabulky PC pro stroje, které mají jako název daný string. Pozice jsou dvě čísla - X a Y, které specifikují řádek a sloupec v mřížce. Tato pozice je ve frontendu použita pro vykreslení "mapy" učebny a pozice počítače v ní. |
|
|
|
| |
...softwaru, který je nainstalovaný na daném PC | getInstalledSW(array seznam_PC) |
| Selectem z tabulky installed software zjistí info o nainstalovaném softwaru. |
|
|
| ?možná by mohl fungovat online - zobrazovat seznam SW na PC a zjišťovat za běhu? - asi hodně náročně na čas a pásmo | |
...učebně, kde je nainstalovaný daný SW. | getRoomBySW(string software) |
| Selectem s několika joiny se z tabulky zjistí info o učebně, na jejíchž počítačích je nainstalován uvedený SW. Zde je trošku hack, protože se neprochází všechny stroje z dané učebny, ale jen jeden; standardně se instaluje PC v učebnách jednotně. Nicméně mohl by to být problém pokud by např. existovali místnosti, které agregují více různých strojů. |
|
|
|
| |
...uživatelích, kteří jsou přihlášení na daném PC. | getAllLogedUsers(array seznam_PC) |
| Vrací jméno (str), doménu (str) a typ přihlášebá (int) všech uživatelů, kteří jsou aktuálně přihlášeni na daných klientech. Toto platí jak pro lokální, tak i vzdálená přihlášení, na rozdíl od funkcí getAllInfo() a getLogedUser(), které vrací informaci jen o lokálně přihlášeném uživateli. Tato, i následující funkce (getLogedUser()) tyto funkce umožňují vracet informace o tom, jací uživatelé jsou na počítači přihlášení. Systém ukládá do tabulky session historické informace. |
|
|
|
| |
...uživateli, který je přihlášen lokálně | getLogedUser(array seznam_PC)** |
| Vrací jméno a doménu uživatele, který je lokálně přihlášený. Na rozdíl od funkce getAllInfo(), která bere informace uložené pouze v tabulce pc, používá getLogedUser() informace z tabulky session. |
|
|
|
| |
...všech informacích o daném PC. | getAllInfo(array seznam_PC) |
| Aktuálně probíhá tak, že SQL dotazem vyselektuje všechny informace z tabulky PC pro stroje, které mají jako název daný string. Nezobrazuje tedy info o SW ani uživatelích. |
|
|
|
| |
|
|
| Možnost vidět, který uživatel byl u daného PC přihlášený v dané době, i zpětně. Zvlášť od sessions si slibuju statistiky toho, který SW je používán a který vůbec. | Sběr historických dat (sessions, přihlášení uživatelé) probíhá spouštěním funkce refreshInfo() a jejich ukládáním do příslušných tabulek. V tabulce tedy esistují záznamy po cca 4 minutách (resp. perioda, která odpovídá spouštění skriptu v cronu). Z těchto záznamů se zjišťují i informace o tom, který uživatel (uživatelé) jsou aktuálně připojeni. Jednou denně se pak data z historických tabulek ukládají do ElasticSearch databáze, která je pro ukládání časových řad vhodnější. |
| průběžně zjišťovat informace a zapisovat si je do interní databáze:
|
|
|
DashBoard | Pokud má Morpheus sbírat nějaká data, respektive minimálně sledovat nějaké metriky, tak by bylo fajn toto někde vidět souhrnně. Například, pokud lze zjistit, jestli je stroj zapnutý, tak lze pravděpodobně zjistit i zda na něm je někdo přihlášený a jak dlouho a lze sledovat, které stroje jsou využívanější než jiné a sestavit tak třeba TOP10 tabulku strojohodin. Dashboard by měl být modulární, tedy si může každý uživatel poskládat dashboardy z dat, která chce, ze sdílených dashboardů nebo z přednastavených prvků. |
|
| REVIEW |
| uživatel si může sestavit vlastní dashboard z dat, která morpheus sbírá. |
|
|
Zobrazení UpTime u stroje | Morpheus by měl o jednotlivých strojí udržovat informaci UpTime, neboli, jak dlouho stroj jede bez vypnutí. Toto lze zařadit mezi další sbírané hodnoty a ve výchozím nastavení zobrazovat v detailu stroje. |
|
| REVIEW |
| Morpheus zobrazuje UpTime u každého stroje, který je zapnutý. Rozlišovat/nerozlišovat reboot? |
|
|
Zobrazení více informací o přihlášeném uživateli | Morpheus by měl o uživateli zobrazovat více informací: úroveň oprávnění na daném stroji/doméně, session (disconnected/active), typ přihlášení (RDP/local), ad. |
|
| REVIEW |
| Morpheus by měl u přihlášeného uživatele zobrazovat více informací. |
|
|
Zobrazení volného místa na systémovém disku | U strojů by se mělo zobrazovat, kolik volného místa ještě zbývá na systémovém disku. Toto je také jedna z metrik vhodných pro dashboard. |
|
| REVIEW |
| Morpheus zobrazuje zbývající volné místo na systémovém disku. |
|
|
Zobrazení souhrnu aplikovaných pravidel v morpheovi pro jednotlivé stroje | Pravidlo pro spouštění akci v morpheovi jsou při vyšším počtu PC a pravidel nepřehledná v tom, že není na první pohled jasné, jaká pravidla platí por jeden konkrétní stroj. Morpheus by mohl výsledná pravidla zobrazovat pro každý stroj zvlášť. |
|
| REVIEW |
| Morpheus zobrazuje výsledný souhrn pravidel akcí pro jednotlivé stroje. |
|
|
Zobrazení verze OS | Poslední doubou se hodně řeší verze OS, který na stroji běží. Vhodné by tedy bylo, kdy Morpheus zobrazoval nejen typ OS, ale i jeho verzi. |
|
| REVIEW |
| Morpheus zobrazuje info o verzi OS. |
|
|
Nastavení sbíraných dat | Morpheus nyní sbírá velké množství dat o tom, jaké aplikace právě na sttroji běží. Některé informace nás ale nezajímají a bylo by dobré mít možnost si zvolit, co se má dokud sbírat. |
|
| REVIEW |
| Morpheus umožňuje určit, jaká data se budou o stroji nebo skupině strojů z celkové možné množiny dat sbírat a ukládat. |
|
|
Rozšíření agenta pro WIN o Toast notifikace | Aby mohl být Morpheus považován za moderní aplikaci ovládající PC na fakultě, tak by měl nyní podporovat notifikace Toast a opustil stará okna podobná net send. |
|
| REVIEW |
| Morpheus umožňuje zobrazovat Toast notifikace Windows. |
|
|
podpora pro Linux/MacOS | Jelikož má být Morpheus Agentním systémem, tak je nutné, aby podporoval i jiné OS než WIN. |
|
| REVIEW |
| Morpheus podporuje Linux a MacOS. |
|
|
Rozšířené možnosti ovládání stroje na dálku | Zde je myšleno opravdu ovládání stroje nikoliv OS ikdyž se tak může prostřednictvím OS dít. Jde primárně o nastavení HW, BIOS, FireWall. Zde je zatím primární důraz kladen na ten FireWall, ale ostatní funkcionality jsou možná důležitější avšak implementačně vzdálenější. |
|
| REVIEW |
| Meorpehus umí ovládat stroj na úrovni HW, BIOS ať už přímo nebo skrze OS |
|
|
Upřesňující požadavky
Co bychom chtěli o PC sbírat za informace
session - jaký uživatel je přihlášen (login), jaký je typ session (vzdálené přihlášení nebo lokální přihlášení), jaké aplikace má spuštěné. Tato data chceme mít historická, řekněme cca rok zpátky, s tím, že bychom chtěli nastavit nějakou automatickou periodu, po jaké se mají mazat.
informace o rozhraních - MAC a IP adresách dostupných rozhraní počítačů - je potřeba myslet na to, že jedno z nich musí být hlavní - na které je možné poslat Magic Packet.
Jaký je na PC nainstalovaný SW
info o stavu PC - zapnutý/vypnutý, informace nastartovaném systému (rodina, verze), dostupnost, případné problémy v konektivitě klienta, info o autologinu
Získání informací
jaký uživatel byl v daném čase na tomto počítači - konkrétní čas i rozsah
jaký software je nainstalován na daném stroji/učebně
kde je nainstalován daný SW
Provádění akcí
Proveď příkaz
Zapni/vypni/zrestartuj stroj
Bootuj jiný systém
Přihlas konkrétního uživatele
Smaž uživatelský profil
Jaké technologie a standardy by měl Morpheus splňovat
minimalizovat využívaní frameworků
program serverové části (backend + middleware) v jazyce python
optimalizace DB a sbíraných dat
agregace historických nasbíraných dat (na to už by se asi daly použít nějaké číselníky a transformace do relační DB?)
komunikace server <-> klient
Různé
Soubor api.md je popis RESTového API frontendu, které dělal pan Vladimír Straka v rámci své závěrečné práce (tvorba nového frontendu pro Morpheus).