I'm trying to use a Zach Tellman's durable-queue to pass information from 
one part of my app to another. I have 3 queues. I also have a function that 
runs every 30 seconds, that is suppose to report some statistics for me: 

              (fn []
                (future
                  (slingshot/try+
                   (errors/log "Resource usage: "
                              
 (monitoring/show-stats-regarding-resources-used-by-this-app))
                   (errors/log "Stats about from-mysql-to-tables-queue: " 
(durable/stats from-mysql-to-tables-queue))
                   (errors/log "Stats about from-tables-to-topics-queue: " 
(durable/stats from-tables-to-topics-queue))
                   (errors/log "Stats about the 
from-topics-to-persistence-queue: " (durable/stats 
from-topics-to-persistence-queue))
                   (catch Object o
                     (slingshot/throw+ {
                                        :type ::cycle-resource-usage-report
                                        :error o
                                        }
                                       )))))

I think there is an error here, because I see the first (errors/log) but 
typically not anything after that. Can I rely on the fact that this should 
catch anything: 

                   (catch Object o

Because it doesn't seem to work. Instead, the app runs for 8 minutes, then 
prints data about the queues just once, then never again. Assuming an error 
is occuring, why can't I see the error? 


{:timestamp "17-10-09 01:27:45", :level :trace, :hostname "ip-172-31-4-54", 
:message ("STARTING!!!!")}

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver 
class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered 
via the SPI and manual loading of the driver class is generally unnecessary.


{:timestamp "17-10-09 01:28:16", :level :trace, :hostname "ip-172-31-4-54", 
:message ("\n\n\n\n\nResource usage: " "Memory in use 
(percentage/used/max-heap): (\"67%\" \"2414M\" \"3568M\")\n\nCPU usage 
(how-many-cpu's/load-average):  [4 1.56]\n\nFree memory in jvm: 
[1201758848]")}


{:timestamp "17-10-09 01:28:49", :level :trace, :hostname "ip-172-31-4-54", 
:message ("\n\n\n\n\nResource usage: " "Memory in use 
(percentage/used/max-heap): (\"81%\" \"2900M\" \"3568M\")\n\nCPU usage 
(how-many-cpu's/load-average):  [4 2.64]\n\nFree memory in jvm: 
[699798216]")}

;; removing redundant entries

{:timestamp "17-10-09 01:34:48", :level :trace, :hostname "UnknownHost", 
:message ("\n\n\n\n\nResource usage: " "Memory in use 
(percentage/used/max-heap): (\"87%\" \"3118M\" \"3568M\")\n\nCPU usage 
(how-many-cpu's/load-average):  [4 3.77]\n\nFree memory in jvm: 
[471249616]")}


{:timestamp "17-10-09 01:35:17", :level :trace, :hostname "ip-172-31-4-54", 
:message ("\n\n\n\n\nResource usage: " "Memory in use 
(percentage/used/max-heap): (\"87%\" \"3120M\" \"3568M\")\n\nCPU usage 
(how-many-cpu's/load-average):  [4 3.79]\n\nFree memory in jvm: 
[468602192]")}


{:timestamp "17-10-09 01:35:35", :level :trace, :hostname "ip-172-31-4-54", 
:message ("\nStats about from-mysql-to-tables-queue: " {"message" 
{:num-slabs 1, :num-active-slabs 1, :enqueued 306671, :retried 0, 
:completed 306660, :in-progress 8}})}


{:timestamp "17-10-09 01:35:50", :level :trace, :hostname "ip-172-31-4-54", 
:message ("\nStats about from-tables-to-topics-queue: " {})}


{:timestamp "17-10-09 01:35:50", :level :trace, :hostname "ip-172-31-4-54", 
:message ("\nStats about the from-topics-to-persistence-queue: " {})}


{:timestamp "17-10-09 01:36:15", :level :trace, :hostname "ip-172-31-4-54", 
:message ("\n\n\n\n\nResource usage: " "Memory in use 
(percentage/used/max-heap): (\"28%\" \"1007M\" \"3568M\")\n\nCPU usage 
(how-many-cpu's/load-average):  [4 4.14]\n\nFree memory in jvm: 
[1868654000]")}





So 8 minutes after the app starts, it print the lines with stats about the 
queues, just this one time, and then never again. I think an error must 
occur inside of the function that is suppose to report the queues. What 
would I have to do to see that error?

My core/main function looks like this:

(defn -main [& args]

  (slingshot/try+

   ;; 2017-10-04 -- see this:
   ;; 
https://stackoverflow.com/questions/28908835/ssl-peer-shut-down-incorrectly-in-java
   (System/setProperty "https.protocols" "TLSv1.1")
   
   (.addShutdownHook (Runtime/getRuntime)
                     (Thread.
                      #(do (println "addShutdownHook triggered. This app is 
shutting down.")
                           (stop))))

   ;; 2017-07-12 -- stealing code from here:
   ;; https://stuartsierra.com/2015/05/27/clojure-uncaught-exceptions
   ;; Assuming require [clojure.tools.logging :as log]
   (Thread/setDefaultUncaughtExceptionHandler
    (reify Thread$UncaughtExceptionHandler
      (uncaughtException [_ thread ex]
        (println ex "Uncaught background exception on thread " (.getName 
thread) " Caught by Thread/setDefaultUncaughtExceptionHandler in 
core/main.")
        (throw (ex-info "/setDefaultUncaughtExceptionHandler. The app has 
died!")))))

   (start)
   (catch Exception e
     (println e)
     (stack/parse-exception e)
     (throw (ex-info "The app has died!")))
   (catch Object o
     (println o)
     (throw (ex-info "The app has died!")))))

What else could I do to either kill the app at the moment of error or catch 
it at the top and print the error? 

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to