-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit d129bd8
Showing
16 changed files
with
1,041 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
<!DOCTYPE html PUBLIC "" | ||
""> | ||
<html><head><meta charset="UTF-8" /><title># Advanced asynchronous hooks:</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Aerospike-clj</span> <span class="project-version">3.0.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 current"><a href="advanced-async-hooks.html"><div class="inner"><span># Advanced asynchronous hooks:</span></div></a></li><li class="depth-1 "><a href="tutorial.html"><div class="inner"><span>Tutorial</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-clj</span></div></div></li><li class="depth-2 branch"><a href="aerospike-clj.aerospike-record.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-record</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.bins.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bins</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.key.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>key</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.listeners.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>listeners</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.metrics.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>metrics</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.policy.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>policy</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.protocols.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>protocols</span></div></a></li><li class="depth-2"><a href="aerospike-clj.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h2><a href="#advanced-asynchronous-hooks" id="advanced-asynchronous-hooks"></a>Advanced asynchronous hooks:</h2> | ||
<p>Since <code>aerospike-clj</code> uses a future based model instead of a callback based model, it is convenient to compose complex asynchronous logic using <a href="https://github.com/funcool/promesa">promesa</a>.</p> | ||
<p>By implementing the <code>ClientEvents</code> protocol 2 hooks are exposed that are called for each API call: <code>on-success</code> and <code>on-failure</code>.</p> | ||
<p>Those hooks are called with valuable information that can be used, for example to configure automatic logging or metrics on your client. Here is an example of such code that is reporting useful metrics to <a href="https://github.com/etsy/statsd">statsd</a>. So assuming you have some <code>statsd</code> namespace tha can connect and report to a <code>statsd</code> server, and some <code>metrics</code> namespace that is used to properly format the metric names:</p> | ||
<pre><code class="language-clojure">(ns af-common-rta-aerospike.core | ||
(:require [aerospike-clj.protocols :as pt] | ||
[statsd.metrics :as metrics] | ||
[statsd.core :as statsd] | ||
[promesa.core :as p])) | ||
|
||
(defrecord DBMeter [cluster-name] | ||
pt/ClientEvents | ||
(on-success [_ op-name op-result _index op-start-time] | ||
(statsd/send-timing (metrics/format-statsd-metric cluster-name op-name "latency") | ||
(micros-from op-start-time) | ||
STATSD-RATE) | ||
(statsd/inc-metric (metrics/format-statsd-metric cluster-name op-name "success")) | ||
(when (= "read" op-name) | ||
(if (some? op-result) | ||
(statsd/inc-metric (metrics/format-statsd-metric cluster-name "read" "hit")) | ||
(statsd/inc-metric (metrics/format-statsd-metric cluster-name "read" "miss")))) | ||
op-result) | ||
(on-failure [_ op-name op-ex index op-start-time] | ||
(statsd/send-timing (metrics/format-statsd-metric cluster-name op-name "latency") | ||
(micros-from op-start-time) | ||
STATSD-RATE) | ||
(statsd/inc-metric (metrics/format-statsd-metric-fail-aerospike op-ex (:cluster-name client) op-name)) | ||
(p/rejected! op-ex))) | ||
</code></pre> | ||
<p>A few notes on the above code: 1. Passed arguments: * <code>op-name</code>, <code>op-result</code> and <code>index</code> are strings. They are partially used for metrics generation in our case. * <code>op-start-time</code> is <code>(System/nanoTime)</code>, converted here to microseconds and used to measure latency. 2. The code is using the passed arguments to measure latency and format metrics’ names. You can easily do other stuff like logging, etc. 3. Both <code>on-success</code> and <code>on-failure</code> return the results passed in. Although this logic is the last logic that happens to the operations’ results (e.g. after transcoders are called), the returned result will be what the calling code gets as a returned value.</p> | ||
<p>Finally, hook it to your client:</p> | ||
<pre><code class="language-clojure">user=> (def c (aero/init-simple-aerospike-client ["localhost"] "test" {:client-events (->DBMeter "test-cluster")})) | ||
</code></pre> | ||
</div></div></div></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<!DOCTYPE html PUBLIC "" | ||
""> | ||
<html><head><meta charset="UTF-8" /><title>aerospike-clj.aerospike-record documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Aerospike-clj</span> <span class="project-version">3.0.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="advanced-async-hooks.html"><div class="inner"><span># Advanced asynchronous hooks:</span></div></a></li><li class="depth-1 "><a href="tutorial.html"><div class="inner"><span>Tutorial</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-clj</span></div></div></li><li class="depth-2 branch current"><a href="aerospike-clj.aerospike-record.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-record</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.bins.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bins</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.key.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>key</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.listeners.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>listeners</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.metrics.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>metrics</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.policy.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>policy</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.protocols.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>protocols</span></div></a></li><li class="depth-2"><a href="aerospike-clj.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="aerospike-clj.aerospike-record.html#var-record-.3Emap"><div class="inner"><span>record->map</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">aerospike-clj.aerospike-record</h1><div class="doc"><div class="markdown"></div></div><div class="public anchor" id="var-record-.3Emap"><h3>record->map</h3><div class="usage"><code>(record->map record)</code></div><div class="doc"><div class="markdown"></div></div><div class="src-link"><a href="http://github.com/AppsFlyer/aerospike-clj/blob/3.0.0-SNAPSHOT/src/main/clojure/aerospike_clj/aerospike_record.clj#L15">view source</a></div></div></div></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
<!DOCTYPE html PUBLIC "" | ||
""> | ||
<html><head><meta charset="UTF-8" /><title>aerospike-clj.bins documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Aerospike-clj</span> <span class="project-version">3.0.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="advanced-async-hooks.html"><div class="inner"><span># Advanced asynchronous hooks:</span></div></a></li><li class="depth-1 "><a href="tutorial.html"><div class="inner"><span>Tutorial</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-clj</span></div></div></li><li class="depth-2 branch"><a href="aerospike-clj.aerospike-record.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-record</span></div></a></li><li class="depth-2 branch current"><a href="aerospike-clj.bins.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bins</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.key.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>key</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.listeners.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>listeners</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.metrics.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>metrics</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.policy.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>policy</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.protocols.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>protocols</span></div></a></li><li class="depth-2"><a href="aerospike-clj.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="aerospike-clj.bins.html#var-data-.3Ebins"><div class="inner"><span>data->bins</span></div></a></li><li class="depth-1"><a href="aerospike-clj.bins.html#var-set-bin-as-null"><div class="inner"><span>set-bin-as-null</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">aerospike-clj.bins</h1><div class="doc"><div class="markdown"></div></div><div class="public anchor" id="var-data-.3Ebins"><h3>data->bins</h3><div class="usage"><code>(data->bins data)</code></div><div class="doc"><div class="markdown"><p>Function to identify whether <code>data</code> will be stored as a single or multiple bin record. Only Clojure maps will default to multiple bins. Nested data structures are supported.</p> | ||
</div></div><div class="src-link"><a href="http://github.com/AppsFlyer/aerospike-clj/blob/3.0.0-SNAPSHOT/src/main/clojure/aerospike_clj/bins.clj#L30">view source</a></div></div><div class="public anchor" id="var-set-bin-as-null"><h3>set-bin-as-null</h3><div class="usage"><code>(set-bin-as-null bin-name)</code></div><div class="doc"><div class="markdown"></div></div><div class="src-link"><a href="http://github.com/AppsFlyer/aerospike-clj/blob/3.0.0-SNAPSHOT/src/main/clojure/aerospike_clj/bins.clj#L13">view source</a></div></div></div></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
<!DOCTYPE html PUBLIC "" | ||
""> | ||
<html><head><meta charset="UTF-8" /><title>aerospike-clj.key documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Aerospike-clj</span> <span class="project-version">3.0.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="advanced-async-hooks.html"><div class="inner"><span># Advanced asynchronous hooks:</span></div></a></li><li class="depth-1 "><a href="tutorial.html"><div class="inner"><span>Tutorial</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-clj</span></div></div></li><li class="depth-2 branch"><a href="aerospike-clj.aerospike-record.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>aerospike-record</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.bins.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bins</span></div></a></li><li class="depth-2 branch current"><a href="aerospike-clj.key.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>key</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.listeners.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>listeners</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.metrics.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>metrics</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.policy.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>policy</span></div></a></li><li class="depth-2 branch"><a href="aerospike-clj.protocols.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>protocols</span></div></a></li><li class="depth-2"><a href="aerospike-clj.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="aerospike-clj.key.html#var-create-key"><div class="inner"><span>create-key</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">aerospike-clj.key</h1><div class="doc"><div class="markdown"></div></div><div class="public anchor" id="var-create-key"><h3>create-key</h3><div class="usage"><code>(create-key k as-namesapce set-name)</code><code>(create-key digest as-namesapce set-name user-key)</code></div><div class="doc"><div class="markdown"><p>Create an aerospike key. It is recommended to create simple keys (without precomputed digest) with <code>client/create-key</code>.</p> | ||
</div></div><div class="src-link"><a href="http://github.com/AppsFlyer/aerospike-clj/blob/3.0.0-SNAPSHOT/src/main/clojure/aerospike_clj/key.clj#L52">view source</a></div></div></div></body></html> |
Oops, something went wrong.