Agrégateur de logs
Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 55 sur 56.
Défi
MoyenVous traitez des journaux d’accès. Lisez une seule ligne d’entrée : une liste séparée par des virgules d’entrées level:user:bytes.
Certaines entrées sont incorrectes et doivent être ignorées : toute entrée dont bytes ne peut pas être analysé comme un entier, ou dont le level ne fait pas partie de INFO, WARN, ERROR (sensible à la casse).
Affichez, dans cet ordre :
- Une ligne par niveau apparu au moins une fois, triée selon cet ordre fixe :
ERROR,WARN,INFO. Chaque ligne est de la forme<level>: <count> (<bytes>), oùcountest le nombre d’entrées valides pour ce niveau etbytesest la somme de leurs octets. Top user: <name> (<bytes>): l’utilisateur ayant le plus grand nombre total d’octets parmi toutes les entrées valides. En cas d’égalité, départagez par ordre alphabétique des noms.Skipped: <n>avec le nombre d’entrées malformées.
Pour l’entrée INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, la sortie est :
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2Essayez vous-même
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: analyser chaque entrée, ignorer les mauvaises, accumuler par niveau + par utilisateur ;
// afficher les niveaux dans l'ordre fixe (uniquement si vus), l'utilisateur principal, puis le compte Skipped
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de motsEntraînez-vous par vous-même : Playground Swift