Poum - Mot-clé - PostgresqlDe la qualité logicielle, méthodes agiles et outils logiciels libres ...2023-08-25T16:53:12+01:00Poumurn:md5:6b5c625a812aff31ffa1cd1f3648e14bDotclearRegroupement par mois de données avec DBIx::Classurn:md5:dad339afc352926aac4d0c4ac6e979932016-12-11T22:51:00+01:002017-03-05T12:48:35+01:00PoumDéveloppementDBIx::ClassPerlPostgresql<p><img src="http://philippe.poumaroux.free.fr/public/perl-logo.gif" alt="Perl" title="Perl, fév. 2012" /></p>
<p>Supposons que nous ayons une base de données <a href="http://philippe.poumaroux.free.fr/index.php?tag/Postgresql">Postgresql</a>, une table activite qui contient, entre autre:</p>
<ul>
<li>jour: une date au format jj/mm/aaaa</li>
<li>duree: une durée en heures</li>
<li>projet: l'identifiant d'un projet éventuellement nul</li>
<li>personne: l'identifiant d'une personne</li>
</ul>
<p>Cette table permettant de relever l'activité des personnes sur des projets doit être utilisée pour fournir un récapitulatif du total des heures par mois et par personnes depuis un script <a href="http://philippe.poumaroux.free.fr/index.php?tag/Perl">Perl</a> utilisant <a href="http://philippe.poumaroux.free.fr/index.php?tag/DBIx%3A%3AClass">DBIx::Class</a>.</p> <p>Il faut donc faire une requête des lignes ayant une référence projet, en transformant la date du jour au format mmaaaa et en les regroupant par date toujours au format mmaaaa, par personnel et par projet. Simple ! Donc voici:</p>
<pre>my @heures = $db->resultset('Activite')->search({
'-and' => [
jour => { '>=', $debut },
jour => { '<=', $fin },
],
'projet.id_ref' => { '!=', undef },
},{
select => [
'projet', { SUM => 'duree' }, \"to_char(jour, 'MMYYYY')",
'personne'
],
+as => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/projet duree mois personne/" title="qw/projet duree mois personne/">qw/projet duree mois personne/</a>,
group_by => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/mois personne projet/" title="qw/mois personne projet/">qw/mois personne projet/</a>,
order_by => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/projet jour personne/" title="qw/projet jour personne/">qw/projet jour personne/</a>,
join => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/'projet'" title="'projet'">'projet'</a>,
})->all();</pre>
<p>Précisons que <code>$debut</code> et <code>$fin</code> sont les dates entre lesquelles on veut effectuer la recherche.</p>
<p><ins>Explication</ins>: on recherche les lignes entre <code>$debut</code> et <code>$fin</code> ayant une référence projet et on récupère le projet, la somme des durées, la date transformée au format mmaaaa et la référence des personnes.
On appelle mois la date transformée au format mmaaaa et on fait un group by sur ce nouveau champ.</p>
<p>Je précise également que les projets et les personnes sont enregistrées dans des tables auxquelles les champs éponymes font référence.</p>
<p><strong>Mais ça ne fonctionne pas</strong> car avec DBIx::Class, le group by n'utilise pas la version transformée de mois mais celle du champ source jour.
On obtient donc une ligne par jour, par projet et par personne au lieu d'une ligne par mois, par projet et par personnel.</p>
<p>La solution consiste à reporter dans Group By la même expression de transformation que dans le Select. Voici une version qui fonctionne:</p>
<pre>my @heures = $db->resultset('Activite')->search({
'-and' => [
jour => { '>=', $debut },
jour => { '<=', $fin },
],
'projet.id_ref' => { '!=', undef },
},{
select => [
'projet', { SUM => 'duree' }, \"to_char(jour, 'MMYYYY')", 'personne'
],
+as => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/qw/projet duree mois personne/" title="qw/projet duree mois personne/">qw/projet duree mois personne/</a>,
group_by => [
\"to_char(jour, 'MMYYYY')", 'personne', 'projet'
],
order_by => [
\"to_char(jour, 'MMYYYY')", 'projet', 'personne'
],
join => <a href="http://philippe.poumaroux.free.fr/index.php?post/2016/12/11/'projet'" title="'projet'">'projet'</a>,
})->all();</pre>Des images Docker pour LibrePlanurn:md5:41e5f184e1aa4132873bc2048fe1f6f62016-04-11T23:49:00+02:002017-03-05T12:46:53+01:00PoumTrucs & astucesLibrePlanMariaDBMySQLPostgresql <p><img src="http://philippe.poumaroux.free.fr/public/docker.png" alt="docker" title="docker, déc. 2016" /> & <img src="http://philippe.poumaroux.free.fr/public/LibrePlan_Logo.png" alt="LibrePlan" title="LibrePlan, mar. 2012" /></p>
<p>Pour ceux qui veulent rapidement essayer (ou utiliser) <a href="http://www.libreplan.org" hreflang="en" title="Site LibrePlan">LibrePlan</a>, outil web de gestion de projet, je viens d'uploader sur le hub docker deux <a href="https://hub.docker.com/r/libreplan/libreplan/" hreflang="en" title="Images docker LibrePlan">images</a> prêtes à l'emploi, l'une qui fonctionne avec <a href="http://philippe.poumaroux.free.fr/index.php?tag/Postgresql">Postgresql</a>, l'autre avec <a href="http://philippe.poumaroux.free.fr/index.php?tag/MySQL">MySQL</a> ou <a href="http://philippe.poumaroux.free.fr/index.php?tag/MariaDB">MariaDB</a>. Le mode d'emploi détaillé est joint.</p>
<p>Vous trouverez également dans le <a href="https://github.com/LibrePlan/docker-images" hreflang="en" title="Dépôt Github des images docker LibrePlan">dépôt Github</a> associé la traduction du mode d'emploi en français et des fichiers docker-compose notamment pour jouer avec deux instances et les faires communiquer (oui, <a href="http://philippe.poumaroux.free.fr/index.php?tag/LibrePlan">LibrePlan</a> sait aussi faire ça).</p>
<p>Accessoirement, j'ai également commis une image (très perfectible) pour ceux qui veulent hacker Libreplan. Elle est <a href="https://hub.docker.com/r/poum/libreplan/" hreflang="en" title="Image docker pour hacker LibrePlan">ici</a>.</p>Sortie de Sonar 2.14urn:md5:43f49399a25bddfdc96021d3e962fb012012-03-19T18:01:00+01:002012-10-19T18:46:54+02:00PoumNouvelles versionsGNU Lesser GPLJavaMavenPHPPostgresqlrèglesSonarQube<p><img src="http://philippe.poumaroux.free.fr/public/sonar.png" alt="Sonar" title="Sonar, janv. 2012" /></p>
<p>Sortie de la version 2.14 de <a href="http://philippe.poumaroux.free.fr/index.php?tag/Sonar">Sonar</a>, l'outil qualimétrique multi-langages, dont <a href="http://philippe.poumaroux.free.fr/index.php?tag/Java">Java</a> et <a href="http://philippe.poumaroux.free.fr/index.php?tag/PHP">PHP</a>, appelable via <a href="http://philippe.poumaroux.free.fr/index.php?tag/Maven">Maven</a> et s'appuyant sur un SGBD dont <a href="http://philippe.poumaroux.free.fr/index.php?tag/Postgresql">Postgresql</a>. Au menu, détection des copier/coller entre projets pour tous les langages, ajout de notes aux <a href="http://philippe.poumaroux.free.fr/index.php?tag/r%C3%A8gles">règles</a>, capacité de récupérer des informations concernant les utilisateurs depuis des systèmes tiers, notification par mail pour les nouvelles violations et amélioration de la carte des projets.</p>
<p>Sonar est sous licence <a href="http://philippe.poumaroux.free.fr/index.php?tag/GNU%20Lesser%20GPL">GNU Lesser GPL</a> version 3, lois suisses.</p>
<p>Pour le <a href="http://nemo.sonarsource.org/" hreflang="fr" title="Sonar sur le site Nemo">voir en action sur le site nemo</a> et <a href="http://dist.sonar.codehaus.org/sonar-2.14.zip" hreflang="en" title="Télécharger Sonar ">pour le télécharger</a>.</p> <p>Voici la traduction des <a href="http://www.sonarsource.org/downloads/#2.14" hreflang="en" title="Notes de la version 2.14 de Sonar">notes de version</a>:</p>
<h2>Bug</h2>
<ul>
<li>SONAR-1945 – inter blocage entre Sonar 2.2 et MySQL</li>
<li>SONAR-2080 – Rafraichissement de règle lors du changement d'un paramètre d'une règle héritée</li>
<li>SONAR-2190 – blocage de la base de données quand 2 projets sont construits en même temps</li>
<li>SONAR-2211 – interblocage de la base de données quand on vide la base avec Sonar 2.3 et SQL Server 2005</li>
<li>SONAR-2885 – SONAR-2637 de retour dans Sonar 2.11 sur IE8 et IE9</li>
<li>SONAR-2907 – deux branches du même projet (qui sont considérées comme des projets différents dans Sonar) ne peuvent pas avoir de réglages propres à chacune</li>
<li>SONAR-2940 – Filtres : impossible de trier la colonne "langage" de 2 façons</li>
<li>SONAR-3001 – Quand on modifie la métrique associée avec l'axe des couleurs de la carte des projets, l'infobulle peut quelque fois ne jamais disparaître</li>
<li>SONAR-3009 – les Widgets ne peuvent pas être configurés sur IE9</li>
<li>SONAR-3091 – Le widget "Evénements" ne doit pas afficher d'événement sur les instantanés qui sont sur le point d'être supprimés</li>
<li>SONAR-3092 – Le widget chronogramme n'affiche pas les instantanés contenant des violations de règles pondérées à 0</li>
<li>SONAR-3102 – Incapable de voir ou de mettre à jour une revue qui a été créée/affectée/commentée par un utilisateur supprimé</li>
<li>SONAR-3112 – Métriques mal configurées</li>
<li>SONAR-3129 – Les colonnes spéciales telles que Version, Langage, date de build, … ne peuvent pas être ajoutées au filtre quand la langue n'est pas l'anglais</li>
<li>SONAR-3142 – PurgeDependencies prend trop de temps pour se terminer</li>
<li>SONAR-3143 – Le titre du bouton "Créer un plan d'action" est mal modifié quand le plan d'action ne peut pas être créé</li>
<li>SONAR-3171 – Espace manquant dans la description de la recherche descendante</li>
<li>SONAR-3184 – La page de revues ne peut pas être affichée quand une revue est associée à un projet supprimé</li>
<li>SONAR-3198 – Action Plan: Impossible de régler la date d'exécution au jour actuel</li>
<li>SONAR-3199 – Action Plan: Manage Action plans –> Manage action plans</li>
<li>SONAR-3201 – Action Plan: problèmes de tri</li>
<li>SONAR-3206 – Impossible de supprimer des instantanés de l'historique</li>
<li>SONAR-3223 – Erreur dans la recherche de revue quand le résultat est lié à une ressource supprimée</li>
<li>SONAR-3230 – Vol de session utilisateur</li>
<li>SONAR-3235 – Rend les nombres non séparables sur les widgets des points chauds</li>
<li>SONAR-3241 – Métrique "Lignes à couvrir" est cachée tandis que "Lignes non couvertes" ne l'est pas</li>
<li>SONAR-3247 – L'URL de base favorite des Web Services est incorrecte</li>
<li>SONAR-3253 – Possible exception non traitée dans org.sonar.api.measures.Measure#setData(String)</li>
<li>SONAR-3254 – Quand une violation est attachée à un code source vide, le visualisateur de code échoue à affiche cette violation</li>
<li>SONAR-3255 – La descente dans les violations de SQALE n'arrive pas au bout proprement</li>
<li>SONAR-3275 – ArrayIndexOutOfBoundsException dans URL /chart</li>
<li>SONAR-3284 – L'expression rationnelle Header CheckStyle gère utilisant incorrectement ignoreLines au lieu de multiLines provoquant l'échec de la fonction à chaque fois</li>
</ul>
<h2>Améliorations</h2>
<ul>
<li>SONAR-1650 – Ajout d'une icone étoile dans l'entête du visualiseur de code pour facilement marquer un fichier Java comme favori</li>
<li>SONAR-1707 – Ajout de la colonne SNAPSHOTS.BUILD_DATE</li>
<li>SONAR-1960 – Les propriétés DBCleaner doivent être exprimées en semaines au lieu de mois</li>
<li>SONAR-2009 – Redirection vers l'URL d'origine quand l'utilisateur se connecte</li>
<li>SONAR-2061 – API: possibilité de déclarer des métriques sans aucune données d'historique</li>
<li>SONAR-2124 – Affiche la différence quand des règles dans des profils dérivés sont modifiées</li>
<li>SONAR-2132 – Redirection vers la dernière page après connexion</li>
<li>SONAR-2416 – Suppression complète du dépôt interne Maven Sonar qui était utilisé par Sonar mojo version 1.0-beta-1</li>
<li>SONAR-2754 – Fournit une nouvelle option dans le mécanisme de 'nettoyage de la maison' pour supprimer les anciennes mesures sur les répertoires et les paquets</li>
<li>SONAR-2756 – Supprime les mesures reliées aux exigences du modèle de qualité</li>
<li>SONAR-2807 – Le DB Cleaner ne doit conserver qu'un instantané par jour</li>
<li>SONAR-2946 – Affiche les entrées des propriétés dans l'interface dans tous les cas</li>
<li>SONAR-2959 – Ajoute les propriétés des batch sonar.showSql et sonar.showSqlResults</li>
<li>SONAR-2990 – Le filtre de catégorie est perdu quand on ajoute un widget au tableau de bord</li>
<li>SONAR-2994 – Traduction manquante pour les pages 'Enregistrement' et 'Connexion'</li>
<li>SONAR-2995 – Suppression du lien "Enregistrement" de l'index du tableau</li>
<li>SONAR-3014 – La colonne "Liens" du tableau de bord des projets fournit un lien de connexion développeur que les navigateurs ne gèrent pas</li>
<li>SONAR-3040 – Affiche projet/module avec le chemin d'accès du fichier dans l'en-tête du visualisateur de code</li>
<li>SONAR-3059 – Supprime le Toolkit 1.3.x Infovis Javascript du bundle Sonar</li>
<li>SONAR-3081 – Mise à jour du widget "Violations" de façon à afficher le nombre de "nouvelles violations"</li>
<li>SONAR-3088 – Quand on passe d'une page projet à une autre page projet, la configuration de vue différentielle doit être conservée</li>
<li>SONAR-3094 – Amélioration de l'affichage de l'onglet "Vues différentielles" dans la page "Préférences globales"</li>
<li>SONAR-3104 – Amélioration de l'utilité de la page 'Historique" et suppression des événéments de catégorie</li>
<li>SONAR-3120 – Les ressources associées à un module qui a été supprimé d'un projet multi-modules ne sont jamais supprimées</li>
<li>SONAR-3137 – Récupère des informations sur les utilisateurs depuis un système externe</li>
<li>SONAR-3138 – Retour à la base de données Sonar si un fournisseur de sécurité externe est en échec</li>
<li>SONAR-3139 – Utilise Sonar CPD avec le point d'extension existant CpdMapping</li>
<li>SONAR-3144 – sonar-cpd-plugin ne doit pas dépendre de PMD</li>
<li>SONAR-3147 – Web service pour lister les widgets disponibles</li>
<li>SONAR-3148 – Ne pas enregistrer les erreurs quand l'URL URL /charts/trends a de mauvais paramètres</li>
<li>SONAR-3150 – Réduction de la taille des plugins PMD et FindBugs</li>
<li>SONAR-3155 – Changement du message d'information affiché par le widget chronogramme quand un seul instantané est disponible</li>
<li>SONAR-3164 – AnnotationCheckFactory ne détecte pas les propriétés déclarées dans les classes héritées</li>
<li>SONAR-3169 – API: nouvelle classe utilitaire org.sonar.api.utils.FieldUtils2</li>
<li>SONAR-3175 – Documentation de la contrainte relative au nombre de fichiers JAR dans les répertoires jdbc-driver</li>
<li>SONAR-3176 – Documentation des propriétés des vues différentielles complétée</li>
<li>SONAR-3180 – Suppression de la prise en charge du connecteur AIP</li>
<li>SONAR-3185 – La valeur par défaut de la propriété 'sonar.authenticator.createUsers' doit être vraie et pas fausse</li>
<li>SONAR-3200 – Plan d'action: affiche la date de clôture dans la liste des plans des actions clôturées</li>
<li>SONAR-3205 – Mise à jour vers JaCoCo 0.5.6</li>
<li>SONAR-3228 – Certaines métriques ne sont pas mémorisées si elles ont la valeur 0 tout en pouvant être utilisées dans l'interface web de Sonar</li>
<li>SONAR-3239 – Dépréciation des métriques PARAGRAPHS, PARAGRAPH_COMPLEXITY et PARAGRAPH_COMPLEXITY_DISTRIBUTION</li>
<li>SONAR-3242 – Les boutons de revue ne doivent pas cacher le titre de la violation</li>
<li>SONAR-3244 – Suppression du message "Connecté" en cas d'authentification réussie</li>
<li>SONAR-3246 – Fournit les fonctions "zoom +/zoom -" dans le tableau de bord des projets</li>
<li>SONAR-3248 – Lors de la suppression d'un projet, les commentaires de revue et les plans d'action liés à ce projet ne sont pas supprimés</li>
<li>SONAR-3258 – Plus d'utilisateurs supprimés dans la base de données Sonar, maintenant ils sont désactivés</li>
<li>SONAR-3263 – Suppression de la propriété sonar.purge.minimumPeriodInHours</li>
<li>SONAR-3269 – Ajout de la prise en charge du code multilignes dans le marquage Sonar</li>
<li>SONAR-3273 – Suppression des ascenseurs horizontaux inutiles dans IE7</li>
<li>SONAR-3307 – Ajout du paramètre rewriteBatchedStatements=true à l'URL JDBC MySQL JDBC URL</li>
<li>SONAR-3313 – Réduction drastique de la consommation mémoire par Sonar quand il existe un nombre imposant de blocs dupliqués dans un projet</li>
</ul>
<h2>Nouvelles fonctionnalités</h2>
<ul>
<li>SONAR-1492 – Permet de mettre des notes par règle qualité</li>
<li>SONAR-2069 – Nouveau widget de carte des projets</li>
<li>SONAR-2292 – Conception de la gestion des groupes our une meilleure extensibilité</li>
<li>SONAR-2747 – Mécanisme de notification par email pour être averti quand de nouvelles violations ont été créées sur un projet</li>
<li>SONAR-2757 – Refonte des mécanismes de purge pour éviter toute requête de balayage complet sur la table des instantanés</li>
<li>SONAR-3012 – Nouveau widget pour surveiller l'activité de revue</li>
<li>SONAR-3166 – Fournit par défaut une nouvelle page "Revue"</li>
<li>SONAR-3179 – API pour définir les ressources</li>
<li>SONAR-3181 – Autorise le mécanisme de détection de duplication inter projets avec le vieux point d'extension CpdMapping et pour tous les langages</li>
<li>SONAR-3208 – Même pour la vue ou les ressources en développeurs, les pages de détail des violations et de mesure doivent permettre de descendre jusqu'au code source</li>
<li>SONAR-3209 – Fournit une API Sonar pour enregistrer et retrouver certaines mesures par ligne dans un fichier source</li>
<li>SONAR-3210 – Pour les projets Java, fournit les commentaires et la ligne de mesure pour chaque fichier source Java</li>
<li>SONAR-3231 – API: permet d'associer la mesure avec la personne qui a livré le code</li>
</ul>
<h2>Tâches</h2>
<ul>
<li>SONAR-3207 – API: suppression du point d'extension obsolète org.sonar.api.batch.Purge</li>
<li>SONAR-3212 – Format de document de conf/sonar.properties</li>
<li>SONAR-3238 – Dépréciation du vieux format pour DUPLICATIONS_DATA</li>
<li>SONAR-3245 – Version minimale requise de Maven pour la construction de Sonar doit être déclaré à 2.2.1</li>
</ul>