Harjoitustöiden hallintajärjestelmä 1 Yleistä Tavoitteena oli toteuttaa järjestelmä palautettujen harjoitustöiden tarkistuksen hallintaan. Opiskelijoiden palautukset oli Laajan ohjelmoinnin kurssilla perinteisesti suoritettu sähköpostitse, jolloin automaatti lajitteli ne otsikon mukaan aiheittain. Ongelmia tuotti kuitenkin moninkertaiset palautukset sekä opiskelijoille annetut bumerangit, joiden palautukset piti osata käsitellä muista eroavasti, oikealle tarkistajalle suunnaten. Myös assistenttien työmäärien ja -vauhdin valvontaan kaivattiin apukeinoja. Toteutettu ratkaisu pysyi opiskelijoiden kannalta ennallaan; harjoitustyöt palautetaan edelleenkin sähköpostitse työaiheen mukaisilla otsikoilla varustettuna. Myös normaaleista määräajoista poikkeavat palautukset pystytään käsittelemään opiskelijan kannalta samalla tavalla, opettajan määrittelemien henkilökohtaisten määräaikojen avulla. Tarkistusten helpottamiseksi töiden tallennushierarkia jaettiin aihe- sekä tarkistustilakohtaisiin hakemistoihin, jolloin työn sijainti ja nimi hakemistohierarkiassa ilmaisevat työn aiheen, tarkistusvaiheen, työn tekijän sekä tarkistajan nimen. Tarkistajan nimi liitetään työhön ensimmäisen tarkistukseenoton yhteydessä, jotta mahdolliset bumerangit osataan suunnata oikealle henkilölle tarkistettavaksi. Harjoitustyötä kuvaavaa tiedostoa siirretään hakemistosta toiseen, kunnes se päätyy tilaan hyväksytty/hylätty. Jotta hakemistojen sisällöt pysyisivät laillisina, töiden palautusta ja assistenttien toimintoja varten on luotu ohjelmat, jotka toimintoja suorittaessaan samalla valvovat niiden laillisuutta. Lisäksi tarkistustilanteen valvontaan on toteutettu CGI-skriptejä, joiden avulla tarkistusten etenemistä voi seurata WWW-selaimen avulla. Järjestelmä koostuu useista eri tarkoitukseen kirjoitetuista ohjelmista, jotka käsittelevät yhteisesti määriteltyä hakemistorakennetta. Hakemistorakenne kuvataan luvussa 2. Luku 3 esittelee käytetyt harjoitustyötiedostojen nimeämisperiaatteet, ja luvuissa 4-9 esitellään käytettävät ohjelmat: palautus.py subok.py co.py ci.py laajarek.py seuranta.py assarit.py assaritiedot.py Palautettujen harjoitustöiden tallettaminen. taan $HOME/.procmailrc:sta. Harjoitustyöpalautuksen henkilökohtaisen deadlinen tarkistus. taan $HOME/.procmailrc:sta. Harjoitustyön tarkistukseen ottaminen. Assistenteille. taan komentoriviltä. Tarkistustuloksen kirjaaminen. Assistenteille. taan komentoriviltä. Harjoitustyöhön rekisteröityminen. Opiskelijoille. taan WWW-lomakkeelta. Harjoitustyötarkistusten/rekisteröintien seuranta. Opettajalle. taan WWW-lomakkeelta. Assistenttien työtehon seuranta. Opettajalle. taan WWW-lomakkeelta. Yksittäisen assistentin työskentelytietojen haku. Opettajalle. taan WWW-lomakkeelta. Tämän dokumentin tarkoituksena on toimia lähinnä ohjeena järjestelmää käyttäville ja asentaville henkilöille. Tarkempia tietoja suunnittelusta ja toteutuksesta saa osoitteesta kirsti@cs.tut.fi. 1
2 Hakemistorakenne htyot_s97-k98 vaihe1 vaihe2 vaihe3 vaihe4 pass.txt closed.txt backup tilasto monte_carlo caesar reppu tilasto monte_carlo caesar reppu rekisteroidyt palautetut bumerangit1 bumerangit2 hyvaksytyt hylatyt Hakemistorakenne määritellään tiedostossa definitions.py. Kantahakemiston alle määritellään käytettävät harjoitustyöt (tai saman työn eri vaiheet), joiden alta löytyy työaihekohtaiset hakemistot. Jokainen työaihehakemisto jaetaan eri tarkistusvaiheita kuvaaviin hakemistoihin, joiden alle opiskelijoiden työt sijoitetaan. Hakemistorakenne määritellään tiedostossa definitions.py. Tässä dokumentissa käytetään esimerkkinä Laajan Ohjelmoinnin syksyn 1997 asetuksia: Hakemisto, jonka alle rakenne tehdään BASEDIR = '/home/laaja/htyot_s97-k98/' Harjoitustöiden tunnisteet sekä selväkieliset nimet työvaiheittain. Työhakemistojen oikeudet esim. chmod 750. ASSIGNMENTS_1 = {} ASSIGNMENTS_2 = { 'tilasto': 'Tilastonikkari', 'monte_carlo': 'Monte Carlo', 'caesar': 'Caesar-salaus', 'reppu': 'Reppu-probleema' } ASSIGNMENTS_3 = {} ASSIGNMENTS_4 = {} Harjoitustyövaiheet ja niiden harjoitustyöt. Vaihehakemistojen oikeudet esim. chmod 750. PHASES = { 'vaihe1': ASSIGNMENTS_1, 'vaihe2': ASSIGNMENTS_2, 2
'vaihe3': ASSIGNMENTS_3, 'vaihe4': ASSIGNMENTS_4 } Hakemistot, jotka löytyvät kunkin harjoitustyön alta REGDIR = '/rekisteroidyt/' chmod 750 WORKDIR = '/palautetut/' chmod 770 BUM1DIR = '/bumerangit1/' chmod 770 BUM2DIR = '/bumerangit2/' chmod 770 OKDIR = '/hyvaksytyt/' chmod 770 FAILDIR = '/hylatyt/' chmod 770 Tiedosto, joka sisältää vaiheen suljettujen harjoitustöiden tunnisteet. Sijaitsee työvaihehakemistossa, samalla tasolla kuin työkohtaiset hakemistot. chmod 660. CLOSED = 'closed.txt' Backuphakemisto, joka sisältää alihakemiston jokaista harjoitustyötä kohti. Sijaitsee työvaihehakemistossa, samalla tasolla kuin työkohtaiset hakemistot. chmod 550. Alihakemistoilla chmod 750. BACKUPDIR = 'backup/' On huomattava, että hakemistorakenteessa käytettävät nimet määräytyvät täysin tiedoston definitions.py perusteella. Vaihekohtaisen hakemistonimen muoto vaihe[0-9] ei ole pakollinen muilta osin kuin sisältämänsä numeron perusteella, joka päättää nimen. Hakemiston nimi voi olla myös pelkkä numero, tai toisella merkkijonolla alkava nimi. Muiden järjestelmään liittyvien skriptien kutsuissa kutsuparametrien muoto muuttuu vastaavasti. Palautusautomaatin yhteydessä numeroa edeltävään merkkijonoon hakemiston nimessä viitataan nimellä $PREFIX. 3 Harjoitustyötiedostojen nimeämiskäytäntö Rekisteröintiautomaatin luomat tiedostot ovat muotoa <opiskelija> ja sijaitsevat harjoitustöiden hakemistossa REGDIR. Opiskelijan tunnisteena käytetään opiskelijanumeroa Palautusautomaatin luomat tiedostot tulevat hakemistoihin WORKDIR, BUM1DIR tai BUM2DIR. Hakemistoon WORKDIR (ensimmäiset palautukset) sijoitetut työt ovat muotoa <opiskelija>.<id>, jossa <id> erottaa saman opiskelijanumeron omaavat tiedostot toisistaan. Bumerangihakemistoihin palautetut työt ovat muotoa <assari>.<opiskelija>.<id>, missä <assari> on työtä tarkistaneen assistentin käyttäjätunnus. Co.py ja ci.py muuttavat tiedostojen nimiä siten, että assistentin otettua co.py:a käyttäen tiedosto tarkistettavaksi, jää hakemistoon jäljelle tyhjä tiedosto nimeltä <assari>.<opiskelija>. Kun assistentti ilmoittaa tarkistuksensa tuloksen ci.py:a käyttäen, siirretään tyhjä tiedosto <assari>.<opiskelijanumero> haluttuun hakemistoon (OKDIR, FAILDIR, BUM1DIR, BUM2DIR ). Normaalioloissa opiskelijan numero on yhden työvaiheen alla enintään kahdessa kohtaa: hakemistossa REGDIR sekä työn tilaa ilmaisevassa hakemistossa. Mikäli sama numero löytyy useammasta paikasta, on kyseessä useampikertainen palautus, tai jokin muu toimintavirhe. Tällöin skriptit kieltäytyvät normaalista toiminnasta ja tulostavat virheilmoituksessaan löydettyjen tiedostojen nimet. Asia on selvitettävä käsin siten, että vain yksi opiskelijanumeron sisältävä palautus jää jäljelle. 3
4 Palautusautomaatti Kurssille 81021 Laaja ohjelmointi toteutettu harjoitustöiden vastaanottoautomaatti, joka automatisoi sähköpostilla palautettavien harjoitustöiden talletuksen. Harjoitustyön palauttaminen Harjoitustyö palautetaan sähköpostitse osoitteeseen laaja@cs.tut.fi. Palautettavan työn Subject-kentän tulee olla muotoa <työvaihe>:<työaihe>:<opiskelija>. <työvaihe> Harjoitustyövaihe, vaihtoehdot TYO1, TYO2, TYO3, TYO4 <työaihe> Palautetun harjoitustyön aihe, kuuluu joukkoon PHASES[tyovaihe].keys( ) <opiskelija> Palautuksen tekevän opiskelijan opiskelijanumero Käytettävät hakemistot ja tiedostot $HOME/.procmail/ procmail.log procmailin lokitiedosto procmail.backup kopio kaikista saaduista maileista (paitsi ylipitkistä) liian_lyhyt vastaanotettu liian_pitkä ei_rekisteröitynyt ei_harjoitustyö palautus_myohassa kiinni opiskelijoille lähetettäviä vastausviestejä $HOME/tmp hakemisto, johon tehdään tilapäistiedostoja $HOME/bin/palautus.py palautusten talletuksesta huolehtiva skripti $HOME/bin/subok.py henkilökohtaisen deadlinen tarkistava skripti $EXDIR/$PREFIX[1-4]/pass.txt tiedosto, johon on kirjattu opiskelijat henkilökohtaisine palautusmääräaikoineen $EXDIR/$PREFIX[1-4]/backup hakemisto, johon kopiot laillisista harjoitustyöpalautuksista talletetaan Harjoitustyöpalautuksen käsittely Sähköpostipalautukset käsitellään tiedostossa $HOME/.procmailrc tehtyjen määritysten mukaisesti. Kaikista saapuvista maileista otetaan varmuuskopio, jonka jälkeen tarkistetaan seuraavat asiat: 1. Otsikon formaatti. Virheellisellä otsikolla saapuneet mailit palautetaan lähettäjälle ohjeiden kera ($HOME/.procmail/ei_harjoitustyo). 2. Pituus. Liian lyhyt (<2000 tavua ) tai liian pitkä (>100000 tavua) maili palautetaan lähettäjälle sopivan viestin kera ($HOME/.procmail/liian_lyhyt tai $HOME/.procmail/liian_pitka). 3. Palautusaika. Saapuvan viestin palautusaika otetaan käyttöjärjestelmältä, ja sitä verrataan opettajan asettamiin harjoitustöiden aikarajoihin. Palautusajan ohittanut työ saa vastauksenaan viestin $HOME/.procmail/palautus_myohassa. Palautusajan ulkopuolella palautuksia otetaan vastaan vain seuraavissa tilanteissa: i. Opiskelijalta löytyy bumerangi kyseisestä harjoitustyöstä. ii. Opiskelijan opiskelijanumero on erikseen määritelty kyseisen työvaiheen aikarajatiedostossa, ja annettua määräaikaa ei ole vielä ohitettu. Aikarajatiedoston sijainti määritellään tiedostossa $HOME/.procmailrc muuttujalla $PASSFILE 4. Opettajan asettamia muut tarkistukset, esimerkiksi suoritettu rekisteröinti kyseiseen työaiheeseen. 4
Laillisesti palautettu työ annetaan syötteenä skriptille $HOME/bin/palautus.py, joka saa argumentteinaan työvaiheen, -aiheen ja opiskelijanumeron. Skriptin onnistuneen suorituksen jälkeen lähettäjälle lähetetään kuittaus $HOME/.procmail/vastaanotettu. Mikäli skriptin suoritus ei pääty onnistuneesti, lähetetään opiskelijalle viesti, joka ilmaisee palautuksen epäonnistumisen. Procmailrc on kirjoitettu siten, että muuttujien arvot oikein asettamalla sama tiedosto toimii koko kurssin ajan muita muutoksia tarvitsematta. Esimerkkitiedosto löytyy osoitteesta /home/laaja/.procmail/ procmailrc.gen, jota muuttamalla saadaan kurssikohtaisesti sopiva procmailrc. Ote tiedoston /home/laaja/.procmail/procmailrc.gen konfiguraatio-osasta: seuraavien muuttujien arvoja on mahdollisesti muutettava EXDIR = $HOME/htyot_s97-k98 SAVESCRIPT = $HOME/bin/palautus.py palautuksen talletusskripti SUBCHECK = $HOME/bin/subok.py special deadlinen tarkistus PYTHONLOCK = $HOME/tmp/python.lck PREFIX = vaihe vaihenumeron edessä skriptien kutsuissa (ja hakemistonimissä) PASSFILE = pass.txt tiedosto erityisdeadlineille Palautusvaiheiden tärkeät päivämäärät, formaattina vvvvkkpphh Vaiheiden määrä on vapaasti valittavissa, lisää/vähennä muuttujia tarpeen mukaan. START1 = 1998030600 ensimmäisen vaiheen alku CLOSE1 = 1998040600 -"- deadline END1 = 1998053100 -"- sulku START2 = 1998030600 toinen vaihe... CLOSE2 = 1998040600 END2 = 1998053100 muuttujien arvojen asetuksen loppu Seuraavat nimet on korvattava kurssiin liittyvillä arvoilla WORKMAX palautettavien harjoitustöiden lukumäärä MAILLOOP kurssitunnuksen sähköpostiosoite (esim. laaja@cs.tut.fi) EXAMPLE1 opiskelijoiden esimerkeissä käytetty merkkijono, joka ei saisi ilmetä palautusmailin otsikossa. Esim. Laajassa Ohjelmoinnissa Semin opiskelijanumero. Poikkeusdeadlinet määritellään vaihekohtaisesti tiedostoon $PASSFILE, omille riveilleen, formaatin tulee noudattaa seuraavaa: <opiskelijanumero>:<pvm>:<klo> Esimerkkimääritys Keuhkoputkentulehduksen vuoksi myönnetty viikon lisäaika opiskelijalle 85067 P.U.U. Silmä 85067:1998.04.20:00.00.00 5
4.1 Palautus.py Laajan ohjelmoinnin harjoitustyöpalautuksen talletus. Tallettaa stdin:stä luetun palautuksen harjoitustyöhakemistoon, sekä kopion backup-hakemistoon. $HOME/bin/palautus.py vaihe[1-4] numero tyoaihe Argumentit vaihe[1-4] Haluttu työvaihe. Mahdolliset arvot listassa PHASES.keys( ). numero Opiskelijanumero, jonka työ palautetaan. tyoaihe Palautetun harjoitustyön aihe. Opiskelijan palautus talletetaan vaiheen BACKUPDIR-hakemistoon nimellä <opiskelija>.<id>, jossa <id> on opiskelijan aiempien BACKUPDIR-hakemistossa olevien tiedostojen määrä. Tämän jälkeen etsitään opiskelijanumeron sisältävää tiedostoa vaiheen alta hakemistoista WORKDIR, BUM1DIR ja BUM2DIR. Mikäli löytynyt tiedosto on muotoa (<assari>.)<opiskelija>, se on tyhjä tunnustiedosto, joka poistetaan ja palautus talletetaan hakemistoon nimellä (<assari>.)<opiskelija>.<id>, missä <id>=0. Mikäli taas hakemistosta löytyy jo <id>-osan sisältäv(i)ä tiedostoja, palautus talletetaan muista palautuksista eroavalla <id>:llä. Virhetilanteet Mikäli skriptin suorituksessa tulee virhetilanteita, niistä lähetetään mailia tiedostossa definitions.py määriteltyyn osoitteeseen ERRORADDRESS. Virheilmoituksessa kerrotaan ongelman aiheuttaja ja opiskelijanumero, jonka kohdalla ongelma ilmeni. Procmailin suorituksessa ilmenneet ongelmat näkyvät lokitiedostosta. Kaikki saapuneet alle 100000 tavun mittaiset mailit löytyvät jälkeenpäin procmail.backup:sta. HUOM! Opiskelijan palautus sallittuna palautusaikana on aina sallittua (mahdollisen rekisteröinnin tarkistuksen puitteissa). Palautuksia voi siis periaatteessa tulla, vaikka työ on jo tarkistettavana, tai vaikkapa hyväksytty. Co.py ja ci.py havaitsevat tilanteen myöhemmin, mikäli niitä yritetään kyseisellä opiskelijanumerolla käyttää. Palautettu työ on aina muotoa (<assari>.)<opiskelija>.<id>, kun taas tarkistettavana oleva tai tarkistettu työ on muotoa <assari>.<opiskelija>. 6
4.2 Subok.py Laajan ohjelmoinnin harjoitustyöpalautuksen deadlinen tarkistus. Tarkistaa annetusta tiedostosta annetulle opiskelijanumerolle merkityn aikarajan ohituksen. $HOME/bin/subok.py numero tiedosto Argumentit numero tiedosto Opiskelijanumero, jonka aikarajaa tarkistetaan. Aikarajat sisältävä tiedosto. Käytettävä formaatti kuvataan tarkemmin luvun neljä alussa, alakohdassa Harjoitustyöpalautuksen käsittely. Etsitään argumenttina annetusta tiedostosta ensimmäinen annetulla opiskelijanumerolla alkava rivi, jonka formaatti on <opiskelija>:vvvv.kk.pp:hh.mm.ss. Verrataan käyttöjärjestelmältä saatua kellonaikaa löydettyyn aikaan. Mikäli opiskelijaa ei löydy tai opiskelijan aikaraja on ohitettu, lopetetaan ohjelman suoritus virhestatuksella. Virhetilanteet Mikäli skriptin suorituksessa tulee virhetilanteita, niistä lähetetään mailia tiedostossa definitions.py määriteltyyn osoitteeseen ERRORADDRESS. Tämänhetkisessä toteutuksessa virhetilanteiksi luetaan ainoastaan virheellisestä skriptin käynnistyksestä johtuva toiminnan keskeytys. 7
5 Co.py Laajan ohjelmoinnin harjoitustöiden tarkistukseen ottaminen. Siirtää opiskelijan palautuksen komentoriviargumenttina annettuun hakemistoon assistentin käsiteltäväksi. $HOME/bin/co.py vaihe[1-4] numero kohde Argumentit vaihe[1-4] Haluttu työvaihe. Mahdolliset arvot listassa PHASES.keys( ). numero Opiskelijanumero, jonka työ halutaan ottaa tarkistettavaksi. kohde Hakemisto, johon työ halutaan siirtää. Esimerkkikutsu $HOME/bin/co.py vaihe1 123456 ~kirsti/laaja/htyot Annetun opiskelijanumeron sisältävää tiedostoa etsitään kaikista työhakemistoista annetun vaiheen alta. Tiedostojen on oltava muotoa <assari>.<opiskelija>.<id>, missä <assari>-osa ei ole pakollinen, mutta <id> vaaditaan ehdottomasti ( se ilmaisee työn olevan palautus, eikä tyhjä tunnustiedosto). Kun tiedosto on löytynyt, se siirretään annettuun kohdehakemistoon. Alkuperäiseen hakemistoon jätetään tyhjä tiedosto muotoa <assari>.<opiskelija> Virheilmoitukset usage: co.py vaihe[1-4] numero kohde Virheelliset komentoriviargumentit. <kohde> is not a directory Annettua hakemistoa ei löydy Incorrect login: <ei_oma_loginname>.<opiskelija>.<id> Löydettiin tiedosto annetulla opiskelijanumerolla, mutta sen nimessä on toisen assistentin käyttäjätunnus. Incorrect filename: <jokin_virheellinen_tiedostonimi> (<assari>.)<opiskelija>.<id> expected Löydettiin virheellisen muotoinen tiedostonimi, joka sisälsi halutun opiskelijanumeron. Filename containing <opiskelija> not found Ei löydy halutun opiskelijan tiedostoa. Too many occurrencies of <opiskelija> in filenames: <listausta tiedostoista>... Sama opiskelijanumero esiintyy useammassa eri tiedoston nimessä. <kohde/harjoitustyö> already exists Kohdehakemistossa on jo olemassa kyseisen niminen tiedosto. Lisäksi saattaa tulla systeemitoimintojen epäonnistumisesta kertova virheilmoitus, jollaisen ilmetessä on syytä ottaa yhteyttä Kirstiin (kirsti@cs.tut.fi). HUOM! Skripti ei toimi, mikäli opiskelijalla on useampia palautuksia. Näistä on tällöin valittava yksi, joka jätetään jäljelle kun muut poistetaan (käsin). Tämän jälkeen voidaan käyttää co.py:a. 8
6 Ci.py Laajan ohjelmoinnin harjoitustöiden tarkistustulosten merkintä. Merkitään tarkistettu työ hyväksytyksi, hylätyksi tai bumerangiksi. $HOME/bin/ci.py vaihe[1-4] numero [ok fail bum1 bum2] Argumentit vaihe[1-4] Haluttu työvaihe. Mahdolliset arvot listassa PHASES.keys( ). numero Opiskelijanumero, jonka työn tarkistustulos ilmoitetaan. [ok fail bum1 bum2] Tarkistuksen tulos. Esimerkkikutsu ~$HOME/bin/ci.py vaihe1 123456 bum1 Annetun opiskelijanumeron sisältävää tiedostoa etsitään kaikista työhakemistoista annetun vaiheen alta. Vain muotoa <assari>.<opiskelija> olevat tiedostot hyväksytään. Kun kyseinen (tyhjä) tiedosto on löytynyt, se siirretään annetun argumentin mukaiseen hakemistoon. Virheilmoitukset usage: ci.py vaihe[1-4] numero [ok fail bum1 bum2] Virheelliset komentoriviargumentit. Incorrect login: <ei_oma_loginname>.<opiskelijanumero> Löydettiin tiedosto annetulla opiskelijanumerolla, mutta sen nimessä on toisen assistentin käyttäjätunnus. Incorrect filename: <jokin_virheellinen_tiedostonimi> (<assari>.)<numero>.<id> expected Löydettiin virheellisen muotoinen tiedostonimi, joka sisälsi halutun opiskelijanumeron. Filename <assari>.<opiskelija> not found Ei löydy tiedostoa, joka osoittaisi assistentin ottaneen työtä tarkistettavakseen. Too many occurrencies of <assari>.<opiskelija> in filenames: <listausta tiedostoista>... <assari>.<opiskelija> esiintyy useammassa eri tiedoston nimessä. <määränpää/assari.opnro> already exists Samanniminen tunnustiedosto on jo olemassa. Lisäksi saattaa tulla systeemitoimintojen epäonnistumisesta kertova virheilmoitus, jollaisen ilmetessä on syytä ottaa yhteyttä Kirstiin (kirsti@cs.tut.fi). HUOM! Skripti ei toimi, mikäli oikean nimistä tiedostoa ei löydy harjoitustyöhakemistoista. Kyseessä voi tällöin olla virheellisesti suoritettu tarkistukseen otto tai opiskelijan tekemä uusintapalautus työn tarkistukseenoton jälkeen. 9
7 Laajarek.py Laajan ohjelmoinnin harjoitustöihin rekisteröityminen. Skriptiä kutsutaan WWW-lomakkeelta, jonka metodiksi merkitään http://www.cs.tut.fi/cgi-bin/run/~laaja/laajarek.py Parametrit Skriptiä kutsuttaessa sille tulee välittää seuraavat parametrit vaihenro Haluttu työvaihe. Mahdolliset arvot listassa PHASES.keys( ). valinta Harjoitustyön tunniste. Mahdolliset arvot listassa PHASES(vaihenro).keys( ) opnro Opiskelijanumero. opnimi Opiskelijan nimi. Esimerkkikutsu laajarek.py?vaihenro=vaihe1&valinta=tilasto&opnro=140400&opnimi=ahto%20simakuutio WWW-lomake generoi kutsun automaattisesti valittujen parametrien ja lomakkeen metodin perusteella. Opiskelijat ilmoittautuvat haluamaansa harjoitustyöhön WWW-lomakkeelta. Opiskelijan ilmoittautuessa työhön luodaan tiedosto <opiskelijanumero> halutun työaiheen REGDIR-hakemistoon. Luotu tiedosto sisältää ilmoittautuneen opiskelijan nimen. Ennen ilmoittautumisen kirjausta tarkistetaan, saako haluttuun työhön enää ilmoittautua (löytyykö työn tunniste tiedostosta CLOSED) ja onko opiskelijalla jo aiempia ilmoittautumisia saman työvaiheen työhön. Skripti huolehtii siitä, että yhdellä opiskelijalla voi olla vain yksi ilmoittautuminen/vaihe. Mikäli opiskelija haluaa ilmoittautua uuteen työhön, vanha ilmoittautuminen poistetaan. Ilmoittautumisen onnistumisesta tulostetaan ilmoitus opiskelijalle. Virhetilanteet Näytölle tulostetaan virheilmoitus seuraavissa tilanteissa: - virheellinen arvo parametrilla vaihenro - virheellinen arvo parametrilla valinta - puutteellinen rekisteröintilomakkeen täyttö - virheellinen opiskelijanumero (opiskelijanumeron on oltava 5-6 numeron sarja) - yritettiin rekisteröintiä työhön, joka on jo suljettu - yritettiin rekisteröintiä joka oli jo olemassa Lisäksi ilmoitetaan, mikäli opiskelijalla oli aiempi rekisteröinti, joka poistettiin uutta tehtäessä Lähetetään sähköpostia osoitteeseen ERRORADDRESS, mikäli skriptin suorituksessa tapahtuu toimintavirhe. Virhe todennäköisesti johtuu tällöin virheellisestä hakemistorakenteesta tai väärin asetetuista suojauksista. Virheilmoituksessa kerrotaan ongelmakohta, sekä opiskelijanumero, jonka rekisteröitymisessä ongelma ilmeni. 10
8 Seuranta.py Laajan ohjelmoinnin harjoitustyötilanteen tarkkailu. Tulostaa tiedot palautetuista, bumerangeista, hyväksytyistä ja hylätyistä harjoitustöistä. Jos skriptiä kutsutaan WWW-lomakkeelta, metodiksi tulee merkitä http://www.cs.tut.fi/cgi-bin/run/~laaja/seuranta.py voidaan tietenkin kirjoittaa myös suoraan linkiksi. Parametrit Skriptiä kutsuttaessa sille tulee välittää seuraavat parametrit vaihenro Haluttu työvaihe. Mahdolliset arvot listassa PHASES.keys( ). valinta Harjoitustyön tunniste. Mahdolliset arvot listassa PHASES(vaihenro).keys( ). Mikäli halutaan tiedot kaikista vaiheen harjoitustöistä, parametrin arvoksi annetaan kaikki. tiedot Ei ole pakollinen. Mikäli tätä parametria ei anneta tulostetaan harjoitustyöstä rekisteröintiä lukuunottamatta kaikki tiedot. Parametrin arvolla kaikki tulostetaan lisäksi rekisteritiedot, kun taas arvolla rekisteri tulostetaan pelkät rekisteröitymistiedot. Esimerkkikutsu seuranta.py?vaihenro=vaihe1&valinta=tilasto&tiedot=rekisteri Skripti tulostaa sille välitettyjen parametrien mukaiset tiedot. Vaihtoehtoina on siis: - Tiedot nimettyyn harjoitustyöhön rekisteröityneistä opiskelijoista - Tiedot kaikkiin annetun vaiheen harjoitustöihin rekisteröityneistä opiskelijoista - Palautettujen, bumerangien, hyväksyttyjen ja hylättyjen töiden määrät nimetystä harjoitustyöstä - Palautetut, bumerangit, hyväksytyt ja hylätyt kaikista vaiheen harjoitustöistä, lopuksi yhteenveto Tiedot kootaan listaamalla työhakemistojen tiedostoja ja erottamalla niiden nimissä esiintyvät opiskelijanumerot. Tarkistusta odottavat bumerangipalautukset erotetaan korjattavaksi annetuista lihavoidulla kirjaisintyypillä. Virhetilanteet Näytölle tulostetaan virheilmoitus seuraavissa tilanteissa: - virheellinen arvo parametrilla vaihenro - virheellinen arvo parametrilla valinta - puutteelliset parametrit Lähetetään sähköpostia osoitteeseen ERRORADDRESS, mikäli skriptin suorituksessa tapahtuu toimintavirhe. Virhe todennäköisesti johtuu tällöin virheellisestä hakemistorakenteesta tai väärin asetetuista suojauksista. 11
9 Assarit.py Laajan ohjelmoinnin harjoitustöiden tarkistuksen tarkkailu. Assistenttien työmäärien kerääminen. Jos skriptiä kutsutaan WWW-lomakkeelta, metodiksi tulee merkitä http://www.cs.tut.fi/cgi-bin/run/~laaja/assarit.py voidaan tietenkin kirjoittaa myös suoraan linkiksi. Parametrit Skriptiä kutsuttaessa sille tulee välittää seuraavat parametrit vaihenro Haluttu työvaihe. Mahdolliset arvot listassa PHASES.keys( ). Esimerkkikutsu assarit.py?vaihenro=vaihe1 Skripti tulostaa annetun työvaiheen tarkistetuiksi kirjatut työt assistenteittain taulukoituna. Assistenttikohtaisilla linkeilla voidaan suorittaa kutsu skriptille assaritiedot.py, joka tulostaa tarkemmat assistenttikohtaiset tiedot. Virhetilanteet Näytölle tulostetaan virheilmoitus seuraavissa tilanteissa: - virheellinen arvo parametrilla vaihenro - puutteelliset parametrit Lähetetään sähköpostia osoitteeseen ERRORADDRESS, mikäli skriptin suorituksessa tapahtuu toimintavirhe. Virhe todennäköisesti johtuu tällöin virheellisestä hakemistorakenteesta tai väärin asetetuista suojauksista. 12
10 Assaritiedot.py Assistenttikohtaisten tarkistustietojen keräys ja näytölle tulostus. Jos skriptiä kutsutaan WWW-lomakkeelta, metodiksi tulee merkitä http://www.cs.tut.fi/cgi-bin/run/~laaja/assarintiedot.py voidaan tietenkin kirjoittaa myös suoraan linkiksi. Parametrit Skriptiä kutsuttaessa sille tulee välittää seuraavat parametrit vaihenro Haluttu työvaihe. Mahdolliset arvot listassa PHASES.keys( ). person Assistentti. Mahdolliset arvot listassa TUTORS. Esimerkkikutsu assaritiedot.py?vaihenro=vaihe1&person=rike Skripti tulostaa nimetyn assistentin tarkistamat työvaiheen työt kaikista harjoitustyöaiheista. Lopuksi taulukkomuotoinen yhteenveto työmääristä. Tiedot kootaan listaamalla työhakemistojen tiedostoja ja erottamalla niiden nimissä esiintyvät opiskelijanumerot ja assistenttien tunnukset. Tarkistusta odottavat bumerangipalautukset erotetaan korjattavaksi annetuista lihavoidulla kirjasintyypillä. Virhetilanteet Näytölle tulostetaan virheilmoitus seuraavissa tilanteissa: - virheellinen arvo parametrilla vaihenro - virheellinen arvo parametrilla person - puutteelliset parametrit Lähetetään sähköpostia osoitteeseen ERRORADDRESS, mikäli skriptin suorituksessa tapahtuu toimintavirhe. Virhe todennäköisesti johtuu tällöin virheellisestä hakemistorakenteesta tai väärin asetetuista suojauksista. 13