View file | ||||
---|---|---|---|---|
|
View file | ||||
---|---|---|---|---|
|
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:
| ||||||
Co bychom chtěli o PC sbírat za informace:
...