Behind the scenes: Verticas Dev Xmas 2019-julekalender

I december måned afholdte vi en nørdet julekalenderkonkurrence, hvor målet var at finde julemanden og hans rensdyr og dermed redde julen. Nu afslører vi, hvordan julekalenderen blev bygget.

Konkurrencen, lågerne og vinderne

Hvis december måned var så fyldt med endeløse julefrokoster og gaveindkøb, at du ikke nåede at deltage eller følge med undervejs – eller hvis du bare gerne vil have genopfrisket, hvad der egentlig skete med den julemand – så kan du starte med at læse mere om selve konkurrencen her:

Det tekniske setup

Løsningen blev bygget op omkring følgende hoveddele:

  1. Microsoft Azure Functions – til at eksponere alle RESTful API’er i julekalenderen
  2. Microsoft Azure Cosmos Db – som database til at gemme GPS-koordinater på julemandens rensdyr
  3. Elasticsearch (hostet i Elastic Cloud) – som database for deltagere i konkurrencen, logging af hændelser (og evt. fejl) samt registrering af forsøg
  4. Kibana (også hostet i Elastic Cloud) – til visualisering af hele konkurrencen

Kildekoden bag

Du kan finde kildekoden bag julekalenderen her https://github.com/vertica-as/dev-xmas-2019 – som er implementeret som et .NET Core 2.1 Function App projekt.

Der er lagt en del energi i at give deltagerne så gode fejlbeskeder som muligt – det kan man bl.a. se, hvis man kigger på klassen “RequestExtensions.cs”, hvor nedenstående udsnit bl.a. viser, at jeg selv har valgt at læse den indgående besked (request.Body) og deserialisere denne fra JSON og til et .NET objekt.

Et andet eksempel er validering af den indgående forespørgsel (request), hvor der er gjort meget ud af at tage højde for “ting der kan gå galt”, og så rapportere disse scenarier tilbage til deltageren med en så god beskrivelse som muligt. Det viser nedenstående eksempel:

API’et returnerede desuden følgende statuskoder for at skabe en tydelig kontrakt mellem klienten (deltageren) og serveren (API’et/mig):

Jeg valgte at anvende Serilog som framework til logging med en sink til Elasticsearch – hvilket gav mig et komplet overblik over al interaktion med API’et. I løbet af konkurrencen blev der logget omkring 24.000 hændelser. Af disse blev der i alt logget 12 hændelser som skyldtes den samme fejl i API’et – og som selvfølgelig blev løst hurtigt. Herunder kan du se, hvordan Serilog var konfigureret sammen med Azure Functions:

Ovenstående viser også, hvordan man kan differentiere sin opsætning afhængigt af miljø, hvor jeg valgte kun at logge på produktionsmiljøet.

Screendumps fra maskinrummet

Jeg har samlet lidt skærmbilleder fra konkurrencen – når det hele jo foregik virtuelt, er der ikke så meget at komme efter, men du skal alligevel ikke snydes for lidt indsigt i den del også.

kibana

Herover, godt zoomet ud, ses mit Dashboard i Kibana, med let adgang til en lang række nøgletal for konkurrencen. Her kunne jeg hele tiden holde øje med konkurrencen, bl.a. hvor langt nogle af deltagerne skød forbi julemandens position i låge 2, hvor mange forsøg der var brugt i alt pr. deltager, samt helt generelt al interaktion og aktivitet i konkurrencen.

blobcontainer

Herover vises det, hvor XML dokumenterne, der indeholder børnenes ønskelister, bliver gemt – nemlig i en Azure Blobstorage container. I låge 4 skulle deltagerne downloade ét af disse XML-dokumenter indeholdende ønskelisten samt implementere logikken, der sikrede, at børnene fik de gaver, de havde ønsket sig.

Del dine idéer

I alt deltog 109 udviklere i julekalenderkonkurrencen, og i alt brugte de 2.223 forsøg på at redde julen. Efter konkurrencen var afsluttet, kårede vi en række vindere – og flere af dem var så søde at komme forbi os på kontoret i Studsgade for at hente deres præmier. Hvis du vil lure på, hvem der vandt, kan du gøre det her

Vi er allerede gået i tænkeboks i forhold til næste gang, vi skal lave julekalender – eller andre konkurrencer for dig, der er udvikler. Du må derfor meget gerne dele dine kommentarer, ris/ros eller måske endda forslag til alt fra teknisk setup til storyline. Det kan du gøre herunder i kommentarfeltet, eller ved at sende en mail til mig på bhk@vertica.dk.  

 

 

Skriv et svar