FUSE et/ou autre VFS (Virtual File system)

kenobee

Membre confirmé
27 Janvier 2007
10
0
Je suis chef de projet pour la création d’une interface Web (content Management) de gestion de fichiers.
Je cherche une solution pour contruire dynamiquement dans une base de donnée ou fichier xml ou autre, la représentation (hiérarchie, dossiers et fichiers) d’un file system et ceci en temps réel.
Sur internet mes recherches me ramène souvant sur les solution de Virtual files systems
Pour autant je ne suis pas sûr que cela correspond à mon besoin?

Mon besoin :
Une base de donnée qui ne stockerait que les url (chemin d’accès) et metadonnées vers les fichiers et dossiers ainsi que la structure hiérarchie (parent id)
Ceci a partir d’un point de montage (folder) précis.
Pour cela je souhaite faire référence au node id (inode) pour update de la base de donnée en cas de “move” ou “rename”... Nous devons aussi filtrer les fichiers à prendre en compte.

Environnement MacOSX UNIX, LINUX et secondairement Windows
(c'est une application client serveur pour gérer des centaines de millier de fichiers)

Mon soucis est que l’ajout et la modification des fichiers et de la structure n’est pas uniquement possible via l’interface web (où nous avons la maitrise des modifications)
mais aussi et principalement via FTP, Webdav et particulierement le partage de fichiers sur le reseau local via Samba CIFS, Apple AFP, ou autres application professionnel tierce Helios, fulpress, etc...

La solution devra donc observer les événement tel que création (newfile or new folder), déplacement (newparent id), effacement (delete) et renommage (rename)
sur le file system et les reporter (insert or update) dans la base de donnée pour que nous puissions ensuite les gérer via l’interface web de notre application et concerver
l’intégrité des liens et relations que notre application web permet de faire.

Pour updater une entrée de la base de donnée on ne peux pas s’appuiyer sur le nom du fichier car si il a été renommé ou si d’autres fichiers porte le même nom
il y a un danger d’incohérence, rupture d’intégrité...

Si vous connaissez un projet commercial ou open source existant pour gérer cette problématique merci de me la signaler

Je regarde de prêt le projet macfuse et ses dérivés tel que MySQLfs
Je ne sais pas encore si ce projet est très robuste ou si il n’est pas trop lourd pous gérer ma problématique et l'intégrer dans notre projet ?

Merci pour votre aide.
 
MacFuse, pour la robustesse, tu peux oublier : c'est tout jeune et tout frais. Mais c'est appelé à devenir efficace, on dirait.

Il va te falloir gérer des historiques pour pouvoir identifier les fichiers. Un fichier X s'appelle d'un certain nom à un instant donné : nom_de_fichier est une fonction avec le lieu et le temps en paramètre.

J'ai installé depuis quelques jours (suite à une couillonnade dont MS Word a le triste privilège) Versomatic, lequel présente un lot de fonctionnalités assez proches de certaines de tes requêtes. Pour l'instant, cela semble fonctionner, à ma mesure (je ne tripote pas des centaines de milliers de fichiers tous les jours ;))

