start export markdown

This commit is contained in:
Tykayn 2021-03-02 11:57:31 +01:00 committed by tykayn
parent a2d9cc175c
commit b131a2400b
5 changed files with 229 additions and 35 deletions

View File

@ -27,7 +27,7 @@ puis naviguer sur https://localhost:3300
Mettre les gtg_tasks.xml Mettre les gtg_tasks.xml
Ce serveur va lire un fichier dans le dossier source, celui des tâches de GTG, puis en faire un json, et en sortir des statistiques dans une page web. Ce serveur va lire un fichier dans le dossier **source**, celui des tâches de GTG, puis en faire un json, et en sortir des statistiques dans une page web.
## sources ## sources

View File

@ -1 +1,140 @@
# Export de Tags GTG du 02/03/2021 à 11:09:59 # Export de Tâches GTG
date: 02/03/2021 à 11:56:59
# Rapport des tâches durant les 7 derniers jours
## ont été fermées
## ont été ouvertes
---
# Stats de fermeture des tâches
---
# Export de toutes les 264 tâches ouvertes GTG
---
# Export de toutes les 183 tâches fermées GTG
# Export de Tags GTG
* @osm , 39
* @graph , 10
* @forum , 2
* @dev , 115
* @vélo , 6
* @écriture , 8
* @rémunéré , 16
* @edu , 28
* @mail , 23
* @vacances , 12
* @tel , 17
* @mobilizon , 26
* @elec , 4
* @pognon , 9
* @travaux , 29
* @administratif , 9
* @associatif , 34
* @serveur , 3
* @work , 30
* @nextcloud , 16
* @encryption , 2
* @untouched , 82
* @adminsys , 16
* @recherche , 19
* @tasks , 5
* @social , 14
* @GTG , 5
* @sys , 30
* @vps , 5
* @qzine , 3
* @blog , 11
* @solabaie , 2
* @createrra , 1
* @contacts , 3
* @carnet , 1
* @opendata , 2
* @achat , 15
* @cuisine , 1
* @livre , 12
* @achats , 0
* @nas , 7
* @musique , 1
* @DL , 1
* @nginx , 2
* @sysadmin , 1
* @impots , 1
* @degfam , 1
* @tesla , 1
* @lecture , 13
* @boulot , 22
* @mastodon , 4
* @backup , 33
* @claire , 12
* @famille , 11
* @video , 3
* @waiting_for, , 0
* @déconfinage , 11
* @waiting_for , 11
* @josm , 14
* @bot , 2
* @scraping , 13
* @chapril , 1
* @jardin , 15
* @cil-gometz , 9
* @photo , 2
* @fanzine , 3
* @interview , 4
* @audio , 2
* @dadou , 2
* @gtg , 2
* @resolv , 1
* @fibre , 1
* @peertube , 3
* @cloud , 2
* @media , 2
* @extérieur , 14
* @voixdunuc , 5
* @fediverse , 42
* @admins , 0
* @april , 3
* @spaceship , 12
* @ordi , 1
* @plume , 3
* @oauth , 9
* @monitoring , 3
* @bitwarden , 1
* @archives , 2
* @chiffrement , 14
* @graphql , 5
* @livestream , 3
* @install , 1
* @rails , 3
* @fatland , 2
* @courrier , 1
* @klassroom , 2
* @caisse , 3
* @symfnoy , 0
* @domoticz , 2
* @autohébergement , 3
* @grivery , 3
* @framadate , 12
* @badoune , 2
* @grosse_pierre , 6
* @symfony , 13
* @inbox , 2
* @frontend , 11
* @spare , 1
* framadate , 0
* @vosk , 1
* @rangement , 3
* @mission , 8
* @assurance , 3
rapport généré avec gtg2nodejs par tykayn - contact@cipherbliss.com

View File

@ -12,6 +12,7 @@
"fs": "0.0.1-security", "fs": "0.0.1-security",
"http-errors": "^1.6.3", "http-errors": "^1.6.3",
"jade": "^1.11.0", "jade": "^1.11.0",
"lodash": "^4.17.21",
"morgan": "^1.9.1", "morgan": "^1.9.1",
"pug": "^3.0.0" "pug": "^3.0.0"
}, },

