backtrace-morgue
Version:
command line interface to the Backtrace object store
127 lines • 52.2 kB
JSON
{
"name": "backtrace-labs/backtrace-morgue",
"version": "0.1.4",
"libraries": {
"xv": "^1.1.25"
},
"title": "",
"branch": "",
"style": {
"name": "Default",
"componentSet": {
"nav": "nav/BasicNav",
"header": "header/BannerHeader",
"article": "article/BasicArticle",
"footer": "footer/BasicFooter"
},
"fontFamily": "-apple-system, BlinkMacSystemFont, sans-serif",
"fontWeight": 400,
"bold": 600,
"lineHeight": 1.5,
"typeScale": [
72,
48,
24,
20,
16,
14,
12
],
"monospace": "Menlo, monospace",
"heading": {
"fontFamily": null,
"fontStyle": null,
"fontWeight": 600,
"lineHeight": 1.25,
"textTransform": null,
"letterSpacing": null
},
"h0": {},
"h1": {},
"h2": {},
"h3": {},
"h4": {},
"h5": {},
"h6": {},
"alternativeText": {},
"space": [
0,
8,
16,
32,
48,
64,
96
],
"layout": {
"maxWidth": 1024,
"centered": false
},
"colors": {
"text": "#111",
"background": "#fff",
"primary": "#08e",
"secondary": "#059",
"highlight": "#e08",
"border": "#ddd",
"muted": "#eee"
},
"border": {
"width": 1,
"radius": 2
},
"link": {},
"button": {
"hover": {
"boxShadow": "inset 0 0 0 999px rgba(0, 0, 0, .125)"
}
},
"input": {},
"body": {
"margin": 0
},
"breakpoints": {
"xs": "@media screen and (max-width:40em)",
"sm": "@media screen and (min-width:40em)",
"md": "@media screen and (min-width:52em)",
"lg": "@media screen and (min-width:64em)"
}
},
"content": [
{
"component": "nav",
"links": [
{
"href": "https://github.com/backtrace-labs/backtrace-morgue",
"text": "GitHub"
},
{
"href": "https://npmjs.com/package/backtrace-morgue",
"text": "npm"
}
]
},
{
"component": "header",
"heading": "backtrace-morgue",
"subhead": "Object store client.",
"children": [
{
"component": "ui/TweetButton",
"text": "backtrace-morgue: Object store client.",
"url": null
},
{
"component": "ui/GithubButton",
"user": "backtrace-labs",
"repo": "backtrace-morgue"
}
],
"text": "v1.7.1"
},
{
"component": "article",
"metadata": {
"source": "github.readme"
},
"html": "<h1>morgue</h1>\n<h2>Installation</h2>\n<p>It is recommended to install <code>morgue</code> using <code>npm</code>.</p>\n<pre>npm <span class=\"hljs-keyword\">install </span><span class=\"hljs-keyword\">backtrace-morgue </span>-g</pre><p>If you working from the repository, then instead use the following command.</p>\n<pre>npm <span class=\"hljs-keyword\">install</span> -g</pre><p>This will install the <code>morgue</code> tool in your configured path. Refer to the\n<code>morgue --help</code> command to learn more.</p>\n<h2>Introduction</h2>\n<p><code>morgue</code> is a command-line interface to the Backtrace object store. It allows\nyou to upload, download and issue queries on objects with-in the object store.</p>\n<h2>Usage</h2>\n<h3>login</h3>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue login <span class=\"hljs-params\"><url></span></pre><p>The first step to using <code>morgue</code> is to log into a server.</p>\n<pre>$ morgue login <span class=\"hljs-string\">http:</span><span class=\"hljs-comment\">//localhost</span>\n<span class=\"hljs-string\">User:</span> sbahra\n<span class=\"hljs-string\">Password:</span> **************\n\nLogged <span class=\"hljs-keyword\">in</span>.</pre><p>At this point, you are able to issue queries.</p>\n<h3>describe</h3>\n<pre>Usage: morgue <span class=\"hljs-keyword\">describe</span> <[<universe>/]<span class=\"hljs-keyword\">project</span>> [<span class=\"hljs-keyword\">substring</span>]</pre><p>Requests a list and description of all metadata that can be queried against.</p>\n<h4>Example</h4>\n<pre>$ morgue describe bidder uname\n uname<span class=\"hljs-selector-class\">.machine</span>: machine hardware name\n uname<span class=\"hljs-selector-class\">.release</span>: kernel release\n uname<span class=\"hljs-selector-class\">.sysname</span>: kernel name\n uname<span class=\"hljs-selector-class\">.version</span>: kernel version</pre><h3>get</h3>\n<pre>Usage: morgue get <<span class=\"hljs-meta\">[<universe>/]project> [options] <object id> [-o <output file>]</span></pre><p>Downloads the specified object from the Backtrace object store and prints\nto standard output. Optionally, output the file to disk.</p>\n<p>The following options are available:</p>\n<table>\n<thead>\n<tr>\n<th>Option</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>--resource=name</code></td>\n<td>Fetch the specified resource rather than the object.</td>\n</tr>\n</tbody>\n</table>\n<h3>put</h3>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue put <span class=\"hljs-params\"><[<universe></span>/]project> <span class=\"hljs-params\"><file></span> <span class=\"hljs-params\"><--format=btt|minidump|json|symbols></span> [options]</pre><p>Uploads object file to the Backtrace object store. User has the following options</p>\n<table>\n<thead>\n<tr>\n<th>Option</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>`--compression=gzip</td>\n<td>deflate`</td>\n<td>uploaded file is compressed</td>\n</tr>\n<tr>\n<td><code>--kv=key1:value1,key2:value2,...</code></td>\n<td>upload key-values</td>\n</tr>\n<tr>\n<td><code>--form_data</code></td>\n<td>upload file by multipart/form-data post request</td>\n</tr>\n</tbody>\n</table>\n<h3>modify</h3>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue modify <span class=\"hljs-params\"><[universe/]project></span> (<span class=\"hljs-params\"><query></span>|<span class=\"hljs-params\"><object></span> ...) [--set ...] [--clear ...]</pre><p>Modifies attributes of the given object in the manner specified.\nBoth options below may be specified more than once.</p>\n<table>\n<thead>\n<tr>\n<th>Option</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>--set</code></td>\n<td>Set the given <code>attribute=value</code> pair</td>\n</tr>\n<tr>\n<td><code>--clear</code></td>\n<td>Clear the given <code>attribute</code></td>\n</tr>\n</tbody>\n</table>\n<p>You are also able to modify multiple objects by specifying filters. The\n<code>--filter</code>, <code>--age</code> and <code>--time</code> arguments are accepted to modify.</p>\n<h4>Example</h4>\n<p>Set hostname to <code>fqdn.example.com</code> for object identifier 0.</p>\n<pre><span class=\"hljs-symbol\">$</span> morgue modify --<span class=\"hljs-keyword\">set</span> hostname=fqdn.example.com <span class=\"hljs-comment\">myproject 0</span></pre><p>Set custom attribute <code>reason</code> to <code>oom</code> for all crashes containing <code>memory_abort</code>.</p>\n<pre><span class=\"hljs-symbol\">$</span> morgue modify --<span class=\"hljs-keyword\">set</span> reason=oom <span class=\"hljs-comment\">--filter=callstack,regular-expression,memory_abort</span></pre><h3>attachment</h3>\n<pre>Usage: morgue attachment <<span class=\"hljs-built_in\">add</span>|<span class=\"hljs-built_in\">get</span>|<span class=\"hljs-keyword\">list</span>|<span class=\"hljs-keyword\">delete</span>> ...\n\n morgue attachment <span class=\"hljs-built_in\">add</span> [<span class=\"hljs-keyword\">options</span>] <[universe/]project> <span class=\"hljs-symbol\"><oid></span> <span class=\"hljs-symbol\"><filename></span>\n\n --content-<span class=\"hljs-built_in\">type</span>=CT Specify Content-Type <span class=\"hljs-keyword\">for</span> attachment.\n The server may auto-detect this.\n --attachment-name=<span class=\"hljs-keyword\">N</span> Use this name <span class=\"hljs-keyword\">for</span> the attachment name.\n Default <span class=\"hljs-keyword\">is</span> the same <span class=\"hljs-keyword\">as</span> the filename.\n\n morgue attachment <span class=\"hljs-built_in\">get</span> [<span class=\"hljs-keyword\">options</span>] <[universe/]project> <span class=\"hljs-symbol\"><oid></span>\n\n Must specify one of:\n --attachment-id=ID Attachment ID <span class=\"hljs-keyword\">to</span> <span class=\"hljs-keyword\">delete</span>.\n --attachment-name=<span class=\"hljs-keyword\">N</span> Attachment name <span class=\"hljs-keyword\">to</span> <span class=\"hljs-keyword\">delete</span>.\n\n morgue attachment <span class=\"hljs-keyword\">list</span> [<span class=\"hljs-keyword\">options</span>] <[universe/]project> <span class=\"hljs-symbol\"><oid></span>\n\n morgue attachment <span class=\"hljs-keyword\">delete</span> [<span class=\"hljs-keyword\">options</span>] <[universe/]project <span class=\"hljs-symbol\"><oid></span>\n\n Must specify one of:\n --attachment-id=ID Attachment ID <span class=\"hljs-keyword\">to</span> <span class=\"hljs-keyword\">delete</span>.\n --attachment-name=<span class=\"hljs-keyword\">N</span> Attachment name <span class=\"hljs-keyword\">to</span> <span class=\"hljs-keyword\">delete</span>.</pre><p>Manage attachments associated with an object.</p>\n<h3>list</h3>\n<p>Allows you to perform queries on object metadata. You can perform\neither selection queries or aggregation queries, but not both at the\nsame time.</p>\n<pre>Usage: morgue list <<span class=\"hljs-string\">[<universe>/]</span>project> <span class=\"hljs-string\">[substring]</span></pre><p>You may pass <code>--verbose</code> in order to get more detailed query performance\ndata.</p>\n<h4>Filters</h4>\n<p>The filter option expects a comma-delimited list of the form\n<code><attribute>,<operation>,<value></code>.</p>\n<p>The currently supported operations are <code>equal</code>, <code>regular-expression</code>,\n<code>inverse-regular-expression</code>, <code>at-least</code>, <code>greater-than</code>, <code>at-most</code>,\n<code>less-than</code>, <code>contains</code>, <code>not-contains</code>, <code>is-set</code>, and <code>is-not-set</code>.</p>\n<h4>Pagination</h4>\n<p>Pagination is handled with two flags</p>\n<p><code>--limit=<n></code> controls the number of returned rows. <code>--offset=<n></code> controls the\noffset at which rows are returned, another way to put it is that it skips the\nfirst <code><n></code> rows.</p>\n<h4>Aggregations</h4>\n<p>Aggregation is expressed through a myriad of command-line options that express\ndifferent aggregation operations. Options are of form <code>--<option>=<attribute></code>.</p>\n<p>The <code>*</code> factor is used when aggregations are performed when no factor is\nspecified or if an object does not have a valid value associated with the\nfactor.</p>\n<table>\n<thead>\n<tr>\n<th>Option</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>--age</code></td>\n<td>Specify a relative timestamp to now. <code>1h</code> ago, or <code>1d</code> ago.</td>\n</tr>\n<tr>\n<td><code>--time</code></td>\n<td>Specify a range using <a href=\"https://github.com/wanasit/chrono#readme\">Chrono</a>.</td>\n</tr>\n<tr>\n<td><code>--unique</code></td>\n<td>provide a count of distinct values</td>\n</tr>\n<tr>\n<td><code>--histogram</code></td>\n<td>provide all distinct values</td>\n</tr>\n<tr>\n<td><code>--distribution</code></td>\n<td>provide a truncated histogram</td>\n</tr>\n<tr>\n<td><code>--mean</code></td>\n<td>calculate the mean of a column</td>\n</tr>\n<tr>\n<td><code>--sum</code></td>\n<td>sum all values</td>\n</tr>\n<tr>\n<td><code>--range</code></td>\n<td>provide the minimum and maximum values</td>\n</tr>\n<tr>\n<td><code>--count</code></td>\n<td>count all non-null values</td>\n</tr>\n<tr>\n<td><code>--bin</code></td>\n<td>provide a linear histogram of values</td>\n</tr>\n<tr>\n<td><code>--head</code></td>\n<td>provide the first value in a factor</td>\n</tr>\n<tr>\n<td><code>--tail</code></td>\n<td>provide the last value in a factor</td>\n</tr>\n<tr>\n<td><code>--object</code></td>\n<td>provide the maximum object identifier of a column</td>\n</tr>\n</tbody>\n</table>\n<h4>Sorting</h4>\n<p>Sorting of results is done with the stackable option <code>--sort=<term></code>. The term\nsyntax is <code>[-](<column>|<fold_term>)</code>.</p>\n<ul>\n<li>The optional <code>-</code> reverse the sort term order to descending, otherwise it\ndefaults to ascending.</li>\n<li>The <code><column></code> term refers to a valid column in the table. This is only\neffective for selection type query, i.e. when using the <code>--select</code> option.</li>\n<li>The <code><fold_term></code> is an expression pointing to a fold operation. The\nexpression language for fold operation is one of the following literal:<ul>\n<li><code>;group</code>: sort by the group key itself.</li>\n<li><code>;count</code>: sort by the group count (number of crashes).</li>\n<li><code>column;idx</code>: where <code>column</code> is a string referencing a column in the fold\ndictionary and <code>idx</code> is an indice in the array. See examples .</li>\n</ul>\n</li>\n</ul>\n<p>Multiple sort terms can be provided to break ties in case the previous\nreferenced sort term has ties.</p>\n<h4>Example</h4>\n<p>Request all faults from application deployments owned by jdoe.\nProvide the timestamp, hostname, callstack and classifiers.</p>\n<pre>$ morgue list <span class=\"hljs-keyword\">bidder </span>--filter<span class=\"hljs-symbol\">=tag_owner</span>,equal,jdoe --<span class=\"hljs-keyword\">select=timestamp </span>--<span class=\"hljs-keyword\">select=hostname </span>--<span class=\"hljs-keyword\">select=callstack </span>--<span class=\"hljs-keyword\">select=classifiers\n</span>*\n<span class=\"hljs-number\">#9</span>d33 Thu Oct <span class=\"hljs-number\">13</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">18</span>:<span class=\"hljs-number\">36</span>:<span class=\"hljs-number\">01</span> GMT-<span class=\"hljs-number\">0400</span> (EDT) <span class=\"hljs-number\">5</span> months ago\n<span class=\"hljs-symbol\"> hostname:</span> <span class=\"hljs-number\">2235</span>.<span class=\"hljs-keyword\">bm-bidderc.prod.nym2\n</span><span class=\"hljs-symbol\"> classifiers:</span> abort stop\n<span class=\"hljs-symbol\"> callstack:</span>\n <span class=\"hljs-meta\">assert</span> ← int_set_union_all ← all_domain_lists ←\n setup_phase_unlocked ← <span class=\"hljs-keyword\">bid_handler_slave_inner </span>← <span class=\"hljs-keyword\">bid_handler_slave </span>←\n an_sched_process_task ← an_sched_slave ← event_base_loop ←\n an_sched_enter ← <span class=\"hljs-keyword\">bidder_slave </span>← an_sched_pthread_cb\n<span class=\"hljs-symbol\">#ef2f</span> Thu Oct <span class=\"hljs-number\">13</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">18</span>:<span class=\"hljs-number\">36</span>:<span class=\"hljs-number\">01</span> GMT-<span class=\"hljs-number\">0400</span> (EDT) <span class=\"hljs-number\">5</span> months ago\n<span class=\"hljs-symbol\"> hostname:</span> <span class=\"hljs-number\">2066</span>.<span class=\"hljs-keyword\">bm-impbus.prod.nym2\n</span><span class=\"hljs-symbol\"> classifiers:</span> abort stop\n<span class=\"hljs-symbol\"> callstack:</span>\n <span class=\"hljs-meta\">assert</span> ← an_discovery_get_instances ← <span class=\"hljs-keyword\">budget_init_discovery </span>←\n main\n<span class=\"hljs-number\">#119</span>bf Thu Oct <span class=\"hljs-number\">13</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">18</span>:<span class=\"hljs-number\">36</span>:<span class=\"hljs-number\">01</span> GMT-<span class=\"hljs-number\">0400</span> (EDT) <span class=\"hljs-number\">5</span> months ago\n<span class=\"hljs-symbol\"> hostname:</span> <span class=\"hljs-number\">2066</span>.<span class=\"hljs-keyword\">bm-impbus.prod.nym2\n</span><span class=\"hljs-symbol\"> classifiers:</span> abort stop\n<span class=\"hljs-symbol\"> callstack:</span>\n <span class=\"hljs-meta\">assert</span> ← an_discovery_get_instances ← <span class=\"hljs-keyword\">budget_init_discovery </span>←\n main</pre><p>Request faults owned by jdoe, group them by fingerprint and aggregate\nthe number of unique hosts, display a histogram of affected versions and\nprovide a linear histogram of process age distribution.</p>\n<pre>$ morgue list <span class=\"hljs-keyword\">bidder </span>--age<span class=\"hljs-number\">=1</span>y --factor<span class=\"hljs-symbol\">=fingerprint</span> --filter<span class=\"hljs-symbol\">=tag_owner</span>,equal,jdoe --head<span class=\"hljs-symbol\">=callstack</span> --unique<span class=\"hljs-symbol\">=hostname</span> --histogram<span class=\"hljs-symbol\">=tag</span> --<span class=\"hljs-keyword\">bin=process.age\n</span><span class=\"hljs-number\">823</span>a55fb15bf697ba3041d736ade... ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">5</span> months ago\n<span class=\"hljs-symbol\">Date</span>: Wed May <span class=\"hljs-number\">18</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">18</span>:<span class=\"hljs-number\">44</span>:<span class=\"hljs-number\">35</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n<span class=\"hljs-symbol\">callstack</span>:\n <span class=\"hljs-meta\">assert</span> ← int_set_union_all ← all_domain_lists ←\n setup_phase_unlocked ← <span class=\"hljs-keyword\">bid_handler_slave_inner </span>← <span class=\"hljs-keyword\">bid_handler_slave </span>←\n an_sched_process_task ← an_sched_slave ← event_base_loop ←\n an_sched_enter ← <span class=\"hljs-keyword\">bidder_slave </span>← an_sched_pthread_cb\n<span class=\"hljs-symbol\">histogram</span>(tag):\n <span class=\"hljs-number\">8</span>.<span class=\"hljs-number\">20</span>.<span class=\"hljs-number\">4</span>.<span class=\"hljs-keyword\">adc783.0 </span>▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆ <span class=\"hljs-number\">1</span>\n<span class=\"hljs-symbol\">unique</span>(hostname): <span class=\"hljs-number\">1</span>\n<span class=\"hljs-keyword\">bin(process.age):\n</span> <span class=\"hljs-number\">7731</span> <span class=\"hljs-number\">7732</span> ▆▆▆▆▆▆▆▆▆▆ <span class=\"hljs-number\">1</span>\n\n<span class=\"hljs-number\">3</span>b851ac1ab1421409159cc38edb2... ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">5</span> months ago\n<span class=\"hljs-symbol\">Date</span>: Tue May <span class=\"hljs-number\">17</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">17</span>:<span class=\"hljs-number\">28</span>:<span class=\"hljs-number\">26</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Tue May <span class=\"hljs-number\">17</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">17</span>:<span class=\"hljs-number\">30</span>:<span class=\"hljs-number\">07</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n<span class=\"hljs-symbol\">callstack</span>:\n <span class=\"hljs-meta\">assert</span> ← an_discovery_get_instances ← <span class=\"hljs-keyword\">budget_init_discovery </span>←\n main\n<span class=\"hljs-symbol\">histogram</span>(tag):\n <span class=\"hljs-number\">4</span>.<span class=\"hljs-number\">44</span>.<span class=\"hljs-number\">0</span>.<span class=\"hljs-keyword\">adc783.1 </span>▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆ <span class=\"hljs-number\">2</span>\n<span class=\"hljs-symbol\">unique</span>(hostname): <span class=\"hljs-number\">1</span>\n<span class=\"hljs-keyword\">bin(process.age):\n</span> <span class=\"hljs-number\">23</span> <span class=\"hljs-number\">24</span> ▆▆▆▆▆▆▆▆▆▆ <span class=\"hljs-number\">1</span>\n <span class=\"hljs-number\">24</span> <span class=\"hljs-number\">25</span> ▆▆▆▆▆▆▆▆▆▆ <span class=\"hljs-number\">1</span></pre><p>Request faults for the last 2 years, group them by fingerprint, show the first\nobject identifier in the group, sort the results by descending fingerprint,\nlimit the results to 5 faults and skip the first 10 (according to sort order).</p>\n<pre>$ morgue list blackhole --age=<span class=\"hljs-number\">2</span>y --factor=fingerprint --object=fingerprint --limit=<span class=\"hljs-number\">5</span> --offset=<span class=\"hljs-number\">10</span> --sort=<span class=\"hljs-string\">"-;group"</span>\nfec4bfecf8e077cf44024f5668fa... ▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">2</span> years ago\nFirst Occurrence: Tue Jan <span class=\"hljs-number\">12</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">13</span>:<span class=\"hljs-number\">30</span>:<span class=\"hljs-number\">12</span> GMT-<span class=\"hljs-number\">0500</span> (EST)\n Occurrences: <span class=\"hljs-number\">360</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">object</span><span class=\"hljs-params\">(fingerprint)</span></span>: <span class=\"hljs-number\">1</span>c653d\n\nfe7294a780a16e30b619e8d94a8a... █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">2</span> years ago\nFirst Occurrence: Wed Oct <span class=\"hljs-number\">28</span> <span class=\"hljs-number\">2015</span> <span class=\"hljs-number\">11</span>:<span class=\"hljs-number\">30</span>:<span class=\"hljs-number\">47</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Last Occurrence: Wed Oct <span class=\"hljs-number\">28</span> <span class=\"hljs-number\">2015</span> <span class=\"hljs-number\">12</span>:<span class=\"hljs-number\">16</span>:<span class=\"hljs-number\">19</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Occurrences: <span class=\"hljs-number\">203</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">object</span><span class=\"hljs-params\">(fingerprint)</span></span>: <span class=\"hljs-number\">1</span>c23b3\n\nfe5e0dda6cf0fb996a521dde4087... ▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">1</span> year ago\nFirst Occurrence: Tue Jun <span class=\"hljs-number\">14</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">11</span>:<span class=\"hljs-number\">54</span>:<span class=\"hljs-number\">35</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Occurrences: <span class=\"hljs-number\">1</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">object</span><span class=\"hljs-params\">(fingerprint)</span></span>: <span class=\"hljs-number\">2</span>de5\n\nfe46d9af7c65c084091fed51ef02... █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">2</span> years ago\nFirst Occurrence: Tue Oct <span class=\"hljs-number\">27</span> <span class=\"hljs-number\">2015</span> <span class=\"hljs-number\">16</span>:<span class=\"hljs-number\">59</span>:<span class=\"hljs-number\">34</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Last Occurrence: Tue Oct <span class=\"hljs-number\">27</span> <span class=\"hljs-number\">2015</span> <span class=\"hljs-number\">20</span>:<span class=\"hljs-number\">05</span>:<span class=\"hljs-number\">30</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Occurrences: <span class=\"hljs-number\">3</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">object</span><span class=\"hljs-params\">(fingerprint)</span></span>: <span class=\"hljs-number\">8</span>f41\n\nfdc0860ef6dfd3d0397b53043ab9... ▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">1</span> year ago\nFirst Occurrence: Tue Jun <span class=\"hljs-number\">07</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">11</span>:<span class=\"hljs-number\">51</span>:<span class=\"hljs-number\">55</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Occurrences: <span class=\"hljs-number\">211</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">object</span><span class=\"hljs-params\">(fingerprint)</span></span>: <span class=\"hljs-number\">1</span>c1958</pre><p>Request faults for the two years, group them by fingerprint, sum process.age,\nsort the results by descending sum of process.age per fingerprint, limit the\nresults to 3 faults. Note here that <code>1</code> in <code>-process.age;1</code> is the second\noperator (<code>--sum</code>) in this case.</p>\n<pre>$ morgue list blackhole --age=<span class=\"hljs-number\">2</span>y --factor=fingerprint --first=process<span class=\"hljs-selector-class\">.age</span> --sum=process<span class=\"hljs-selector-class\">.age</span> --limit=<span class=\"hljs-number\">3</span> --sort=<span class=\"hljs-string\">"-process.age;1"</span>\nd9358a6fdb7eaa143254b6987d00... ▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">1</span> year ago\nFirst Occurrence: Tue Sep <span class=\"hljs-number\">20</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">21</span>:<span class=\"hljs-number\">59</span>:<span class=\"hljs-number\">46</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Last Occurrence: Tue Sep <span class=\"hljs-number\">20</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">22</span>:<span class=\"hljs-number\">03</span>:<span class=\"hljs-number\">23</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Occurrences: <span class=\"hljs-number\">38586</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">sum</span><span class=\"hljs-params\">(process.age)</span></span>: <span class=\"hljs-number\">56892098354615</span> sec\n\n<span class=\"hljs-number\">524</span>b9f988c8ff9dfc1b3a0c71231... ▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">1</span> year ago\nFirst Occurrence: Tue Sep <span class=\"hljs-number\">20</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">22</span>:<span class=\"hljs-number\">01</span>:<span class=\"hljs-number\">52</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Last Occurrence: Tue Sep <span class=\"hljs-number\">20</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">22</span>:<span class=\"hljs-number\">03</span>:<span class=\"hljs-number\">19</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Occurrences: <span class=\"hljs-number\">25737</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">sum</span><span class=\"hljs-params\">(process.age)</span></span>: <span class=\"hljs-number\">37947233900547</span> sec\n\nbffd05c6b745229fd1c648bbe2a7... ▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ <span class=\"hljs-number\">1</span> year ago\nFirst Occurrence: Tue Sep <span class=\"hljs-number\">20</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">21</span>:<span class=\"hljs-number\">59</span>:<span class=\"hljs-number\">46</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Last Occurrence: Tue Sep <span class=\"hljs-number\">20</span> <span class=\"hljs-number\">2016</span> <span class=\"hljs-number\">22</span>:<span class=\"hljs-number\">03</span>:<span class=\"hljs-number\">01</span> GMT-<span class=\"hljs-number\">0400</span> (EDT)\n Occurrences: <span class=\"hljs-number\">20096</span>\n<span class=\"hljs-function\"><span class=\"hljs-title\">sum</span><span class=\"hljs-params\">(process.age)</span></span>: <span class=\"hljs-number\">29630010305216</span> sec</pre><h3>delete</h3>\n<p>Allows deleting objects.</p>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue delete <span class=\"hljs-params\"><[universe/]project></span> <span class=\"hljs-params\"><oid1></span> [... oidN]</pre><p>Object IDs must be specified; they can be found in <code>morgue list</code> output.\nThe object ID printed in the example above is <code>9d33</code>.</p>\n<p>The following options support partial deletes:\n<code>--physical-only</code>: Only delete the physical object; retain indexing.\n<code>--crdb-only</code>: Only delete the indexed data; requires physically deleted objects.</p>\n<h3>flamegraph</h3>\n<pre>Usage: morgue flamegraph <span class=\"hljs-string\">[--filter=<filter expression>]</span> <span class=\"hljs-string\">[--reverse]</span> <span class=\"hljs-string\">[--unique]</span> <span class=\"hljs-string\">[-o file.svg]</span></pre><p>Generate a flamegraph of callstacks of all objects matching the specified\nfilter criteria. The <code>--filter</code> option behaves identically to the <code>list</code>\nsub-command. This functionality requires <code>perl</code> to be installed.\nTo learn more about flamegraphs, please see\n<a href=\"http://www.brendangregg.com/flamegraphs.html\">http://www.brendangregg.com/flamegraphs.html</a>.</p>\n<p>Use <code>--unique</code> to only sample unique crashes. Use <code>--reverse</code> to begin sampling\nfrom leaf functions.</p>\n<h3>report</h3>\n<p>Create and manage scheduled reports.</p>\n<pre>Usage: morgue report <list | <span class=\"hljs-built_in\">create</span> | <span class=\"hljs-built_in\">delete</span> | <span class=\"hljs-built_in\">send</span>> [<span class=\"hljs-comment\">--project=...] [--universe=...]</span></pre><h4>create</h4>\n<pre>Usage: morgue report <project> create\n <--rcpt=...>\n <--title=...>\n [--filter=...]\n [--fingerprint=...]\n [--histogram=...]\n [--hour=...]\n [--day=...]\n --period=<week | day></pre><p>Example:</p>\n<pre>$ morgue report MyProject create --rcpt=<span class=\"hljs-literal\">null</span><span class=\"hljs-meta\">@backtrace</span>.io\n --rcpt=<span class=\"hljs-keyword\">list</span><span class=\"hljs-meta\">@backtrace</span>.io --<span class=\"hljs-keyword\">filter</span>=environment,equal,prod\n --title=<span class=\"hljs-string\">"Production Crashes weekly"</span> --period=week</pre><h4>delete</h4>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue report <span class=\"hljs-params\"><project></span> delete <span class=\"hljs-params\"><report integer identifier></span></pre><h4>list</h4>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue report <span class=\"hljs-params\"><project></span> list</pre><h3>repair</h3>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue repair <span class=\"hljs-params\"><[universe/]project></span></pre><p>Repair a project's attribute database. For each corrupted pages of a project's\nattribute database, reprocess the affected objects (if possible). Once\ncompleted and successful, transition the database into normal mode.</p>\n<h3>reprocess</h3>\n<pre>Usage: morgue reprocess <[universe/]project> [<span class=\"hljs-symbol\"><query></span>|<span class=\"hljs-symbol\"><object></span> ...] [--<span class=\"hljs-keyword\">first</span> <span class=\"hljs-keyword\">N</span>] [--<span class=\"hljs-keyword\">last</span> <span class=\"hljs-keyword\">N</span>]\n\nOptions <span class=\"hljs-keyword\">for</span> reproces<span class=\"hljs-variable\">s:</span>\n --<span class=\"hljs-keyword\">first</span>=<span class=\"hljs-keyword\">N</span> Specify the <span class=\"hljs-keyword\">first</span> object ID (defaul<span class=\"hljs-variable\">t:</span> earliest known)\n --<span class=\"hljs-keyword\">last</span>=<span class=\"hljs-keyword\">N</span> Specify the <span class=\"hljs-keyword\">last</span> object ID (defaul<span class=\"hljs-variable\">t:</span> most recent known)</pre><p>Reprocess the project's objects. This command can be used to re-execute\nindexing, fingerprinting, and symbolification (where needed).</p>\n<p>If a set of objects (or query) is specified, any values for <code>--first</code> and\n<code>--last</code> are replaced to match the object list. If no query, object list,\nor range is provided, all objects in the project are reprocessed.</p>\n<h3>retention</h3>\n<pre>Usage: morgue retention <<span class=\"hljs-built_in\">list</span>|<span class=\"hljs-built_in\">set</span>|status|clear> <<span class=\"hljs-built_in\">name</span>> [options]\n\nOptions <span class=\"hljs-keyword\">for</span> <span class=\"hljs-built_in\">set</span>/clear:\n --<span class=\"hljs-built_in\">type</span>=T Specify retention <span class=\"hljs-built_in\">type</span> (<span class=\"hljs-keyword\">default</span>: project)\n valid: instance, universe, project\n\nOptions <span class=\"hljs-keyword\">for</span> status:\n [--<span class=\"hljs-built_in\">type</span>=<universe|project> <<span class=\"hljs-built_in\">name</span>>]\n\nOptions <span class=\"hljs-keyword\">for</span> <span class=\"hljs-built_in\">set</span>:\n --<span class=\"hljs-built_in\">max</span>-age=N Specify <span class=\"hljs-built_in\">time</span> limit <span class=\"hljs-keyword\">for</span> objects, <span class=\"hljs-built_in\">in</span> seconds\n --physical-only Specifies that the policy only delete physical copies;\n indexing will be retained.</pre><p>Configure the retention policy for a given namespace, which can cover the\ncoroner instance, or a specific universe or project.</p>\n<h4>Example</h4>\n<pre>$ morgue retention clear a_project\n<span class=\"hljs-keyword\">success\n</span>$ morgue retention set blackhole --max-age=3600\n$ morgue retention list\nProject-level:\n blackhole: max age: 1h\n$</pre><h3>sampling</h3>\n<pre><span class=\"hljs-attribute\">Usage</span>: morgue sampling <status|reset> [options]\n\n<span class=\"vim\">Options <span class=\"hljs-keyword\">for</span> either status <span class=\"hljs-built_in\">or</span> rese<span class=\"hljs-variable\">t:</span>\n --fingerprint=group Specify <span class=\"hljs-keyword\">a</span> fingerprint <span class=\"hljs-keyword\">to</span> apply <span class=\"hljs-keyword\">to</span>.\n Without this, applies <span class=\"hljs-keyword\">to</span> <span class=\"hljs-keyword\">all</span>.\n --project=[universe/]project Specify <span class=\"hljs-keyword\">a</span> project <span class=\"hljs-keyword\">to</span> apply <span class=\"hljs-keyword\">to</span>.\n Without this, applies <span class=\"hljs-keyword\">to</span> <span class=\"hljs-keyword\">all</span>.\n\nOptions <span class=\"hljs-keyword\">for</span> status <span class=\"hljs-keyword\">only</span>:\n --<span class=\"hljs-built_in\">max</span>-groups=<span class=\"hljs-keyword\">N</span> Specify <span class=\"hljs-built_in\">max</span> <span class=\"hljs-keyword\">number</span> of groups <span class=\"hljs-keyword\">to</span> <span class=\"hljs-keyword\">display</span>\n per project.</span></pre><p>Retrieve the object sampling status, or reset it.\nProject is a required flag if fingerprint is specified.</p>\n<h3>symbol</h3>\n<pre>Usage: morgue symbol <<span class=\"hljs-meta\">[<universe>/]project> [summary | list | missing | archives] [-o <output file>]</span></pre><p>Retrieve a list of uploaded symbols or symbol archives. By default, <code>morgue symbol</code>\nwill return a summary of uploaded archives, available symbols and missing symbols.\nIf <code>archives</code> is used, a list of uploaded, in-process and symbol processing errors\nare outputted. If <code>list</code> is used, then a list of uploaded symbols is returned. If\n<code>missing</code> is used, then the set of missing symbols for the project are included.</p>\n<h3>scrubber</h3>\n<p>Create, modify and delete data scrubbers.</p>\n<pre>Usage: morgue scrubber <project> <list | <span class=\"hljs-type\">create</span> | <span class=\"hljs-type\">modify</span> | <span class=\"hljs-type\">delete</span>></pre><p>Use <code>--name</code> to identify the scrubber. Use <code>--regexp</code> to specify the pattern to\nmatch and scrub. Use <code>--builtin</code> to specify a builtin scrubber, <code>ssn</code>, <code>ccn</code>,\n<code>key</code> and <code>env</code> are currently supported for social security number, credit card\nnumber, encryption key and environment variable. If <code>--builtin=all</code> in <code>create</code>\nsubcommand, all supported builtin scrubbers are created. <code>--regexp</code> and\n<code>--builtin</code> are mutually exclusive. Use <code>--enable</code> to activate the scrubber, 0\ndisables the scrubber while other integer values enable it.</p>\n<h3>setup</h3>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue setup <span class=\"hljs-params\"><url></span></pre><p>If you are using an on-premise version of <code>coronerd</code>, use <code>morgue setup</code>\nto configure the initial organization and user. For example, if the server is\n<code>backtrace.mycompany.com</code>, then you would run <code>morgue setup http://backtrace.mycompany.com</code>.\nWe recommend resetting your password after you enable SSL (done by configuring\nyour certificates).</p>\n<h3>nuke</h3>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue nuke --universe=<span class=\"hljs-params\"><universe name></span> [--project=<span class=\"hljs-params\"><project name></span>]</pre><p>If you want to nuke an object and all of the dependencies of the object.\nDo not use this operation without making a back-up of your data.</p>\n<h3>token</h3>\n<pre>Usage: morgue <span class=\"hljs-keyword\">token</span> [<span class=\"hljs-built_in\">create</span> | list | <span class=\"hljs-built_in\">delete</span>] [<span class=\"hljs-comment\">--project=...] [--universe=...]</span></pre><h4>create</h4>\n<pre><span class=\"hljs-symbol\">Usage:</span> morgue token create --project=<span class=\"hljs-params\"><project></span> --capability=<span class=\"hljs-params\"><capability></span></pre><p>Capability can be any of:</p>\n<ul>\n<li>symbol:post - Enable symbol uploads with the specified API token.</li>\n<li>error:post - Enable error and dump submission with the specified API token.</li>\n<li>query:post - Enable queries to be issued using the specified token.</li>\n<li>sync:post - Allow for slower but more verbose submission.</li>\n</ul>\n<p>Multiple capabilities can be specified by using <code>--capability</code> multiple times\nor using a comma-separated list.</p>\n<h4>list</h4>\n<pre>Usage: morgue token <span class=\"hljs-built_in\">list</span> <span class=\"hljs-meta\">[</span>-<span class=\"hljs-params\">-universe</span>=<span class=\"hljs-params\">...</span><span class=\"hljs-meta\">]</span> <span class=\"hljs-meta\">[</span>-<span class=\"hljs-params\">-project</span>=<span class=\"hljs-params\">...</span><span class=\"hljs-meta\">]</span></pre><p>List API tokens in the specified universe, for all projects or a specified\nproject.</p>\n<h4>delete</h4>\n<pre>Usage: morgue <span class=\"hljs-built_in\">token</span> <span class=\"hljs-keyword\">delete</span> <sha256 <span class=\"hljs-keyword\">or</span> prefix></pre><p>Delete the specified token by substring or exact match.</p>\n<h3>user</h3>\n<pre>Usage: morgue user reset <span class=\"hljs-string\">[--universe=...]</span> <span class=\"hljs-string\">[--user=...]</span> <span class=\"hljs-string\">[--password=...]</span></pre><p>Modify users.</p>\n<p>Currently, can only be used to reset user passwords. Prompts for user and\npassword if either is not specified.</p>\n<h3>tenant</h3>\n<p>Create isolated tenants for receiving error data and log in. Tenants provide\nnamespace isolation. Users in one tenant are unable to interact with any\nobjects outside of their tenant.</p>\n<p>This is an enterprise feature and not enabled by default for self-serve\ncustomers. The tenant commands require superuser access.</p>\n<pre>Usage: morgue tenant <list | <span class=\"hljs-built_in\">create</span> | <span class=\"hljs-built_in\">delete</span>>\n <span class=\"hljs-built_in\">create</span> <name>: Create <span class=\"hljs-keyword\">a</span> tenant <span class=\"hljs-keyword\">with</span> <span class=\"hljs-keyword\">the</span> specified name.\n <span class=\"hljs-built_in\">delete</span> <name>: Delete <span class=\"hljs-keyword\">a</span> tenant <span class=\"hljs-keyword\">with</span> <span class=\"hljs-keyword\">the</span> specified name.\n list: List all tenants <span class=\"hljs-keyword\">on</span> <span class=\"hljs-title\">your</span> <span class=\"hljs-title\">instance</span>.</pre><h4>Examples</h4>\n<p>1.0 Create a Tenant</p>\n<p>After logging into an object store as a superuser, we are able to simply\ncreate a tenant using the following command:</p>\n<pre>$ morgue tenant <span class=\"hljs-built_in\">create</span> testingxyz\nTenant successfully created <span class=\"hljs-keyword\">at</span> <span class=\"hljs-keyword\">https</span>://testingxyz.sp.backtrace.io\nWait <span class=\"hljs-keyword\">a</span> few minutes <span class=\"hljs-keyword\">for</span> propagation <span class=\"hljs-built_in\">to</span> complete.</pre><p>Tenants are required to be contained with-in the same TLD. For example,\na tenant of name <code>X</code> is expected to be contained in <code>X.sp.backtrace.io</code>.</p>\n<p>After creating a tenant, you will probably need to invite an initial\nadministrator user for the tenant. For that, please see <code>invite</code> sub-command\nlisted below. You must use the <code>--tenant</code> option to invite an administrator\nto a particular tenant.</p>\n<p>2.0 Delete a Tenant</p>\n<p>After logging into an object store as a superuser, we are able to simply\ncreate a tenant using the following command:</p>\n<pre>$ morgue tenant <span class=\"hljs-keyword\">delete</span> testingxyz\nTenant successfully deleted.</pre><p>Please note this is a destructive command from a configuration perspective.\nUnless you are maintaining backups, there is no way to restore your\nconfiguration data.</p>\n<p>3.0 List Tenants</p>\n<p>You can list existing tenants using the <code>morgue tenant list</code> command\nas below.</p>\n<pre>$ morgue tenant <span class=\"hljs-keyword\">list</span>\n ID Tenant URL\n <span class=\"hljs-number\">1</span> test http<span class=\"hljs-variable\">s:</span>//test.<span class=\"hljs-keyword\">sp</span>.backtrace.io\n <span class=\"hljs-number\">4</span> test1 http<span class=\"hljs-variable\">s:</span>//test1.<span class=\"hljs-keyword\">sp</span>.backtrace.io</pre><h3>similarity</h3>\n<p>Compute the similarity and list acceptably similar crash groups according\nto their callstack attribute.</p>\n<pre>Usage: morgue similarity <[universe]/project> [filter expression]\n [<span class=\"hljs-comment\">--threshold=N] The minimum length of the callstack for groups to</span>\n consider <span class=\"hljs-keyword\">for</span> similarity analysis.\n [<span class=\"hljs-comment\">--intersect=N] The minimum number of common symbols between</span>\n two groups.\n [<span class=\"hljs-comment\">--distance=N] The maximum acceptable edit distance between</span>\n two groups.\n [<span class=\"hljs-comment\">--fingerprint=N] A fingerprint to compute similarity to.</span></pre><h3>invite</h3>\n<p>Invite new users into your system. Requires you to have logged in.</p>\n<pre>Usage: morgue invite <create | list | resend>\n create <username> <email>\n -<span class=\"ruby\">-role=<<span class=\"hljs-string\">"guest"</span> <span class=\"hljs-params\">| "member" |</span> <span class=\"hljs-string\">"admin"</span>>\n</span> -<span class=\"ruby\">-metadata=<metadata>\n</span> -<span class=\"ruby\">-tenant=<tenant name>\n</span> -<span class=\"ruby\">-method=<<span class=\"hljs-string\">"password"</span> <span class=\"hljs-params\">| "saml" |</span> <span class=\"hljs-string\">"pam"</span>>\n</span> delete <token>\n resend <token></pre><h4>Examples</h4>\n<p>1.0 Invite a User</p>\n<p>Below, we invite a new user into the tenant currently logged into (or\nthe first tenant, if multiple exist). The default settings for the user\nare to use password authentication and have a <code>member</code> role.</p>\n<pre>$ morgue invite <span class=\"hljs-keyword\">create</span> <username> <<span class=\"hljs-keyword\">user</span> <span class=\"hljs-built_in\">e</span>-mail></pre><pre>$ morgue invite sbahra user@backtrace.<span class=\"hljs-built_in\">io</span>\nInvitation successfully created <span class=\"hljs-keyword\">for</span> user@backtrace.<span class=\"hljs-built_in\">io</span>\nSending e-mail...done</pre><p>1.1 Invite a User as an Administrator</p>\n<pre>$ morgue invite <span class=\"hljs-keyword\">create</span> <span class=\"hljs-keyword\">user</span> <span class=\"hljs-keyword\">user</span>@gmail.com --<span class=\"hljs-keyword\">role</span>=admin\nInvitation successfully created <span class=\"hljs-keyword\">for</span> <span class=\"hljs-keyword\">user</span>@backtrace.io\nSending <span class=\"hljs-built_in\">e</span>-mail...done</pre><p>1.2 Invite a User into a Particular Tenant</p>\n<pre>$ morgue invite <span class=\"hljs-keyword\">create</span> <span class=\"hljs-keyword\">user</span> <span class=\"hljs-keyword\">user</span>@gmail.com --tenant=mystudio\nInvitation successfully created <span class=\"hljs-keyword\">for</span> <span class=\"hljs-keyword\">user</span>@backtrace.io\nSending <span class=\"hljs-built_in\">e</span>-mail...done</pre><p>2.0 List Pending Invitation</p>\n<p>This will list invitations that have yet to be accepted or\nactivated.</p>\n<pre>$ morgue invite <span class=\"hljs-type\">list</span>\nTenant Username Method Role Email Token\n <span class=\"hljs-number\">1</span> ashley2 password admin ashley2@backtrace.io f892200fa564...\n <span class=\"hljs-number\">1</span> jack1 password member jack@backtrace.io <span class=\"hljs-number\">39</span>c1b80a7e00...\n <span class=\"hljs-number\">1</span> jack2 password member jack+<span class=\"hljs-number\">2</span>@backtrace.io c399bdf23873...\n <span class=\"hljs-number\">1</span> jack17131 password member ja