Dans le cadre de mon travail j'ai été amené à devoir faire pour un client une relecture des journaux du serveur proxy fonctionnant sous Squid.
Un des principaux problèmes lorsque des journaux de Squid sont analysés de manière "brute" (entendez par là, simple lecture du fichier texte), c'est le manque total de clarté de l'information aussi bien au niveau de la lecture, que des méthodes possibles pour trier ou rechercher les informations. Nous allons donc faire dans cet article et les prochains le nécessaire pour créer un tableau ordonné et compréhensible de tous.
Nous voyons ici un des extraits d'un des journaux de Squid. La toute première colonne, aux chiffres étranges représente ... la date et l'heure!
Oui oui! Tout à fait! Cet étrange chiffrage correspond au temps! Pour pouvoir comprendre comment traduire cela, nous allons nous attarder un peu sur le système du temps sous Unix / Linux.
Selon Wikipedia : L'heure Posix (aussi appelée POSIX timestamp) est une mesure du temps utilisée principalement dans les systèmes qui respectent la norme POSIX1, d'où son nom. Il s'agit du nombre de secondes écoulées depuis le 1er janvier 1970 00:00:00 UTC jusqu'à l'événement à dater, hors secondes intercalaires. C'est la représentation POSIX du temps.
Par exemple, pour reprendre la toute première ligne et première colonne de la capture d'écran, il s'agit de 1367299578.806 secondes depuis le premier janvier 1970 à minuit.
Les systèmes UNIX interprètent de manière native ce format de date et d'heure, mais en aucun cas les systèmes Microsoft ne le font. Nous devons donc faire une conversion vers ce nouveau type de temps!
Il existe une commande nommée get-date sous Powershell qui permet de renvoyer l'heure et date de l'ordinateur hôte. En enregistrant le résultat de la commande dans une variable, et en observant les méthodes et propriétés disponibles, voici ce que nous trouvons.
Ce qui nous intéresse ici, c'est le "AddSeconds" ... Puisque le fonctionnement de l'heure Posix est le nombre de secondes depuis le 01/01/1970, alors nous allons "simuler" le fonctionnement de Posix.
Nous allons donc créer une variable contenant la date/heure "01/01/1970 00:00:00.00", et dans la foulée, utiliser la méthode Addseconds pour obtenir l'heure format "humain" et le tour est joué!
Hm... ou pas. Powershell nous renvoie une erreur assez claire! Addseconds n'existe pas pour le format [System.String] ... Si nous regardons la capture précédente nous voyons que le type de la variable $Date est System.Datetime alors qu'ici elle est System.String ... Nous allons donc devoir "forcer" Powershell à comprendre que ce que l'on rentre dans $posix est une date, et pas une chaîne de caractère.
Pour ce faire, il suffit de mettre entre crochets le type de variable souhaité, ici "datetime", puis d'utiliser Addseconds.
Félicitations! Vous venez de gérer le temps format Posix depuis Powershell!