 Stručný popis

Stručný popis

Applet SX0006 slouží ke kopírování datových prostředí pro portál. Pro svůj běh applet vyžaduje Komunikační server.


 SX0006
  • Stručný popis

  • Instalace a konfigurace


 Instalace a konfigurace

Instalace a konfigurace

Instalace se provádí spuštěním instalačního vmi balíčku, který do zvoleného adresáře umístí adresář s příklady konfigurace appletu a Komunikačního serveru. Do adresáře komunikačního serveru nainstaluje konfigurační databázi KomSPythonScriptStarter.SX0006.

Po instalaci je nutné správně nastavit konfigurační databáze, kde příklad jejich nastavení je možno najít v podadresáři Examples, který je umístěn v adresáři kam byl nainstalován applet SX0006. A dále je nutno upravit konfigurační databázi Komunikačního serveru tak, aby jej server mohl spouštět.

  • Konfigurační soubor


 Konfigurační soubor

Konfigurační soubor

Konfigurace appletu je implicitně umístěna v adresáři Komunikačního serveru.

  • Konfigurační parametry

  • Ukázka konfiguračního souboru


 Konfigurační parametry

Konfigurační parametry

Jednotlivé konfigurační parametry a jejich způsob použití:

  • Oddíl EmailsOnSuccess obsahuje parametry pro odeslání emailu po úspěšném provedení skriptu.
    • Parametr Subject obsahuje předmět zaslaného emailu.
    • Parametr Body obsahuje tělo zprávy, které se bude připojovat k emailu.
    • Parametr MailGroup označuje odkaz na emailovou skupinu.
  • Oddíl EmailsOnFailure obsahuje parametry pro odeslání emailu při neúspěšném provedení skriptu.
    • Parametr Subject obsahuje předmět zaslaného emailu.
    • Parametr Body obsahuje tělo zprávy, které se bude připojovat k emailu.
    • Parametr MailGroup označuje odkaz na emailovou skupinu.
  • Parametr PyScriptTimeout obsahuje čas, po který bude skript maximálně běžet, než se serverem ukončí.
  • Parametr PythonScript obsahuje samotný skript v jazyce python, který se bude spouštět. Je potřeba vytvořit instanci třídy CopyFiles a poté zavolat její metodu Copy. Jednotlivé parametry při vytvoření instance v pořadí v jakém jsou uvedeny:
    • srcPath - zdrojová cesta, odkud se soubory kopírují,
    • dstPath - cílová cesta, kam se soubory budou kopírovat,
    • includeFiles - obsahuje seznam souborů které se zahrnují do kopírování, mohou se použít zástupné znaky (např. vema*.* zahrnuje všechny soubory začínající vema).
    • excludeFiles - obsahuje seznam souborů, které se vyloučí z kopírovaných souborů. Stejně jako includeFiles může obsahovat zástupné znaky.
    • rmDestPath - je nastavena na True, pokud je potřeba cílový adresář smazat a znovu vytvořit.
    • loopsCount - počet pokusů při neúspěšném kopírování souboru.
    • timeout - prodlevy mezi jednotlivými pokusy při neúspěšném kopírování


 Ukázka konfiguračního souboru

Ukázka konfiguračního souboru

