ATIR

ATIR er revers-RITA (og følgelig "RITA" baklengs), eller kanskje mer presist Kortsys2 baklengs. Hovedformålet med ATIR er å få oversikt over hva som faktisk ligger i RITA til enhver tid, ettersom erfaring har vist at dette ikke alltid er identisk med det som ligger i MedlemsDB (som RITA oppdateres fra). Følgelig får man PostgreSQL-tabeller som inneholder all interessant informasjon i RITA til enhver tid (eller i det minste hver time).

ATIR eksisterer i form av verktøyet "ritadump.exe", som er et 16-bits Windows-program kompilert med OpenWatcom 1.3, under VMware. (Programmet er 16-bits ettersom det snakker med DLL-en "wbtrcall.dll", som igjen snakker med RITAs Btrieve-database; hvis noen føler seg veldig flinke til å skrive thunk-DLLer kan de sikkert lage en 32-bits versjon etter hvert.) ritadump.exe gjør en minimal binærdump av databasefilen gitt på kommandolinjen over i et superenkelt binærformat.

Det er viktig å merke seg at Btrieve ikke har noe konsept om felter overhodet; alle poster kommer i form av fast-lengde structs, så man må vite hvor i posten alle (interessante) felter befinner seg om man skal få ut noe nyttig data. ritadump.exe gjør ikke noe forsøk på å dekode dette; alt den skriver (for hver post) er først en 32-bits (little-endian) lengde på posten, og deretter rådataene. Dette er gjort slik for å få minimalt med kompleksitet i 16-bits-delene og helle gjøre slikt på Linux-siden, der man har litt mindre arkaiske programmeringsmodeller :-) Mer om dette under.

Windows-siden

Hver time kjører nokavkort (via Windows' "task scheduler"-system) filen \\samba.samfundet.no\rita\atir\dodump.bat. Denne dumper de fem-seks tabellene vi er interessert i til \\samba.samfundet.no\rita\atir og skriver filen RITADUMP.LCK for å signalisere at dataene er klare. (Dersom det ikke kjører noe på Linux-siden vil dataene fra forrige gang bare overskrives; det er en teoretisk mulighet for at vi får messup dersom Linux-siden plutselig skulle våkne opp fra lang tids dvale akkurat idet Windows-siden kjører, men det verste som skjer er at vi kan få bogus data i databasen en time.)

ritadump.exe skriver aldri noe til databasen, for å unngå å forvirre RITA. Vær obs på at Btrieve er kjent for å spise filene sine dersom to forskjellige Btrieve-prosesser kjører samtidig, så aldri kjør ritadump.exe fra rdesktop e.l., hvor de havner i et separat 16-bits adresserom!

Linux-siden

Hvert femte minutt kjøres (fra cirkus, som brukeren rita) scriptet /home/cassarossa/itk/rita/atir-linux/parse-rita.sh, som først av alt sjekker om RITADUMP.LCK finnes (dvs. om det er kommet data fra Windows-delen siden sist). Dersom det finnes, setter man i gang med å hente ut data fra alle .bin-filene ritadump.exe har laget.

Parsingen gjøres av et program med det vakre navnet "readbin", og gjøres ut fra en serie filer kalt desc-*.txt, en for hver tabell, som inneholder en slags minimal struct-definisjon med hvilke felter som er hva, type (streng, boolean eller invertert boolean) og lengde (i antall bytes), samt hvilke som skal dyttes ut i den ferdige databasedumpen (feltnavn som begynner med "_" er i verste Python-stil skjult fra outputen, enten fordi de er uinteressante eller fordi man ikke vet hva de er).

Disse dataene masseres så over til et tab-separert format som er egnet for PostgreSQLs COPY-kommando, før alle gamle data i atir.*-tabellene i MDB slettes og så fylles med de nye dataene (alt dette i en transaksjon). Hele prosessen med parsing og endring av data gjøres på et par sekunder. (Til slutt slettes RITADUMP.LCK, så ikke samme data prosesseres mange ganger.)

Det gjøres (med vilje) ingen videre massering av dataene for å passe til MDBs struktur, men dette kan gjøres rimelig greit med litt views om man skulle ønske det.

Tabeller

Følgende tabeller er hentet inn , alfabetisk:

cpualnam
Alarmkort-typer. (CPU = undersentral, al = alarmkort, nam = navn.)
crd
Tabell over kort, og hvem de tilhører.
dor
Dørenes navn.
grp
Hvilke adgangsgrupper gir tilgang til hvilke dører, og med hvilke skjemaer (for hhv. innsiden og utsiden av dørene).
grpnam
Adgangsgruppenes navn. (grp = gruppe, nam = navn.)
grpper
Hvilke kort er medlem av hvilke adgangsgrupper. (grp = gruppe, per = personer – ulogisk nok, siden tabellen handler om kort og ikke personer.)
macord
MACro ORDering (tror vi); køen av ting som skal gjøres ut mot undersentralene.
prs
Tabell over personer, epostadresse, medlemsnummer o.l.

Utvikling og prodsetting

ATIR-ting ligger nå i mdb2, se MedlemsDB2, hvordan utvikle. Prodsetting skjer slik:

bruker@cassarossa:~> sudo su - rita
rita@cassarossa:~$ cd mdb2
rita@cassarossa:~/mdb2$ bzr up
rita@cassarossa:~/mdb2$ cp atir-linux/* ../atir-linux/

Det ligger ting vi gjerne vil ta vare på i ~rita/atir-linux, så ikke slett noe derfra med mindre du er sikker på hva du gjør.

Lenker: Start, arkiv, kortsys med rita, kortsys2

Mail: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2008-04-12 16:56 | Revisjon: 8 (historie, blame) | Totalt: 1479 kB | Rediger