Skip to content

Commit fd887f5

Browse files
committed
Initial commit.
0 parents  commit fd887f5

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
_
2+
___ _ __ ___ | | ___ __ _ __ _ ___ _ __
3+
/ _ \ '__/ __|____| |/ _ \ / _` |/ _` |/ _ \ '__|
4+
| __/ | | (_|_____| | (_) | (_| | (_| | __/ |
5+
\___|_| \___| |_|\___/ \__, |\__, |\___|_|
6+
|___/ |___/
7+
8+
==================================================
9+
10+
Introduction
11+
============
12+
13+
This is a simple irc logger written in elisp!

erc-logger.el

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
;; _
2+
;; ___ _ __ ___ | | ___ __ _ __ _ ___ _ __
3+
;; / _ \ '__/ __|____| |/ _ \ / _` |/ _` |/ _ \ '__|
4+
;; | __/ | | (_|_____| | (_) | (_| | (_| | __/ |
5+
;; \___|_| \___| |_|\___/ \__, |\__, |\___|_|
6+
;; |___/ |___/
7+
8+
(defvar *erc-logger-log-directory* nil)
9+
(defvar *erc-logger-log-other-directory* nil)
10+
(defvar *erc-logger-log-timer* nil)
11+
(defvar *erc-logger-log-date* nil)
12+
(defvar *erc-logger-log-todays-date* nil)
13+
(defvar *erc-logger-irc-buffer-size-map*
14+
(make-hash-table :test 'equal))
15+
16+
(defun write-file-immut (filename)
17+
(let ((cur-buffer (current-buffer)))
18+
(with-temp-buffer
19+
(insert-buffer cur-buffer)
20+
(write-file filename))))
21+
22+
(defun erc-logger-log-start ()
23+
(interactive)
24+
(setq *erc-logger-log-directory* (file-name-as-directory *erc-logger-log-directory*)
25+
*erc-logger-log-other-directory* (file-name-as-directory *erc-logger-log-other-directory*))
26+
;; initialize hash table
27+
(dolist (erc-buffer (erc-buffer-list))
28+
(with-current-buffer (current-buffer)
29+
(switch-to-buffer erc-buffer)
30+
(unless (gethash erc-buffer *erc-logger-irc-buffer-size-map*)
31+
(puthash erc-buffer (buffer-size) *erc-logger-irc-buffer-size-map*))))
32+
(setq *erc-logger-log-todays-date* (datetime-format "%Y-%m-%d")
33+
*erc-logger-log-timer* (run-at-time "1 sec" 10 #'erc-log-buffers)))
34+
35+
(defun erc-logger-log-stop ()
36+
(interactive)
37+
(when *erc-logger-log-timer*
38+
(cancel-timer *erc-logger-log-timer*)))
39+
40+
(defun erc-log-buffers ()
41+
(if (and *erc-logger-log-directory*
42+
(file-directory-p *erc-logger-log-directory*))
43+
(progn (with-current-buffer (current-buffer)
44+
(dolist (erc-buffer (erc-buffer-list))
45+
(switch-to-buffer erc-buffer)
46+
(let* ((file-name (concat (buffer-name erc-buffer)
47+
;;(datetime-format "_%Y-%m-%d_%H:%M:%S.txt")
48+
(datetime-format "_%Y-%m-%d.txt")))
49+
(file-full-path (concat *erc-logger-log-directory*
50+
"/" file-name))
51+
(buffer-size (buffer-size)))
52+
(if (string= *erc-logger-log-todays-date* (datetime-format "%Y-%m-%d"))
53+
(progn
54+
(when (not (= buffer-size (gethash erc-buffer *erc-logger-irc-buffer-size-map*)))
55+
(write-file-immut file-full-path)
56+
(puthash erc-buffer buffer-size *erc-logger-irc-buffer-size-map*)))
57+
58+
;; compress log files and mv them to another directory on next day
59+
;; and clear the buffer, save to new files
60+
(progn (write-file-immut file-full-path)
61+
(if (directory-name-p *erc-logger-log-other-directory*)
62+
(let* ((dir-name (concat *erc-logger-log-other-directory*
63+
(datetime-format "%Y-%m-%d") "/")))
64+
(cl-flet ((transfer-file ()
65+
(rename-file file-full-path dir-name t)
66+
(unless
67+
(= 0 (shell-command
68+
(concat "gzip -9 -f "
69+
dir-name
70+
file-name)))
71+
(message "failed to compress file!"))))
72+
(if (file-exists-p dir-name)
73+
(transfer-file)
74+
(progn (make-directory dir-name)
75+
(when (file-exists-p dir-name)
76+
(transfer-file))))))
77+
(error "Invalid directory name, please set variable `*erc-logger-log-other-directory*' properly.")))
78+
))))
79+
(unless (string= *erc-logger-log-todays-date* (datetime-format "%Y-%m-%d"))
80+
(setq *erc-logger-log-todays-date* (datetime-format "%Y-%m-%d"))))
81+
(error "Invalid directory name, please set variable `*erc-logger-log-directory*' properly.")))

0 commit comments

Comments
 (0)