prise de note avec journald

Objectif

l’idée est d’utiliser les logs en particulier journald pour sauvegarder de petites notes prises en ligne de commande

Utilisation

  • Lister les messages, valeur par défaut
  • Ajouter un message, -m histoire d’être proche de git :)
  • Classer les messages, par fonctionnalités/familles (todo,url…) -t histoire d’être proche de journald
  • Lister avec journald, donc possibilité d’utiliser la puissance des options : recherche par date, filtre avec grep etc…
  • Par effet de bord, il pourrait aussi servir d’interface « simple » pour envoyer des messages quelconques dans journald
 A noter :
Puisque que l’on écrit dans les logs, il est impossible de modifier, effacer les messages

 ce qui donne en bash comme interface : html :)

while getopts "ht:m:l" flags; do
	case $flags in
		h) usage;exit 0 ;;
		t) ITEMS_IDENTIFIER="${OPTARG}" ;;		
		m) msg="${OPTARG}" ;;
		l) lister=1 ;;
	esac
done

il reste à écrire les fonction de lecture et d’écriture:

Pour la lecture dans journald, un filtre « -t » permet de ne récupérer que les message de notre application, afficher que les 30 derniers jours permet de ne pas polluer le retour. Pour finir, awk permettra une mise en page.

 journalctl -t $ITEMS_IDENTIFIER --since="-30d"

Pour l’écriture, le programme logger sera utilisé. La méthode est dans le man donc rien de très sorcier

	printf "%s\n%s\n%s\n%s" \
		MESSAGE="${msg}"  \
		SYSLOG_IDENTIFIER="$ITEMS_IDENTIFIER" \
		COM="noter" \
		PRIORITY="5" \
	| logger --journald
  • SYSLOG_IDENTIFIER va permettre de classer/filtrer nos messages
  • COM va permettre de retrouver tous nos messages
journalctl  COM=noter
journalctl  -t todo 
journalctl  -t noter

Le code source complet du fichier bash « noter »

#!/usr/bin/env bash
# des notes sauvegardées dans les logs
# journalctl -t noter 

ITEMS_IDENTIFIER='noter'

function lister() {
	journalctl -t $ITEMS_IDENTIFIER --since="-60d" | grep -v "^-" | awk '{ printf "%s %s %s\n\033[1m",$2,$1,$3}  { \
	for (i = 6; i <= 1024; i++)
        if (length($i)>1) printf "%s ",$i;
	} {print "\033[0m\n"}'
}

function ajouter(){
	local msg=$1
	printf "%s\n%s\n%s\n%s" \
		MESSAGE="${msg}"  \
		SYSLOG_IDENTIFIER="$ITEMS_IDENTIFIER" \
		COM="noter" \
		PRIORITY="5" \
	| logger --journald                
}

function erreur() {
	echo -e "\033[41mErreur:\033[0m $1"
}
function usage(){
    echo -e "usage:\nnoter [-m 'message'] [-t 'branche'] [-l]"
    echo -e " [-l] lister les messages"
    echo -e " -m \"message\" pour ajouter un texte"
    echo -e " -t \"branche\" famille du message ('noter' par defaut): journalctl -t noter\n"
    echo -e "noter -m \"installer demain Linux\" -t todo"
    echo -e "noter -t todo"
}

msg=""
while getopts "ht:m:l" flags; do
	case $flags in
		h) usage;exit 0 ;;
		t) ITEMS_IDENTIFIER="${OPTARG}" ;;		
		m) msg="${OPTARG}" ;;
		l) lister=1 ;;		
	 :)  erreur "Vous avez oublié un argument"; exit 1 ;;
		?) erreur "Option invalide"; exit 1 ;;
		*) erreur "*"; exit 1 ;;
	esac
done

if [[ "$lister" == "1" || "$msg" == "" ]]; then
	lister
	exit 0
fi

ajouter "$msg"

exit 0

Ce qui peut s’utiliser de cette manière :

noter -m "bien le site www.webstratege.fr" 
noter -m "'noter' est la categorie par defaut" 
noter 
journalctl -t noter

ou l’utilisation avec une catégorie:

noter -m "demain je travaille" -t todo
noter -t todo 
journalctl -t todo
Share Button

Vous devriez aimer...