{"action":"created","comment":{"url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/comments/211710117","pull_request_review_id":148186991,"id":211710117,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMTcxMDExNw==","diff_hunk":"@@ -0,0 +1,241 @@\n+\"\"\"\n+Utils module contains useful function for preparing and processing data.\n+@author: Hao Song (songhao@vmware.com)\n+\"\"\"\n+\n+from __future__ import absolute_import, division, print_function\n+\n+import re\n+import io\n+from gzip import GzipFile\n+import threading\n+\n+\n+class AtomicCounter(object):\n+    \"\"\"\n+    An atomic, thread-safe incrementing counter.\n+    \"\"\"\n+\n+    def __init__(self, initial=0):\n+        self.value = initial\n+        self._lock = threading.Lock()\n+\n+    def increment(self, num=1):\n+        \"\"\"\n+        Increment atomic counter value\n+        @param num: Num to be increased, 1 by default\n+        @return: Current value after increment\n+        \"\"\"\n+        with self._lock:\n+            self.value += num\n+            return self.value\n+\n+\n+def chunks(data_list, batch_size):\n+    \"\"\"\n+    Split list of data into chunks with fixed batch size\n+    @param data_list: List of data\n+    @param batch_size: Batch size of each chunk\n+    @return: Return a lazy generator object for iteration\n+    \"\"\"\n+    for i in range(0, len(data_list), batch_size):\n+        yield data_list[i:i + batch_size]\n+\n+\n+def gzip_compress(data, compresslevel=9):\n+    \"\"\"\n+    Compress data using GZIP\n+    @param data: Data to compress\n+    @param compresslevel: Compress Level\n+    @return: Compressed data\n+    \"\"\"\n+    buf = io.BytesIO()\n+    with GzipFile(fileobj=buf, mode='wb', compresslevel=compresslevel) \\\n+            as gzip_file:\n+        gzip_file.write(data)\n+    return buf.getvalue()\n+\n+\n+def sanitize(string):\n+    \"\"\"\n+    Sanitize a string, replace whitespace with \"-\"\n+    @param string: Input string\n+    @return: Sanitized string\n+    \"\"\"\n+    whitespace_sanitized = re.sub(r\"[\\s]+\", \"-\", string)\n+    if \"\\\"\" in whitespace_sanitized:\n+        return \"\\\"\" + re.sub(r\"[\\\"]+\", '\\\\\\\\\\\"', whitespace_sanitized) + \"\\\"\"\n+    else:\n+        return \"\\\"\" + whitespace_sanitized + \"\\\"\"\n+\n+\n+def is_blank(string):\n+    \"\"\"\n+    Check is a string is black or not, either none or only contains whitespace\n+    @param string: String to be checked\n+    @return: Is blank or not\n+    \"\"\"\n+    return string is None or len(string) == 0 or string.isspace()\n+    # return len(re.sub(r\"[\\s]+\", \"\", s)) == 0\n+\n+\n+def metric_to_line_data(name, value, timestamp, source, tags, default_source):\n+    \"\"\"\n+    Metric Data to String\n+    Wavefront Metrics Data format\n+    <metricName> <metricValue> [<timestamp>] source=<source> [pointTags]\n+    Example: \"new-york.power.usage 42422 1533531013 source=localhost\n+              datacenter=dc1\"\n+    @param name: Metric Name\n+    @type name: str\n+    @param value: Metric Value\n+    @type value: float\n+    @param timestamp: Timestamp\n+    @type timestamp: long\n+    @param source: Source\n+    @type source: str\n+    @param tags: Tags\n+    @type tags: dict\n+    @param default_source:\n+    @type default_source: str\n+    @return: String\n+    \"\"\"\n+    if is_blank(name):\n+        raise ValueError(\"Metrics name cannot be blank\")\n+\n+    if is_blank(source):\n+        source = default_source\n+\n+    str_builder = [sanitize(name), float(value)]\n+    if timestamp is not None:\n+        str_builder.append(int(timestamp))\n+    str_builder.append(\"source=\" + sanitize(source))\n+    if tags is not None:\n+        for key in tags:\n+            if is_blank(key):\n+                raise ValueError(\"Metric point tag key cannot be blank\")\n+            if is_blank(tags[key]):\n+                raise ValueError(\"Metric point tag value cannot be blank\")\n+            str_builder.append(sanitize(key) + '=' + sanitize(tags[key]))\n+    return ' '.join('{0}'.format(s) for s in str_builder) + \"\\n\"\n+\n+\n+def histogram_to_line_data(name, centroids, histogram_granularities, timestamp,\n+                           source, tags, default_source):\n+    \"\"\"\n+    Wavefront Histogram Data format\n+    {!M | !H | !D} [<timestamp>] #<count> <mean> [centroids] <histogramName>\n+    source=<source> [pointTags]\n+    Example: \"!M 1533531013 #20 30.0 #10 5.1 request.latency source=appServer1\n+              region=us-west\"\n+    @param name: Histogram Name\n+    @type name: str\n+    @param centroids: List of centroids(pairs)\n+    @type centroids: list\n+    @param histogram_granularities: Histogram Granularities\n+    @type histogram_granularities: set\n+    @param timestamp: Timestamp\n+    @type timestamp: long\n+    @param source: Source\n+    @type source: str\n+    @param tags: Tags\n+    @type tags: dict\n+    @param default_source: Default Source\n+    @type default_source: str\n+    @return: String data of Histogram\n+    \"\"\"\n+    if is_blank(name):\n+        raise ValueError(\"Histogram name cannot be blank\")\n+\n+    if not histogram_granularities:\n+        raise ValueError(\"Histogram granularities cannot be null or empty\")\n+\n+    if not centroids:\n+        raise ValueError(\"A distribution should have at least one centroid\")\n+\n+    if is_blank(source):\n+        source = default_source\n+\n+    line_builder = []\n+    for histogram_granularity in histogram_granularities:\n+        str_builder = [histogram_granularity]\n+        if timestamp is not None:\n+            str_builder.append(int(timestamp))\n+        for centroid_1, centroid_2 in centroids:\n+            str_builder.append(\"#\" + repr(centroid_2))\n+            str_builder.append(centroid_1)\n+        str_builder.append(sanitize(name))\n+        str_builder.append(\"source=\" + sanitize(source))\n+        if tags is not None:\n+            for key in tags:\n+                if is_blank(key):\n+                    raise ValueError(\"Histogram tag key cannot be blank\")\n+                if is_blank(tags[key]):\n+                    raise ValueError(\"Histogram tag value cannot be blank\")\n+                str_builder.append(sanitize(key) + '=' + sanitize(tags[key]))\n+        line_builder.append(' '.join('{0}'.format(s) for s in str_builder))\n+    return '\\n'.join('{0}'.format(line) for line in line_builder) + \"\\n\"\n+\n+\n+def tracing_span_to_line_data(name, start_millis, duration_millis, source,\n+                              trace_id, span_id, parents, follows_from, tags,\n+                              span_logs, default_source):\n+    \"\"\"\n+    Wavefront Tracing Span Data format\n+    <tracingSpanName> source=<source> [pointTags] <start_millis>\n+    <duration_milli_seconds>\n+    Example: \"getAllUsers source=localhost\n+              traceId=7b3bf470-9456-11e8-9eb6-529269fb1459\n+              spanId=0313bafe-9457-11e8-9eb6-529269fb1459\n+              parent=2f64e538-9457-11e8-9eb6-529269fb1459\n+              application=Wavefront http.method=GET\n+              1533531013 343500\"\n+    @param name: Span Name\n+    @type name: str\n+    @param start_millis: Start time\n+    @type start_millis: long\n+    @param duration_millis: Duration time\n+    @type duration_millis: long\n+    @param source: Source\n+    @type source: str\n+    @param trace_id: Trace ID\n+    @type trace_id: UUID\n+    @param span_id: Span ID\n+    @type span_id: UUID\n+    @param parents: Parents Span ID\n+    @type parents: List of UUID\n+    @param follows_from: Follows Span ID\n+    @type follows_from: List of UUID\n+    @param tags: Tags\n+    @type tags: list\n+    @param span_logs: Span Log\n+    @param default_source: Default Source\n+    @type default_source: str\n+    @return: String data of tracing span\n+    \"\"\"\n+    if is_blank(name):\n+        raise ValueError(\"Span name cannot be blank\")\n+\n+    if is_blank(source):\n+        source = default_source\n+\n+    str_builder = [sanitize(name),\n+                   \"source=\" + sanitize(source),\n+                   \"traceId=\" + str(trace_id),\n+                   \"spanId=\" + str(span_id)]\n+    if parents is not None:\n+        for uuid in parents:\n+            str_builder.append(\"parent=\" + str(uuid))\n+    if follows_from is not None:\n+        for uuid in follows_from:\n+            str_builder.append(\"followsFrom=\" + str(uuid))\n+    if tags is not None:\n+        for key, val in tags:\n+            if is_blank(key):\n+                raise ValueError(\"Span tag key cannot be blank\")\n+            if is_blank(val):\n+                raise ValueError(\"Span tag val cannot be blank\")\n+            str_builder.append(sanitize(key) + \"=\" + sanitize(val))\n+    str_builder.append(start_millis)\n+    str_builder.append(duration_millis)\n+    return ' '.join('{0}'.format(s) for s in str_builder) + \"\\n\"","path":"wavefront_python_sdk/common/utils.py","position":241,"original_position":241,"commit_id":"3b5068c296f6b3a2332c1f29e01607e493ffb953","original_commit_id":"3b5068c296f6b3a2332c1f29e01607e493ffb953","user":{"login":"ustinov","id":390834,"node_id":"MDQ6VXNlcjM5MDgzNA==","avatar_url":"https://avatars2.githubusercontent.com/u/390834?v=4","gravatar_id":"","url":"https://api.github.com/users/ustinov","html_url":"https://github.com/ustinov","followers_url":"https://api.github.com/users/ustinov/followers","following_url":"https://api.github.com/users/ustinov/following{/other_user}","gists_url":"https://api.github.com/users/ustinov/gists{/gist_id}","starred_url":"https://api.github.com/users/ustinov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ustinov/subscriptions","organizations_url":"https://api.github.com/users/ustinov/orgs","repos_url":"https://api.github.com/users/ustinov/repos","events_url":"https://api.github.com/users/ustinov/events{/privacy}","received_events_url":"https://api.github.com/users/ustinov/received_events","type":"User","site_admin":false},"body":"`'{0}'.format()` here is useless and expensive, if all the items in `str_builder` are strings.","created_at":"2018-08-21T18:23:15Z","updated_at":"2018-08-21T18:27:33Z","html_url":"https://github.com/wavefrontHQ/wavefront-python-sdk/pull/1#discussion_r211710117","pull_request_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/comments/211710117"},"html":{"href":"https://github.com/wavefrontHQ/wavefront-python-sdk/pull/1#discussion_r211710117"},"pull_request":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1","id":208999429,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA4OTk5NDI5","html_url":"https://github.com/wavefrontHQ/wavefront-python-sdk/pull/1","diff_url":"https://github.com/wavefrontHQ/wavefront-python-sdk/pull/1.diff","patch_url":"https://github.com/wavefrontHQ/wavefront-python-sdk/pull/1.patch","issue_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/issues/1","number":1,"state":"open","locked":false,"title":"Initial commit of proxy client and direct ingestion client","user":{"login":"song-hao","id":7380836,"node_id":"MDQ6VXNlcjczODA4MzY=","avatar_url":"https://avatars2.githubusercontent.com/u/7380836?v=4","gravatar_id":"","url":"https://api.github.com/users/song-hao","html_url":"https://github.com/song-hao","followers_url":"https://api.github.com/users/song-hao/followers","following_url":"https://api.github.com/users/song-hao/following{/other_user}","gists_url":"https://api.github.com/users/song-hao/gists{/gist_id}","starred_url":"https://api.github.com/users/song-hao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/song-hao/subscriptions","organizations_url":"https://api.github.com/users/song-hao/orgs","repos_url":"https://api.github.com/users/song-hao/repos","events_url":"https://api.github.com/users/song-hao/events{/privacy}","received_events_url":"https://api.github.com/users/song-hao/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-08-16T22:15:34Z","updated_at":"2018-08-21T18:27:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3a50e6d5a36c7fccafb959f4715d25116b442bf8","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1/commits","review_comments_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1/comments","review_comment_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/comments{/number}","comments_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/issues/1/comments","statuses_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/statuses/3b5068c296f6b3a2332c1f29e01607e493ffb953","head":{"label":"song-hao:hao/dev","ref":"hao/dev","sha":"3b5068c296f6b3a2332c1f29e01607e493ffb953","user":{"login":"song-hao","id":7380836,"node_id":"MDQ6VXNlcjczODA4MzY=","avatar_url":"https://avatars2.githubusercontent.com/u/7380836?v=4","gravatar_id":"","url":"https://api.github.com/users/song-hao","html_url":"https://github.com/song-hao","followers_url":"https://api.github.com/users/song-hao/followers","following_url":"https://api.github.com/users/song-hao/following{/other_user}","gists_url":"https://api.github.com/users/song-hao/gists{/gist_id}","starred_url":"https://api.github.com/users/song-hao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/song-hao/subscriptions","organizations_url":"https://api.github.com/users/song-hao/orgs","repos_url":"https://api.github.com/users/song-hao/repos","events_url":"https://api.github.com/users/song-hao/events{/privacy}","received_events_url":"https://api.github.com/users/song-hao/received_events","type":"User","site_admin":false},"repo":{"id":145044071,"node_id":"MDEwOlJlcG9zaXRvcnkxNDUwNDQwNzE=","name":"wavefront-python-sdk","full_name":"song-hao/wavefront-python-sdk","owner":{"login":"song-hao","id":7380836,"node_id":"MDQ6VXNlcjczODA4MzY=","avatar_url":"https://avatars2.githubusercontent.com/u/7380836?v=4","gravatar_id":"","url":"https://api.github.com/users/song-hao","html_url":"https://github.com/song-hao","followers_url":"https://api.github.com/users/song-hao/followers","following_url":"https://api.github.com/users/song-hao/following{/other_user}","gists_url":"https://api.github.com/users/song-hao/gists{/gist_id}","starred_url":"https://api.github.com/users/song-hao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/song-hao/subscriptions","organizations_url":"https://api.github.com/users/song-hao/orgs","repos_url":"https://api.github.com/users/song-hao/repos","events_url":"https://api.github.com/users/song-hao/events{/privacy}","received_events_url":"https://api.github.com/users/song-hao/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/song-hao/wavefront-python-sdk","description":null,"fork":true,"url":"https://api.github.com/repos/song-hao/wavefront-python-sdk","forks_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/forks","keys_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/teams","hooks_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/hooks","issue_events_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/issues/events{/number}","events_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/events","assignees_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/assignees{/user}","branches_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/branches{/branch}","tags_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/tags","blobs_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/git/refs{/sha}","trees_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/statuses/{sha}","languages_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/languages","stargazers_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/stargazers","contributors_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/contributors","subscribers_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/subscribers","subscription_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/subscription","commits_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/commits{/sha}","git_commits_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/git/commits{/sha}","comments_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/comments{/number}","issue_comment_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/issues/comments{/number}","contents_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/contents/{+path}","compare_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/merges","archive_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/downloads","issues_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/issues{/number}","pulls_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/pulls{/number}","milestones_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/milestones{/number}","notifications_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/labels{/name}","releases_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/releases{/id}","deployments_url":"https://api.github.com/repos/song-hao/wavefront-python-sdk/deployments","created_at":"2018-08-16T22:13:30Z","updated_at":"2018-08-17T22:21:13Z","pushed_at":"2018-08-21T18:00:29Z","git_url":"git://github.com/song-hao/wavefront-python-sdk.git","ssh_url":"git@github.com:song-hao/wavefront-python-sdk.git","clone_url":"https://github.com/song-hao/wavefront-python-sdk.git","svn_url":"https://github.com/song-hao/wavefront-python-sdk","homepage":null,"size":56,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"wavefrontHQ:master","ref":"master","sha":"438b1fc3f74d068c3c7fbcf730fc7acc39b4212f","user":{"login":"wavefrontHQ","id":13057332,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMDU3MzMy","avatar_url":"https://avatars3.githubusercontent.com/u/13057332?v=4","gravatar_id":"","url":"https://api.github.com/users/wavefrontHQ","html_url":"https://github.com/wavefrontHQ","followers_url":"https://api.github.com/users/wavefrontHQ/followers","following_url":"https://api.github.com/users/wavefrontHQ/following{/other_user}","gists_url":"https://api.github.com/users/wavefrontHQ/gists{/gist_id}","starred_url":"https://api.github.com/users/wavefrontHQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wavefrontHQ/subscriptions","organizations_url":"https://api.github.com/users/wavefrontHQ/orgs","repos_url":"https://api.github.com/users/wavefrontHQ/repos","events_url":"https://api.github.com/users/wavefrontHQ/events{/privacy}","received_events_url":"https://api.github.com/users/wavefrontHQ/received_events","type":"Organization","site_admin":false},"repo":{"id":144609774,"node_id":"MDEwOlJlcG9zaXRvcnkxNDQ2MDk3NzQ=","name":"wavefront-python-sdk","full_name":"wavefrontHQ/wavefront-python-sdk","owner":{"login":"wavefrontHQ","id":13057332,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMDU3MzMy","avatar_url":"https://avatars3.githubusercontent.com/u/13057332?v=4","gravatar_id":"","url":"https://api.github.com/users/wavefrontHQ","html_url":"https://github.com/wavefrontHQ","followers_url":"https://api.github.com/users/wavefrontHQ/followers","following_url":"https://api.github.com/users/wavefrontHQ/following{/other_user}","gists_url":"https://api.github.com/users/wavefrontHQ/gists{/gist_id}","starred_url":"https://api.github.com/users/wavefrontHQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wavefrontHQ/subscriptions","organizations_url":"https://api.github.com/users/wavefrontHQ/orgs","repos_url":"https://api.github.com/users/wavefrontHQ/repos","events_url":"https://api.github.com/users/wavefrontHQ/events{/privacy}","received_events_url":"https://api.github.com/users/wavefrontHQ/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/wavefrontHQ/wavefront-python-sdk","description":null,"fork":false,"url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk","forks_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/forks","keys_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/teams","hooks_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/hooks","issue_events_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/issues/events{/number}","events_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/events","assignees_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/assignees{/user}","branches_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/branches{/branch}","tags_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/tags","blobs_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/git/refs{/sha}","trees_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/statuses/{sha}","languages_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/languages","stargazers_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/stargazers","contributors_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/contributors","subscribers_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/subscribers","subscription_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/subscription","commits_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/commits{/sha}","git_commits_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/git/commits{/sha}","comments_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/comments{/number}","issue_comment_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/issues/comments{/number}","contents_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/contents/{+path}","compare_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/merges","archive_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/downloads","issues_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/issues{/number}","pulls_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls{/number}","milestones_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/milestones{/number}","notifications_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/labels{/name}","releases_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/releases{/id}","deployments_url":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/deployments","created_at":"2018-08-13T17:07:20Z","updated_at":"2018-08-18T00:25:38Z","pushed_at":"2018-08-21T18:00:30Z","git_url":"git://github.com/wavefrontHQ/wavefront-python-sdk.git","ssh_url":"git@github.com:wavefrontHQ/wavefront-python-sdk.git","clone_url":"https://github.com/wavefrontHQ/wavefront-python-sdk.git","svn_url":"https://github.com/wavefrontHQ/wavefront-python-sdk","homepage":null,"size":5,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":1,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1"},"html":{"href":"https://github.com/wavefrontHQ/wavefront-python-sdk/pull/1"},"issue":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/issues/1"},"comments":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/wavefrontHQ/wavefront-python-sdk/statuses/3b5068c296f6b3a2332c1f29e01607e493ffb953"}},"author_association":"NONE"}}
{"actor":{"display_login":"ustinov"}}