Plein de reponses! Merci! Et re alerte pave
scvo0ne a écrit :
Le seul truc à savoir c'est qu'en cas de modifications tu deviendras responsable à la place de l'éditeur. Maintenant si tu veux risque ton boulot c'est ton droit...
|
On est d'accord qu'on (mon equipe) ne peut pas toucher a tout ca, je cherche seulement a montrer a l'editeur qu'il existe bel et bien des solutions vu que pour le moment leur position c'est "on n'y peut rien".
Sinon :
Ca a ete evidemment la reponse de l'editeur, et ca fait 4 ans que c'est marque en rouge gras plusieurs fois dans la doc pour les utilisateurs et que le formateur le repete x fois pendant les sessions. Mais ca ne suffit pas, les utilisateurs etant ce qu'ils sont: l'ennemi numero 1. S'ils peuvent faire quelque chose, ils le feront, c'est comme ca. Et le probleme c'est que deux mois plus tard quand les donnees maintenant pourries bloquent un traitement sur des trucs qui ont atteint la date limite, on peut pas juste dire "Ha ben non on avait prevenu de pas faire du multi-onglets! Dommage pour vous, demerdez vous maintenant.". Ben non, faut aller mettre les mains dans le camboui directement en prod pour reparer tout ca - avec les N+x en mode gueulante sur le dos, un risque de faire foirer autre chose si l'analyse du probleme n'est pas bien faite, une perte de temps sur les autres trucs qu'on est en train de faire, etc.. A choisir, je prefererais largement controler le multi onglets - surtout que les exemples de Mechkurt et Rufo pour gerer ca c'est loin d'etre des usines a gaz.
scvo0ne a écrit :
Protip : sur l'appli web que je développe y a une fonction "historique" qui permet de voir "qui a modifié, quoi et quand" dans une jolie popup.
|
Voir au-dessus, ca sert pas vraiment a grand-chose. On log deja quasiment TOUT ce qui se passe vu qu'on est soumis a des audits reguliers par le regulateur (secteur bancaire) et que ne pas loguer c'est la garantie de se prendre une grosse amende dans le meilleur des cas et retirer la license bancaire dans le pire. Sauf que comme je disais au-dessus, ca me fait une belle jambe de savoir que c'est la faute de Robert si je suis en train de me faire souffler dans les bronches; je prefererais largement ne PAS donner l'option a Robert de pouvoir bousiller les donnees, tout le monde s'en porterait beaucoup mieux.
scvo0ne a écrit :
2) L'une des best practice c'est que les users ne restent pas bloqués comme des cons... Une autre c'est de comprendre qu'on fait pas des applis web en 2015 comme on faisait des appli lourdes au 20eme siècle...
|
Ah ca. Mais bon tu te doutes bien que c'est pas en disant ca au fournisseur qu'il va me regler les problemes
mechkurt a écrit :
1) j'ai déjà vue une bidouille qui marche pas trop mal, tu crée un code unique (hash de ta page plus variable spécifique id_client et/ou heure) que tu stocke en session et dans un input hidden, lors de la soumission du form tu vérifies que les 2 correspondent, sinon tu avertis l'utilisateur du dysfonctionnement.
|
Le pire etant qu'ils ont deja un genre de hash "session" en place qu'ils mettent dans tous les liens intra-appli pour des raisons de securite, donc ca serait pas vraiment la mer a boire d'etendre ca un peu.
mechkurt a écrit :
2) j'ai eu un problème un peu similaire de session à conserver, et effectivement j'ai fait un petit script en ajax qui ping le serveur tout les minutes, ce qui rafraichit le cookie de session coté client et réinitialise les 20 minutes coté serveur.
|
Ouaip j'avais fait ca aussi une fois pour detecter les "fins de sessions" d'une applet Java qui passait son temps a planter en laissant les utilisateurs enfermes dehors (encore un autre editeur qui maitrisait son sujet )
mechkurt a écrit :
3) pas évident à mettre en place pour toutes les actions de votre aplli, soit faut segmenter les traitements lourds, et toujours via ajax essayer de faire une barre d'avancement, mais ce n'est pas toujours possible, soit ce qui serait sans doute plus malin c'est d'avoir une liste de tache dans une base annexe, avec leur statut ("en cours", "succes", "erreur" ) et ne pas pouvoir relancer une tache déjà en cours...
|
Les traitements lourds... C'est toute une histoire, on fait deja notre possible. J'aime bien l'idee de la barre d'avancement mais j'estime que ca va etre beaucoup trop haut pour l'editeur reste un vrai "gestionnaire de taches" qui supervise ce que fait un utilisateur et agit en consequence qui n'a pas l'air trop gros a mettre en place.
rufo a écrit :
Pb 1 :
Perso, je conçois des pages "autonomes" (ie auto-suffisantes). Elles contiennent donc toutes les infos nécessaires pour qu'elles fonctionnent correctement (la session ne contient que des infos ne dépendant pas de la page affichée en cours).
|
Tes deux options marcheraient mais l'enchainement n'a pas vraiment d'importance et celle-la m'a l'air vraiment facile a mettre en place.
rufo a écrit :
Pb n°2 :
Pour la gestion des expirations de session, ça se gère soit via le langage (ex, en php, ça se gère tout seul) soit en BD : dans ce cas, on stocke le timestamp de la dernière action de l'utilisateur et dans le cron, y'a une tache périodique qui vérifie si le temps écoulé entre la date de dernière action et la date courante est > au timeout prévu. Si oui, il supprime la session dans la BD et ça déconnecte l'utilisateur.
|
Nan tu as mal saisi le probleme. Le timeout session marche "bien" (je mets des guillements parce que j'ai quand meme vu des sessions qui ne se terminaient jamais mais en general c'est bon). Le probleme c'est quand l'utilisateur ferme l'onglet directement sans utiliser le lien "deconnexion" avant. Puis il s'apercoit qu'il a oublie de faire un truc, rouvre le navigateur et essaie de se reconnecter, sauf qu'il a deja une session ouverte sur le serveur (celle du navigateur ferme, qu'il ne pourra donc jamais recuperer), que son essai de connexion est vu comme une seconde session differente de la premiere, et donc a cause de la politique maison de session unique, il se fait refuser sa deuxieme session et doit attendre 30 minutes que la premiere fasse son timeout.
rufo a écrit :
Pb n°3 :
1) pour les taches identifiées lourdes, l'appli doit vérifier en fonction des droits de l'utilisateur s'il est autorisé à lancer ce genre de tache en dehors des heures prévues. Si c'est pas le cas, elle refuse l'action. J'ai implémenté ce genre de choses dans mon appli Astres (cf ma signature) pour des requêtes de stats de profils persos qui moulinent sévères (genre plusieurs minutes). Genre l'admin peut outrepasser les heures allouées si y'a vraiment une urgence mais d'autres profils moins élevés ne peuvent pas.
|
Malheureusement, ce n'est pas possible pour moi. Le post est deja long donc je vais faire court: j'ai deja fait ce que je pouvais de ce cote-la, mais il y a trop de choses hors de ma petite sphere d'influence.
rufo a écrit :
2) Pour chaque session, l'appli doit incrémenter un compteur en BD pour chaque type de tache. Elle le positionne à 1 en début d'exécution et le remettre à 0 à la fin. Tant que ce compteur n'est pas revenu à 0, un même utilisateur ne peut pas lancer la même tache. On peut aussi mettre ce compteur en commun avec tous les utilisateurs si la tache ne peut être parallélisée avec une même tache d'un autre utilisateur.
|
rufo a écrit :
3) Analyser pourquoi les requêtes en BD rament autant. A moins que ça soit des taches de types rapport/stats, y'a pas de raison que ça mouline plusieurs minutes. Et même dans ce cas, voir si y'a pas moyen d'optimiser les requêtes (des fois, ça peut juste être des tables mal indexées). Ca peut être aussi la conf du SGBD à optimiser. Perso, j'ai divisé par 2 à 3 le temps d'exé de grosses requêtes d'Astres en tunant le fichier de conf de Mysql (en particulier, en augmentant la ram allouée pour des tables temporaires, le nb de tables ouvertes, et tout un tas de caches (pour le order by, pour les requêtes déjà exécutées...).
|
La aussi je vais essayer de pas faire trop long. On cumule l'appli en mode prototype, le MDD douteux et un DBA totalement inutile. J'ai deja abattu un boulot enorme, reecrit des dizaines et des dizaines de requetes et de vues, remanie des tables, rajoute des indexs, modifie des traitements... On est passe de "quasiment inutilisable" a un truc a peu pres stable tant qu'il n'y a pas de batch en parallele. Sauf que les batchs ne dependent pas de moi, sont mal branles et surtout s'executent plusieurs jours non-stop (jour et nuit) en debut de mois. J'ai essaye de proposer des trucs pour ameliorer tout ca (et en particulier bouger certaines parties au jour le jour histoire d'utiliser plus la plage de batch journaliere qui est sous-utilisee, et ainsi de limiter le temps d'execution en debut de mois), mais ceux qui pilotent les batchs ont pris ca pour eux et m'ont envoye paitre.
Enfin bref, merci beaucoup, grace a vous j'ai quelques bonnes options a suggerer et rien qui n'ait l'air bien complique au final.
Vu que je vais quitter le projet, ca va surtout etre a mon remplacant de s'occuper de ca. Mais le projet que je rejoins se base sur le meme produit (une version plus recente mais apres discussion avec un de leur consultants, il pense que rien n'a change pour les trois problemes evoques) sauf qu'il n'est pas encore en place du tout et que maintenant que je sais tout ca, je les attends au tournant pendant la phase de tests
---------------
C'était vraiment très intéressant.