# metrics-clojure / docs / source / metrics / timers.rst

 Steve Losh ff65daf 2012-03-17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 Timers ====== Timers record the time it takes to do stuff. Creating -------- Create your timer:: (use '[metrics.timers :only (timer)]) (def image-processing-time (timer "image-processing-time")) .. _deftimer: You can also use the deftimer macro to create a timer and bind it to a var in one concise, easy step:: (use '[metrics.timers :only (deftimer)]) (deftimer image-processing-time) All the def[metric] macros do some :ref:magic  to the metric title to make it easier to define. Writing ------- Now time something:: (use '[metrics.timers :only (time!)]) (time! image-processing-time (process-image-part-1 ...) (process-image-part-2 ...)) time! is a macro. If you need a function instead, you can use time-fn!, but you'll need to pass it a function instead of just a body:: (use '[metrics.timers :only (time-fn!)]) (time-fn! image-processing-time (fn [] (process-image-part-1 ...) (process-image-part-2 ...))) Reading ------- percentiles ~~~~~~~~~~~~~~~ You can use percentiles to find the percentage of actions that take less than or equal to a certain amount of time:: (use '[metrics.timers :only (percentiles)]) (percentiles image-processing-time) => { 0.75 232.00 0.95 240.23 0.99 280.01 0.999 400.232 1.0 903.1 } This returns a map of the percentiles you probably care about. The keys are the percentiles (doubles between 0 and 1 inclusive) and the values are the maximum time taken for that percentile. In this example: * 75% of images were processed in 232.00 milliseconds or less. * 95% of images were processed in 240.23 milliseconds or less. * ... etc. If you want a different set of percentiles just pass them as a sequence:: (use '[metrics.timers :only (percentiles)]) (percentiles image-processing-time [0.50 0.75]) => { 0.50 182.11 0.75 232.00 } number-recorded ~~~~~~~~~~~~~~~~~~~ To get the number of data points recorded over the entire lifetime of this timers:: (use '[metrics.timers :only (number-recorded)]) (number-recorded image-processing-time) => 12882 smallest ~~~~~~~~~~~~ To get the smallest data point recorded over the entire lifetime of this timer:: (use '[metrics.timers :only (smallest)]) (smallest image-processing-time) => 80.66 largest ~~~~~~~~~~~ To get the largest data point recorded over the entire lifetime of this timer:: (use '[metrics.timers :only (largest)]) (largest image-processing-time) => 903.1 mean ~~~~~~~~ To get the mean of the data points recorded over the entire lifetime of this timer:: (use '[metrics.timers :only (mean)]) (mean image-processing-time) => 433.12 std-dev ~~~~~~~~~~~ To get the standard deviation of the data points recorded over the entire lifetime of this timer:: (use '[metrics.histograms :only (std-dev)]) (std-dev image-processing-time) => 300.51 sample ~~~~~~~~~~ You can get the current sample points the timer is using with sample, but you almost *certainly* don't care about this. If you use it make sure you know what you're doing. :: (use '[metrics.timers :only (sample)]) (sample image-processing-time) => [803.234 102.223 ...] TODO: Rates ~~~~~~~~~~~
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.