summaryrefslogtreecommitdiff
path: root/app/baisy/2.2.1-schulis/src/isp.monitor sicherungstask
blob: 2d4a7beb2fe60fc696abee3db76154d50c0d6334 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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