VemaConfigScript Version=2
{
Section ( ConfigAlternative == "SX0006" ) //uloha byla spustena s configAlternative KomSPython1
{
EmailsOnSuccess //Definice sekce, která se použije pro hlášení úspěchu úlohy, sekce je nepovinná
{
Subject = "Python script successed"; //Předmět zprávy
Body = "Úloha proběhla úspěšně."; //Tělo zprávy které se bude vždy připojovat
MailGroup = "Python"; //Odkaz na emailovou skupinu KomS serveru, musí být definována v KomSMailGroups.VmConfigDB
}
EmailsOnFailure //Definice sekce, která se použije pro hlášení neúspěchu úlohy, sekce je nepovinná
{
Subject = "Python script failed"; //Předmět zprávy
Body = "Úloha skončila s chybou."; ////Tělo zprávy které se bude vždy připojovat, KomS doplní popis chyby která nastala
MailGroup = "Python"; //Odkaz na emailovou skupinu KomS serveru, musí být definována v KomSMailGroups.VmConfigDB
}
PyScriptTimeout = "0 00:01:00"; //Time out pro beh scriptu
PythonScript = //Nadefinivany python script, provede kopii jednoho adresare do druheho
"from VmUserError import*\n"+
"import os\n"+
"import os.path\n"+
"import shutil\n"+
"import fnmatch\n"+
"import time\n"+
"\n"+
"##############################hlavni trida##################################\n"+
"\n"+
"class CopyFiles:\n"+
" \n"+
" includeFiles=None\n"+
" excludeFiles=None\n"+
" srcPath=None\n"+
" dstPath=None\n"+
" loopsCount=10\n"+
" timeout=60\n"+
" rmDestPath=False\n"+
" \n"+
" def __init__(self, srcPath, dstPath, includeFiles, excludeFiles, rmDestPath=False, loopsCount=10, timeout=60):\n"+
" self.includeFiles=includeFiles\n"+
" self.excludeFiles=excludeFiles\n"+
" self.srcPath=srcPath\n"+
" self.dstPath=dstPath\n"+
" self.loopsCount=loopsCount\n"+
" self.timeout = timeout\n"+
" self.rmDestPath = rmDestPath\n"+
" \n"+
" def isExclude(self, fileName): \n"+
" for pattern in self.excludeFiles:\n"+
" if fnmatch.fnmatch(fileName, pattern) : \n"+
" return True \n"+
" return False\n"+
" \n"+
" def isInclude(self, fileName):\n"+
" for pattern in self.includeFiles:\n"+
" if fnmatch.fnmatch(fileName, pattern):\n"+
" return True\n"+
" return False\n"+
" \n"+
" \n"+
" def Copy(self):\n"+
" if(not os.path.exists(self.srcPath)):\n"+
" #zalogovat chybu, neexistuje vstupni adresar\n"+
" raise VmUserError, \'neexistuje vstupni adresar\' \n"+
" elif(not os.path.exists(self.dstPath)):\n"+
" #zalogovat chybu, neexistuje vystupni adresar\n"+
" raise VmUserError, \'neexistuje vystupni adresar\'\n"+
" else:\n"+
" if self.rmDestPath:\n"+
" shutil.rmtree(self.dstPath)\n"+
" os.mkdir(self.dstPath)\n"+
" names = os.listdir(srcPath)\n"+
" end=False\n"+
" count=loopsCount\n"+
" while not end :\n"+
" try: \n"+
" for jmeno in names:\n"+
" if os.path.isfile(srcPath+jmeno) and ((self.excludeFiles!=None and not self.isExclude(jmeno)) or (self.includeFiles!=None and self.isInclude(jmeno))): #os.path.isfile(OwnPath+jmeno):\n"+
" shutil.copyfile(srcPath+jmeno,dstPath+jmeno)\n"+
" end=True\n"+
" except IOError:\n"+
" time.sleep(timeout)\n"+
" count-=1\n"+
" if count==0 :\n"+
" #zalogovat neuspech\n"+
" raise VmUserError, \'neuspesny zkopirovani souboru \'+srcPath+jmeno+\' -> \'+dstPath+jmeno\n"+
" end=True\n"+
" \n"+
"##############################spousteni##################################\n"+
"pathPIS = \'E:\\\\VemaData\\\\PIS_portal\\\\\'\n"+
"pathPISPozn = \'E:\\\\VemaData\\\\PIS_Portal_poznamky\\\\\'\n"+
"pathServerPIS = \'\\\\\\\\mf10is05\\\\e$\\\\\VemaData\\\\\PIS\\\\\'\n"+
"loopsCount = 10\n"+
"timeout = 15\n"+
"\n"+
"includeFiles = [\'poznamky.dat\', \'poznamky.mem\', \'poznamky.ind\',\'zzcfgpam.dat\']\n"+
"srcPath = pathPIS\n"+
"dstPath = pathPISPozn\n"+
"objekt=CopyFiles(srcPath, dstPath, includeFiles, None, False, loopsCount, timeout)\n"+
"objekt.Copy()\n"+
"\n"+
"includeFiles = [\'akceuc.dat\', \'akceuc.ind\', \'akceuc.mem\',\'schvprih.dat\',\'schvprih.ind\',\'hodakot.dat\',\'hodakot.ind\',\'hodakuc.dat\',\'hodakuc.ind\',\'hodakuc.mem\',\'auctest.dat\',\'auctest.ind\',\'aucprte.dat\',\'aucprte.ind\',\'aucotaz.dat\',\'aucotaz.ind\',\'profes.dat\',\'profes.ind\',\'profes.mem\',\'hakce.dat\',\'hakce.ind\',\'hucakce.dat\',\'hucakce.ind\',\'hucakce.mem\',\'hplnkrit.dat\',\'hplnkrit.ind\',\'hplnkrit.mem\',\'pracukol.dat\',\'pracukol.ind\',\'pracukol.mem\']\n"+
"srcPath = pathPIS\n"+
"dstPath = pathPISPozn\n"+
"objekt=CopyFiles(srcPath, dstPath, includeFiles, None, False, loopsCount, timeout)\n"+
"objekt.Copy()\n"+
"\n"+
"excludeFiles = [\'VemaLock.dat\',\'VemaUser.dat\',\'VemaLog.dat\',\'akceuc.dat\', \'akceuc.ind\', \'akceuc.mem\',\'schvprih.dat\',\'schvprih.ind\',\'hodakot.dat\',\'hodakot.ind\',\'hodakuc.dat\',\'hodakuc.ind\',\'hodakuc.mem\',\'auctest.dat\',\'auctest.ind\',\'aucprte.dat\',\'aucprte.ind\',\'aucotaz.dat\',\'aucotaz.ind\',\'profes.dat\',\'profes.ind\',\'profes.mem\',\'hakce.dat\',\'hakce.ind\',\'hucakce.dat\',\'hucakce.ind\',\'hucakce.mem\',\'hplnkrit.dat\',\'hplnkrit.ind\',\'hplnkrit.mem\',\'pracukol.dat\',\'pracukol.ind\',\'pracukol.mem\']\n"+
"srcPath = pathServerPIS\n"+
"dstPath = pathPIS\n"+
"objekt=CopyFiles(srcPath, dstPath, None, excludeFiles, True, loopsCount, timeout)\n"+
"objekt.Copy()\n"+
"\n"+
"includeFiles = [\'poznamky.dat\', \'poznamky.mem\', \'poznamky.ind\',\'zzcfgpam.dat\']\n"+
"srcPath = pathPISPozn\n"+
"dstPath = pathPIS\n"+
"objekt=CopyFiles(srcPath, dstPath, includeFiles, None, False, loopsCount, timeout)\n"+
"objekt.Copy()\n"+
"\n"+
"includeFiles = [\'akceuc.dat\', \'akceuc.ind\', \'akceuc.mem\',\'schvprih.dat\',\'schvprih.ind\',\'hodakot.dat\',\'hodakot.ind\',\'hodakuc.dat\',\'hodakuc.ind\',\'hodakuc.mem\',\'auctest.dat\',\'auctest.ind\',\'aucprte.dat\',\'aucprte.ind\',\'aucotaz.dat\',\'aucotaz.ind\',\'profes.dat\',\'profes.ind\',\'profes.mem\',\'hakce.dat\',\'hakce.ind\',\'hucakce.dat\',\'hucakce.ind\',\'hucakce.mem\',\'hplnkrit.dat\',\'hplnkrit.ind\',\'hplnkrit.mem\',\'pracukol.dat\',\'pracukol.ind\',\'pracukol.mem\']\n"+
"srcPath = pathPISPozn\n"+
"dstPath = pathPIS\n"+
"objekt=CopyFiles(srcPath, dstPath, includeFiles, None, False, loopsCount, timeout)\n"+
"objekt.Copy()\n"+
"\n"+
"includeFiles = [\'akceuc.dat\', \'akceuc.ind\', \'akceuc.mem\',\'schvprih.dat\',\'schvprih.ind\',\'hodakot.dat\',\'hodakot.ind\',\'hodakuc.dat\',\'hodakuc.ind\',\'hodakuc.mem\',\'auctest.dat\',\'auctest.ind\',\'aucprte.dat\',\'aucprte.ind\',\'aucotaz.dat\',\'aucotaz.ind\',\'profes.dat\',\'profes.ind\',\'profes.mem\',\'hakce.dat\',\'hakce.ind\',\'hucakce.dat\',\'hucakce.ind\',\'hucakce.mem\',\'hplnkrit.dat\',\'hplnkrit.ind\',\'hplnkrit.mem\',\'pracukol.dat\',\'pracukol.ind\',\'pracukol.mem\']\n"+
"srcPath = pathPIS\n"+
"dstPath = pathServerPIS\n"+
"objekt=CopyFiles(srcPath, dstPath, includeFiles, None, False, loopsCount, timeout)\n"+
"objekt.Copy()\n";
}
}