app/baisy/2.2.1-schulis/src/isp.monitor sicherungstask

Raw file
Back to index

PACKET ispmonitorsicherungstaskDEFINES ispmonitorsicherungstask,sndbaisyfiles
,rcvbaisyfiles,sndidafiles,rcvidafiles,ida,statistik,:LET initcode=25,
listcode=26,checkcode=27,formatcode=40,logonarchivecode=45,logoffarchivecode=
46,dbvomserver=47,dbzumserver=48,dbaufdisk=49,dbvondisk=50,dddrucken=51,ack=0
,errornak=2,nak=1,continuecode=100,endcode=37,savedbcode=38,restoredbcode=39,
maxthesaurusentry=252;LET showcode=12,mlddbnichtda=
"Keine vollständige DB bei Sicherungstask!",formfilename=
"Namen der Formulare",statistikserver="statistik server",#25.09.90#
statistikbasis="STATISTIK.basis";BOOL VAR idasicherung:=FALSE ,
statistiksicherung:=FALSE ;#25.09.90#FILE VAR formfile;TEXT VAR nameoftask:=
"",formname:="";LET stundenplanserver="stundenplan server";LET 
stundenplanpraefix="Stundenplan-*";TASK VAR stundenplanservertask;LET 
kurswahlserver="kurswahl server";LET kurswahlpraefix="Kurswahl-*";TASK VAR 
kurswahlservertask;BOUND TEXT VAR message;DATASPACE VAR ds;INT VAR replycode;
PROC ispmonitorsicherungstask(TEXT CONST sicherungstask):nameoftask:=
sicherungstask;globalmanager(PROC (DATASPACE VAR ,INT CONST ,INT CONST ,TASK 
CONST )ispmonitor)ENDPROC ispmonitorsicherungstask;PROC ispmonitor(DATASPACE 
VAR dsp,INT CONST orderp,phasep,TASK CONST ordertaskp):INT VAR replycode;
TASK VAR begintask;IF orderp>=continuecodeAND ordertaskp=supervisorTHEN 
forget(dsp);spoolcommand(orderp)ELSE enablestop;ordertask(ordertaskp);SELECT 
orderpOF CASE initcode:cleararchive;CASE listcode:listarchive;CASE 
dbvomserver:forget(ALL myself-schulisdbname#17.10.88#-baisydbname);IF ida
THEN rcvidafiles#25.09.90#ELIF statistikTHEN rcvstatfilesELSE fetchdb(
nameoftask);IF baisyTHEN rcvbaisyfilesELSE receivestundenplan;
receivekurswahldatenFI ;FI CASE dbzumserver:IF idaTHEN sndidafiles#25.09.90#
ELIF statistikTHEN sndstatfilesELSE restoredb(nameoftask);IF baisyTHEN 
sndbaisyfilesELSE sendstundenplan;sendkurswahldatenFI FI CASE dbaufdisk:IF 
ida#25.09.90#THEN savetoarchive(all-schulisdbname)ELIF NOT statistikCAND 
dbnichtkomplettTHEN errorstop(mlddbnichtda)ELSE savetoarchive(all)FI CASE 
dbvondisk:forget(ALL myself-schulisdbname#17.10.88#-baisydbname);
fetchfromarchive;IF idaTHEN sndidafiles#25.09.90#ELIF statistikTHEN 
sndstatfilesELSE restoredb(nameoftask);IF baisyTHEN sndbaisyfilesELSE 
sendstundenplan;sendkurswahldatenFI ;FI CASE formatcode:formatarchive(
nameoftask)CASE checkcode:checkarchiveCASE logonarchivecode:logonarchiveCASE 
logoffarchivecode:logoffarchiveCASE dddrucken:datadirdruckenOTHERWISE :
errorstop("Falscher Auftrag!")ENDSELECT ;endemeldungFI .dbnichtkomplett:IF 
NOT exists(nameoftask)COR (nameoftask="EUMELbase.baisy"CAND (NOT exists(
"BAISY-0")COR NOT exists("BAISY-1")COR NOT exists("BAISY-2")COR NOT exists(
"BAISY-3")))THEN TRUE ELSE FALSE FI .endemeldung:send(ordertaskp,ack,dsp).
datadirdrucken:servereinrichten;out("Datenbankverzeichnis wird erstellt!");
serverwecken.servereinrichten:begin("-",PROC servermonitor,begintask).
serverwecken:call(begintask,dddrucken,dsp,replycode);IF replycode=errornak
THEN message:=dsp;errorstop(message)ELSE send(ordertaskp,showcode,dsp)FI .
ENDPROC ispmonitor;PROC servermonitor:TASK VAR fathertask;INT VAR ordercode;
DATASPACE VAR ds;disablestop;wait(ds,ordercode,fathertask);postfix("");
fetchdd(nameoftask);IF dbopen(nameoftask)THEN ddinfo("X")ELSE errorstop(
"Drucken nicht möglich!")FI ;IF iserrorTHEN forget(ds);ds:=nilspace;message:=
ds;message:=errormessage;ordercode:=errornakELSE forget(ds);ds:=old("X.dd")
FI ;send(fathertask,ordercode,ds);end(myself)ENDPROC servermonitor;PROC 
spoolcommand(INT CONST order):TEXT VAR commandline:="";enablestop;break(quiet
);continue(order-continuecode);disablestop;REP #commanddialogue(TRUE );#
getcommand(name(myself)+"-Monitor:",commandline);do(commandline)UNTIL NOT 
onlinePER ;#commanddialogue(FALSE );#break(quiet);setautonomEND PROC 
spoolcommand;ROW maxthesaurusentryDATASPACE VAR receiveddb;BOUND THESAURUS 
VAR thesau;THESAURUS VAR dbthesaurus:=emptythesaurus;TASK VAR sourcetask:=
niltask#,baisyserver:=/"baisy server"#;PROC rcvbaisyfiles:out(
"BAISY-Files werden übertragen!");fetchfast(name(baisyserver));ENDPROC 
rcvbaisyfiles;PROC sndbaisyfiles:THESAURUS VAR theo:=ALL myself,theodb:=
emptythesaurus;LET baisyconst="BAISY-";TEXT VAR fname;INT VAR tindex:=0,l:=1;
forget(ds);ds:=nilspace;thesau:=ds;thesau:=emptythesaurus;modifytheo;
sendthesaurusandrcvok;senddb.modifytheo:get(theo,fname,tindex);WHILE tindex>0
REP IF pos(fname,baisyconst)=1THEN insert(theodb,fname)FI ;get(theo,fname,
tindex)PER ;thesau:=theodb.sendthesaurusandrcvok:REP call(baisyserver,
restoredbcode,ds,replycode)UNTIL replycode=restoredbcodePER ;.senddb:tindex:=
0;l:=1;get(theodb,fname,tindex);WHILE tindex>0REP sendfile;get(theodb,fname,
tindex)PER ;sendend.sendfile:pause(10);forget(ds);ds:=old(fname);out(fname+
" wird übertragen!");lINCR 1;send(baisyserver,restoredbcode,ds);.sendend:
pause(10);ds:=nilspace;send(baisyserver,endcode,ds).ENDPROC sndbaisyfiles;
PROC rcvidafiles:initformfile;first(dnrida);WHILE dbstatus=okREP IF 
formexists(intwert(fnridanummer))THEN out("Formular "+wert(fnridanummer)+
" gesichert!");getform(intwert(fnridanummer));formname:="";savetupel(dnrida,
formname);putline(formfile,formname)FI ;succ(dnrida)PER .initformfile:forget(
ALL myself-schulisdbname);formfile:=sequentialfile(output,formfilename).
ENDPROC rcvidafiles;PROC sndidafiles:IF NOT exists(formfilename)THEN 
errorstop("Druckausgaben nicht vollständig!")ELSE rueckspeichernFI .
formdateienda:exists("FORMDATA."+wert(fnridanummer))CAND exists("FORMTEXT."+
wert(fnridanummer)).rueckspeichern:formfile:=sequentialfile(input,
formfilename);IF lines(formfile)>0THEN eigentlichesrueckspeichernFI .
eigentlichesrueckspeichern:clearfile(dnrida);WHILE NOT eof(formfile)REP 
getline(formfile,formname);restoretupel(dnrida,formname);IF formdateienda
THEN openformular(intwert(fnridanummer));putform;out("Formular "+wert(
fnridanummer)+" rückgesichert!");insert(dnrida)FI PER .ENDPROC sndidafiles;
PROC rcvstatfiles:TASK CONST statserver:=task(statistikserver);THESAURUS VAR 
stats:=ALL statserver;TEXT VAR name;INT VAR index:=0;sicheredatenbasis;get(
stats,name,index);WHILE index>0REP out(name+" gesichert!");fetch(name,
statserver);get(stats,name,index);PER ;pause(20).sicheredatenbasis:IF stats
CONTAINS statistikbasisTHEN out("Statistik Datenbasis gesichert!");fetch(
statistikbasis,statserver);stats:=stats-statistikbasis;FI .END PROC 
rcvstatfiles;PROC sndstatfiles:THESAURUS CONST alle:=ALL myself;TASK CONST 
statserver:=task(statistikserver);TEXT VAR name;INT VAR index:=0;IF 
highestentry(alle)=0THEN errorstop("Keine Statistiken vorhanden!");ELSE 
allesloeschen;rueckspeichern;pause(20);FI .allesloeschen:BOOL VAR 
dialogschalter:=commanddialogue;commanddialogue(FALSE );erase(ALL statserver,
statserver);commanddialogue(dialogschalter).rueckspeichern:get(alle,name,
index);WHILE index>0REP IF name=statistikbasisTHEN out(
"Statistik Datenbasis rückgesichert!");ELSE out(name+" rückgesichert!");FI ;
save(name,statserver);get(alle,name,index);PER .END PROC sndstatfiles;PROC 
receivestundenplan:disablestop;stundenplanservertask:=task(stundenplanserver)
;IF iserrorTHEN clearerror;ELSE loeschestundenplandsintask;fetchall(
stundenplanservertask);FI ;enablestop.loeschestundenplandsintask:BOOL VAR 
dialogschalter:=commanddialogue;commanddialogue(FALSE );forget(allLIKE 
stundenplanpraefix);commanddialogue(dialogschalter).END PROC 
receivestundenplan;PROC sendstundenplan:disablestop;stundenplanservertask:=
task(stundenplanserver);IF iserrorTHEN clearerror;ELSE 
loeschestundenplandsinservertask;save(allLIKE stundenplanpraefix,
stundenplanservertask);FI ;enablestop.loeschestundenplandsinservertask:BOOL 
VAR dialogschalter:=commanddialogue;commanddialogue(FALSE );erase(ALL 
stundenplanservertask,stundenplanservertask);commanddialogue(dialogschalter).
END PROC sendstundenplan;PROC receivekurswahldaten:disablestop;
kurswahlservertask:=task(kurswahlserver);IF iserrorTHEN clearerror;ELSE 
loeschekurswahldsintask;fetch((ALL kurswahlservertask)LIKE kurswahlpraefix,
kurswahlservertask);FI ;enablestop.loeschekurswahldsintask:BOOL VAR 
dialogschalter:=commanddialogue;commanddialogue(FALSE );forget(allLIKE 
kurswahlpraefix);commanddialogue(dialogschalter).END PROC 
receivekurswahldaten;PROC sendkurswahldaten:disablestop;kurswahlservertask:=
task(kurswahlserver);IF iserrorTHEN clearerror;ELSE 
loeschekurswahldsinservertask;save(allLIKE kurswahlpraefix,kurswahlservertask
);FI ;enablestop.loeschekurswahldsinservertask:BOOL VAR dialogschalter:=
commanddialogue;commanddialogue(FALSE );erase(ALL kurswahlservertask,
kurswahlservertask);commanddialogue(dialogschalter).END PROC 
sendkurswahldaten;BOOL PROC baisy:nameoftask="EUMELbase.baisy"ENDPROC baisy;
BOOL PROC ida:idasicherungENDPROC ida;PROC ida(BOOL CONST idas):idasicherung
:=idasENDPROC ida;BOOL PROC statistik:statistiksicherungEND PROC statistik;
PROC statistik(BOOL CONST stats):statistiksicherung:=statsEND PROC statistik;
ENDPACKET ispmonitorsicherungstask