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

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. 

  1. Systém by nově umožňoval provádět příkazy bez escapování,

  2. provádění přík. bloků (malá priorita)

?

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
prompt 0
timeout 30

LABEL slax
MENU LABEL Testy - slax
KERNEL iso/slax/boot/vmlinuz
IPAPPEND 1
APPEND initrd=iso/slax/boot/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 slax.flags=xmode
method=195.113.194.206:7529

Změnou obsahu tohoto souboru je možné vybrat jiný systém který bude bootovat a to jak lokální, tak i jiný PXE.

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 

  1. Spouštění i jiného systému než je přijímačkový linux.

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é:

  1. číselníky - tabulky dostupnost, system, ucebny, session_type

  2. dynamicky jejich obsah se mění - installed_software, running_processes, session, software

  3. kombinace předchozího - tabulka pc.

Čá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í:

  • jestli je zapnutý autologin

  • jací uživatelé jsou přihlášení

  • u přihlášených uživatelů zjistí, jaké procesy mají spuštěné

  • jaký je typ systému

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.

  1. spouštění přímo ze systému Morpheus, ne z CROND v systému

?

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. 

  1. Systém by mohl nově získat informace o všech rozhraních, reps. IP adresách, které daný klient má a používá. 

 

...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. 

  1. Systém by mohl nově získat informace o všech rozhraních, reps. MAC adresách, které daný klient má a používá. 

 

...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ý
1=vypnutý
2=na síti vůbec není dostupný.

 

 

 

 

...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
2=Obecný *NIX systém, defaultní hodnota
3=AMT (speciální případ)
4=Linux
5=macOS

 

 

 

 

...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.
0 = lokální
1 = vzdálený

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:

  • IP

  • MAC

  • OS

  • zapnutí/vypnutí

  • přihlášených uživatelích

  • nainstalovaném SW

  • session (spuštěný SW)

  • ...

 

 

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).

Chybné vykreslení makra 'jira' : Nepodařilo se vyhledat server Jira pro toto makro. Problém může být v konfiguraci propojení aplikací.