| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=9"/><meta name="generator" content="Doxygen 1.8.6"/><title>GRPC Core: include/grpc/census.h Source File</title><link href="tabs.css" rel="stylesheet" type="text/css"/><script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="dynsections.js"></script><link href="search/search.css" rel="stylesheet" type="text/css"/><script type="text/javascript" src="search/search.js"></script><script type="text/javascript">  $(document).ready(function() { searchBox.OnSelectItem(0); });</script><link href="doxygen.css" rel="stylesheet" type="text/css" /></head><body><div id="top"><!-- do not remove this div, it is closed by doxygen! --><div id="titlearea"><table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;">  <td style="padding-left: 0.5em;">   <div id="projectname">GRPC Core    <span id="projectnumber">0.12.0.0</span>   </div>  </td> </tr> </tbody></table></div><!-- end header part --><!-- Generated by Doxygen 1.8.6 --><script type="text/javascript">var searchBox = new SearchBox("searchBox", "search",false,'Search');</script>  <div id="navrow1" class="tabs">    <ul class="tablist">      <li><a href="index.html"><span>Main Page</span></a></li>      <li><a href="annotated.html"><span>Data Structures</span></a></li>      <li class="current"><a href="files.html"><span>Files</span></a></li>      <li>        <div id="MSearchBox" class="MSearchBoxInactive">        <span class="left">          <img id="MSearchSelect" src="search/mag_sel.png"               onmouseover="return searchBox.OnSearchSelectShow()"               onmouseout="return searchBox.OnSearchSelectHide()"               alt=""/>          <input type="text" id="MSearchField" value="Search" accesskey="S"               onfocus="searchBox.OnSearchFieldFocus(true)"                onblur="searchBox.OnSearchFieldFocus(false)"                onkeyup="searchBox.OnSearchFieldChange(event)"/>          </span><span class="right">            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>          </span>        </div>      </li>    </ul>  </div>  <div id="navrow2" class="tabs2">    <ul class="tablist">      <li><a href="files.html"><span>File List</span></a></li>      <li><a href="globals.html"><span>Globals</span></a></li>    </ul>  </div><!-- window showing the filter options --><div id="MSearchSelectWindow"     onmouseover="return searchBox.OnSearchSelectShow()"     onmouseout="return searchBox.OnSearchSelectHide()"     onkeydown="return searchBox.OnSearchSelectKey(event)"><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Pages</a></div><!-- iframe showing the search results (closed by default) --><div id="MSearchResultsWindow"><iframe src="javascript:void(0)" frameborder="0"         name="MSearchResults" id="MSearchResults"></iframe></div><div id="nav-path" class="navpath">  <ul><li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_9d7a14d6d9adcbe4c35dbdb88d867e2e.html">grpc</a></li>  </ul></div></div><!-- top --><div class="header">  <div class="headertitle"><div class="title">census.h</div>  </div></div><!--header--><div class="contents"><a href="census_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright 2015, Google Inc.</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * met:</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *     * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *     * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * distribution.</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *     * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * this software without specific prior written permission.</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> */</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div><div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/* RPC-internal Census API's. These are designed to be generic enough that</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * they can (ultimately) be used in many different RPC systems (with differing</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * implementations). */</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div><div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#ifndef CENSUS_CENSUS_H</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define CENSUS_CENSUS_H</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <<a class="code" href="grpc_8h.html">grpc/grpc.h</a>></span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div><div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* Identify census features that can be enabled via census_initialize(). */</span></div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8">   48</a></span> <span class="keyword">enum</span> <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8">census_features</a> {</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8aac1986834f37851b8d899c4a08c8e3ab">   49</a></span>   <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8aac1986834f37851b8d899c4a08c8e3ab">CENSUS_FEATURE_NONE</a> = 0,    <span class="comment">/* Do not enable census. */</span></div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8ab0722326e730113d5be97f643c3e6718">   50</a></span>   <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8ab0722326e730113d5be97f643c3e6718">CENSUS_FEATURE_TRACING</a> = 1, <span class="comment">/* Enable census tracing. */</span></div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a84c772b868e53ee3487c7bfc8e8b2f1a">   51</a></span>   <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a84c772b868e53ee3487c7bfc8e8b2f1a">CENSUS_FEATURE_STATS</a> = 2,   <span class="comment">/* Enable Census stats collection. */</span></div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a4808bff624e2377596b86a6f58ab04b5">   52</a></span>   <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a4808bff624e2377596b86a6f58ab04b5">CENSUS_FEATURE_CPU</a> = 4,     <span class="comment">/* Enable Census CPU usage collection. */</span></div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8aba96a94fb7af8cf1144ca14edc0b1f0c">   53</a></span>   <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8aba96a94fb7af8cf1144ca14edc0b1f0c">CENSUS_FEATURE_ALL</a> =</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>       <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8ab0722326e730113d5be97f643c3e6718">CENSUS_FEATURE_TRACING</a> | <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a84c772b868e53ee3487c7bfc8e8b2f1a">CENSUS_FEATURE_STATS</a> | <a class="code" href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a4808bff624e2377596b86a6f58ab04b5">CENSUS_FEATURE_CPU</a></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span> };</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div><div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#a4cea92157f3de215724f6bf4aeaee1b6">census_initialize</a>(<span class="keywordtype">int</span> features);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#aa792b067548ecdd987d560b492c83d85">census_shutdown</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div><div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#ad5f627a64ac4febbc61d2b89801d40e9">census_supported</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div><div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#a742616973e78aaf969389cea20feea9f">census_enabled</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="census_8h.html#a27fc8788690179599713226f1f054736">   80</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> <a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a>;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div><div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/* This function is called by the RPC subsystem whenever it needs to get a</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment"> * serialized form of the current census context (presumably to pass across</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment"> * the wire). Arguments:</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment"> * 'buffer': pointer to memory into which serialized context will be placed</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"> * 'buf_size': size of 'buffer'</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment"> *</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment"> * Returns: the number of bytes used in buffer if successful, or 0 if the</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"> * buffer is of insufficient size.</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment"> *</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"> * TODO(aveitch): determine how best to communicate required/max buffer size</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment"> * so caller doesn't have to guess. */</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">size_t</span> <a class="code" href="census_8h.html#ad9a7d3170ecf720e1b22a4f255605748">census_context_serialize</a>(<span class="keyword">const</span> <a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context, <span class="keywordtype">char</span> *buffer,</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>                                 <span class="keywordtype">size_t</span> buf_size);</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div><div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/* Distributed traces can have a number of options. */</span></div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="census_8h.html#ad4ff7b1db813ee5318871121bb4281cc">   97</a></span> <span class="keyword">enum</span> <a class="code" href="census_8h.html#ad4ff7b1db813ee5318871121bb4281cc">census_trace_mask_values</a> {</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="census_8h.html#ad4ff7b1db813ee5318871121bb4281cca21afa23a531e5d54e70d44ec3c18cfb3">   98</a></span>   <a class="code" href="census_8h.html#ad4ff7b1db813ee5318871121bb4281cca21afa23a531e5d54e70d44ec3c18cfb3">CENSUS_TRACE_MASK_NONE</a> = 0,      <span class="comment">/* Default, empty flags */</span></div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="census_8h.html#ad4ff7b1db813ee5318871121bb4281ccaadcf28b76de06181051506c96996255a">   99</a></span>   <a class="code" href="census_8h.html#ad4ff7b1db813ee5318871121bb4281ccaadcf28b76de06181051506c96996255a">CENSUS_TRACE_MASK_IS_SAMPLED</a> = 1 <span class="comment">/* RPC tracing enabled for this context. */</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span> };</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div><div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#afeb62854542a09290181209ea72b9158">census_trace_mask</a>(<span class="keyword">const</span> <a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context);</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div><div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#a2762b05c4e9bb8a6994519725cb69a84">census_set_trace_mask</a>(<span class="keywordtype">int</span> trace_mask);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div><div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/* The concept of "operation" is a fundamental concept for Census. In an RPC</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">   system, and operation typcially represents a single RPC, or a significant</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">   sub-part thereof (e.g. a single logical "read" RPC to a distributed storage</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">   system might do several other actions in parallel, from looking up metadata</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">   indices to making requests of other services - each of these could be a</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">   sub-operation with the larger RPC operation). Census uses operations for the</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">   following:</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment"></span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">   CPU accounting: If enabled, census will measure the thread CPU time</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">   consumed between operation start and end times.</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment"></span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">   Active operations: Census will maintain information on all currently</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">   active operations.</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment"></span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">   Distributed tracing: Each operation serves as a logical trace span.</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment"></span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">   Stats collection: Stats are broken down by operation (e.g. latency</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">   breakdown for each unique RPC path).</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment"></span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">   The following functions serve to delineate the start and stop points for</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">   each logical operation. */</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="structcensus__timestamp.html">  135</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="comment">/* Use gpr_timespec for default implementation. High performance</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">   * implementations should use a cycle-counter based timestamp. */</span></div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="structcensus__timestamp.html#a36ed36ffcf81f720bbdade460f957004">  138</a></span>   <a class="code" href="structgpr__timespec.html">gpr_timespec</a> <a class="code" href="structcensus__timestamp.html#a36ed36ffcf81f720bbdade460f957004">ts</a>;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span> } <a class="code" href="structcensus__timestamp.html">census_timestamp</a>;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div><div class="line"><a name="l00155"></a><span class="lineno">  155</span> <a class="code" href="structcensus__timestamp.html">census_timestamp</a> <a class="code" href="census_8h.html#a71b2afd7a1663c2a716af7242895442b">census_start_rpc_op_timestamp</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="structcensus__rpc__name__info.html">  168</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="structcensus__rpc__name__info.html#a118286ec604a75b5427ba5084892f77d">  169</a></span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *(*get_rpc_service_name)(<a class="code" href="port__platform_8h.html#a71edab4bc3421f129764e5cb342f7181">gpr_int64</a> id);</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="structcensus__rpc__name__info.html#a28515ce96da75622b396a50d73b5194c">  170</a></span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *(*get_rpc_method_name)(<a class="code" href="port__platform_8h.html#a71edab4bc3421f129764e5cb342f7181">gpr_int64</a> id);</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span> } <a class="code" href="structcensus__rpc__name__info.html">census_rpc_name_info</a>;</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div><div class="line"><a name="l00207"></a><span class="lineno">  207</span> <a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *<a class="code" href="census_8h.html#a0f2a69b151eac68f3c50806d2162d9f4">census_start_client_rpc_op</a>(</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keyword">const</span> <a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context, <a class="code" href="port__platform_8h.html#a71edab4bc3421f129764e5cb342f7181">gpr_int64</a> rpc_name_id,</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keyword">const</span> <a class="code" href="structcensus__rpc__name__info.html">census_rpc_name_info</a> *rpc_name_info, <span class="keyword">const</span> <span class="keywordtype">char</span> *peer, <span class="keywordtype">int</span> trace_mask,</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keyword">const</span> <a class="code" href="structcensus__timestamp.html">census_timestamp</a> *start_time);</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div><div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#a06407a753c261626b4e25c4f6fe0b840">census_set_rpc_client_peer</a>(<a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context, <span class="keyword">const</span> <span class="keywordtype">char</span> *peer);</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div><div class="line"><a name="l00235"></a><span class="lineno">  235</span> <a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *<a class="code" href="census_8h.html#ab7014fb10de411a91588f05658148177">census_start_server_rpc_op</a>(</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *buffer, <a class="code" href="port__platform_8h.html#a71edab4bc3421f129764e5cb342f7181">gpr_int64</a> rpc_name_id,</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keyword">const</span> <a class="code" href="structcensus__rpc__name__info.html">census_rpc_name_info</a> *rpc_name_info, <span class="keyword">const</span> <span class="keywordtype">char</span> *peer, <span class="keywordtype">int</span> trace_mask,</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <a class="code" href="structcensus__timestamp.html">census_timestamp</a> *start_time);</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div><div class="line"><a name="l00265"></a><span class="lineno">  265</span> <a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *<a class="code" href="census_8h.html#a14287fdb8adc322c1801435eb121e642">census_start_op</a>(<a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context, <span class="keyword">const</span> <span class="keywordtype">char</span> *family,</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>                                 <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> trace_mask);</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div><div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#a97a3300020cdacd7149e0efae9f5541e">census_end_op</a>(<a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context, <span class="keywordtype">int</span> status);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="census_8h.html#acb35403ed23ba2615457fabaa0b430e7">  279</a></span> <span class="preprocessor">#define CENSUS_TRACE_RECORD_START_OP ((gpr_uint32)0)</span></div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="census_8h.html#a003fb5bda98c95408a21d3a47571a1e9">  280</a></span> <span class="preprocessor"></span><span class="preprocessor">#define CENSUS_TRACE_RECORD_END_OP ((gpr_uint32)1)</span></div><div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="preprocessor"></span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#af3822f36fcbca23a3af9d3e8b3fb3317">census_trace_print</a>(<a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context, <a class="code" href="port__platform_8h.html#aa6abd4df815a5498d1a04b5e691a74a9">gpr_uint32</a> type,</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>                         <span class="keyword">const</span> <span class="keywordtype">char</span> *buffer, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="structcensus__trace__record.html">  293</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="structcensus__trace__record.html#ac7f74956d51898681b8e35a8031ac9fb">  294</a></span>   <a class="code" href="structcensus__timestamp.html">census_timestamp</a> <a class="code" href="structcensus__trace__record.html#ac7f74956d51898681b8e35a8031ac9fb">timestamp</a>; <span class="comment">/* Time of record creation */</span></div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="structcensus__trace__record.html#a7d12a98b15db3199dc221a1be036088b">  295</a></span>   <a class="code" href="port__platform_8h.html#a737bb95b7b58d90b4215602d36ed65b6">gpr_uint64</a> <a class="code" href="structcensus__trace__record.html#a7d12a98b15db3199dc221a1be036088b">trace_id</a>;        <span class="comment">/* Trace ID associated with record */</span></div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="structcensus__trace__record.html#a9bb150a1752a810cde915432976f1839">  296</a></span>   <a class="code" href="port__platform_8h.html#a737bb95b7b58d90b4215602d36ed65b6">gpr_uint64</a> <a class="code" href="structcensus__trace__record.html#a9bb150a1752a810cde915432976f1839">op_id</a>;           <span class="comment">/* Operation ID associated with record */</span></div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="structcensus__trace__record.html#a827fe499f3c0777ae1dcb3969943e7fc">  297</a></span>   <a class="code" href="port__platform_8h.html#aa6abd4df815a5498d1a04b5e691a74a9">gpr_uint32</a> <a class="code" href="structcensus__trace__record.html#a827fe499f3c0777ae1dcb3969943e7fc">type</a>;            <span class="comment">/* Type (as used in census_trace_print() */</span></div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="structcensus__trace__record.html#a4ba324fb39273bf3c0c0f15852d9d130">  298</a></span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structcensus__trace__record.html#a4ba324fb39273bf3c0c0f15852d9d130">buffer</a>;         <span class="comment">/* Buffer (from census_trace_print() */</span></div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="structcensus__trace__record.html#abc4f9330e28d906f90346d7fd5769d53">  299</a></span>   <span class="keywordtype">size_t</span> <a class="code" href="structcensus__trace__record.html#abc4f9330e28d906f90346d7fd5769d53">buf_size</a>;            <span class="comment">/* Number of bytes inside buffer */</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span> } <a class="code" href="structcensus__trace__record.html">census_trace_record</a>;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div><div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#ab93305c7e6b04cd51f95aa497227f53a">census_trace_scan_start</a>(<span class="keywordtype">int</span> consume);</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div><div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#a31151a1bca352d6046e6039fa864808c">census_get_trace_record</a>(<a class="code" href="structcensus__trace__record.html">census_trace_record</a> *trace_record);</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div><div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#adee01ffd0c56ca2c8c90919a73c3f8ba">census_trace_scan_end</a>();</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div><div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">/* Max number of characters in tag key */</span></div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="census_8h.html#aa89c96f0f32d85a1b28b68f0ef326dd4">  328</a></span> <span class="preprocessor">#define CENSUS_MAX_TAG_KEY_LENGTH 20</span></div><div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="preprocessor"></span><span class="comment">/* Max number of tag value characters */</span></div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="census_8h.html#a22d6971ca41fd944e13e5b4c2a42bf8c">  330</a></span> <span class="preprocessor">#define CENSUS_MAX_TAG_VALUE_LENGTH 50</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="preprocessor"></span></div><div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="comment">/* A Census tag set is a collection of key:value string pairs; these form the</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="comment">   basis against which Census metrics will be recorded. Keys are unique within</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">   a tag set. All contexts have an associated tag set. */</span></div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">  335</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> <a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a>;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div><div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">/* Returns a pointer to a newly created, empty tag set. If size_hint > 0,</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">   indicates that the tag set is intended to hold approximately that number</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="comment">   of tags. */</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span> <a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *<a class="code" href="census_8h.html#a14f21902360aa221e6307cec05a110a5">census_tag_set_create</a>(<span class="keywordtype">size_t</span> size_hint);</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div><div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment">/* Add a new tag key/value to an existing tag set; if the tag key already exists</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">   in the tag set, then its value is overwritten with the new one. Can also be</span></div><div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">   used to delete a tag, by specifying a NULL value. If key is NULL, returns</span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">   the number of tags in the tag set.</span></div><div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">   Return values:</span></div><div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">   -1: invalid length key or value</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="comment">   non-negative value: the number of tags in the tag set. */</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#ac690af8a7c06c6fb152fc9b0b8efc142">census_tag_set_add</a>(<a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *tags, <span class="keyword">const</span> <span class="keywordtype">char</span> *key,</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span> *value);</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div><div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">/* Destroys a tag set. This function must be called to prevent memory leaks.</span></div><div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">   Once called, the tag set cannot be used again. */</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#a07ccf6250c7e2d4ef7180c510fd68ab2">census_tag_set_destroy</a>(<a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *tags);</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div><div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">/* Get a contexts tag set. */</span></div><div class="line"><a name="l00357"></a><span class="lineno">  357</span> <a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *<a class="code" href="census_8h.html#a78ec7fa52ea54e631bb11d59a8adba33">census_context_tag_set</a>(<a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context);</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div><div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">/* A read-only representation of a tag for use by census clients. */</span></div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="structcensus__tag__const.html">  360</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="structcensus__tag__const.html#a0da666348257edd491a26528e6bacc8f">  361</a></span>   <span class="keywordtype">size_t</span> <a class="code" href="structcensus__tag__const.html#a0da666348257edd491a26528e6bacc8f">key_len</a>;    <span class="comment">/* Number of bytes in tag key. */</span></div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="structcensus__tag__const.html#aaffe4ea2b11ae8cfde18e5b99c4536d2">  362</a></span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structcensus__tag__const.html#aaffe4ea2b11ae8cfde18e5b99c4536d2">key</a>;   <span class="comment">/* A pointer to the tag key. May not be null-terminated. */</span></div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="structcensus__tag__const.html#ac7dd97b14d839f337d34ef5c6d3f882a">  363</a></span>   <span class="keywordtype">size_t</span> <a class="code" href="structcensus__tag__const.html#ac7dd97b14d839f337d34ef5c6d3f882a">value_len</a>;  <span class="comment">/* Number of bytes in tag value. */</span></div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="structcensus__tag__const.html#a27fd204425bf861f10cd26df3dd6fb27">  364</a></span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structcensus__tag__const.html#a27fd204425bf861f10cd26df3dd6fb27">value</a>; <span class="comment">/* Pointer to the tag value. May not be null-terminated. */</span></div><div class="line"><a name="l00365"></a><span class="lineno">  365</span> } <a class="code" href="structcensus__tag__const.html">census_tag_const</a>;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div><div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">/* Used to iterate through a tag sets contents. */</span></div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="census_8h.html#a22a740b7e9e3798cb9208b3bd6ea31a7">  368</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="census_8h.html#a22a740b7e9e3798cb9208b3bd6ea31a7">census_tag_set_iterator</a> <a class="code" href="census_8h.html#a22a740b7e9e3798cb9208b3bd6ea31a7">census_tag_set_iterator</a>;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div><div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">/* Open a tag set for iteration. The tag set must not be modified while</span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">   iteration is ongoing. Returns an iterator for use in following functions. */</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span> <a class="code" href="census_8h.html#a22a740b7e9e3798cb9208b3bd6ea31a7">census_tag_set_iterator</a> *<a class="code" href="census_8h.html#aae5c38cb581600a401d1f8dca741bf63">census_tag_set_open</a>(<a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *tags);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div><div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">/* Get the next tag in the tag set, by writing into the 'tag' argument. Returns</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">   1 if there is a "next" tag, 0 if there are no more tags. */</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="keywordtype">int</span> <a class="code" href="census_8h.html#a03847b518034c5c3b801fdd95569f400">census_tag_set_next</a>(<a class="code" href="census_8h.html#a22a740b7e9e3798cb9208b3bd6ea31a7">census_tag_set_iterator</a> *it, <a class="code" href="structcensus__tag__const.html">census_tag_const</a> *tag);</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div><div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="comment">/* Close an iterator opened by census_tag_set_open(). The iterator will be</span></div><div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">   invalidated, and should not be used once close is called. */</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#acbca4449a68fd3e2c17f1e0bcf1e663a">census_tag_set_close</a>(<a class="code" href="census_8h.html#a22a740b7e9e3798cb9208b3bd6ea31a7">census_tag_set_iterator</a> *it);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div><div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">/* Core stats collection API's. The following concepts are used:</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">   * Aggregation: A collection of values. Census supports the following</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="comment">       aggregation types:</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="comment">         Sum - a single summation type. Typically used for keeping (e.g.)</span></div><div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="comment">           counts of events.</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">         Distribution - statistical distribution information, used for</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">           recording average, standard deviation etc.</span></div><div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">         Histogram - a histogram of measurements falling in defined bucket</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="comment">           boundaries.</span></div><div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment">         Window - a count of events that happen in reolling time window.</span></div><div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment">     New aggregation types can be added by the user, if desired (see</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="comment">     census_register_aggregation()).</span></div><div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="comment">   * Metric: Each measurement is for a single metric. Examples include RPC</span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="comment">     latency, CPU seconds consumed, and bytes transmitted.</span></div><div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="comment">   * View: A view is a combination of a metric, a tag set (in which the tag</span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="comment">     values are regular expressions) and a set of aggregations. When a</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">     measurement for a metric matches the view tags, it is recorded (for each</span></div><div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">     unique set of tags) against each aggregation. Each metric can have an</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">     arbitrary number of views by which it will be broken down.</span></div><div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">*/</span></div><div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div><div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">/* A single value to be recorded comprises two parts: an ID for the particular</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="comment"> * metric and the value to be recorded against it. */</span></div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="structcensus__value.html">  405</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="structcensus__value.html#a1e644fb8e7b1d8e6b06e717f00658522">  406</a></span>   <a class="code" href="port__platform_8h.html#aa6abd4df815a5498d1a04b5e691a74a9">gpr_uint32</a> <a class="code" href="structcensus__value.html#a1e644fb8e7b1d8e6b06e717f00658522">metric_id</a>;</div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="structcensus__value.html#a5bff69239476e80fc5c54f3302fffa34">  407</a></span>   <span class="keywordtype">double</span> <a class="code" href="structcensus__value.html#a5bff69239476e80fc5c54f3302fffa34">value</a>;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span> } <a class="code" href="structcensus__value.html">census_value</a>;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div><div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment">/* Record new usage values against the given context. */</span></div><div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#a1225e8bbc14ff51173b6485940940572">census_record_values</a>(<a class="code" href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a> *context, <a class="code" href="structcensus__value.html">census_value</a> *values,</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>                           <span class="keywordtype">size_t</span> nvalues);</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">  415</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a> <a class="code" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a>;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div><div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="comment">/* Predefined aggregation types, for use with census_view_create(). */</span></div><div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="keyword">extern</span> <a class="code" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a> <a class="code" href="census_8h.html#a35d6ca1b9557bb6e12d79e137a5df944">census_agg_sum</a>;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="keyword">extern</span> <a class="code" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a> <a class="code" href="census_8h.html#a37ac21fb6ba91fc1f80523cf3d55dbfa">census_agg_distribution</a>;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="keyword">extern</span> <a class="code" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a> <a class="code" href="census_8h.html#a22bfed34d03c9f9f061f7aaf5fc5378c">census_agg_histogram</a>;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="keyword">extern</span> <a class="code" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a> <a class="code" href="census_8h.html#a4b8a7f096dcd85c93f823cddb2bf960e">census_agg_window</a>;</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div><div class="line"><a name="l00425"></a><span class="lineno"><a class="line" href="structcensus__aggregation.html">  425</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00426"></a><span class="lineno"><a class="line" href="structcensus__aggregation.html#afce3bda99fdeb6c77dde6368e1c45ffa">  426</a></span>   <span class="keyword">const</span> <a class="code" href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a> *<a class="code" href="structcensus__aggregation.html#afce3bda99fdeb6c77dde6368e1c45ffa">ops</a>;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>   <span class="keyword">const</span> <span class="keywordtype">void</span> *</div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="structcensus__aggregation.html#a5b2ce3ab21a88058ea67c944d6a37426">  428</a></span>       <a class="code" href="structcensus__aggregation.html#a5b2ce3ab21a88058ea67c944d6a37426">create_arg</a>; <span class="comment">/* Argument to be used for aggregation initialization. */</span></div><div class="line"><a name="l00429"></a><span class="lineno">  429</span> } <a class="code" href="structcensus__aggregation.html">census_aggregation</a>;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">  432</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> <a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a>;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div><div class="line"><a name="l00442"></a><span class="lineno">  442</span> <a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *<a class="code" href="census_8h.html#a3bf772ddda26227f485b375192af85f2">census_view_create</a>(<a class="code" href="port__platform_8h.html#aa6abd4df815a5498d1a04b5e691a74a9">gpr_uint32</a> metric_id,</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>                                 <span class="keyword">const</span> <a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *tags,</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>                                 <span class="keyword">const</span> <a class="code" href="structcensus__aggregation.html">census_aggregation</a> *aggregations,</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>                                 <span class="keywordtype">size_t</span> naggregations);</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div><div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#a529bb89984b69da3b4cab9deb68175a9">census_view_delete</a>(<a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *view);</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div><div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="keywordtype">size_t</span> <a class="code" href="census_8h.html#aa5741f85edf5b3e72f89797ae85463b0">census_view_metric</a>(<span class="keyword">const</span> <a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *view);</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div><div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="keywordtype">size_t</span> <a class="code" href="census_8h.html#ac993f47fe73f67e5f8c8f4b00c358144">census_view_naggregations</a>(<span class="keyword">const</span> <a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *view);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div><div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="keyword">const</span> <a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *<a class="code" href="census_8h.html#a054543816f063d003a36316fda4547b8">census_view_tags</a>(<span class="keyword">const</span> <a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *view);</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div><div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="keyword">const</span> <a class="code" href="structcensus__aggregation.html">census_aggregation</a> *<a class="code" href="census_8h.html#ab40a6a544d107b067eb5ca8326efeded">census_view_aggregrations</a>(<span class="keyword">const</span> <a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *view);</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="structcensus__view__aggregation__data.html">  464</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="structcensus__view__aggregation__data.html#a6f41772e2252f9137b17b16ed337c370">  465</a></span>   <span class="keyword">const</span> <a class="code" href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a> *<a class="code" href="structcensus__view__aggregation__data.html#a6f41772e2252f9137b17b16ed337c370">tags</a>; <span class="comment">/* Tags for this set of aggregations. */</span></div><div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="structcensus__view__aggregation__data.html#a9147e9464bd963144649d773fc62398d">  466</a></span>   <span class="keyword">const</span> <span class="keywordtype">void</span> **<a class="code" href="structcensus__view__aggregation__data.html#a9147e9464bd963144649d773fc62398d">data</a>; <span class="comment">/* One data set for every aggregation in the view. */</span></div><div class="line"><a name="l00467"></a><span class="lineno">  467</span> } <a class="code" href="structcensus__view__aggregation__data.html">census_view_aggregation_data</a>;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="structcensus__view__data.html">  470</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="structcensus__view__data.html#a90105c30b6a4b32ced7663532de301f4">  471</a></span>   <span class="keywordtype">size_t</span> <a class="code" href="structcensus__view__data.html#a90105c30b6a4b32ced7663532de301f4">n_tag_sets</a>; <span class="comment">/* Number of unique tag sets that matched view. */</span></div><div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="structcensus__view__data.html#ad3ad052b9c598a32650bb00690f478b8">  472</a></span>   <span class="keyword">const</span> <a class="code" href="structcensus__view__aggregation__data.html">census_view_aggregation_data</a> *<a class="code" href="structcensus__view__data.html#ad3ad052b9c598a32650bb00690f478b8">data</a>; <span class="comment">/* n_tag_sets entries */</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span> } <a class="code" href="structcensus__view__data.html">census_view_data</a>;</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div><div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="keyword">const</span> <a class="code" href="structcensus__view__data.html">census_view_data</a> *<a class="code" href="census_8h.html#ab7146edc8582fe2e6dc537f006e29cc5">census_view_get_data</a>(<span class="keyword">const</span> <a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *view);</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div><div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="keywordtype">void</span> <a class="code" href="census_8h.html#ad150387e14628665613f1d9a3d27a418">census_view_reset</a>(<a class="code" href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a> *view);</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div><div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="preprocessor"></span>}</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="preprocessor"></span></div><div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="preprocessor">#endif </span><span class="comment">/* CENSUS_CENSUS_H */</span><span class="preprocessor"></span></div><div class="ttc" id="structcensus__view__aggregation__data_html_a6f41772e2252f9137b17b16ed337c370"><div class="ttname"><a href="structcensus__view__aggregation__data.html#a6f41772e2252f9137b17b16ed337c370">census_view_aggregation_data::tags</a></div><div class="ttdeci">const census_tag_set * tags</div><div class="ttdef"><b>Definition:</b> census.h:465</div></div><div class="ttc" id="census_8h_html_a22bfed34d03c9f9f061f7aaf5fc5378c"><div class="ttname"><a href="census_8h.html#a22bfed34d03c9f9f061f7aaf5fc5378c">census_agg_histogram</a></div><div class="ttdeci">census_aggregation_ops census_agg_histogram</div></div><div class="ttc" id="census_8h_html_ab7146edc8582fe2e6dc537f006e29cc5"><div class="ttname"><a href="census_8h.html#ab7146edc8582fe2e6dc537f006e29cc5">census_view_get_data</a></div><div class="ttdeci">const census_view_data * census_view_get_data(const census_view *view)</div><div class="ttdoc">Get data from aggregations associated with a view. </div></div><div class="ttc" id="census_8h_html_a07ccf6250c7e2d4ef7180c510fd68ab2"><div class="ttname"><a href="census_8h.html#a07ccf6250c7e2d4ef7180c510fd68ab2">census_tag_set_destroy</a></div><div class="ttdeci">void census_tag_set_destroy(census_tag_set *tags)</div></div><div class="ttc" id="census_8h_html_a31151a1bca352d6046e6039fa864808c"><div class="ttname"><a href="census_8h.html#a31151a1bca352d6046e6039fa864808c">census_get_trace_record</a></div><div class="ttdeci">int census_get_trace_record(census_trace_record *trace_record)</div><div class="ttdoc">Get a trace record. </div></div><div class="ttc" id="census_8h_html_a14f21902360aa221e6307cec05a110a5"><div class="ttname"><a href="census_8h.html#a14f21902360aa221e6307cec05a110a5">census_tag_set_create</a></div><div class="ttdeci">census_tag_set * census_tag_set_create(size_t size_hint)</div></div><div class="ttc" id="census_8h_html_ac993f47fe73f67e5f8c8f4b00c358144"><div class="ttname"><a href="census_8h.html#ac993f47fe73f67e5f8c8f4b00c358144">census_view_naggregations</a></div><div class="ttdeci">size_t census_view_naggregations(const census_view *view)</div><div class="ttdoc">Number of aggregations associated with view. </div></div><div class="ttc" id="census_8h_html_aa5741f85edf5b3e72f89797ae85463b0"><div class="ttname"><a href="census_8h.html#aa5741f85edf5b3e72f89797ae85463b0">census_view_metric</a></div><div class="ttdeci">size_t census_view_metric(const census_view *view)</div><div class="ttdoc">Metric ID associated with a view. </div></div><div class="ttc" id="census_8h_html_a2b2990a51808c9177b14476195a9fb94"><div class="ttname"><a href="census_8h.html#a2b2990a51808c9177b14476195a9fb94">census_aggregation_ops</a></div><div class="ttdeci">struct census_aggregation_ops census_aggregation_ops</div><div class="ttdoc">Type representing a particular aggregation. </div><div class="ttdef"><b>Definition:</b> census.h:415</div></div><div class="ttc" id="structcensus__value_html"><div class="ttname"><a href="structcensus__value.html">census_value</a></div><div class="ttdef"><b>Definition:</b> census.h:405</div></div><div class="ttc" id="structcensus__value_html_a5bff69239476e80fc5c54f3302fffa34"><div class="ttname"><a href="structcensus__value.html#a5bff69239476e80fc5c54f3302fffa34">census_value::value</a></div><div class="ttdeci">double value</div><div class="ttdef"><b>Definition:</b> census.h:407</div></div><div class="ttc" id="census_8h_html_ae43cfb236f1c79eeefb4d9bdf91e3aed"><div class="ttname"><a href="census_8h.html#ae43cfb236f1c79eeefb4d9bdf91e3aed">census_view</a></div><div class="ttdeci">struct census_view census_view</div><div class="ttdoc">A census view type. </div><div class="ttdef"><b>Definition:</b> census.h:432</div></div><div class="ttc" id="census_8h_html_abe92e59c22481b0de3742673cbbb1bf8ab0722326e730113d5be97f643c3e6718"><div class="ttname"><a href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8ab0722326e730113d5be97f643c3e6718">CENSUS_FEATURE_TRACING</a></div><div class="ttdef"><b>Definition:</b> census.h:50</div></div><div class="ttc" id="structcensus__view__aggregation__data_html"><div class="ttname"><a href="structcensus__view__aggregation__data.html">census_view_aggregation_data</a></div><div class="ttdoc">Holds all the aggregation data for a particular view instantiation. </div><div class="ttdef"><b>Definition:</b> census.h:464</div></div><div class="ttc" id="structcensus__view__aggregation__data_html_a9147e9464bd963144649d773fc62398d"><div class="ttname"><a href="structcensus__view__aggregation__data.html#a9147e9464bd963144649d773fc62398d">census_view_aggregation_data::data</a></div><div class="ttdeci">const void ** data</div><div class="ttdef"><b>Definition:</b> census.h:466</div></div><div class="ttc" id="structcensus__view__data_html_ad3ad052b9c598a32650bb00690f478b8"><div class="ttname"><a href="structcensus__view__data.html#ad3ad052b9c598a32650bb00690f478b8">census_view_data::data</a></div><div class="ttdeci">const census_view_aggregation_data * data</div><div class="ttdef"><b>Definition:</b> census.h:472</div></div><div class="ttc" id="census_8h_html_a14287fdb8adc322c1801435eb121e642"><div class="ttname"><a href="census_8h.html#a14287fdb8adc322c1801435eb121e642">census_start_op</a></div><div class="ttdeci">census_context * census_start_op(census_context *context, const char *family, const char *name, int trace_mask)</div><div class="ttdoc">Start a new, non-RPC operation. </div></div><div class="ttc" id="census_8h_html_aae5c38cb581600a401d1f8dca741bf63"><div class="ttname"><a href="census_8h.html#aae5c38cb581600a401d1f8dca741bf63">census_tag_set_open</a></div><div class="ttdeci">census_tag_set_iterator * census_tag_set_open(census_tag_set *tags)</div></div><div class="ttc" id="census_8h_html_adee01ffd0c56ca2c8c90919a73c3f8ba"><div class="ttname"><a href="census_8h.html#adee01ffd0c56ca2c8c90919a73c3f8ba">census_trace_scan_end</a></div><div class="ttdeci">void census_trace_scan_end()</div><div class="ttdoc">End a scan previously started by census_trace_scan_start() </div></div><div class="ttc" id="structcensus__aggregation_html"><div class="ttname"><a href="structcensus__aggregation.html">census_aggregation</a></div><div class="ttdoc">Information needed to instantiate a new aggregation. </div><div class="ttdef"><b>Definition:</b> census.h:425</div></div><div class="ttc" id="census_8h_html_ac690af8a7c06c6fb152fc9b0b8efc142"><div class="ttname"><a href="census_8h.html#ac690af8a7c06c6fb152fc9b0b8efc142">census_tag_set_add</a></div><div class="ttdeci">int census_tag_set_add(census_tag_set *tags, const char *key, const char *value)</div></div><div class="ttc" id="census_8h_html_a4cea92157f3de215724f6bf4aeaee1b6"><div class="ttname"><a href="census_8h.html#a4cea92157f3de215724f6bf4aeaee1b6">census_initialize</a></div><div class="ttdeci">int census_initialize(int features)</div><div class="ttdoc">Shutdown and startup census subsystem. </div></div><div class="ttc" id="census_8h_html_abe92e59c22481b0de3742673cbbb1bf8a4808bff624e2377596b86a6f58ab04b5"><div class="ttname"><a href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a4808bff624e2377596b86a6f58ab04b5">CENSUS_FEATURE_CPU</a></div><div class="ttdef"><b>Definition:</b> census.h:52</div></div><div class="ttc" id="structcensus__trace__record_html"><div class="ttname"><a href="structcensus__trace__record.html">census_trace_record</a></div><div class="ttdoc">Trace record. </div><div class="ttdef"><b>Definition:</b> census.h:293</div></div><div class="ttc" id="census_8h_html_ad4ff7b1db813ee5318871121bb4281cc"><div class="ttname"><a href="census_8h.html#ad4ff7b1db813ee5318871121bb4281cc">census_trace_mask_values</a></div><div class="ttdeci">census_trace_mask_values</div><div class="ttdef"><b>Definition:</b> census.h:97</div></div><div class="ttc" id="census_8h_html_a71b2afd7a1663c2a716af7242895442b"><div class="ttname"><a href="census_8h.html#a71b2afd7a1663c2a716af7242895442b">census_start_rpc_op_timestamp</a></div><div class="ttdeci">census_timestamp census_start_rpc_op_timestamp(void)</div><div class="ttdoc">Mark the beginning of an RPC operation. </div></div><div class="ttc" id="structcensus__rpc__name__info_html"><div class="ttname"><a href="structcensus__rpc__name__info.html">census_rpc_name_info</a></div><div class="ttdoc">Represent functions to map RPC name ID to service/method names. </div><div class="ttdef"><b>Definition:</b> census.h:168</div></div><div class="ttc" id="census_8h_html_abe92e59c22481b0de3742673cbbb1bf8aba96a94fb7af8cf1144ca14edc0b1f0c"><div class="ttname"><a href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8aba96a94fb7af8cf1144ca14edc0b1f0c">CENSUS_FEATURE_ALL</a></div><div class="ttdef"><b>Definition:</b> census.h:53</div></div><div class="ttc" id="census_8h_html_abe92e59c22481b0de3742673cbbb1bf8a84c772b868e53ee3487c7bfc8e8b2f1a"><div class="ttname"><a href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8a84c772b868e53ee3487c7bfc8e8b2f1a">CENSUS_FEATURE_STATS</a></div><div class="ttdef"><b>Definition:</b> census.h:51</div></div><div class="ttc" id="port__platform_8h_html_aa6abd4df815a5498d1a04b5e691a74a9"><div class="ttname"><a href="port__platform_8h.html#aa6abd4df815a5498d1a04b5e691a74a9">gpr_uint32</a></div><div class="ttdeci">uint32_t gpr_uint32</div><div class="ttdef"><b>Definition:</b> port_platform.h:322</div></div><div class="ttc" id="census_8h_html_af3822f36fcbca23a3af9d3e8b3fb3317"><div class="ttname"><a href="census_8h.html#af3822f36fcbca23a3af9d3e8b3fb3317">census_trace_print</a></div><div class="ttdeci">void census_trace_print(census_context *context, gpr_uint32 type, const char *buffer, size_t n)</div><div class="ttdoc">Insert a trace record into the trace stream. </div></div><div class="ttc" id="census_8h_html_aa792b067548ecdd987d560b492c83d85"><div class="ttname"><a href="census_8h.html#aa792b067548ecdd987d560b492c83d85">census_shutdown</a></div><div class="ttdeci">void census_shutdown(void)</div></div><div class="ttc" id="structcensus__aggregation_html_afce3bda99fdeb6c77dde6368e1c45ffa"><div class="ttname"><a href="structcensus__aggregation.html#afce3bda99fdeb6c77dde6368e1c45ffa">census_aggregation::ops</a></div><div class="ttdeci">const census_aggregation_ops * ops</div><div class="ttdef"><b>Definition:</b> census.h:426</div></div><div class="ttc" id="census_8h_html_ab7014fb10de411a91588f05658148177"><div class="ttname"><a href="census_8h.html#ab7014fb10de411a91588f05658148177">census_start_server_rpc_op</a></div><div class="ttdeci">census_context * census_start_server_rpc_op(const char *buffer, gpr_int64 rpc_name_id, const census_rpc_name_info *rpc_name_info, const char *peer, int trace_mask, census_timestamp *start_time)</div><div class="ttdoc">Start a server RPC operation. </div></div><div class="ttc" id="census_8h_html_ab93305c7e6b04cd51f95aa497227f53a"><div class="ttname"><a href="census_8h.html#ab93305c7e6b04cd51f95aa497227f53a">census_trace_scan_start</a></div><div class="ttdeci">int census_trace_scan_start(int consume)</div><div class="ttdoc">Start a scan of existing trace records. </div></div><div class="ttc" id="census_8h_html_a2762b05c4e9bb8a6994519725cb69a84"><div class="ttname"><a href="census_8h.html#a2762b05c4e9bb8a6994519725cb69a84">census_set_trace_mask</a></div><div class="ttdeci">void census_set_trace_mask(int trace_mask)</div><div class="ttdoc">Set the trace mask associated with a context. </div></div><div class="ttc" id="census_8h_html_acbca4449a68fd3e2c17f1e0bcf1e663a"><div class="ttname"><a href="census_8h.html#acbca4449a68fd3e2c17f1e0bcf1e663a">census_tag_set_close</a></div><div class="ttdeci">void census_tag_set_close(census_tag_set_iterator *it)</div></div><div class="ttc" id="census_8h_html_a03847b518034c5c3b801fdd95569f400"><div class="ttname"><a href="census_8h.html#a03847b518034c5c3b801fdd95569f400">census_tag_set_next</a></div><div class="ttdeci">int census_tag_set_next(census_tag_set_iterator *it, census_tag_const *tag)</div></div><div class="ttc" id="census_8h_html_a529bb89984b69da3b4cab9deb68175a9"><div class="ttname"><a href="census_8h.html#a529bb89984b69da3b4cab9deb68175a9">census_view_delete</a></div><div class="ttdeci">void census_view_delete(census_view *view)</div><div class="ttdoc">Destroy a previously created view. </div></div><div class="ttc" id="census_8h_html_afeb62854542a09290181209ea72b9158"><div class="ttname"><a href="census_8h.html#afeb62854542a09290181209ea72b9158">census_trace_mask</a></div><div class="ttdeci">int census_trace_mask(const census_context *context)</div><div class="ttdoc">Get the current trace mask associated with this context. </div></div><div class="ttc" id="census_8h_html_a3bf772ddda26227f485b375192af85f2"><div class="ttname"><a href="census_8h.html#a3bf772ddda26227f485b375192af85f2">census_view_create</a></div><div class="ttdeci">census_view * census_view_create(gpr_uint32 metric_id, const census_tag_set *tags, const census_aggregation *aggregations, size_t naggregations)</div><div class="ttdoc">Create a new view. </div></div><div class="ttc" id="census_8h_html_ab40a6a544d107b067eb5ca8326efeded"><div class="ttname"><a href="census_8h.html#ab40a6a544d107b067eb5ca8326efeded">census_view_aggregrations</a></div><div class="ttdeci">const census_aggregation * census_view_aggregrations(const census_view *view)</div><div class="ttdoc">Get aggregation descriptors associated with a view. </div></div><div class="ttc" id="structcensus__view__data_html_a90105c30b6a4b32ced7663532de301f4"><div class="ttname"><a href="structcensus__view__data.html#a90105c30b6a4b32ced7663532de301f4">census_view_data::n_tag_sets</a></div><div class="ttdeci">size_t n_tag_sets</div><div class="ttdef"><b>Definition:</b> census.h:471</div></div><div class="ttc" id="structcensus__trace__record_html_ac7f74956d51898681b8e35a8031ac9fb"><div class="ttname"><a href="structcensus__trace__record.html#ac7f74956d51898681b8e35a8031ac9fb">census_trace_record::timestamp</a></div><div class="ttdeci">census_timestamp timestamp</div><div class="ttdef"><b>Definition:</b> census.h:294</div></div><div class="ttc" id="structcensus__timestamp_html_a36ed36ffcf81f720bbdade460f957004"><div class="ttname"><a href="structcensus__timestamp.html#a36ed36ffcf81f720bbdade460f957004">census_timestamp::ts</a></div><div class="ttdeci">gpr_timespec ts</div><div class="ttdef"><b>Definition:</b> census.h:138</div></div><div class="ttc" id="census_8h_html_a37ac21fb6ba91fc1f80523cf3d55dbfa"><div class="ttname"><a href="census_8h.html#a37ac21fb6ba91fc1f80523cf3d55dbfa">census_agg_distribution</a></div><div class="ttdeci">census_aggregation_ops census_agg_distribution</div></div><div class="ttc" id="port__platform_8h_html_a71edab4bc3421f129764e5cb342f7181"><div class="ttname"><a href="port__platform_8h.html#a71edab4bc3421f129764e5cb342f7181">gpr_int64</a></div><div class="ttdeci">int64_t gpr_int64</div><div class="ttdef"><b>Definition:</b> port_platform.h:319</div></div><div class="ttc" id="census_8h_html_afc68a73849e0d1565e74c28c822bb086"><div class="ttname"><a href="census_8h.html#afc68a73849e0d1565e74c28c822bb086">census_tag_set</a></div><div class="ttdeci">struct census_tag_set census_tag_set</div><div class="ttdef"><b>Definition:</b> census.h:335</div></div><div class="ttc" id="structcensus__timestamp_html"><div class="ttname"><a href="structcensus__timestamp.html">census_timestamp</a></div><div class="ttdoc">This structure represents a timestamp as used by census to record the time at which an operation begi...</div><div class="ttdef"><b>Definition:</b> census.h:135</div></div><div class="ttc" id="structcensus__tag__const_html_aaffe4ea2b11ae8cfde18e5b99c4536d2"><div class="ttname"><a href="structcensus__tag__const.html#aaffe4ea2b11ae8cfde18e5b99c4536d2">census_tag_const::key</a></div><div class="ttdeci">const char * key</div><div class="ttdef"><b>Definition:</b> census.h:362</div></div><div class="ttc" id="census_8h_html_ad5f627a64ac4febbc61d2b89801d40e9"><div class="ttname"><a href="census_8h.html#ad5f627a64ac4febbc61d2b89801d40e9">census_supported</a></div><div class="ttdeci">int census_supported(void)</div><div class="ttdoc">Return the features supported by the current census implementation (not all features will be availabl...</div></div><div class="ttc" id="census_8h_html_ad4ff7b1db813ee5318871121bb4281ccaadcf28b76de06181051506c96996255a"><div class="ttname"><a href="census_8h.html#ad4ff7b1db813ee5318871121bb4281ccaadcf28b76de06181051506c96996255a">CENSUS_TRACE_MASK_IS_SAMPLED</a></div><div class="ttdef"><b>Definition:</b> census.h:99</div></div><div class="ttc" id="census_8h_html_a35d6ca1b9557bb6e12d79e137a5df944"><div class="ttname"><a href="census_8h.html#a35d6ca1b9557bb6e12d79e137a5df944">census_agg_sum</a></div><div class="ttdeci">census_aggregation_ops census_agg_sum</div></div><div class="ttc" id="census_8h_html_a054543816f063d003a36316fda4547b8"><div class="ttname"><a href="census_8h.html#a054543816f063d003a36316fda4547b8">census_view_tags</a></div><div class="ttdeci">const census_tag_set * census_view_tags(const census_view *view)</div><div class="ttdoc">Get tags associated with view. </div></div><div class="ttc" id="structcensus__value_html_a1e644fb8e7b1d8e6b06e717f00658522"><div class="ttname"><a href="structcensus__value.html#a1e644fb8e7b1d8e6b06e717f00658522">census_value::metric_id</a></div><div class="ttdeci">gpr_uint32 metric_id</div><div class="ttdef"><b>Definition:</b> census.h:406</div></div><div class="ttc" id="census_8h_html_ad150387e14628665613f1d9a3d27a418"><div class="ttname"><a href="census_8h.html#ad150387e14628665613f1d9a3d27a418">census_view_reset</a></div><div class="ttdeci">void census_view_reset(census_view *view)</div><div class="ttdoc">Reset all view data to zero for the specified view. </div></div><div class="ttc" id="census_8h_html_a0f2a69b151eac68f3c50806d2162d9f4"><div class="ttname"><a href="census_8h.html#a0f2a69b151eac68f3c50806d2162d9f4">census_start_client_rpc_op</a></div><div class="ttdeci">census_context * census_start_client_rpc_op(const census_context *context, gpr_int64 rpc_name_id, const census_rpc_name_info *rpc_name_info, const char *peer, int trace_mask, const census_timestamp *start_time)</div><div class="ttdoc">Start a client rpc operation. </div></div><div class="ttc" id="census_8h_html_a78ec7fa52ea54e631bb11d59a8adba33"><div class="ttname"><a href="census_8h.html#a78ec7fa52ea54e631bb11d59a8adba33">census_context_tag_set</a></div><div class="ttdeci">census_tag_set * census_context_tag_set(census_context *context)</div></div><div class="ttc" id="structcensus__tag__const_html_a27fd204425bf861f10cd26df3dd6fb27"><div class="ttname"><a href="structcensus__tag__const.html#a27fd204425bf861f10cd26df3dd6fb27">census_tag_const::value</a></div><div class="ttdeci">const char * value</div><div class="ttdef"><b>Definition:</b> census.h:364</div></div><div class="ttc" id="structcensus__trace__record_html_a9bb150a1752a810cde915432976f1839"><div class="ttname"><a href="structcensus__trace__record.html#a9bb150a1752a810cde915432976f1839">census_trace_record::op_id</a></div><div class="ttdeci">gpr_uint64 op_id</div><div class="ttdef"><b>Definition:</b> census.h:296</div></div><div class="ttc" id="structcensus__view__data_html"><div class="ttname"><a href="structcensus__view__data.html">census_view_data</a></div><div class="ttdoc">Census view data as returned by census_view_get_data(). </div><div class="ttdef"><b>Definition:</b> census.h:470</div></div><div class="ttc" id="census_8h_html_abe92e59c22481b0de3742673cbbb1bf8"><div class="ttname"><a href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8">census_features</a></div><div class="ttdeci">census_features</div><div class="ttdef"><b>Definition:</b> census.h:48</div></div><div class="ttc" id="census_8h_html_a1225e8bbc14ff51173b6485940940572"><div class="ttname"><a href="census_8h.html#a1225e8bbc14ff51173b6485940940572">census_record_values</a></div><div class="ttdeci">void census_record_values(census_context *context, census_value *values, size_t nvalues)</div></div><div class="ttc" id="census_8h_html_a97a3300020cdacd7149e0efae9f5541e"><div class="ttname"><a href="census_8h.html#a97a3300020cdacd7149e0efae9f5541e">census_end_op</a></div><div class="ttdeci">void census_end_op(census_context *context, int status)</div><div class="ttdoc">End an operation started by any of the census_start_*_op*() calls. </div></div><div class="ttc" id="structgpr__timespec_html"><div class="ttname"><a href="structgpr__timespec.html">gpr_timespec</a></div><div class="ttdef"><b>Definition:</b> time.h:63</div></div><div class="ttc" id="port__platform_8h_html_a737bb95b7b58d90b4215602d36ed65b6"><div class="ttname"><a href="port__platform_8h.html#a737bb95b7b58d90b4215602d36ed65b6">gpr_uint64</a></div><div class="ttdeci">uint64_t gpr_uint64</div><div class="ttdef"><b>Definition:</b> port_platform.h:323</div></div><div class="ttc" id="census_8h_html_a22a740b7e9e3798cb9208b3bd6ea31a7"><div class="ttname"><a href="census_8h.html#a22a740b7e9e3798cb9208b3bd6ea31a7">census_tag_set_iterator</a></div><div class="ttdeci">struct census_tag_set_iterator census_tag_set_iterator</div><div class="ttdef"><b>Definition:</b> census.h:368</div></div><div class="ttc" id="structcensus__aggregation_html_a5b2ce3ab21a88058ea67c944d6a37426"><div class="ttname"><a href="structcensus__aggregation.html#a5b2ce3ab21a88058ea67c944d6a37426">census_aggregation::create_arg</a></div><div class="ttdeci">const void * create_arg</div><div class="ttdef"><b>Definition:</b> census.h:428</div></div><div class="ttc" id="census_8h_html_a06407a753c261626b4e25c4f6fe0b840"><div class="ttname"><a href="census_8h.html#a06407a753c261626b4e25c4f6fe0b840">census_set_rpc_client_peer</a></div><div class="ttdeci">void census_set_rpc_client_peer(census_context *context, const char *peer)</div><div class="ttdoc">Add peer information to a context representing a client RPC operation. </div></div><div class="ttc" id="census_8h_html_a742616973e78aaf969389cea20feea9f"><div class="ttname"><a href="census_8h.html#a742616973e78aaf969389cea20feea9f">census_enabled</a></div><div class="ttdeci">int census_enabled(void)</div><div class="ttdoc">Return the census features currently enabled. </div></div><div class="ttc" id="structcensus__tag__const_html_ac7dd97b14d839f337d34ef5c6d3f882a"><div class="ttname"><a href="structcensus__tag__const.html#ac7dd97b14d839f337d34ef5c6d3f882a">census_tag_const::value_len</a></div><div class="ttdeci">size_t value_len</div><div class="ttdef"><b>Definition:</b> census.h:363</div></div><div class="ttc" id="census_8h_html_ad4ff7b1db813ee5318871121bb4281cca21afa23a531e5d54e70d44ec3c18cfb3"><div class="ttname"><a href="census_8h.html#ad4ff7b1db813ee5318871121bb4281cca21afa23a531e5d54e70d44ec3c18cfb3">CENSUS_TRACE_MASK_NONE</a></div><div class="ttdef"><b>Definition:</b> census.h:98</div></div><div class="ttc" id="structcensus__trace__record_html_a4ba324fb39273bf3c0c0f15852d9d130"><div class="ttname"><a href="structcensus__trace__record.html#a4ba324fb39273bf3c0c0f15852d9d130">census_trace_record::buffer</a></div><div class="ttdeci">const char * buffer</div><div class="ttdef"><b>Definition:</b> census.h:298</div></div><div class="ttc" id="structcensus__trace__record_html_abc4f9330e28d906f90346d7fd5769d53"><div class="ttname"><a href="structcensus__trace__record.html#abc4f9330e28d906f90346d7fd5769d53">census_trace_record::buf_size</a></div><div class="ttdeci">size_t buf_size</div><div class="ttdef"><b>Definition:</b> census.h:299</div></div><div class="ttc" id="grpc_8h_html"><div class="ttname"><a href="grpc_8h.html">grpc.h</a></div></div><div class="ttc" id="structcensus__tag__const_html_a0da666348257edd491a26528e6bacc8f"><div class="ttname"><a href="structcensus__tag__const.html#a0da666348257edd491a26528e6bacc8f">census_tag_const::key_len</a></div><div class="ttdeci">size_t key_len</div><div class="ttdef"><b>Definition:</b> census.h:361</div></div><div class="ttc" id="census_8h_html_a4b8a7f096dcd85c93f823cddb2bf960e"><div class="ttname"><a href="census_8h.html#a4b8a7f096dcd85c93f823cddb2bf960e">census_agg_window</a></div><div class="ttdeci">census_aggregation_ops census_agg_window</div></div><div class="ttc" id="census_8h_html_ad9a7d3170ecf720e1b22a4f255605748"><div class="ttname"><a href="census_8h.html#ad9a7d3170ecf720e1b22a4f255605748">census_context_serialize</a></div><div class="ttdeci">size_t census_context_serialize(const census_context *context, char *buffer, size_t buf_size)</div></div><div class="ttc" id="structcensus__tag__const_html"><div class="ttname"><a href="structcensus__tag__const.html">census_tag_const</a></div><div class="ttdef"><b>Definition:</b> census.h:360</div></div><div class="ttc" id="structcensus__trace__record_html_a7d12a98b15db3199dc221a1be036088b"><div class="ttname"><a href="structcensus__trace__record.html#a7d12a98b15db3199dc221a1be036088b">census_trace_record::trace_id</a></div><div class="ttdeci">gpr_uint64 trace_id</div><div class="ttdef"><b>Definition:</b> census.h:295</div></div><div class="ttc" id="census_8h_html_a27fc8788690179599713226f1f054736"><div class="ttname"><a href="census_8h.html#a27fc8788690179599713226f1f054736">census_context</a></div><div class="ttdeci">struct census_context census_context</div><div class="ttdoc">Context is a handle used by census to represent the current tracing and tagging information. </div><div class="ttdef"><b>Definition:</b> census.h:80</div></div><div class="ttc" id="census_8h_html_abe92e59c22481b0de3742673cbbb1bf8aac1986834f37851b8d899c4a08c8e3ab"><div class="ttname"><a href="census_8h.html#abe92e59c22481b0de3742673cbbb1bf8aac1986834f37851b8d899c4a08c8e3ab">CENSUS_FEATURE_NONE</a></div><div class="ttdef"><b>Definition:</b> census.h:49</div></div><div class="ttc" id="structcensus__trace__record_html_a827fe499f3c0777ae1dcb3969943e7fc"><div class="ttname"><a href="structcensus__trace__record.html#a827fe499f3c0777ae1dcb3969943e7fc">census_trace_record::type</a></div><div class="ttdeci">gpr_uint32 type</div><div class="ttdef"><b>Definition:</b> census.h:297</div></div></div><!-- fragment --></div><!-- contents --><!-- start footer part --><hr class="footer"/><address class="footer"><small>Generated on Fri Jan 15 2016 00:21:22 for GRPC Core by  <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6</small></address></body></html>
 |