[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/rt-liberation 26d77ec 53/72: * rt-liberation-report.el:
From: |
Stefan Monnier |
Subject: |
[elpa] externals/rt-liberation 26d77ec 53/72: * rt-liberation-report.el: Complete first working version. |
Date: |
Wed, 5 Aug 2020 11:57:43 -0400 (EDT) |
branch: externals/rt-liberation
commit 26d77ec7855a31bfe1667276432ad33eefa06c09
Author: Yoni Rabkin <yrk@gnu.org>
Commit: Yoni Rabkin <yrk@gnu.org>
* rt-liberation-report.el: Complete first working version.
---
rt-liberation-report.el | 51 +++++++++++++++++++++++++++++++++++--------------
1 file changed, 37 insertions(+), 14 deletions(-)
diff --git a/rt-liberation-report.el b/rt-liberation-report.el
index 2e6a545..b2af361 100644
--- a/rt-liberation-report.el
+++ b/rt-liberation-report.el
@@ -73,32 +73,55 @@ return `nil'."
(string-lessp (car a) (car b)))))
r))
-(defun rt-liber-report-count-by-date (l)
- (let ((h (make-hash-table :test 'equal)))
+(defun rt-liber-report-count (f l)
+ (let (out)
(while l
- (let ((d (or (gethash (caar l) h) 0)))
- (puthash (caar l) (+ d 1) h))
+ (let* ((head (car l))
+ (old-value (cdr (assoc (funcall f head) out))))
+ (if old-value
+ (setcdr (assoc (funcall f head) out) (+ old-value 1))
+ (setq out (append out `((,(funcall f head) . 1))))))
(setq l (cdr l)))
- h))
+ out))
+
+(defun rt-liber-report-count-by-date (l)
+ (rt-liber-report-count #'car l))
(defun rt-liber-report-count-by-owner (l)
- (let ((h (make-hash-table :test 'equal)))
- (while l
- (let ((d (or (gethash (cdar l) h) 0)))
- (puthash (cdar l) (+ d 1) h))
- (setq l (cdr l)))
- h))
+ (rt-liber-report-count #'cdr l))
+
+(defun rt-liber-report-print-csv (header l)
+ (let (out)
+ (with-temp-buffer
+ (insert (format "\n%s\n" header))
+ (dolist (entry l)
+ (insert
+ (format "%s, %s\n" (car entry) (cdr entry))))
+ (setq out (buffer-string)))
+ out))
(defun rt-liber-report (rt-queue start-date end-date)
(let ((tickets (rt-liber-report-scan-interval
(rt-liber-report-get-interval
- rt-queue start-date end-date)))
- by-date by-owner)
+ rt-queue end-date start-date)))
+ by-date by-owner
+ by-date-out
+ by-owner-out)
(when (not tickets)
(error (concat "no tickets in interval between "
start-date " and " end-date)))
+ ;; collate
(setq by-date (rt-liber-report-count-by-date tickets)
- by-owner (rt-liber-report-count-by-owner tickets))))
+ by-owner (rt-liber-report-count-by-owner tickets))
+ ;; rank owners by resolved tickets
+ (setq by-owner
+ (sort
+ by-owner
+ #'(lambda (a b)
+ (> (cdr a) (cdr b)))))
+ ;; print
+ (insert (rt-liber-report-print-csv "date, resolved" by-date))
+ (insert (rt-liber-report-print-csv "owner, resolved" by-owner))))
(provide 'rt-report)
- [elpa] externals/rt-liberation 0c68b62 69/72: add "this file is a part of...", (continued)
- [elpa] externals/rt-liberation 0c68b62 69/72: add "this file is a part of...", Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation c95b745 45/72: Update email address., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation f2d75b7 55/72: * rt-liberation-report.el: pass to main machine., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation a039fb5 56/72: * rt-liberation-report.el: Bump to other machine., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation d683385 63/72: * why-rt-liberation-is-under-gplv3.txt: what it says, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 5fc9f6d 66/72: friendlier caption, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation dd92e88 65/72: * more upgrade work, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation b152b61 70/72: * rt-liberation.el: complete elpa header, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation cdd81a8 46/72: * rt-report.el: Add new file., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation cd29eac 52/72: Add collation., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 26d77ec 53/72: * rt-liberation-report.el: Complete first working version.,
Stefan Monnier <=
- [elpa] externals/rt-liberation e7779ce 54/72: * rt-liberation-report.el: Add Total, found bug., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation e3cc2f5 57/72: * rt-liberation-report.el: Fix sorting bug., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 0cfaa45 59/72: Merge branch 'report', Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation bab09f7 64/72: Upgrade to GPLv3, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 1629dd3 68/72: * why-rt-liberation-is-under-gplv3.txt: better explanation, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation ea3e01b 71/72: * NEWS: new file, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 277378d 47/72: Rename to fit file naming convention., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation cca328c 49/72: * rt-liberation.el: Add Resolved time predicate., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 09f7ac0 60/72: * rt-liberation.el: new function rt-liber-print-query, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 05beb9f 72/72: * rt-liberation.el: remove old cli code, Stefan Monnier, 2020/08/05