CardReader Alpha Répondre
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
Non tu ne te trompe pas, c'est un peu long, mais c'est normal, actuellement, le logiciel exécute le code comme tel :
1 - Lecture des infractions sur les 29 derniers jours en fonction de la date demandé (chargement de la BDD)
2 - renvoi des infractions et lancement de l'analyse de la journée (J-1 et J+1) (rechargement de la BDD)
3 - affichage du résultat
On peut constater que le logiciel lit 2 fois la même base de donnée, le but final sera :
1 - lecture de la base de donnée sur les 29 derniers jours + jours suivant
2 - analyse des infractions + affichage des activités
3 - Création du graphique
Ce qui permettra une seul lecture de la base de donnée et de ce fait accélération de l'affichage.
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Gordini
Statut : Déconnecté
Equipe de modération
Groupe : Chef régulateur
Groupe : Membres testeurs
Groupe : Loyal +10 ans sur le site
Inscrit le : 20/02/2012 à 15h37
Messages: 5495
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
L'autre solution envisager est une lecture continue de la base de donnée avec mise en tampon mémoire de celle ci, là ce n'est plus une accélération mais un passage à la vitesse lumière car je me retrouve plus qu'a faire des requêtes sur la mémoire vive, par contre j'explose la consommation de celle ci.
Ce qui est long à l'heure actuel c'est le dé-bug aussi, affichage détaillé d’événement dans la fenêtre de log.
Je suis en ce moment en train de mesurer l'utilisation détaillé de l'application sur le système.
Edité par Xifit Le 10/04/2017 à 22h07
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
J'ai optimisé le code et ça prend beaucoup moins de temps
Lors du premier lancement de la page, le logiciel met en cache les données (activités, infraction, et autre). Ensuite il fait que de la requête cache quasiment, et donc ça va beaucoup plus vite à charger
Le chargement dure en moyenne 2 à 3 secondes alors que la mise en cache est d'environs 14 à 15 secondes. J'utilise un tableau pour "tricher" un peu plus car sans celui ci c'est 7 à 10 secondes.
Le calendrier de sélection à lui aussi été modifié, les dates en vert contiennent des données, en rouge ce sont les journée avec des infraction et en gris les journées sans données, pas de la simplicité à générer tout ça
Edité par Xifit Le 17/04/2017 à 04h25
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
["2015-12-11","Trop de temps de repos journaliers réduit entre deux temps de repos hebdomadaires: 4 (max 3)","00x00008"]
Voici une infraction complète
["2015-12-14","infraction temps de travail sans pause: 6:27 démarre à: 4:10 finit à: 10:39","250","639","00x00001"]
Voilà comment on traduit la ligne qui se trouve dans un tableau à 2 dimensions :
1 - la date (utile pour la recherche)
2 - L'intitulé de l'infraction, là c'est une infraction sur les 6h
3 - le nombre de minutes qui c'est écoulé depuis minuit jusqu'au début (utilisé pour le graphique)
4 - le nombre de minutes qui c'est écoulé depuis minuit jusqu'à la fin de l'infraction (pour le graphique)
5 - Le code erreur de l'infraction
Petite vidéo de l'amélioration
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
Je commence à transférer la base de donnée en mode mémoire pour l'utilisation du logiciel, niveau réactivité c'est le jour et la nuit. Une nouvelle base va voir le jour afin d'améliorer la réactivité lors du lancement du programme, au lieux de calculer à chaque lancement les différentes informations, elle seront sauvegarder crypter. Par contre c'est plus long et compliquer que prévu mais ça avance à petit pas.
Autre point j'ai réussi à envoyer un trajet (mes parcours google map) et à l'afficher sur une carte, j'hésite à l'intégrer sur le logiciel car ça reste un peut complexe même si ça déchire.
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
regarde ça :
https://www.google.fr/maps/timeline?hl=en&authuser=0&ei=ZvQRWeC6OIv6aaqsg8gK%3A78&ved=1t%3A17706&pb
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
J'ai réécris le script des infractions, reste quand même la dernière infraction à intégrer.
Repos hebdomadaire 45 heures consécutives, après au plus six périodes de 24 heures - Peut être réduit à 24 heures (en alternance avec un repos normal et compensation avant la fin de la 3ème semaine suivante). Pour l'alternance c'est bon car la condition est simple mais c'est pour les 3 semaines sachant que ce repos devra être collé à un repos d'au moins 9h ou un repos hebdomadaire. vendredi 9h + heure manquante + 45h
Sinon j'ai grandement accéléré la lecture des infractions par la même occasion, la nouvelle fonction fait des prouesse avec en plus moins de ligne de code, sauvegarde des infractions qui date dans un fichier json crypté, du coup la lecture des "veilles" infractions est plus rapide
Voici le contenue de mes infractions dans le fichier JSON
Edité par Xifit Le 15/05/2017 à 20h17
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
Temps d'écriture pour la version actuelle : Environs 5h
Nombre de ligne de code : 389
Lorsque vous trouvez ceci : #################################################, il s'agit de la partie cryptage
Voici le code :
function ReadcardDB(last, callbackReadcardDB) { var contents = [] var filePath = getUserHome() + '\\.CardReader\\' + md5(getCookie('login')) + '\\bdd\\tmp\\infractions.json'; //console.log((filePath)) //console.log(fs.existsSync(filePath)) if (fs.existsSync(filePath)) { contents = fs.readFileSync(filePath, 'utf8'); contents = JSON.parse(#################################################); console.log(contents); console.log(contents.length) var date_exist = [] for (y = 0; y < contents.length; y++) { date_exist.push(contents[y][0]); } } var limit =0; if (contents.length > 0){ console.log(date_exist[date_exist.length-1]) var myDate=date_exist[date_exist.length-1]; myDate=myDate.split("-"); var newDate=myDate[1]+"/"+myDate[2]+"/"+myDate[0]; console.log(newDate) limit = (new Date(newDate).getTime()+((24 * 60 * 60)*1000)); console.log(limit) } //console.log(last.length); console.log(new Date().toLocaleDateString() + " " + new Date().toLocaleTimeString() + " | Début de la mise en cache des Infractions") console.log(new Date().toLocaleDateString() + " " + new Date().toLocaleTimeString() + " | Analyse des infractions") $("#loadInfo").html("Début de la mise en cache des Infractions") $("#loadInfo").html("Analyse des infractions") var EF_Driver_Activity_db_nbr; var EF_Driver_Activity_db_exist = []; var EF_Driver_Activity_db_exist_add = []; var colone1 = []; var colone2 = []; var liste_infraction = contents; var infractions_liste = []; var start = 0; var fin = 0; var sstart = 0; var coupure_Hebdo_Reduite = 0; var coupure_Hebdo_Reduite_manque = 0; var coupure_journee = 0; var conduite_journee = 0; var conduite_continue = 0; var travail_journee = 0; var dispo_journee = 0; var travail_continue_6H = 0; var travail_continue_9H = 0; var interruption_travail_continue = 0; var start_travail_continu_6H = 0; var start_travail_continu_9H = 0; var start_conduite_continu = 0; var pause_15_minutes = 0; var pause_3H = 0; var coupure_reduite = 0; var conduite_10H = 0; //console.log(last.length); var conduite_semaine = 0; var last_conduite_semaine = 0; var travail_semaine = 0; for (u = 0; u < last.length - 1; u++) { //lecture de l'activité actuelle var date = parseInt(#################################################, 16) var time = (parseInt(#################################################, 10) * 60) var datetime = date + time; var activity = ################################################# //on regarde l'activité suivante si elle est identique on saute var nextactivity = #################################################; if (u + 2 < last.length) { while (activity == nextactivity) { u++; nextactivity = ################################################# } } //lecture de l'activité suivante var nextdate = parseInt(#################################################, 16) var nexttime = (parseInt(#################################################, 10) * 60) var nextdatetime = nextdate + nexttime; //calcul du temps en secondes entre les 2 activités var duree = nextdatetime - datetime; var d = new Date(datetime * 1000); if (limit < d) { var nextd = new Date(nextdatetime * 1000); if (start == 0) { var inf_date = convertDate(d); //var amplitude = stop - start; //console.log("Amplitude: "+amplitude); //console.log("du : " + d.toLocaleString()) } //console.log(sformattime(time)) //console.log("Position du chrono: " + activity) //console.log("Durée: " + sformat(duree)) //console.log("Durée en secondes: " + (duree)) switch (activity) { case "0": if (u > 0) { //repos et coupure //gestion des coupure du temps de travail if (duree >= 15 * 60) { interruption_travail_continue += duree; //coupure supérieur à 15 mimnutes détectée if (travail_continue_6H > 6 * 60 * 60) { //console.log("%c Infraction Temps de travail > 6H : (" + sformattime(start_travail_continu_6H) + " " + sformattime(time) + ")" + sformattime(travail_continue_6H), 'background: #222; color: #bada55') var infraction = [inf_date, "Infraction Temps de travail > 6H : (" + sformattime(start_travail_continu_6H) + " -> " + sformattime(time) + ")" + sformattime(travail_continue_6H), start_travail_continu_6H / 60, time / 60, "00x00002"] infractions_liste.push(infraction); travail_continue_6H = 0; start_travail_continu_6H = nexttime; } else { travail_continue_6H = 0; start_travail_continu_6H = nexttime; } if (travail_continue_9H > 9 * 60 * 60) { if (interruption_travail_continue < 45 * 60) { //console.log("%c Infraction Temps de travail > 9H : (" + sformattime(start_travail_continu_9H) + " " + sformattime(time) + ")" + sformattime(travail_continue_9H), 'background: #222; color: #bada55') var infraction = [inf_date, "Infraction Temps de travail > 9H : (" + sformattime(start_travail_continu_9H) + " -> " + sformattime(time) + ")" + sformattime(travail_continue_9H), start_travail_continu_9H / 60, time / 60, "00x00002"] infractions_liste.push(infraction); travail_continue_9H = 0; start_travail_continu_9H = nexttime; } else { travail_continue_9H = 0; start_travail_continu_9H = nexttime; } } } //gestion des coupure de conduite if (conduite_continue > 4.5 * 60 * 60) { //console.log("%c Infraction Temps de conduite : (" + sformattime(start_conduite_continu) + " " + sformattime(time) + ")" + sformattime(conduite_continue), 'background: #222; color: #bada55') var infraction = [inf_date, "Infraction Temps de conduite : (" + sformattime(start_conduite_continu) + " " + sformattime(time) + ")" + sformattime(conduite_continue), start_conduite_continu / 60, time / 60, "00x00002"] infractions_liste.push(infraction); } if (duree >= 15 * 60) { pause_15_minutes = 1; } if ((duree >= 30 * 60) && (duree < 45 * 60)) { if (pause_15_minutes == 1) { //conducteur fait 15 + 30 conduite_continue = 0; pause_15_minutes = 0; } else { // le conducteur n'a pas fait 15 minutes avant donc on concidère qu'il ne fait que 15 minutes pause_15_minutes = 1; } } if (duree >= 45 * 60) { // le conducteur fait ses 45 minutes de pause de conduite conduite_continue = 0; pause_15_minutes = 0; start_conduite_continu = nexttime; } if (duree < 9 * 60 * 60) { coupure_journee += duree; //coupure en journé if (duree >= 3 * 60 * 60) { //conducteur fait une interruption de 3 H ce qui perme de faire une coupure journalière fractionnée pause_3H++; } } else { //coupure journalière detecté stop = datetime; /* console.log("au : " + d.toLocaleString()) console.log("Amplitude journée : " + sformattime(stop - start)) console.log("conduite journée : " + sformattime(conduite_journee)) console.log("travail journée : " + sformattime(travail_journee)) console.log("Dispo journée : " + sformattime(dispo_journee)) console.log("coupure dans la journée : " + sformattime(coupure_journee)) */ conduite_semaine += conduite_journee; var travail_journee_total = (dispo_journee + travail_journee + conduite_journee); travail_semaine += travail_journee_total; if (conduite_journee > 9 * 60 * 60) { //le conducteur à fait une conduite de plus de 9H conduite_10H++; if (conduite_10H > 2) { //le conducteur fait une infraction sur les temps de conduite //console.log("%c Infraction Augmentation de la conduite journalière (Max 2) : " + conduite_10H, 'background: #222; color: #bada55') var infraction = [inf_date, "Infraction Augmentation de la conduite journalière (Max 2) : " + conduite_10H, sstart / 60, time / 60, "00x00002"] infractions_liste.push(infraction); } } if (stop - start > 15 * 60 * 60) { //console.log("%c Infraction amplitude > 15H : " + sformattime(stop - start), 'background: #222; color: #bada55') var infraction = [inf_date, "Infraction amplitude > 15H : " + sformattime(stop - start), sstart / 60, time / 60, "00x00002"] infractions_liste.push(infraction); } else { if (travail_journee_total > 12 * 60 * 60) { //infraction temps de travail sur la journée //console.log("%c Infraction Temps de travail > 12H : " + sformattime(travail_journee_total), 'background: #222; color: #bada55') var infraction = [inf_date, "Infraction Temps de travail > 12H : " + sformattime(travail_journee_total), sstart / 60, time / 60, "00x00002"] infractions_liste.push(infraction); } } var coupure_reel = (24 * 60 * 60) - (stop - start); if (coupure_reel < duree) { if (coupure_reel < 11 * 60 * 60) { if (pause_3H >= 1) { // Le conducteur a fait une coupure continue de plus de 3H dans la journée il s'agit d'un repos fractionnée //console.log("Coupure journalière fractionnée: " + sformat(coupure_reel)) } else { coupure_reduite++; //console.log("Coupure journalière Réduite: " + sformat(coupure_reel)) } } else { //console.log("Coupure journalière : " + sformat(coupure_reel)) } } else { if (duree < 11 * 60 * 60) { if (pause_3H >= 1) { // Le conducteur a fait une coupure continue de plus de 3H dans la journée il s'agit d'un repos fractionnée console.log("Coupure journalière fractionnée: " + sformat(duree)) } else { coupure_reduite++; //console.log("Coupure journalière Réduite: " + sformat(duree)) } } else { //console.log("Coupure journalière : " + sformat(duree)) } } if (coupure_reduite > 3) { //console.log("%c Trop de repos journalier réduit: " + coupure_reduite + ", max 3", 'background: #222; color: #bada55') var infraction = [inf_date, "Trop de repos journalier réduit (max 3) : " + coupure_reduite, sstart / 60, time / 60, "00x00002"] infractions_liste.push(infraction); } //console.log("") if (duree >= 24 * 60 * 60) { //coupure hebdomadaire détectée if (duree >= 45 * 60 * 60) { //coupure Hebdomadaire Normale coupure_Hebdo_Reduite = 0; //remise à zero du nombre de coupre hebdo réduite } else { //coupure Hebdomadaire réduite if (coupure_Hebdo_Reduite >= 1) { //infraction au repos hebdo réduit //console.log("%c Trop de repos hebdomadaire réduit: " + coupure_Hebdo_Reduite, 'background: #222; color: #bada55') var infraction = [inf_date, "Trop de repos hebdomadaire réduit: " + coupure_Hebdo_Reduite, sstart / 60, time / 60, "00x00002"] infractions_liste.push(infraction); } coupure_Hebdo_Reduite++; //incrémentation du nombre de coupure Hebdo réduite coupure_Hebdo_Reduite_manque = (45 * 60 * 60) - duree; //calcul du temps manquant sur le repos } if (conduite_semaine > 56 * 60 * 60){ //le conducteur a dépassé les 56H de conduite dans la semaine //console.log("%c Dépassement du temps de conduite autorisé sur une semaine (max: 56H): " + sformattime(conduite_semaine), 'background: #222; color: #bada55') var infraction = [inf_date, "Dépassement du temps de conduite autorisé sur une semaine (max: 56H): " + sformattime(conduite_semaine), "00x00002"] infractions_liste.push(infraction); } if ((conduite_semaine+last_conduite_semaine) > 90 * 60 * 60){ //le conducteur a dépassé les 56H de conduite dans la semaine //console.log("%c Dépassement du temps de conduite autorisé sur deux semaines glissantes (max: 90H, semaine précédente : "+sformattime(last_conduite_semaine)+", semaine actuelle :"+sformattime(conduite_semaine)+"): " + sformattime((conduite_semaine+last_conduite_semaine)), 'background: #222; color: #bada55') var infraction = [inf_date, "Dépassement du temps de conduite autorisé sur deux semaines glissantes (max: 90H, semaine précédente : "+sformattime(last_conduite_semaine)+", semaine actuelle :"+sformattime(conduite_semaine)+"): " + sformattime((conduite_semaine+last_conduite_semaine)), "00x00002"] infractions_liste.push(infraction); } if (france == true){ if (travail_semaine > 56 * 60 * 60){ //le conducteur a dépassé les 56H de travail dans la semaine //console.log("%c Dépassement du temps de travail autorisé sur une semaine (max: 56H): " + sformattime(travail_semaine), 'background: #222; color: #bada55') var infraction = [inf_date, "Dépassement du temps de travail autorisé sur une semaine (max: 56H): " + sformattime(travail_semaine), "00x00002"] infractions_liste.push(infraction); } }else{ if (travail_semaine > 60 * 60 * 60){ //le conducteur a dépassé les 60H de travail dans la semaine //console.log("%c Dépassement du temps de travail autorisé sur une semaine (max: 60H): " + sformattime(travail_semaine), 'background: #222; color: #bada55') var infraction = [inf_date, "Dépassement du temps de travail autorisé sur une semaine (max: 60H): " + sformattime(travail_semaine), "00x00002"] infractions_liste.push(infraction); } } coupure_reduite = 0; conduite_10H = 0; last_conduite_semaine = conduite_semaine; conduite_semaine = 0; travail_semaine = 0; } start = 0; sstart = 0; coupure_journee = 0; travail_journee = 0; dispo_journee = 0; conduite_journee = 0; travail_continue_6H = 0; travail_continue_9H = 0; interruption_travail_continue = 0; pause_3H = 0; start_conduite_continu = 0; for (t = 0; t < infractions_liste.length; t++) { //console.log("%c" + infractions_liste[t][1], 'background: #222; color: #bada55') liste_infraction.push(infractions_liste[t]); } infractions_liste = []; } } break; case "1": //mise à dispo if (start == 0) { //la journée débute start = datetime; sstart = time; start_travail_continu_6H = time; start_travail_continu_9H = time; } dispo_journee += duree; travail_continue_6H += duree; travail_continue_9H += duree; break; case "2": //travail if (start == 0) { //la journée débute start = datetime; sstart = time; start_travail_continu_6H = time; start_travail_continu_9H = time; } travail_journee += duree; travail_continue_6H += duree; travail_continue_9H += duree; break; case "3": //conduite if (start == 0) { //la journée débute start = datetime; sstart = time; start_travail_continu_6H = time; start_travail_continu_9H = time; } if (start_conduite_continu == 0) { start_conduite_continu = time; } conduite_journee += duree; conduite_continue += duree; travail_continue_6H += duree; travail_continue_9H += duree; } } } if (callbackReadcardDB && typeof(callbackReadcardDB) === "function") { console.log(new Date().toLocaleDateString() + " " + new Date().toLocaleTimeString() + " | Envoie du cache des Infractions") $("#loadInfo").html("Envoie du cache des Infractions") callbackReadcardDB(liste_infraction); } }
Edité par Xifit Le 15/05/2017 à 21h16
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
(Merci pour avoir édité ton message) Pour le biend e ton programme, attention à ne pas trop donner de JS, ou autre, ça peut vite se voler, et/ou donner des idées à des tierces personnes
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
(Merci pour avoir édité ton message) Pour le biend e ton programme, attention à ne pas trop donner de JS, ou autre, ça peut vite se voler, et/ou donner des idées à des tierces personnes
J'espère d'ici le moi d’août, voir septembre mais seul c'est long. Je peu accélérer un peu mais c'est pas gagné.
Fiche réduite de Mickaël
Statut : Déconnecté
Créateur de projet
Groupe : Administrateur
Inscrit le : 22/01/2011 à 11h04
Messages: 12571
C'est passé presque inaperçu sur le site durant bien longtemps
Fiche réduite de Xifit
Statut : Déconnecté
Membre de niveau 6
Groupe : Partenaires
Inscrit le : 23/05/2016 à 21h35
Messages: 167
Le module d'activité avance un petit peu avec de nouvelles options. Le design qui se dessine.
La vidéo
Astuces :
Vous souhaitez suivre un sujet en particulier?
Mettez le sujet de votre choix dans vos favoris en cliquant sur disponible en bas de page, sur un sujet du forum
Vous pouvez gérer vos favoris en cliquant sur disponible sur le menu supérieur ou inférieur du forum
Vous pouvez aussi suivre un sujet par mail, ou messagerie privée, et alerter l'équipe en cas de problème, via le menu en bas de page lorsque vous êtes sur un sujet