Ce genre de solution présente l'ennui d'être dépendant de la plate-forme [l'extension au noyau] mais la partie gestion de donnée, elle, peut s'adapter plus facilement à d'autres systèmes.
 
Pour l'interface, il y a filemanager (en xul, licence LGPL), il suffit d'avoir firefox (ou clone) installé et tout le monde peut y accéder. Il y a un système d'extension disponible, je ne sais pas si cela correspond à ton besoin. :)

Lien direct sur l'application à copier-coller :

Bloc de code:
jar:http://www.anisolution.com/members/~monkeya/misc/fm/filemanager.jar!/filemanager.xul
 
En fait j'ai ma propre interface WEB et déjà une base de donnée MySQL qui fait référence à des fichiers placés sur le file system. Mais je cherche un moyen de maintenir la base de donnée avec des fichiers qui serait ajoutés directement ou modifier / renommer/ deplacer dans le file system.
La solution est un monitoring des événement sur le file system du type :
Si newfile ==> Envoie une commande SQL pour insert
Si MoveFile ==> Envoie une commande SQL pour update path
Si RenameFile ==> Envoie une commande SQL pour update name
Ect...

Sachant que le seul moyen d'être sûr de faire le bon update n'est pas sur le nom du fichier mais son inode ou la chaine complète du path+Filename car il ne peut y avoir qu'un seul fichier "toto.txt" dans un dossier.

Voilà
la solution est peut être simplement dans des lignes de commande?
Mais doit fonctionner tout seul et en temps réel!!

A+
 
Tu devrais te pencher sur la documentation de launchd, qui est une sorte de lanceur universel sous Mac OS X.
Il est capable de déclencher des actions sur des événements du type qui t'intéressent. Mais je ne sais pas s'il est capable de traiter d'un coup toute une arborescence.
 
En fait j'ai ma propre interface WEB et déjà une base de donnée MySQL qui fait référence à des fichiers placés sur le file system. Mais je cherche un moyen de maintenir la base de donnée avec des fichiers qui serait ajoutés directement ou modifier / renommer/ deplacer dans le file system.
La solution est un monitoring des événement sur le file system du type :
Si newfile ==> Envoie une commande SQL pour insert
Si MoveFile ==> Envoie une commande SQL pour update path
Si RenameFile ==> Envoie une commande SQL pour update name
Ect...

Sachant que le seul moyen d'être sûr de faire le bon update n'est pas sur le nom du fichier mais son inode ou la chaine complète du path+Filename car il ne peut y avoir qu'un seul fichier "toto.txt" dans un dossier.

Voilà
la solution est peut être simplement dans des lignes de commande?
Mais doit fonctionner tout seul et en temps réel!!

A+
Je voit bien ce que tu veux faire, personnelement je n'en ai pas besoin mais ça m'intéresse beaucoup juste par curiosité.

Cependant j'ai une autre question :

Plutôt que d'utiliser une base de données MySQL, pourquoi ne pas utiliser directement le système de fichier en utilisant ce que t'as filé gloup gloup ou en créant ta propre interface ??

Parce que si l'interface que tu crées lis simplement les fichier au fur et à mesure que tu te ballades dans les répertoires tu n'a pas a te compliquer la vie avec ces histoires non ??
 
Cette solution est très interressante mais ne correspond pas à mon réel besoin.
ce pourrais être un complément pour selectionner les fichiers a intégrer dans la base???

Mon application est en fait une solution permettant de gérer différent type d'objets (asset)
de les organiser differemment que sur le filesystem et surtout de créer des liens entre eux.

La liaison entre ces asset ce fait dans une database et nécessite comme toute base de donnée relationnelle d'avoir des id pour chaque asset et donc aussi pour les références aux fichiers. Si les utilisateurs Insert/move ou modifie à partir de l'interface pas de problème je maitrise chaque action.

Mais le soucis (contrainte) c'est que d'autres utlisateurs peuvent intervenir directement sur le file system du serveur via le partage de fichier.
Donc si le fichier est déplacer ou renommé je suis très embêté car je n'ai plus de lien entre la database id_asset et le fichier asset_url / path ?

Voilà pourquoi je cherche une solution pour reporter chaque modif du file système dans la database et tant qu'à faire ajouter les nouveaux fichiers automatiquement...
Surtout que pour les format d'images non supportées (EPS, PDF, Illustrator...) et ou trop grande je génère plusieurs vignette jpg (List50x50px; preview200x200, zoom500x500) et dont je dois aussi connaitre le chemin pour les prévilsualiser.(Surtout pas de blob)!!

Le tous sur MacOSX ou LINUX le developpeur qui travaille avec moi est surtout windows PHP MySQL soit on fait et on galère soit on laisse faire à d'autre, soit ça existe déjà ou bien c'est natif dans OSX/LINUX et juste une bidouille et hop... ?

Merci
 
Il va falloir préciser le mode opératoire :
1) soit vous n'autorisez les accès qu'au travers de votre propre interface et votre problème est simple (du moins : simplifié ;))
2) soit les accès au système de fichiers sont libres et alors il vous faut utiliser un système de monitoring forcément sophistiqué ; vous pouvez toujours vous inspirez des options WatchPath et QueueDirectories de launchd, dont on peut récupérer les sources ici.
 
Il va falloir préciser le mode opératoire :
1) soit vous n'autorisez les accès qu'au travers de votre propre interface et votre problème est simple (du moins : simplifié ;))
2) soit les accès au système de fichiers sont libres et alors il vous faut utiliser un système de monitoring forcément sophistiqué ; vous pouvez toujours vous inspirez des options WatchPath et QueueDirectories de launchd, dont on peut récupérer les sources ici.

Effectivement et mes recherches sur le sujet m'amene vers ce produit aussi et en autre
File Alteration Monitor developper par SGI en son temp et open source voir

On me parle aussi des commandes :
kqueue(9) kernel API available in modern BSD derivatives

Je vais regarder tout cela et vous tenir informé si ça vous interresse ?

Merci