r8755: Automated commit for Debian build of irc-logger upstream-version-0.8.2
[irc-logger.git] / logger.lisp
index deb4ba5c8f9f2488de3ec32494d1b14a37cbbf3a..14294517eca26b1827a6f374aad079c33c88d02d 100644 (file)
@@ -4,7 +4,7 @@
 ;;;; Purpose: A IRC logging bot 
 ;;;; Author:  Kevin Rosenberg
 
-(in-package irc-logger)
+(in-package #:irc-logger)
 
 (defvar *daemon-monitor-process* nil "Process of background monitor.")
 
     *standard-output*))
 
 (defun add-log-entry (stream fmt &rest args)
-  (format-date-time (get-universal-time) :stream stream)
-  (write-char #\space stream)
-  (apply #'format stream fmt args)
-  (write-char #\newline stream)
-  (force-output stream))
+  (handler-case 
+      (progn
+       (format-date-time (get-universal-time) :stream stream)
+       (write-char #\space stream)
+       (apply #'format stream fmt args)
+       (write-char #\newline stream)
+       (force-output stream))
+    (error (e)
+     (warn "Error ~A when trying to add-log-entry '~A'." e
+          (apply #'format nil fmt args)))))
 
 (defun add-private-log-entry (logger fmt &rest args)
   (apply #'add-log-entry (get-private-log-stream logger) fmt args))
     (output-event msg :kick channel who-kicked)
     (when (string-equal (nickname logger) who-kicked)
       (add-private-log-entry
+       logger
        "Logging daemon ~A has been kicked from ~A (~A)"
        (nickname logger) channel (trailing-argument msg))
       (daemon-sleep 1)
       (t
        (add-log-entry
        (get-unknown-log-stream (find-logger-with-connection (connection msg)))
+       "~A"
        (raw-message-string msg))))
     result))
 
 (defun is-connected (logger)
   (%is-connected logger))
 
+(defparameter *timeout* 60)
+
 (defun is-connected (logger)
   #-allegro (%is-connected logger)
-  #+allegro (mp:with-timeout (60 nil)
+  #+allegro (mp:with-timeout (*timeout* nil)
              (%is-connected logger)))
 
+(defun quit-maybe-timeout (connection msg)
+  #-allegro (quit connection msg)
+  #+allegro (mp:with-timeout (*timeout* nil)
+             (quit connection msg)))
+
 (defun %is-connected (logger)
   (when (ignore-errors (ping (connection logger) (server logger)))
     (dotimes (i 20)
     
     (log-disconnection logger)
     (when (connection logger)
-      (ignore-errors (quit (connection logger) "Client terminated by server"))
+      (ignore-errors (quit-maybe-timeout (connection logger) "Client terminated by server"))
       (setf *recon-nick* (nickname logger)
            *recon-server* (server logger)
            *recon-username* (username logger)
 (defun daemon-monitor ()
   "This function runs in the background and monitors the connection of the logger."
   ;; run forever
-  (do ()
-      ()
-    (block main-loop
-      (dolist (logger *loggers*)
-       (do ((warning-time (warning-message-utime logger) (warning-message-utime logger)))
-           ((or (is-connected logger) (null warning-time)))
-         (cond
+  (loop
+   do
+   (block main-loop
+     (dolist (logger *loggers*)
+       (do ((warning-time (warning-message-utime logger) (warning-message-utime logger)))
+          ((or (is-connected logger) (null warning-time)))
+        (cond
           ((and warning-time (> (- (get-universal-time) warning-time) 180))
            ;;give up frequent checking because no disconnection despite waiting
            (setf (warning-message-utime logger) nil))
            (return-from main-loop))
           (t
            (daemon-sleep 30)))))
-      (do ((i 0 (1+ i)))
-         ((or (>= i 20) (some (lambda (logger) (warning-message-utime logger)) *loggers*))) 
-       (daemon-sleep 15)))))
+     (do ((i 0 (1+ i)))
+        ((or (>= i 20) (some (lambda (logger) (warning-message-utime logger)) *loggers*))) 
+       (daemon-sleep 15)))))