RT-medaljer
Vi har et medaljesystem for RT. Du finner det på https://rt.samfundet.no/medalje.
Generell virkemåte
En cronjobb i /etc/cron.d/medalje på cassarossa kjører hvert n-te minutt skriptet /var/www/samfundet.no/rt/medalje/bin/check_medals.pl. Dette skriptet går gjennom alle (eller oppgitte) registrerte køer og deretter gjennom alle (eller oppgitte) tilknyttede registrerte brukere. Deretter gjennomgås alle medaljer som er aktivert for køen, og tilhørende perl-modul kjøres på alle RT-transaksjoner siden siste sjekkpunkt. Hver perl-modul har to funksjoner, get_points og goal_points, som sammen definerer om brukeren skal få medaljen. I så fall registreres tildelingen av medaljen i databasen. Dette oppdager itkbot, og med mindre brukeren har reservert seg blir tildelingen rapportert på #itk.
Sjekkpunkter
For å unngå at medaljeevalueringen blir for ressurskrevende benyttes et checkpoint-system. Første gang en brukes registreres evalueres alle medaljer for alle transaksjoner gjennomført av personen. Dette kan ta lang tid, ettersom enkelte medaljer kan medføre en fæl kompleksitet. Løsningen på dette er at systemet husker hvor langt den evaluerte historien sist, slik at etter en initiell historisk kjøring blir bare de nyeste transaksjonene evaluert.
Registrere ny bruker
For å motta medaljer må man registreres i systemet. Dette gjøres fra admingrensesnittet. Dersom du allerede har lang fartstid i ITK vil du nok i første omgang skru av IRC-varslinger, slik at ikke #itk spammes ned. Du kan så følge med i oversikten, hvor en oransje poengbar betyr at historien din evalueres. Når baren har blitt blå er skriptet ferdig, og du kan skru på IRC-varslinger igjen.
(Harde) retningslinjer for medaljer
RT-medaljesystemet er laget på en veldig spesifikk måte. Derfor må visse retningslinjer følges.
- All logikk i medaljen skal ligge i databasespørringen.
- Bruk viewene transaction_information og ticket_information. De abstraherer bort mye av det interne RT-maskineriet og gjøre alt mye enklere.
- Spørringen skal være knyttet til én bruker i én kø. Typisk vil man telle opp alle transactions eller tickets knyttet til <bruker> på en bestemt måte og som ligger i <kø>.
- Spørringen skal være knyttet til et bestemt tidspunkt. Dette er fordi check_medals.pl går gjennom historiens transaksjoner og må evaluere dem fra datidens tidspunkt. Altså må alle spørringer bare se på transactions/tickets før <tid>.
- Spørringen skal returnere et tall som representerer antall poeng oppnådd.
- Spørringsresultatet skal ikke avhenge av når den kjøres.
- Spørringen skal være tilstandsløs. Det betyr at dersom den skal telle poeng samlet over tid, må den telle alle poenge i samme spørring. Den kan ikke lagre en teller som inkrementeres hver gang den kjøres.
- Spørringen kjøres én gang per transaksjon i RT, så hold kompleksiteten nede.
- Test alltid spørringen med rt-test@samfundet.no.
- En medalje skal være en oppmuntring til å løse flere RT-saker.
Lage ny medalje
Vi har foreløpig ingen støtte for lokale utviklingsinstanser av RT-medaljer, så man må fort hacke i prod. Det er da lurt å følge en strukturert fremgangsmåte, slik at det ikke blir tull. Dersom du skal benytte deg av eksisterende medaljer og bare endre på poenggrenser, gå rett til punkt (b).
(a) Først lager vi spørringen og wrapper den i en funksjon:
- Begynn i skallet med psql rt4 og set search_path to medalje;.
- Skriv en spørring som oppnår ønsket effekt, og som filtrerer på <bruker>, <kø> og <tid>. Baser deg veldig gjerne på en tidligere medaljespørring i lib/ITK/Medalje/Medaljer.pm.
- Skru av cron-jobben i /etc/cron.d/medalje på cassarossa før neste punkt.
- Skriv en funksjon i lib/ITK/Medalje/Medaljer.pm som tar inn <bruker>, <kø>, <tid> og eventuelt andre parametre og utfører spørringen.
(b) Deretter vil vi klargjøre det spesifikke medaljeobjektet:
- Kopier en tidligere medalje i lib/ITK/Medalje/Medaljer/ og tilpass til din medalje.
- Finn et ikon – last ned en fil, f.eks. png eller svg fra nett, og legg den i static/img/medals.
(c) Nå kan vi prodsette medaljen:
- Sjekk at cron-jobben i /etc/cron.d/medalje er av.
- Besøk admingrensesnittet og registrer medaljen din.
- Koble medaljen til bare køen rt-test.
- Kjør ./check_medals.pl --queue 13 i bin og sjekk at ting fungerer. Kø 13 er rt-test.
- Koble medaljen til køen itk.
- Kjør ./check_medals.pl --queue 4 i bin og sjekk at ting fungerer. Kø 4 er ITK. Sleng på --silentirc hvis du ikke vil skape IRC-varslinger for den initielle historiske kjøringen.
- Skru på cron-jobben i /etc/cron.d/medalje på cassarossa.
Ignorering
Hvis du ikke vil se itkbot sine medaljevarsler, ignorer "fikk en medalje:" fra itkbot.
Lenker: Start
Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2020-10-12 23:33 | Revisjon: 8 (historie, blame) | Totalt: 1911 kB | Rediger