ruby | ||
shell | ||
README.md |
Officience Make-It-Count (offimic)
Les bureaux parisiens d'Officience accueillent un co-working à norme sociale et des évènements. Dans cet espace la possibilité d'occuper une place libre dans des conditions de travail optimales est très variables.
L'objectif de ce projet est de produire un ensemble d'outils permettant de mesurer, d'analyser et d'anticiper le nombre de personnes présentes et l'occupation de l'espace.
Phase I - Collecter les données
Écrire un script offimic-api
:
- Ce script doit implémenter un serveur HTTP avec une API REST.
- Son API doit permettre de collecter et restituer les données collectées.
Technologies
- Le serveur HTTP sera codé en Ruby .
- Il utilisera la bibliothèque Sinatra.
Fonctionnement
Le serveur devra être capable de répondre aux requêtes suivantes :
GET /history__
- Retourne l'historique des mesures collectées, au format CSV
GET /count/:value
- Enregistre la valeur
:value
pour la date/heure correspondant à celle de la requête - Retourne
"OK"
ou"ERROR"
, selon que l'enregistrement est réussi ou non.
Phase II - Mesurer l'occupation
Ecrire un script offimic-measure
. Il doit permettre de
- faire une mesure du nombre de personnes présentes sur le réseau ;
- d'envoyer le résultat de la mesure à l'API
offimic-api
..
Le script sera ensuite lancé toutes les 10 minutes.
Technologies
- Le serveur HTTP sera codé en Ruby
- Il utilisera la bibliothèque Thor pour gérer la ligne de commande.
- Le script sera ensuite ajouté à une cron task.
- Il faut installer le package
arp-scan
sur le systeme (apt-get install ...
)
Fonctionnement
- Utiliser IO.popen et la commande suivante pour obtenir la liste des addresses mac actuellement sur le réseau (depuis la table ARP)
arp-scan --interface=wlan0 --localnet --timeout 1500 --retry 4 --ignoredups --quiet \
| sed -n -r '/([0-9a-f]{2}:){5}/p' \
| wc -l
Références
Phase III - Fichiers de configurations en JSON
Modifier offimic-api
et offimic-measure
de telle sorte qu'ils lisent un fichier de configuration au démarrage et utilisent les paramètres qui y sont présents.
Leur fichiers de configuration respectifs sont :
~/.config/offimic/api.json
pour l'API~/.config/offimic/measure.json
pour l'outil de mesure
Fonctionnement
Ces fichiers seront de la forme suivante :
{
"schema": "https",
"host": "api.example.com",
"path": "/"
"port": "5000",
}
Phase IV - API en JSON
Modifier offimic-api
de telle sorte que l'API produise du JSON.
Fonctionnement
Les routes restent les mêmes, mais les réponses changent (voir exemples ci-dessous) :
GET /history
{
status: "ok",
body: [
{ scan_time: "2018-04-01 22:10:25 UTC+3", count: 3 },
{ scan_time: "2018-04-01 22:40:13 UTC+3", count: 4 },
{ scan_time: "2018-04-01 23:10:17 UTC+3", count: 4 },
]
}
GET /count/:value
{
status: "ok",
body: { scan_time: "2018-04-01 23:10:17 UTC+3", count: 4 },
}
Phase V - Stocker le hash pour chaque adresses MAC
Modifier offimic-measure
et faire en sorte d'enregistrer les adresses MAC des différentes machines présentes.
Dans un second temps, on anonymisera les entrées pour stockes des hash MD5 qui correspondent à chaque adresse MAC plutot que les adresses MAC elle-mêmes.
TODO (futur / pas rédigé)
-
Permettre de blacklister certaines macadress qui ne sont pas ratachées à des individus (miniserveur, imprimante, freebox, etc.) => ils seront pas mentionnés dnas l'historique
-
Distinguer les personnes régulierement présentes des visiteurs occasionnels (= évenements) sur de courtes périodes.