Kortsys 2

Kortsys er systemet som sørger for at ARX (Windows Java-systemet som er koblet opp mot kort-undersentralene og i tur dermed dørene) inneholder omtrent samme informasjon som MDB2 (MedlemsDB2). Dokumentasjonen her gjelder Kortsys 2.2; vi har ingen rigid releaseprosess på Kortsys (som med resten av MedlemsDB), men versjonsnummeret bounces nå og da hvis man føler man har gjort en viktig nok strukturell endring.

Kortsys 1 fungerte ved en haug triggere som sørget for å markere ting til oppdatering i RiTA. Kortsys 2 fungerer annerledes; KS2 vedlikeholder en liste i PostgreSQL over hvordan den tror ARXs interne tilstand ser ut, genererer en liste over hvilke tilganger folk skal ha ihht. MDB2, og sørger så for å dytte ut endringer nok slik at ARX-tilstanden blir lik som MDB2. I tillegg har den et script som faktisk sjekker tilstanden til MDB2 opp mot tilstanden i ARX, men dette kommer vi tilbake til.

De to metodene har fordeler og ulemper; diskutér. Minst fem sider. Til mandag.

Generell virkemåte

Kortsys 2 kjøres hvert minutt som brukeren rita fra cirkus (siden den er databasetjener; det kunne dog fint kjørt på cassarossa om vi hadde ønsket).

Kortsys 2 er formulert i en kombinasjon av Perl og SQL; med noen få unntak er Perl-scriptet og tilhørende modul en tynn wrapper rundt SQL-viewene (som ligger i SQL-skjemaet _kortsys2_; det kan refereres til .sql-filene i Arch for mer dokumentasjon om det skulle være ønskelig).

Begynnelsen av det hele er et view med det velklingende navnet mdb_gruppekobling_transitiv_tillukning som beregner hva som arver fra hva (dvs. løser opp i arv), ved hjelp av en flott spørring basert på rekursiv SQL (WITH RECURSIVE). Dette leser fra tabellen gruppekobling og finner den transitive tillukningen av gruppegrafen, dvs. sørger for at hvis stien A -> B -> C finnes (der "->" betyr "er undergruppe av"), finnes også kanten A -> C.

Data fra det overnevnte viewet blir så slått sammen med data fra viewet gyldige_medlemskap (som finner gyldige medlemskap basert på kort og oblat), data fra tabellen verv, samt data fra diverse views for eksterne kort i et view med det mesterlige navnet mdb_gyldig_gruppemedlemskap. Dette viewet inneholder altså alle koblinger mellom gyldige medlemmer med verv og grupper, samt start og sluttdatoer for disse koblingene.

For å finne faktiske tilganger til dører blir data herfra slått sammen med data fra tabellene adgangsskjema og adgangsskjema_gruppe_kobling i viewet med det velklingende navnet arx_mdb_tilgang. I dette viewet finner man altså alle bindinger mellom medlemmer og adgangsskjema, med tilhørende start og sluttidspunkt.

Dataene fra arx_mdb_tilgang kjøres så over i viewet arx_mdb_effektiv_tilgang, som inneholder akkurat samme informasjon, men uten duplikater. Man kan f.eks. fint ha tilgang til 4. etasje både i kraft av å være ITK-funk og UKA-IT, og arx_mdb_tilgang vil gi to forskjellige linjer her, med hver sin start- og sluttdato. arx_mdb_effektiv_tilgang plukker den av tilgangene som varer lengst, og dytter ut den.

I tillegg til dette viewet har man et view ved navn mdb_personer, som ved hjelp av tabeller som medlem, kort og verv, samt viewet gyldige_medlemskap og litt til genereret en liste over gydlige medlemmer og deres data.

Når man så har både ønsket liste over personer (mdb_personer) og tilganger (arx_mdb_effektiv_tilgang), kan man sammenligne med ARX antatte eller kjente tilstand og oppdatere ARX henholdsmessig. Dette vil vi se videre på i neste kapittel.

Diffescript og ARX

Dørsystemet vi bruker på Samfundet heter ARX, er javabasert og kjører på den virtuelle boksen deke-du på boksen domino. ARX ble installert til fordel for RiTA i perioden 2010-2012.

Import og eksport til/fra ARX gjøres via XML-filer over https. For å få dette til å fungere mot MDB2 er det skrevet et par scripts i perl, som ligger under mdb/kortsys2/.

Først og fremst finnes et fulldump-script, som parser all data fra MDB2 til XML-format og laster opp dette til ARX, hendig kalt mdb2arx_full.pl. Dette scriptet skal kun brukes dersom noe går skikkelig på trynet, og ARX mister alle sine data.

Til vanlig kjører to scripts for å oppdatere ARX: mdb2arx_dbdiff og mdb2arx_xmldiff. dbdiff fungerer ved at det holder ARX sin antatte tilstand i et tabellene arx_personer og arx_tilgang i MDB2, og bruker views til å diffe mellom MDB2 sin tilstand og den antatte tilstanden til ARX. Deretter dyttes eventuelle endriger til ARX over https/xml. Selve diffingen skjer i viewene arx_personer_skal_endres, arx_personer_skal_slettes og arx_tilganger_skal_endres.

xmldiff fungerer ved at det henter en eksport fra ARX i XML og differ denne mot data i MDB2. Det tar seg også av sperring av kort, basert på flagg i XML-eksporten fra ARX, tilsvarende ATiR tidligere.

dbdiff kjøres hvert minutt, mens xmldiff kjøres hver 3. time gjennom cron.d på cirkus. Felles for begge scriptene er at de genererer XML-filer ved eventuelle ulikheter mellom MDB2 og ARX, for så å laste opp disse XML-filene til ARX.

Scriptene kjøres av cron.d på cirkus med brukeren rita. Se medlemsdb2, hvordan utvikle, under Produksjonssetting av Kortsys for mer info om lokasjon. Logging skjer til /var/log/itk/mdb2arx.log.

Lenker: Start, atir, gammel dokumentasjon, medlemsdb2, hvordan utvikle, rita

Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2015-02-02 20:36 | Revisjon: 14 (historie, blame) | Totalt: 1905 kB | Rediger