Sfoglia il codice sorgente

More timeout fixes

Innokenty Enikev 10 anni fa
parent
commit
da96d00b63
3 ha cambiato i file con 25 aggiunte e 16 eliminazioni
  1. 10 6
      chatikbot.lisp
  2. 1 1
      eliza.lisp
  3. 14 9
      forecast.lisp

+ 10 - 6
chatikbot.lisp

@@ -159,7 +159,7 @@
 	      (error (e) (log:error e))))))
 	      (error (e) (log:error e))))))
     (error (e)
     (error (e)
       (log:error e)
       (log:error e)
-      (telegram-send-message chat-id "some shit happened"))))
+      (telegram-send-message chat-id "Ошибочка вышла"))))
 
 
 
 
 (defun handle-cmd-rates (chat-id message-id args)
 (defun handle-cmd-rates (chat-id message-id args)
@@ -174,11 +174,15 @@
     (telegram-send-message
     (telegram-send-message
      chat-id
      chat-id
      (if location
      (if location
-         (forecast-format (forecast
-                           (aget "latitude" location)
-                           (aget "longitude" location)
-                           :hourly (find "hourly" args :key #'string-downcase :test #'equal)
-                           :daily (find "daily" args :key #'string-downcase :test #'equal)))
+	 (handler-case
+	     (forecast-format (forecast
+			       (aget "latitude" location)
+			       (aget "longitude" location)
+			       :hourly (find "hourly" args :key #'string-downcase :test #'equal)
+			       :daily (find "daily" args :key #'string-downcase :test #'equal)))
+	   (error (e)
+	     (log:error e)
+	     "Ошибочка вышла"))
          "Так а ты чьих будешь?"))))
          "Так а ты чьих будешь?"))))
 
 
 
 

+ 1 - 1
eliza.lisp

@@ -81,7 +81,7 @@
   (let ((r (use-eliza-rules
   (let ((r (use-eliza-rules
             (read-from-string-no-punct input))))
             (read-from-string-no-punct input))))
     (cond
     (cond
-      ((null r))
+      ((null r) nil)
       ((and (consp (car r)) (eq 'function (caar r)))
       ((and (consp (car r)) (eq 'function (caar r)))
        (apply (cadar r) (cdr r)))
        (apply (cadar r) (cdr r)))
       ((keywordp (car r)) r)
       ((keywordp (car r)) r)

+ 14 - 9
forecast.lisp

@@ -4,15 +4,20 @@
 (defparameter +forecast-api-url+ "https://api.forecast.io/forecast" "forecast.io API endpoint")
 (defparameter +forecast-api-url+ "https://api.forecast.io/forecast" "forecast.io API endpoint")
 
 
 (defun forecast (lat lon &key time (currently t) minutely hourly daily alerts)
 (defun forecast (lat lon &key time (currently t) minutely hourly daily alerts)
-  (yason:parse
-   (flexi-streams:octets-to-string
-    (drakma:http-request (format
-                          nil
-                          "~A/~A/~A,~A~@[,~A~]?units=si&exclude=~:[currently,~;~]~:[minutely,~;~]~:[hourly,~;~]~:[daily,~;~]~:[alerts,~;~]flags&lang=ru"
-                          +forecast-api-url+ *forecast-api-key* lat lon time
-                          currently minutely hourly daily alerts))
-    :external-format :utf8)
-   :object-as :alist))
+  (handler-case
+      (bordeaux-threads:with-timeout (5)
+	(yason:parse
+	 (flexi-streams:octets-to-string
+	  (drakma:http-request (format
+				nil
+				"~A/~A/~A,~A~@[,~A~]?units=si&exclude=~:[currently,~;~]~:[minutely,~;~]~:[hourly,~;~]~:[daily,~;~]~:[alerts,~;~]flags&lang=ru"
+				+forecast-api-url+ *forecast-api-key* lat lon time
+				currently minutely hourly daily alerts))
+	  :external-format :utf8)
+	 :object-as :alist))
+    (bordeaux-threads:timeout (e)
+      (declare (ignore e))
+      (error "Timeout"))))
 
 
 (local-time:reread-timezone-repository :timezone-repository "/usr/share/zoneinfo/")
 (local-time:reread-timezone-repository :timezone-repository "/usr/share/zoneinfo/")