{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla/socorro/pulls/comments/49613496","id":49613496,"diff_hunk":"@@ -0,0 +1,389 @@\n+{% extends \"crashstats_base.html\" %}\n+\n+{% block page_title %}User Documentation{% endblock %}\n+\n+{% block site_css %}\n+    {{ super() }}\n+    {% stylesheet 'documentation' %}\n+{% endblock %}\n+\n+{% block content %}\n+\n+<div id=\"mainbody\">\n+\n+    <div class=\"page-heading\">\n+        <h2>User Documentation</h2>\n+    </div>\n+\n+    <div class=\"panel\">\n+        <div class=\"body\">\n+            <ul class=\"links\">\n+                <li>Super Search</li>\n+                <li>\n+                    <a href=\"{{ url('documentation:supersearch_home') }}\">Home</a>\n+                </li>\n+                <li>\n+                    <a href=\"{{ url('documentation:supersearch_api') }}\">API</a>\n+                </li>\n+            </ul>\n+        </div>\n+    </div>\n+\n+    <div class=\"panel\">\n+        <div class=\"body\">\n+            <table>\n+                <caption>Summary</caption>\n+                <tbody>\n+                    <tr>\n+                        <td>User Interface</td>\n+                        <td><a href=\"{{ url('supersearch.search') }}\">{{ full_url(request, 'supersearch.search') }}</a></td>\n+                    </tr>\n+                    <tr>\n+                        <td>API endpoint</td>\n+                        <td><a href=\"{{ url('api:model_wrapper', model_name='SuperSearch') }}\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearch') }}</a></td>\n+                    </tr>\n+                    <tr>\n+                        <td>Private endpoint</td>\n+                        <td><a href=\"{{ url('api:model_wrapper', model_name='SuperSearchUnredacted') }}\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearchUnredacted') }}</a></td>\n+                    </tr>\n+                    <tr>\n+                        <td>API Documentation</td>\n+                        <td><a href=\"{{ url('documentation:supersearch_api') }}\">{{ full_url(request, 'documentation:supersearch_api') }}</a></td>\n+                    </tr>\n+                </tbody>\n+            </table>\n+\n+            <h1 id=\"what-is-super-search\">What is Super Search?</h1>\n+\n+            <p>Super Search is an interface to crash reports data. There is a <a href=\"{{ url('supersearch.search') }}\">human-friendly interface</a> and a <a href=\"{{ url('api:documentation') }}#SuperSearch\">public API</a>. This guide covers the API, but the interface can be used to easily query and visualize the data.</p>\n+            <p>There are 3 key points to Super Search. First, it is a secured window on all the raw crash reports data we have. Second, it allows you to use almost every field as a filter, giving you great power to explore the huge data we have. And third, it has advanced aggregation features that can be used to extensively analyze a subset of data.</p>\n+            <p>This documentation aims at extensively covering the public API.</p>\n+\n+            <h1 id=\"api-endpoints\">API endpoints</h1>\n+\n+            <h2 id=\"supersearch\">SuperSearch</h2>\n+\n+            <pre><code><span class=\"http-verb\">GET</span> <span class=\"url-domain\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearch') }}</span></code></pre>\n+\n+            <p>This is the public endpoint that you should mostly be using. It doesn't require any permissions, and gives you access to almost all of the data about crash reports. The only restrictions are fields potentially containing sensitive data (like PII, for Personally Identifiable Information), such as <code>email</code> or <code>url</code>.</p>\n+\n+            <h2 id=\"supersearchunredacted\">SuperSearchUnredacted</h2>\n+\n+            <pre><code><span class=\"http-verb\">GET</span> <span class=\"url-domain\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearchUnredacted') }}</span></code></pre>\n+\n+            <p>This is a restricted endpoint, only accessible through the use of an API Token and your having the right set of permissions. It gives you an exhaustive access to our entire dataset, so please use this very carefully.</p>\n+\n+            <h1 id=\"basic-usage\">Basic Usage</h1>\n+\n+            <div class=\"example\">\n+                <p>Example</p>\n+                <pre><code><span class=\"http-verb\">GET</span> <span class=\"url-domain\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearch') }}</span><span class=\"query-string\">?product=Firefox&amp;_results_number=10</span></code></pre>\n+            </div>\n+\n+            <h1 id=\"returned-value\">Returned value</h1>\n+\n+            <p>The service returns a JSON document with a defined structure. The root will always contain the following 3 keys:</p>\n+\n+            <p><code>hits</code> contains a portion of the crash reports that matched the query. The number of results, the fields of those results, the ordering can all be controled using control parameters. It is an ordered list of JSON objects.</p>\n+\n+            <p><code>total</code> contains the total number of crash reports that matched the query. It is a positive integer.</p>\n+\n+            <p><code>facets</code> contains the results of the various aggregations that are set in the query. It is a JSON object containing ordered lists of JSON objects. Each sub-object represents a &quot;term&quot; and its count, and can have sub-aggregations. Theoratically, there can be any number of nested sub-aggregations.</p>\n+\n+            <h1 id=\"filters\">Filters</h1>\n+\n+            <p>The first thing that Super Search allows you to do is to filter on our dataset to reduce it. For example, if you only want to see crashes that happened on a given product and version, or with a specific build id.</p>\n+\n+            <div class=\"example\">\n+                <p>Example</p>\n+                <pre><code><span class=\"http-verb\">GET</span> <span class=\"url-domain\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearch') }}</span><span class=\"query-string\">?product=Firefox&amp;version=40.0</span></code></pre>\n+            </div>\n+\n+            <p>There are lots of available filters, listed in the <a href=\"{{ url('documentation:supersearch_api') }}\">API page</a>. That list is constantly changing as we add more data to our crash reports.</p>\n+\n+            <h2>Logic</h2>\n+\n+            <p>When using several filters together, you do not have full control over how filter are combined together. Note that all filters can receive several values. Here are the rules: </p>\n+\n+            <ul>\n+                <li>if there are several filters with the same name:\n+                    <ul>\n+                        <li>if the operator is a range (see Operators section below), combine all range filters with an <code>AND</code></li>\n+                        <li>combine all remaining filters with an <code>OR</code></li>\n+                    </ul>\n+                </li>\n+                <li>filters are combined with an <code>AND</code> operator</li>\n+            </ul>\n+\n+            <p>For example, <code>product=Firefox &amp; version=1.0 &amp; version=2.0 &amp; date=&gt;2000-01-01 &amp; date=&lt;2001-01-01</code> will translate to: </p>\n+\n+            <pre>( product = Firefox ) <b>AND</b>\n+( version = 1.0 <b>OR</b> version = 2.0 ) <b>AND</b>\n+( date &gt; 2000-01-01 <b>AND</b> date &lt; 2001-01-01 )</pre>\n+\n+            <h2>Operators</h2>\n+\n+            <p>Each filter supports a number of operators, that will allow you to refine your searches. Concretely, those operators translate to a string that will be put at the beginning of the value of the parameter. For example, <code>~</code> is the \"contains\" operator. If you want to search for all crashes that have a signature containing \"moz\", you would do this: </p>\n+\n+            <div class=\"example\">\n+                <p>Example</p>\n+                <pre><code><span class=\"http-verb\">GET</span> <span class=\"url-domain\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearch') }}</span><span class=\"query-string\">?signature=~moz</span></code></pre>\n+            </div>\n+\n+            <p>Most operators are only usable with some data types. For example, comparison operators (like <code>&lt;</code> or <code>&gt;</code>) are not usable with string data, but only with numbers and dates. Operators for each filter are listed on the <a href=\"{{ url('documentation:supersearch_api') }}\">API documentation</a> page. </p>\n+\n+            <p>Here is a list of all operators, and what data types they apply to:</p>\n+\n+            <table>\n+                <thead>\n+                    <tr>\n+                        <th>Operator</th>\n+                        <th>Code</th>\n+                        <th>Data types</th>\n+                        <th>Description</th>\n+                    </tr>\n+                </thead>\n+                <tbody>\n+                    <tr>\n+                        <td>not</td>\n+                        <td><code>!</code></td>\n+                        <td><i>all</i></td>\n+                        <td>Meta operator, to put before any other operator to turn it into the opposite.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>has terms</td>\n+                        <td><code></code></td>\n+                        <td>enum, number, string</td>\n+                        <td>Default operator. The field contains at least once the given substring. </td>\n+                    </tr>\n+                    <tr>\n+                        <td>contains</td>\n+                        <td><code>~</code></td>\n+                        <td>string</td>\n+                        <td>The field contains at least once the given substring.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>is exactly</td>\n+                        <td><code>=</code></td>\n+                        <td>string</td>\n+                        <td>The field is exactly the given substring.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>starts with</td>\n+                        <td><code>$</code></td>\n+                        <td>string</td>\n+                        <td>The field starts with the given substring.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>ends with</td>\n+                        <td><code>^</code></td>\n+                        <td>string</td>\n+                        <td>The field ends with the given substring.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>is null</td>\n+                        <td><code>__null__</code></td>\n+                        <td>string, flag</td>\n+                        <td>The field is missing or has a null value.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>greater than</td>\n+                        <td><code>&gt;</code></td>\n+                        <td>date, number</td>\n+                        <td>The field is greater than the given date or number.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>greater than or equal</td>\n+                        <td><code>&gt;=</code></td>\n+                        <td>date, number</td>\n+                        <td>The field is greater than or equal the given date or number.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>lower than</td>\n+                        <td><code>&lt;</code></td>\n+                        <td>date, number</td>\n+                        <td>The field is lower than the given date or number.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>lower than or equal</td>\n+                        <td><code>&lt;=</code></td>\n+                        <td>date, number</td>\n+                        <td>The field is lower than or equal the given date or number.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>is true</td>\n+                        <td><code>__true__</code></td>\n+                        <td>boolean</td>\n+                        <td>The field has a value that is truthy.</td>\n+                    </tr>\n+                </tbody>\n+            </table>\n+\n+            <h2>Data types</h2>\n+\n+            <p>Each filter has a data type, that corresponds to the type of data the associated field can receive. Those types have a direct impact on the operators you can use for each field, as shown above. Here are the existing data types:</p>\n+\n+            <table>\n+                <thead>\n+                    <tr>\n+                        <th>Data type</th>\n+                        <th>Operators</th>\n+                        <th>Description</th>\n+                    </tr>\n+                </thead>\n+                <tbody>\n+                    <tr>\n+                        <td>enum</td>\n+                        <td><code></code></td>\n+                        <td>Simple type for strings, relies on inputs being turned into \"terms\". </td>\n+                    </tr>\n+                    <tr>\n+                        <td>string</td>\n+                        <td><code></code>, <code>~</code>, <code>=</code>, <code>$</code>, <code>^</code>, <code>__null__</code></td>\n+                        <td>Advanced type for strings, gives a lot more options. </td>\n+                    </tr>\n+                    <tr>\n+                        <td>number</td>\n+                        <td><code></code>, <code>&gt;</code>, <code>&gt;=</code>, <code>&lt;</code>, <code>&lt;=</code></td>\n+                        <td>Type for all numbers, underlying data can be float, int, long&hellip; </td>\n+                    </tr>\n+                    <tr>\n+                        <td>date</td>\n+                        <td><code>&gt;</code>, <code>&gt;=</code>, <code>&lt;</code>, <code>&lt;=</code></td>\n+                        <td>Type for all dates, underlying data can be date or datetime. </td>\n+                    </tr>\n+                    <tr>\n+                        <td>boolean</td>\n+                        <td><code>__true__</code></td>\n+                        <td>Type for fields that can be true or false.</td>\n+                    </tr>\n+                    <tr>\n+                        <td>flag</td>\n+                        <td><code>__null__</code></td>\n+                        <td>Type for fields that either have a value (generally <code>1</code>) or are missing.</td>\n+                    </tr>\n+                </tbody>\n+            </table>\n+\n+            <h1 id=\"controls\">Controls</h1>\n+\n+            <p>Along with filters, Super Search exposes a set of \"meta\" parameters. Their names start with an underscore, like <code>_results_number</code>. These parameters control various aspects of the results in the <code>hits</code> key. They are pretty straight forward and are well described in the <a href=\"{{ url('documentation:supersearch_api') }}\">API page</a>.</p>\n+\n+            <h1 id=\"aggregations\">Aggregations</h1>\n+\n+            <div class=\"side-note\">\n+                <p>\"Facets\" and \"aggregations\" are the same thing. Those names come from Elasticsearch, which renamed the feature to \"aggregations\" in its version 1.0. We are thus using the name \"aggregations\", or its abbreviation \"aggs\", in all new features. </p>\n+            </div>\n+\n+            <p>Aggregations are a way to dive deep into a dataset. For example, you would use aggregations to: </p>\n+\n+            <ul>\n+                <li>get the top signatures in a given dataset;</li>\n+                <li>count the number of crash reports on each version of your product;</li>\n+                <li>get the count of crashes per build per date...</li>\n+            </ul>\n+\n+            <p>Aggregations can be queried in various ways, but always come out in the same structure, in the <code>facets</code> key of the returned document. The structure is as follow: </p>\n+\n+            <pre><code>{\n+    \"facet_name\": [\n+        {\n+            \"term\": \"foo\",\n+            \"count\": 42,\n+            [\"facets\": {\n+                \"other_facet_name\": []\n+            }]\n+        }\n+    ]\n+}</code></pre>\n+\n+            <p>Aggregations can theoratically be infinitely nested, but are currently limited by the available arguments to 3 levels. </p>\n+\n+            <p>There are 3 ways of getting aggregations. The first and simplest one is to use <code>_facets</code>. The second is to use <code>_aggs.field_name</code> and its derivative, like <code>_aggs.field1.field2</code>. And the third one is to use special aggregations, like <code>_histogram.field_name</code> or <code>_cardinality.field_name</code>. </p>\n+\n+            <h2>Basic aggregations</h2>\n+\n+            <p>Using the <code>_facets</code> parameter allows you to run simple aggregations. You can pass it a field name (see the <a href=\"{{ url('documentation:supersearch_api') }}#section-list-of-fields\">List of fields</a>), and it will count the terms of that field in all the documents of the dataset. It will then return them sorted by descending count. </p>\n+\n+            <div class=\"example\">\n+                <p>Example</p>\n+                <pre><code><span class=\"http-verb\">GET</span> <span class=\"url-domain\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearch') }}</span><span class=\"query-string\">?_facets=signature</span></code></pre>\n+            </div>\n+\n+            <p>This will return the list of signatures that appear the most in all crash reports for the last week, sorted by descending count. </p>\n+\n+            <p>The number of results in an aggregation is 50 by default. If you want to change it, you can use the <code>_facets_size</code> parameter. Note that there is no way to paginate over aggregation results, and that the bigger the <code>_facets_size</code> the longer the request will take. </p>\n+\n+            <h2>Nested aggregations</h2>\n+\n+            <p>Let's say you want to get the count of platforms per product. To do that, you would use a nested aggregation: aggregate on products, and then for each product aggregate on platforms. Here's what that translates to in Super Search: </p>\n+\n+            <div class=\"example\">\n+                <p>Example</p>\n+                <pre><code><span class=\"http-verb\">GET</span> <span class=\"url-domain\">{{ full_url(request, 'api:model_wrapper', model_name='SuperSearch') }}</span><span class=\"query-string\">?_aggs.product=platform</span></code></pre>\n+            </div>\n+\n+            <h2>Special aggregations</h2>\n+\n+            <div class=\"examples\">\n+            <h1 id=\"examples\">Examples</h1>\n+\n+            <h2>List of signatures</h2>","path":"webapp-django/crashstats/documentation/templates/documentation/supersearch/home.html","position":331,"original_position":331,"commit_id":"245b6fc027887f8ecde898f3a3c86382980b73fd","original_commit_id":"245b6fc027887f8ecde898f3a3c86382980b73fd","user":{"login":"peterbe","id":26739,"avatar_url":"https://avatars.githubusercontent.com/u/26739?v=3","gravatar_id":"","url":"https://api.github.com/users/peterbe","html_url":"https://github.com/peterbe","followers_url":"https://api.github.com/users/peterbe/followers","following_url":"https://api.github.com/users/peterbe/following{/other_user}","gists_url":"https://api.github.com/users/peterbe/gists{/gist_id}","starred_url":"https://api.github.com/users/peterbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/peterbe/subscriptions","organizations_url":"https://api.github.com/users/peterbe/orgs","repos_url":"https://api.github.com/users/peterbe/repos","events_url":"https://api.github.com/users/peterbe/events{/privacy}","received_events_url":"https://api.github.com/users/peterbe/received_events","type":"User","site_admin":false},"body":"Label this as `<h2>Example: List of signatures</h2>`","created_at":"2016-01-13T16:30:58Z","updated_at":"2016-01-13T16:30:58Z","html_url":"https://github.com/mozilla/socorro/pull/3152#discussion_r49613496","pull_request_url":"https://api.github.com/repos/mozilla/socorro/pulls/3152","_links":{"self":{"href":"https://api.github.com/repos/mozilla/socorro/pulls/comments/49613496"},"html":{"href":"https://github.com/mozilla/socorro/pull/3152#discussion_r49613496"},"pull_request":{"href":"https://api.github.com/repos/mozilla/socorro/pulls/3152"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla/socorro/pulls/3152","id":55901806,"html_url":"https://github.com/mozilla/socorro/pull/3152","diff_url":"https://github.com/mozilla/socorro/pull/3152.diff","patch_url":"https://github.com/mozilla/socorro/pull/3152.patch","issue_url":"https://api.github.com/repos/mozilla/socorro/issues/3152","number":3152,"state":"open","locked":false,"title":"[WIP] Fixes bug 1227904 - Super Search documentation","user":{"login":"adngdb","id":328790,"avatar_url":"https://avatars.githubusercontent.com/u/328790?v=3","gravatar_id":"","url":"https://api.github.com/users/adngdb","html_url":"https://github.com/adngdb","followers_url":"https://api.github.com/users/adngdb/followers","following_url":"https://api.github.com/users/adngdb/following{/other_user}","gists_url":"https://api.github.com/users/adngdb/gists{/gist_id}","starred_url":"https://api.github.com/users/adngdb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adngdb/subscriptions","organizations_url":"https://api.github.com/users/adngdb/orgs","repos_url":"https://api.github.com/users/adngdb/repos","events_url":"https://api.github.com/users/adngdb/events{/privacy}","received_events_url":"https://api.github.com/users/adngdb/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-01-13T14:11:21Z","updated_at":"2016-01-13T16:30:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"176c1b3cf562923a0b24f503f048008050a4ef16","assignee":{"login":"peterbe","id":26739,"avatar_url":"https://avatars.githubusercontent.com/u/26739?v=3","gravatar_id":"","url":"https://api.github.com/users/peterbe","html_url":"https://github.com/peterbe","followers_url":"https://api.github.com/users/peterbe/followers","following_url":"https://api.github.com/users/peterbe/following{/other_user}","gists_url":"https://api.github.com/users/peterbe/gists{/gist_id}","starred_url":"https://api.github.com/users/peterbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/peterbe/subscriptions","organizations_url":"https://api.github.com/users/peterbe/orgs","repos_url":"https://api.github.com/users/peterbe/repos","events_url":"https://api.github.com/users/peterbe/events{/privacy}","received_events_url":"https://api.github.com/users/peterbe/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/mozilla/socorro/pulls/3152/commits","review_comments_url":"https://api.github.com/repos/mozilla/socorro/pulls/3152/comments","review_comment_url":"https://api.github.com/repos/mozilla/socorro/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mozilla/socorro/issues/3152/comments","statuses_url":"https://api.github.com/repos/mozilla/socorro/statuses/245b6fc027887f8ecde898f3a3c86382980b73fd","head":{"label":"adngdb:1227904-supersearch-documentation","ref":"1227904-supersearch-documentation","sha":"245b6fc027887f8ecde898f3a3c86382980b73fd","user":{"login":"adngdb","id":328790,"avatar_url":"https://avatars.githubusercontent.com/u/328790?v=3","gravatar_id":"","url":"https://api.github.com/users/adngdb","html_url":"https://github.com/adngdb","followers_url":"https://api.github.com/users/adngdb/followers","following_url":"https://api.github.com/users/adngdb/following{/other_user}","gists_url":"https://api.github.com/users/adngdb/gists{/gist_id}","starred_url":"https://api.github.com/users/adngdb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adngdb/subscriptions","organizations_url":"https://api.github.com/users/adngdb/orgs","repos_url":"https://api.github.com/users/adngdb/repos","events_url":"https://api.github.com/users/adngdb/events{/privacy}","received_events_url":"https://api.github.com/users/adngdb/received_events","type":"User","site_admin":false},"repo":{"id":2353068,"name":"socorro","full_name":"adngdb/socorro","owner":{"login":"adngdb","id":328790,"avatar_url":"https://avatars.githubusercontent.com/u/328790?v=3","gravatar_id":"","url":"https://api.github.com/users/adngdb","html_url":"https://github.com/adngdb","followers_url":"https://api.github.com/users/adngdb/followers","following_url":"https://api.github.com/users/adngdb/following{/other_user}","gists_url":"https://api.github.com/users/adngdb/gists{/gist_id}","starred_url":"https://api.github.com/users/adngdb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adngdb/subscriptions","organizations_url":"https://api.github.com/users/adngdb/orgs","repos_url":"https://api.github.com/users/adngdb/repos","events_url":"https://api.github.com/users/adngdb/events{/privacy}","received_events_url":"https://api.github.com/users/adngdb/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/adngdb/socorro","description":"Socorro is a server to accept and process Breakpad crash reports. ","fork":true,"url":"https://api.github.com/repos/adngdb/socorro","forks_url":"https://api.github.com/repos/adngdb/socorro/forks","keys_url":"https://api.github.com/repos/adngdb/socorro/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adngdb/socorro/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adngdb/socorro/teams","hooks_url":"https://api.github.com/repos/adngdb/socorro/hooks","issue_events_url":"https://api.github.com/repos/adngdb/socorro/issues/events{/number}","events_url":"https://api.github.com/repos/adngdb/socorro/events","assignees_url":"https://api.github.com/repos/adngdb/socorro/assignees{/user}","branches_url":"https://api.github.com/repos/adngdb/socorro/branches{/branch}","tags_url":"https://api.github.com/repos/adngdb/socorro/tags","blobs_url":"https://api.github.com/repos/adngdb/socorro/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adngdb/socorro/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adngdb/socorro/git/refs{/sha}","trees_url":"https://api.github.com/repos/adngdb/socorro/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adngdb/socorro/statuses/{sha}","languages_url":"https://api.github.com/repos/adngdb/socorro/languages","stargazers_url":"https://api.github.com/repos/adngdb/socorro/stargazers","contributors_url":"https://api.github.com/repos/adngdb/socorro/contributors","subscribers_url":"https://api.github.com/repos/adngdb/socorro/subscribers","subscription_url":"https://api.github.com/repos/adngdb/socorro/subscription","commits_url":"https://api.github.com/repos/adngdb/socorro/commits{/sha}","git_commits_url":"https://api.github.com/repos/adngdb/socorro/git/commits{/sha}","comments_url":"https://api.github.com/repos/adngdb/socorro/comments{/number}","issue_comment_url":"https://api.github.com/repos/adngdb/socorro/issues/comments{/number}","contents_url":"https://api.github.com/repos/adngdb/socorro/contents/{+path}","compare_url":"https://api.github.com/repos/adngdb/socorro/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adngdb/socorro/merges","archive_url":"https://api.github.com/repos/adngdb/socorro/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adngdb/socorro/downloads","issues_url":"https://api.github.com/repos/adngdb/socorro/issues{/number}","pulls_url":"https://api.github.com/repos/adngdb/socorro/pulls{/number}","milestones_url":"https://api.github.com/repos/adngdb/socorro/milestones{/number}","notifications_url":"https://api.github.com/repos/adngdb/socorro/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adngdb/socorro/labels{/name}","releases_url":"https://api.github.com/repos/adngdb/socorro/releases{/id}","created_at":"2011-09-09T02:59:03Z","updated_at":"2015-08-07T14:15:18Z","pushed_at":"2016-01-13T15:22:57Z","git_url":"git://github.com/adngdb/socorro.git","ssh_url":"git@github.com:adngdb/socorro.git","clone_url":"https://github.com/adngdb/socorro.git","svn_url":"https://github.com/adngdb/socorro","homepage":"https://wiki.mozilla.org/Socorro","size":161833,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"mozilla:master","ref":"master","sha":"2617771eebf40ccec50c0cc9bfe76b64be69eb19","user":{"login":"mozilla","id":131524,"avatar_url":"https://avatars.githubusercontent.com/u/131524?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"repo":{"id":2263742,"name":"socorro","full_name":"mozilla/socorro","owner":{"login":"mozilla","id":131524,"avatar_url":"https://avatars.githubusercontent.com/u/131524?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla/socorro","description":"Socorro is a server to accept and process Breakpad crash reports. ","fork":false,"url":"https://api.github.com/repos/mozilla/socorro","forks_url":"https://api.github.com/repos/mozilla/socorro/forks","keys_url":"https://api.github.com/repos/mozilla/socorro/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla/socorro/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla/socorro/teams","hooks_url":"https://api.github.com/repos/mozilla/socorro/hooks","issue_events_url":"https://api.github.com/repos/mozilla/socorro/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla/socorro/events","assignees_url":"https://api.github.com/repos/mozilla/socorro/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla/socorro/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla/socorro/tags","blobs_url":"https://api.github.com/repos/mozilla/socorro/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla/socorro/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla/socorro/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla/socorro/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla/socorro/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla/socorro/languages","stargazers_url":"https://api.github.com/repos/mozilla/socorro/stargazers","contributors_url":"https://api.github.com/repos/mozilla/socorro/contributors","subscribers_url":"https://api.github.com/repos/mozilla/socorro/subscribers","subscription_url":"https://api.github.com/repos/mozilla/socorro/subscription","commits_url":"https://api.github.com/repos/mozilla/socorro/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla/socorro/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla/socorro/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla/socorro/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla/socorro/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla/socorro/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla/socorro/merges","archive_url":"https://api.github.com/repos/mozilla/socorro/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla/socorro/downloads","issues_url":"https://api.github.com/repos/mozilla/socorro/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla/socorro/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla/socorro/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla/socorro/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla/socorro/labels{/name}","releases_url":"https://api.github.com/repos/mozilla/socorro/releases{/id}","created_at":"2011-08-24T19:21:49Z","updated_at":"2016-01-07T17:11:49Z","pushed_at":"2016-01-13T15:22:44Z","git_url":"git://github.com/mozilla/socorro.git","ssh_url":"git@github.com:mozilla/socorro.git","clone_url":"https://github.com/mozilla/socorro.git","svn_url":"https://github.com/mozilla/socorro","homepage":"https://wiki.mozilla.org/Socorro","size":164917,"stargazers_count":258,"watchers_count":258,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":135,"mirror_url":null,"open_issues_count":7,"forks":135,"open_issues":7,"watchers":258,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla/socorro/pulls/3152"},"html":{"href":"https://github.com/mozilla/socorro/pull/3152"},"issue":{"href":"https://api.github.com/repos/mozilla/socorro/issues/3152"},"comments":{"href":"https://api.github.com/repos/mozilla/socorro/issues/3152/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla/socorro/pulls/3152/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla/socorro/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mozilla/socorro/pulls/3152/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla/socorro/statuses/245b6fc027887f8ecde898f3a3c86382980b73fd"}}}}