View File

@ -1,5 +1,6 @@
var express = require('express'); var express = require('express');
var fs = require('fs'); var fs = require('fs');
var _ = require('lodash');
var parseString = require("xml2js").parseString; var parseString = require("xml2js").parseString;
var router = express.Router(); var router = express.Router();
@ -68,16 +69,28 @@ function computeData(jsonAllData) {
jsonAllData.stats = { jsonAllData.stats = {
tasksCount : jsonAllData.tasks.project.task.length, tasksCount : jsonAllData.tasks.project.task.length,
tasksClosed: 0, tasksClosed : 0,
tasksOpen : 0, tasksOpen : 0,
maxTasksCountPerTag : 0, maxTasksCountPerTag: 0,
listOpen : [], listOpen : [],
listOpenWeekly : [],
listClosed : [], listClosed : [],
listClosedWeekly : [],
} }
for (let t of jsonAllData.tasks.project.task) { for (let t of jsonAllData.tasks.project.task) {
// console.log('t', t) // console.log('t', t)
let tags = t["$"].tags.split(',') let tags = t["$"].tags.split(',')
// count open and closed tasks
if(t['$'].status == 'Active'){
jsonAllData.stats.listOpen.push(t)
}else if(t['$'].status == 'Done'){
jsonAllData.stats.listClosed.push(t)
}
for (let tag of tags) { for (let tag of tags) {
// console.log('tag', tag) // console.log('tag', tag)
jsonAllData.tags.tagstore.tag.map(elem => { jsonAllData.tags.tagstore.tag.map(elem => {
@ -103,25 +116,21 @@ function computeData(jsonAllData) {
elem.tasksListByTitle.push(t.title) elem.tasksListByTitle.push(t.title)
if (t['$'].status == "Active") { if (t['$'].status == "Active") {
elem.tasksListIsActiveByTitle.push(t.title) elem.tasksListIsActiveByTitle.push(t.title)
} }
if (t['$'].status == "Done") { if (t['$'].status == "Done") {
elem.tasksListIsDoneByTitle.push(t.title) elem.tasksListIsDoneByTitle.push(t.title)
} }
} }
if(elem.tasks > jsonAllData.stats.maxTasksCountPerTag){ if (elem.tasks > jsonAllData.stats.maxTasksCountPerTag) {
jsonAllData.stats.maxTasksCountPerTag = elem.tasks jsonAllData.stats.maxTasksCountPerTag = elem.tasks
} }
}) })
} }
if (t.donedate) {
jsonAllData.stats.tasksClosed++;
jsonAllData.stats.listOpen.push(t);
} else {
jsonAllData.stats.tasksOpen++;
}
// console.log('tags', tags)
} }
// sort tags by name
return jsonAllData return jsonAllData
} }
@ -146,28 +155,21 @@ function getPercent(someCount, total) {
function computeBgColorOnProportionOfOpenTasks(someProportionNumber) { function computeBgColorOnProportionOfOpenTasks(someProportionNumber) {
let result = ''; let result = '';
if(someProportionNumber >= 95){ if (someProportionNumber >= 95) {
result = 'proportion-over-95' result = 'proportion-over-95'
} } else if (someProportionNumber >= 90) {
else if(someProportionNumber >= 90){
result = 'proportion-over-90' result = 'proportion-over-90'
} } else if (someProportionNumber >= 80) {
else if(someProportionNumber >= 80){
result = 'proportion-over-80' result = 'proportion-over-80'
} } else if (someProportionNumber >= 65) {
else if(someProportionNumber >= 65){
result = 'proportion-over-65' result = 'proportion-over-65'
} } else if (someProportionNumber >= 50) {
else if(someProportionNumber >= 50){
result = 'proportion-over-50' result = 'proportion-over-50'
} } else if (someProportionNumber >= 40) {
else if(someProportionNumber >= 40){
result = 'proportion-over-40' result = 'proportion-over-40'
} } else if (someProportionNumber >= 25) {
else if(someProportionNumber >= 25){
result = 'proportion-over-25' result = 'proportion-over-25'
} } else if (someProportionNumber >= 15) {
else if(someProportionNumber >= 15){
result = 'proportion-over-15' result = 'proportion-over-15'
} }
@ -177,9 +179,59 @@ function computeBgColorOnProportionOfOpenTasks(someProportionNumber) {
function exportToMarkdown(res) { function exportToMarkdown(res) {
let datenow = new Date(); let datenow = new Date();
let dataTagsMd = '# Export de Tags GTG du '+ datenow.toLocaleString(); let dataTagsMd = `# Export de Tâches GTG \n date: ` + datenow.toLocaleString();
// fichier de rapport des tâches fermées durant les 7 derniers jours
dataTagsMd += `\n# Rapport des tâches durant les 7 derniers jours `;
dataTagsMd += `\n `;
dataTagsMd += `\n## ${jsonAllData.stats.listClosedWeekly} ont été fermées `;
dataTagsMd += `\n `;
dataTagsMd += `\n## ${jsonAllData.stats.listOpenWeekly} ont été ouvertes `;
dataTagsMd += `\n `;
dataTagsMd += `\n--- `;
// fichier de rapport des tâches fermées durant les 31 derniers jours
// stats de fermeture des tâches
dataTagsMd += `\n# Stats de fermeture des tâches `;
dataTagsMd += `\n `;
dataTagsMd += `\n--- `;
dataTagsMd += `\n `;
dataTagsMd += `\n# Export de toutes les ${jsonAllData.stats.listOpen.length} tâches ouvertes GTG \n `;
dataTagsMd += `\n `;
// jsonAllData.stats.listOpen.map(elem => {
// dataTagsMd += `\n## ${elem.title} `;
// dataTagsMd += `\n statut : ${elem['$'].status} `;
// dataTagsMd += `\n créé le : ${elem.addeddate} `;
// dataTagsMd += `\n modifié le : ${elem.modified} `;
// dataTagsMd += `\n prévu pour : ${elem.duedate | ''} `;
// dataTagsMd += `\n ${elem.content} `;
// })
dataTagsMd += `\n--- `;
dataTagsMd += `\n `;
dataTagsMd += `\n# Export de toutes les ${jsonAllData.stats.listClosed.length} tâches fermées GTG \n `;
dataTagsMd += `\n `;
//
// jsonAllData.stats.listClosed.map(elem=>{
// dataTagsMd += `\n * ${elem.title} `;
// })
dataTagsMd += `\n `;
dataTagsMd += `\n# Export de Tags GTG \n `;
dataTagsMd += `\n `;
dataTagsMd += `\n `;
let sortedTagsByTitle = _.sortBy(jsonAllData.tags.tagstore.tag, [(o) => {
o["$"].name
}])
sortedTagsByTitle.map(elem => {
console.log(`elem `, elem['$'].name, elem.tasks)
dataTagsMd += `\n * ${elem['$'].name} , ${elem.tasks | 0}`;
})
dataTagsMd += `\n `;
dataTagsMd += `\n rapport généré avec gtg2nodejs par tykayn - contact@cipherbliss.com `;
// write file to disk // write file to disk
fs.writeFile('output/export_tags.md', dataTagsMd, 'utf8', (err) => { fs.writeFile(`output/export_tags.md`, dataTagsMd, `utf8`, (err) => {
if (err) { if (err) {
console.log(`Error writing file: ${err}`); console.log(`Error writing file: ${err}`);

View File

@ -6,8 +6,10 @@ block content
section.tasks section.tasks
h2 #{json.tasks.project.task.length} Tâches h2 #{json.tasks.project.task.length} Tâches
ul.stats ul.stats
li #{json.stats.tasksOpen} ouvertes li #{json.stats.listOpen.length} ouvertes
li #{json.stats.tasksClosed} fermées li #{json.stats.listOpenWeekly.length} ouvertes cette semaine
li #{json.stats.listClosed.length} fermées
li #{json.stats.listClosedWeekly.length} fermées cette semaine
section.tags section.tags
h2 #{json.tags.tagstore.tag.length} Tags h2 #{json.tags.tagstore.tag.length} Tags
p maximum de #{json.stats.maxTasksCountPerTag} tâches pour un tag. p maximum de #{json.stats.maxTasksCountPerTag} tâches pour un tag.