NRK har en enorm katalog av TV-innhold på nett. Hvordan passer vi på at programmene til enhver tid er tilgjengelige?
Den nyeste episoden av tv-serien Heimebane må gjennom en lang løype av systemer før den til slutt publiseres på NRK TV. Mye kan gå galt på veien, men denne serien sees av så mange at NRK Publikumsservice alltid får lynkjappe tilbakemeldinger om det skulle være tilfellet.
Det gjør at vi, som heter Bifrost, kan finne feilen og fikse den.
I skrivende stund skal NRK TV feilfritt vise frem over 140.000 programmer. Det gir oss et problem: Det er verken effektivt eller forsvarlig å be mennesker se gjennom alle programmene i NRK TV.
Her trenger vi hjelp av datamaskiner.
Bifrost
Bifrost er i norrøn mytologi «broen mellom gudenes og menneskenes verden», men det er også navnet på et spillselskap, et trosfellesskap og den lille gruppa vår som overvåker NRKs nettjenester.
Vi sitter rett rundt hjørnet fra NRKbeta-redaksjonen, og passer på at blant annet NRK.no, NRK TV og NRK Radio fungerer.
Med årene har NRK TVs katalog økt betraktelig, og vi har blant annet tilgjengeliggjort innhold helt tilbake til Filmavisen (forfilm på kino). Med flere programmer ble det et større behov for å overvåke og rette feil.
Clik here to view.

Det løste vi delvis i 2017 med en automatisert «programsjekk», men systemet var skrevet og vedlikeholdt av én utvikler alene. Dette ga oss et «single point of failure» og da han dro på påskefjellet i fjor sluttet programsjekken å virke. Løsningen ble at han måtte sende oss terminal-kommandoer over SMS mellom skiturer og kvikklunsj.
I fjor sommer satte vi i Bifrost i gang med å skrive programsjekken på nytt fra bunnen av i programmeringsspråket Python.
Arbeidet er nå langt på vei kommet i mål, og derfor tenkte vi det kunne være interessant for flere å vite hvordan feilsøkingen egentlig foregår.
Hva er et program?
Et «on demand»-program i NRK TV har en unik program-ID og består grovt sett av video, lydspor og undertekster. For at avspilling skal fungere også når du har lav båndbredde, lager vi fem videofiler fra høy til lav kvalitet.
Det er også en god del metadata som må med. For å gi et bilde har vi lagt ved et utvalg av hva som typisk følger med et program:
- Plakatbilde som vises før avspilling
- Hvor lenge programmet skal være tilgjengelig
- Om programmet skal kunne sees utenfor Norge
- Indekspunkter som lar deg hoppe til et innslag i programmet
- Aldersgrense
- Kategori
- Lengde
Om noe av dette har fått feil verdi eller mangler kan publikum oppleve feil.
Sånn fungerer programsjekken
«Programsjekken» er et testrammeverk som henter ut en liste over de sist publiserte programmene våre, prøver å spille dem av, og sier fra om eventuelle feil og mangler. Den er programmert i Python og består av to moduler som kjører parallellt:
- Fetcher-modulen henter listen over programmer som skal sjekkes
- TV-titteren sjekker om programmene kan avspilles
Hver time henter fetcheren en liste over de 200 sist publiserte programmene på NRK TV – i tillegg spør den én gang i uka etter alle programmer. Den gjør en enkel databasespørring basert på publiseringsdato og henter ut publiseringsstart, program-ID, og første sendedato. Listen med programmer sendes til en indeks i Elasticsearch, som er en søkemotor.
Image may be NSFW.
Clik here to view.
TV-titteren plukker opp listen fetcheren har lagt i Elasticsearch og «ser» på programmene. Med det mener vi at den analyserer og validerer en rekke egenskaper ved hvert program. Den spør blant annet NRK TV via et såkalt REST API om forventet lengde for programmet og sammenligner det med den faktiske lengden på videofilene.
Noen ganger mangler én kvalitet, noen ganger har ikke videoen kommet fram i det hele tatt. Det er også egne filer for undertekst, som sjekkes for overlapp i tidskoder, og om sekvensnumrene er sekvensielle.
Clik here to view.

I dag kjører åtte av disse TV-titterne samtidig – først en «ferskvare-trio» for å sikre at det mest aktuelle innholdet blir sjekket hyppig. Disse ser på de nyeste 200, 500 og 1000 programmene. Det tar gjennomsnittlig fem sekunder å sjekke ett enkelt program, som betyr at de 200 nyeste programmene blir sjekket anslagsvis hvert 15., 40. og 80. minutt.
De fem siste TV-titterne deler hele katalogen mellom seg, og ser gjennom hver sin del parallelt. Dette tar i overkant av et døgn.
Det er kanskje ikke så mange som ser på gamle episoder av «Der ingen skulle tru at nokon kunne bu», men hvis du først får et innfall og blir nysgjerrig på hvordan det gikk med Nils Christian i Gjevsjøen da han tok over gården til faren i 2005 skal vi sørge for at du får vite det.
Clik here to view.

Resultatet av arbeidet til TV-titterne samles i en egen index i Elasticsearch. Derfra har vi laget et dashbord i datavisualiseringstillegget Kibana som vi bruker for å overvåke feilene som dukker opp.
Neste steg er der automatikken stopper i dag. Når dashbordet viser feil åpner vi den detaljerte listen over feil i Kibana. Denne brukes som grunnlag for feilsøking og retting. De enkleste feilene løses typisk via kall til et REST API, men i andre tilfeller må kanskje programmet retranskodes, undertekster fikses eller video eksporteres på nytt.
Clik here to view.

Vi er i gang med å utvide programsjekken til å sjekke flere punkter bakover i løypa, med et endelig mål om å analysere nøyaktig hva som er galt med et program og trykke én knapp for å fikse det. Det vil gjøre at vi fanger opp feil tidligere og at færre feil blir synlige for publikum.
Mange feil må likevel fikses av folk med høy kompetanse på kildesystemene, men programsjekken kan spare dem for flere timer med feilsøking.
Vi er også helt avhengige av det gode samarbeidet med Publikumsservice, som fortløpende sier fra til oss om dere finner feil vi ikke har fanget opp.
Oppdager du selv feil kan du melde fra til Publikumsservice på info@nrk.no. Det blir vi veldig takknemlige for.
Still oss gjerne spørsmål i kommentarfeltet om hvordan vi jobber eller hvordan programsjekken virker i detalj.