{"action":"created","comment":{"url":"https://api.github.com/repos/honeycombio/honeyaws/pulls/comments/169720980","pull_request_review_id":98293612,"id":169720980,"diff_hunk":"@@ -0,0 +1,249 @@\n+package main\n+\n+import (\n+  \"fmt\"\n+  \"os\"\n+  \"os/signal\"\n+  \"time\"\n+\n+  \"github.com/Sirupsen/logrus\"\n+  \"github.com/aws/aws-sdk-go/aws\"\n+  \"github.com/aws/aws-sdk-go/aws/session\"\n+  \"github.com/aws/aws-sdk-go/service/dynamodb\"\n+  \"github.com/aws/aws-sdk-go/service/elbv2\"\n+  \"github.com/honeycombio/honeyaws/logbucket\"\n+  \"github.com/honeycombio/honeyaws/options\"\n+  \"github.com/honeycombio/honeyaws/publisher\"\n+  \"github.com/honeycombio/honeyaws/state\"\n+  libhoney \"github.com/honeycombio/libhoney-go\"\n+  flag \"github.com/jessevdk/go-flags\"\n+)\n+\n+var (\n+  opt        = &options.Options{}\n+  BuildID    string\n+  versionStr string\n+)\n+\n+func init() {\n+  // set the version string to our desired format\n+  if BuildID == \"\" {\n+    versionStr = \"dev\"\n+  } else {\n+    versionStr = BuildID\n+  }\n+\n+  // init libhoney user agent properly\n+  libhoney.UserAgentAddition = \"honeyelb/\" + versionStr\n+}\n+\n+func cmdELB(args []string) error {\n+  // TODO: Would be nice to have this more highly configurable.\n+  //\n+  // Will just use environment config right now, e.g., default profile.\n+  sess := session.Must(session.NewSessionWithOptions(session.Options{\n+    SharedConfigState: session.SharedConfigEnable,\n+  }))\n+\n+  elbSvc := elbv2.New(sess, nil)\n+\n+  describeLBResp, err := elbSvc.DescribeLoadBalancers(&elbv2.DescribeLoadBalancersInput{})\n+  if err != nil {\n+    return err\n+    os.Exit(1)\n+  }\n+\n+  if len(args) > 0 {\n+    switch args[0] {\n+    case \"ls\", \"list\":\n+      for _, lb := range describeLBResp.LoadBalancers {\n+        fmt.Println(*lb.LoadBalancerName)\n+      }\n+\n+      return nil\n+\n+    case \"ingest\":\n+      if opt.WriteKey == \"\" {\n+        logrus.Fatal(`--writekey must be set to the proper write key for the Honeycomb team.\n+Your write key is available at https://ui.honeycomb.io/account`)\n+      }\n+\n+      lbNames := args[1:]\n+\n+      // Use all available load balancers by default if none\n+      // are provided.\n+      if len(lbNames) == 0 {\n+        for _, lb := range describeLBResp.LoadBalancers {\n+          lbNames = append(lbNames, *lb.LoadBalancerName)\n+        }\n+      }\n+\n+      var stater state.Stater\n+\n+      if opt.BackfillHr < 1 || opt.BackfillHr > 168 {\n+        logrus.WithField(\"hours\", opt.BackfillHr).Fatal(\"--backfill requires an hour input between 1 and 168\")\n+      }\n+\n+      if opt.HighAvail {\n+        svc := dynamodb.New(sess)\n+        input := &dynamodb.DescribeTableInput{\n+          TableName: aws.String(state.DynamoTableName),\n+        }\n+        _, err := svc.DescribeTable(input)\n+        if err != nil {\n+          // For some reason, we cannot write to\n+          // the table or access it\n+          logrus.WithField(\"tableName\", state.DynamoTableName).Fatal(\"--highavail requires an existing DynamoDB table named appropriately, please refer to the README.\")\n+        }\n+\n+        stater = state.NewDynamoDBStater(sess, logbucket.AWSElasticLoadBalancing, opt.BackfillHr)\n+        logrus.Info(\"State tracking with high availability enabled - using DynamoDB\")\n+\n+      } else {\n+        stater = state.NewFileStater(opt.StateDir, logbucket.AWSElasticLoadBalancing, opt.BackfillHr)\n+        logrus.Info(\"State tracking enabled - using local file system.\")\n+      }\n+      logrus.WithField(\"hours\", time.Duration(opt.BackfillHr)*time.Hour).Debug(\"Backfill will be\")\n+\n+      // TODO: Switch either publisher or parser?\n+      // TODO: REMOVE\n+      defaultPublisher := publisher.NewHoneycombPublisher(opt, stater, publisher.NewELBv2EventParser(opt.SampleRate))\n+      downloadsCh := make(chan state.DownloadedObject)\n+\n+      // For now, just run one goroutine per-LB\n+      for _, lbName := range lbNames {\n+        logrus.WithFields(logrus.Fields{\n+          \"lbName\": lbName,\n+        }).Info(\"Attempting to ingest LB\")\n+\n+        elbSvc := elbv2.New(sess, nil)\n+\n+        lbNameResp, err := elbSvc.DescribeLoadBalancers(&elbv2.DescribeLoadBalancersInput{\n+          Names: []*string{\n+           aws.String(lbName),\n+          },\n+        })\n+        if err != nil {\n+          fmt.Fprintln(os.Stderr, err)\n+          os.Exit(1)\n+        }\n+\n+        lbArn := lbNameResp.LoadBalancers[0].LoadBalancerArn\n+        lbArnResp, err := elbSvc.DescribeLoadBalancerAttributes(&elbv2.DescribeLoadBalancerAttributesInput{\n+          LoadBalancerArn: lbArn,\n+        })\n+        if err != nil {\n+          fmt.Fprintln(os.Stderr, err)\n+          os.Exit(1)\n+        }\n+\n+        enabled := false\n+        bucketName := \"\"\n+        bucketPrefix := \"\"\n+\n+        for _, element := range lbArnResp.Attributes {\n+          if *element.Key == \"access_logs.s3.enabled\" && *element.Value == \"true\" {\n+            enabled = true\n+          }\n+          if *element.Key == \"access_logs.s3.bucket\" {\n+            bucketName = *element.Value\n+          }\n+          if *element.Key == \"access_logs.s3.prefix\" {\n+            bucketPrefix = *element.Value\n+          }\n+        }\n+\n+        if !enabled {\n+          fmt.Fprintf(os.Stderr, `Access logs are not configured for ALB %q. Please enable them to use the ingest tool.\n+\n+For reference see this link:\n+\n+http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#enable-access-logging\n+`, lbName)\n+          os.Exit(1)\n+        }\n+        logrus.WithFields(logrus.Fields{\n+          \"bucket\": bucketName,\n+          \"lbName\": lbName,\n+        }).Info(\"Access logs are enabled for ALB ♥\")\n+\n+        elbDownloader := logbucket.NewELBDownloader(sess, bucketName, bucketPrefix, lbName, \"alb\")\n+        downloader := logbucket.NewDownloader(sess, stater, elbDownloader, opt.BackfillHr)\n+\n+        // TODO: One-goroutine-per-LB feels a bit\n+        // silly.\n+        go downloader.Download(downloadsCh)\n+      }\n+\n+      signalCh := make(chan os.Signal)\n+      signal.Notify(signalCh, os.Interrupt)\n+\n+      go func() {\n+        <-signalCh\n+        logrus.Fatal(\"Exiting due to interrupt.\")\n+        // TODO(nathanleclaire): Cleanup before\n+        // exiting.\n+        //\n+        // 1. Delete format file, even\n+        //    though it's in /tmp.\n+        // 2. Also, wait for existing in-flight object\n+        //    parsing / sending to finish so that state of\n+        //    parsing \"cursor\" can be written to the JSON\n+        //    file.\n+      }()\n+\n+      for {\n+        download := <-downloadsCh\n+        if err := defaultPublisher.Publish(download); err != nil {\n+          logrus.WithField(\"object\", download).Error(\"Cannot properly publish downloaded object\")\n+        }\n+      }\n+    }\n+  }\n+\n+  return fmt.Errorf(\"Subcommand %q not recognized\", args[0])\n+}\n+\n+func main() {\n+  flagParser := flag.NewParser(opt, flag.Default)\n+  args, err := flagParser.Parse()\n+  if err != nil {\n+    os.Exit(1)\n+  }\n+\n+  if opt.Debug {\n+    logrus.SetLevel(logrus.DebugLevel)\n+  }\n+\n+  formatter := &logrus.TextFormatter{\n+    FullTimestamp: true,\n+  }\n+  logrus.SetFormatter(formatter)\n+\n+  logrus.WithField(\"version\", BuildID).Debug(\"Program starting\")\n+\n+  if opt.Dataset == \"aws-$SERVICE-access\" {\n+    opt.Dataset = \"aws-elb-access\"","path":"cmd/honeyelb2/main.go","position":226,"original_position":226,"commit_id":"69892a9c47e073bf2ec0f4451d0dbde932aba6fc","original_commit_id":"69892a9c47e073bf2ec0f4451d0dbde932aba6fc","user":{"login":"maplebed","id":361454,"avatar_url":"https://avatars0.githubusercontent.com/u/361454?v=4","gravatar_id":"","url":"https://api.github.com/users/maplebed","html_url":"https://github.com/maplebed","followers_url":"https://api.github.com/users/maplebed/followers","following_url":"https://api.github.com/users/maplebed/following{/other_user}","gists_url":"https://api.github.com/users/maplebed/gists{/gist_id}","starred_url":"https://api.github.com/users/maplebed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maplebed/subscriptions","organizations_url":"https://api.github.com/users/maplebed/orgs","repos_url":"https://api.github.com/users/maplebed/repos","events_url":"https://api.github.com/users/maplebed/events{/privacy}","received_events_url":"https://api.github.com/users/maplebed/received_events","type":"User","site_admin":false},"body":"My opinion - the difference between ELBs (eg the api vs. www ELB) is actually larger than the difference between an ELB and an ALB, so given that we send all ELBs to the same dataset, I think it's just fine to send ALB traffic into the same dataset.  \r\nMight have a different response for NLBs since that traffic is pretty different...\r\nAs always, we could make it configurable, but I think the current \"all to the same place\" is fine, and if we want to make it configurable, can do so in a followup PR.","created_at":"2018-02-21T17:45:38Z","updated_at":"2018-02-21T17:45:38Z","html_url":"https://github.com/honeycombio/honeyaws/pull/33#discussion_r169720980","pull_request_url":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/honeycombio/honeyaws/pulls/comments/169720980"},"html":{"href":"https://github.com/honeycombio/honeyaws/pull/33#discussion_r169720980"},"pull_request":{"href":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33"}},"in_reply_to_id":169149545},"pull_request":{"url":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33","id":169885043,"html_url":"https://github.com/honeycombio/honeyaws/pull/33","diff_url":"https://github.com/honeycombio/honeyaws/pull/33.diff","patch_url":"https://github.com/honeycombio/honeyaws/pull/33.patch","issue_url":"https://api.github.com/repos/honeycombio/honeyaws/issues/33","number":33,"state":"open","locked":false,"title":"Add support for ALB (ELBv2)","user":{"login":"pravipati","id":410195,"avatar_url":"https://avatars2.githubusercontent.com/u/410195?v=4","gravatar_id":"","url":"https://api.github.com/users/pravipati","html_url":"https://github.com/pravipati","followers_url":"https://api.github.com/users/pravipati/followers","following_url":"https://api.github.com/users/pravipati/following{/other_user}","gists_url":"https://api.github.com/users/pravipati/gists{/gist_id}","starred_url":"https://api.github.com/users/pravipati/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pravipati/subscriptions","organizations_url":"https://api.github.com/users/pravipati/orgs","repos_url":"https://api.github.com/users/pravipati/repos","events_url":"https://api.github.com/users/pravipati/events{/privacy}","received_events_url":"https://api.github.com/users/pravipati/received_events","type":"User","site_admin":true},"body":"👋I took a stab at adding ALB / ELBv2 support, drawing inspiration from https://github.com/honeycombio/honeyaws/pull/20 but following the new code architecture. I'm a bit new to Go so apologies if I missed anything obvious. Anyways, I've got the ALB logs showing up in my honeycomb account, so hopefully everything looks 👍!","created_at":"2018-02-19T06:09:45Z","updated_at":"2018-02-21T17:45:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d01b1b598c2e63161b5e3d40de5e7d24047a2c89","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33/commits","review_comments_url":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33/comments","review_comment_url":"https://api.github.com/repos/honeycombio/honeyaws/pulls/comments{/number}","comments_url":"https://api.github.com/repos/honeycombio/honeyaws/issues/33/comments","statuses_url":"https://api.github.com/repos/honeycombio/honeyaws/statuses/69892a9c47e073bf2ec0f4451d0dbde932aba6fc","head":{"label":"pravipati:master","ref":"master","sha":"69892a9c47e073bf2ec0f4451d0dbde932aba6fc","user":{"login":"pravipati","id":410195,"avatar_url":"https://avatars2.githubusercontent.com/u/410195?v=4","gravatar_id":"","url":"https://api.github.com/users/pravipati","html_url":"https://github.com/pravipati","followers_url":"https://api.github.com/users/pravipati/followers","following_url":"https://api.github.com/users/pravipati/following{/other_user}","gists_url":"https://api.github.com/users/pravipati/gists{/gist_id}","starred_url":"https://api.github.com/users/pravipati/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pravipati/subscriptions","organizations_url":"https://api.github.com/users/pravipati/orgs","repos_url":"https://api.github.com/users/pravipati/repos","events_url":"https://api.github.com/users/pravipati/events{/privacy}","received_events_url":"https://api.github.com/users/pravipati/received_events","type":"User","site_admin":true},"repo":{"id":122023842,"name":"honeyaws","full_name":"pravipati/honeyaws","owner":{"login":"pravipati","id":410195,"avatar_url":"https://avatars2.githubusercontent.com/u/410195?v=4","gravatar_id":"","url":"https://api.github.com/users/pravipati","html_url":"https://github.com/pravipati","followers_url":"https://api.github.com/users/pravipati/followers","following_url":"https://api.github.com/users/pravipati/following{/other_user}","gists_url":"https://api.github.com/users/pravipati/gists{/gist_id}","starred_url":"https://api.github.com/users/pravipati/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pravipati/subscriptions","organizations_url":"https://api.github.com/users/pravipati/orgs","repos_url":"https://api.github.com/users/pravipati/repos","events_url":"https://api.github.com/users/pravipati/events{/privacy}","received_events_url":"https://api.github.com/users/pravipati/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/pravipati/honeyaws","description":"Observability for your AWS load balancers, CloudFront, and more","fork":true,"url":"https://api.github.com/repos/pravipati/honeyaws","forks_url":"https://api.github.com/repos/pravipati/honeyaws/forks","keys_url":"https://api.github.com/repos/pravipati/honeyaws/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pravipati/honeyaws/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pravipati/honeyaws/teams","hooks_url":"https://api.github.com/repos/pravipati/honeyaws/hooks","issue_events_url":"https://api.github.com/repos/pravipati/honeyaws/issues/events{/number}","events_url":"https://api.github.com/repos/pravipati/honeyaws/events","assignees_url":"https://api.github.com/repos/pravipati/honeyaws/assignees{/user}","branches_url":"https://api.github.com/repos/pravipati/honeyaws/branches{/branch}","tags_url":"https://api.github.com/repos/pravipati/honeyaws/tags","blobs_url":"https://api.github.com/repos/pravipati/honeyaws/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pravipati/honeyaws/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pravipati/honeyaws/git/refs{/sha}","trees_url":"https://api.github.com/repos/pravipati/honeyaws/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pravipati/honeyaws/statuses/{sha}","languages_url":"https://api.github.com/repos/pravipati/honeyaws/languages","stargazers_url":"https://api.github.com/repos/pravipati/honeyaws/stargazers","contributors_url":"https://api.github.com/repos/pravipati/honeyaws/contributors","subscribers_url":"https://api.github.com/repos/pravipati/honeyaws/subscribers","subscription_url":"https://api.github.com/repos/pravipati/honeyaws/subscription","commits_url":"https://api.github.com/repos/pravipati/honeyaws/commits{/sha}","git_commits_url":"https://api.github.com/repos/pravipati/honeyaws/git/commits{/sha}","comments_url":"https://api.github.com/repos/pravipati/honeyaws/comments{/number}","issue_comment_url":"https://api.github.com/repos/pravipati/honeyaws/issues/comments{/number}","contents_url":"https://api.github.com/repos/pravipati/honeyaws/contents/{+path}","compare_url":"https://api.github.com/repos/pravipati/honeyaws/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pravipati/honeyaws/merges","archive_url":"https://api.github.com/repos/pravipati/honeyaws/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pravipati/honeyaws/downloads","issues_url":"https://api.github.com/repos/pravipati/honeyaws/issues{/number}","pulls_url":"https://api.github.com/repos/pravipati/honeyaws/pulls{/number}","milestones_url":"https://api.github.com/repos/pravipati/honeyaws/milestones{/number}","notifications_url":"https://api.github.com/repos/pravipati/honeyaws/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pravipati/honeyaws/labels{/name}","releases_url":"https://api.github.com/repos/pravipati/honeyaws/releases{/id}","deployments_url":"https://api.github.com/repos/pravipati/honeyaws/deployments","created_at":"2018-02-19T05:46:30Z","updated_at":"2018-02-19T05:46:32Z","pushed_at":"2018-02-19T06:04:13Z","git_url":"git://github.com/pravipati/honeyaws.git","ssh_url":"git@github.com:pravipati/honeyaws.git","clone_url":"https://github.com/pravipati/honeyaws.git","svn_url":"https://github.com/pravipati/honeyaws","homepage":"","size":1490,"stargazers_count":0,"watchers_count":0,"language":"Go","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":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"honeycombio:master","ref":"master","sha":"5f1ee297921beacc395904421e220e14e1e27a6d","user":{"login":"honeycombio","id":15988027,"avatar_url":"https://avatars1.githubusercontent.com/u/15988027?v=4","gravatar_id":"","url":"https://api.github.com/users/honeycombio","html_url":"https://github.com/honeycombio","followers_url":"https://api.github.com/users/honeycombio/followers","following_url":"https://api.github.com/users/honeycombio/following{/other_user}","gists_url":"https://api.github.com/users/honeycombio/gists{/gist_id}","starred_url":"https://api.github.com/users/honeycombio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/honeycombio/subscriptions","organizations_url":"https://api.github.com/users/honeycombio/orgs","repos_url":"https://api.github.com/users/honeycombio/repos","events_url":"https://api.github.com/users/honeycombio/events{/privacy}","received_events_url":"https://api.github.com/users/honeycombio/received_events","type":"Organization","site_admin":false},"repo":{"id":99954055,"name":"honeyaws","full_name":"honeycombio/honeyaws","owner":{"login":"honeycombio","id":15988027,"avatar_url":"https://avatars1.githubusercontent.com/u/15988027?v=4","gravatar_id":"","url":"https://api.github.com/users/honeycombio","html_url":"https://github.com/honeycombio","followers_url":"https://api.github.com/users/honeycombio/followers","following_url":"https://api.github.com/users/honeycombio/following{/other_user}","gists_url":"https://api.github.com/users/honeycombio/gists{/gist_id}","starred_url":"https://api.github.com/users/honeycombio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/honeycombio/subscriptions","organizations_url":"https://api.github.com/users/honeycombio/orgs","repos_url":"https://api.github.com/users/honeycombio/repos","events_url":"https://api.github.com/users/honeycombio/events{/privacy}","received_events_url":"https://api.github.com/users/honeycombio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/honeycombio/honeyaws","description":"Observability for your AWS load balancers, CloudFront, and more","fork":false,"url":"https://api.github.com/repos/honeycombio/honeyaws","forks_url":"https://api.github.com/repos/honeycombio/honeyaws/forks","keys_url":"https://api.github.com/repos/honeycombio/honeyaws/keys{/key_id}","collaborators_url":"https://api.github.com/repos/honeycombio/honeyaws/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/honeycombio/honeyaws/teams","hooks_url":"https://api.github.com/repos/honeycombio/honeyaws/hooks","issue_events_url":"https://api.github.com/repos/honeycombio/honeyaws/issues/events{/number}","events_url":"https://api.github.com/repos/honeycombio/honeyaws/events","assignees_url":"https://api.github.com/repos/honeycombio/honeyaws/assignees{/user}","branches_url":"https://api.github.com/repos/honeycombio/honeyaws/branches{/branch}","tags_url":"https://api.github.com/repos/honeycombio/honeyaws/tags","blobs_url":"https://api.github.com/repos/honeycombio/honeyaws/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/honeycombio/honeyaws/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/honeycombio/honeyaws/git/refs{/sha}","trees_url":"https://api.github.com/repos/honeycombio/honeyaws/git/trees{/sha}","statuses_url":"https://api.github.com/repos/honeycombio/honeyaws/statuses/{sha}","languages_url":"https://api.github.com/repos/honeycombio/honeyaws/languages","stargazers_url":"https://api.github.com/repos/honeycombio/honeyaws/stargazers","contributors_url":"https://api.github.com/repos/honeycombio/honeyaws/contributors","subscribers_url":"https://api.github.com/repos/honeycombio/honeyaws/subscribers","subscription_url":"https://api.github.com/repos/honeycombio/honeyaws/subscription","commits_url":"https://api.github.com/repos/honeycombio/honeyaws/commits{/sha}","git_commits_url":"https://api.github.com/repos/honeycombio/honeyaws/git/commits{/sha}","comments_url":"https://api.github.com/repos/honeycombio/honeyaws/comments{/number}","issue_comment_url":"https://api.github.com/repos/honeycombio/honeyaws/issues/comments{/number}","contents_url":"https://api.github.com/repos/honeycombio/honeyaws/contents/{+path}","compare_url":"https://api.github.com/repos/honeycombio/honeyaws/compare/{base}...{head}","merges_url":"https://api.github.com/repos/honeycombio/honeyaws/merges","archive_url":"https://api.github.com/repos/honeycombio/honeyaws/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/honeycombio/honeyaws/downloads","issues_url":"https://api.github.com/repos/honeycombio/honeyaws/issues{/number}","pulls_url":"https://api.github.com/repos/honeycombio/honeyaws/pulls{/number}","milestones_url":"https://api.github.com/repos/honeycombio/honeyaws/milestones{/number}","notifications_url":"https://api.github.com/repos/honeycombio/honeyaws/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/honeycombio/honeyaws/labels{/name}","releases_url":"https://api.github.com/repos/honeycombio/honeyaws/releases{/id}","deployments_url":"https://api.github.com/repos/honeycombio/honeyaws/deployments","created_at":"2017-08-10T18:36:03Z","updated_at":"2018-02-21T09:00:15Z","pushed_at":"2018-02-19T06:09:46Z","git_url":"git://github.com/honeycombio/honeyaws.git","ssh_url":"git@github.com:honeycombio/honeyaws.git","clone_url":"https://github.com/honeycombio/honeyaws.git","svn_url":"https://github.com/honeycombio/honeyaws","homepage":"","size":1449,"stargazers_count":9,"watchers_count":9,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":7,"open_issues":4,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33"},"html":{"href":"https://github.com/honeycombio/honeyaws/pull/33"},"issue":{"href":"https://api.github.com/repos/honeycombio/honeyaws/issues/33"},"comments":{"href":"https://api.github.com/repos/honeycombio/honeyaws/issues/33/comments"},"review_comments":{"href":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33/comments"},"review_comment":{"href":"https://api.github.com/repos/honeycombio/honeyaws/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/honeycombio/honeyaws/pulls/33/commits"},"statuses":{"href":"https://api.github.com/repos/honeycombio/honeyaws/statuses/69892a9c47e073bf2ec0f4451d0dbde932aba6fc"}},"author_association":"NONE"}}
{"actor":{"display_login":"maplebed"}}