{"action":"created","comment":{"url":"https://api.github.com/repos/elasticsearch/logstash/pulls/comments/23274874","id":23274874,"diff_hunk":"@@ -0,0 +1,1021 @@\n+:branch:          1.5\n+:ls_version:\t\t  1.5.0.beta1\n+\n+= How to write your own Logstash {plugintype} plugin\n+\n+This HOWTO will walk you through the process of developing a new {plugintype}\n+for Logstash. The workflow has changed as of version 1.5 of Logstash, so you'll\n+want to follow these new and improved steps to contribute a new plugin!  Since\n+Logstash 1.5, all plugins are self-contained ruby gems.  In all previous\n+versions, plugins were part of the core Logstash distribution.  This change\n+makes it possible to develop plugins independent of the Logstash core, and\n+release updates independently as well!\n+\n+NOTE: Logstash is written in Ruby.  If you are unfamiliar with the Ruby programming\n+language, an excellent quick-start guide is at\n+https://www.ruby-lang.org/en/documentation/quickstart/.\n+\n+== Get started\n+\n+{getstarted}\n+\n+=== Create a new GitHub repo\n+As of version 1.5 of Logstash, the code for each plugin lives in its own GitHub\n+repository. So first, you'll need to create a new repo as a home for your\n+nascent {plugintype}. When logged into GitHub, click on the \"Repositories\" tab.\n+You may see a list of repositories you've forked and/or contributed to, or it\n+may be blank. Either way, you're fine! Now click on the green \"New\" button near\n+the top right of the page.\n+\n+Choose the following settings on your new repo:\n+\n+* Repository name should be similar to \"logstash-{plugintype}-mypluginname\"\n+* Public or Private - up to you (but will need to be Public to submit as an\n+  official plugin)\n+* Click the box \"Initialize this repository with a README\"\n+\n+=== Copy the {plugintype} code\n+\n+==== Clone your forked repo\n+You'll need to clone the new repo you just created. Use a command like this:\n+\n+[source,sh]\n+[subs=\"attributes\"]\n+----------------------------------\n+git clone git@github.com:myuser/logstash-{plugintype}-mypluginname.git\n+----------------------------------\n+\n+==== Clone and copy the example plugin (highly recommended)\n+At this point, you could build the plugin out entirely on your own.  Plugins\n+need to have a similar directory structure as other ruby gems.\n+\n+[NOTE]\n+=========================\n+This example ruby gem file structure\n+(and excellent walkthrough of ruby gem creation) is from\n+http://timelessrepo.com/making-ruby-gems :\n+[source,txt]\n+[subs=\"attributes\"]\n+----------------------------------\n+$ tree mygem\n+├── lib/\n+│   ├── mygem.rb\n+│   └── mygem/\n+│       ├── base.rb\n+│       └── version.rb\n+├── test/\n+├── bin/\n+├── Rakefile\n+└── mygem.gemspec\n+----------------------------------\n+=========================\n+\n+For Logstash plugins, your file structure should look like this:\n+\n+[source,txt]\n+[subs=\"attributes\"]\n+----------------------------------\n+$ tree logstash-{plugintype}-mypluginname\n+├── Gemfile\n+├── LICENSE\n+├── README.md\n+├── Rakefile\n+├── lib\n+│   └── logstash\n+│       └── {plugintype}s\n+│           └── mypluginname.rb\n+├── logstash-{plugintype}-mypluginname.gemspec\n+└── spec\n+    └── {plugintype}s\n+        └── mypluginname_spec.rb\n+----------------------------------\n+\n+\n+[TIP]\n+=========================\n+Here's a relatively easy way to import the necessary files and\n+directory structure.\n+\n+[source,js]\n+[subs=\"attributes\"]\n+----------------------------------\n+cd /tmp\n+git clone git@github.com:logstash-plugins/logstash-{plugintype}-{pluginname}.git\n+cd logstash-{plugintype}-{pluginname}\n+rm -rf .git <1>\n+cp -R * /path/to/logstash-{plugintype}-mypluginname/\n+<2>\n+cd /path/to/logstash-{plugintype}-mypluginname\n+mv logstash-{plugintype}-{pluginname}.gemspec logstash-{plugintype}-mypluginname.gemspec <3>\n+mv lib/logstash/{plugintype}s/{pluginname}.rb lib/logstash/{plugintype}s/mypluginname.rb <4>\n+mv spec/{plugintype}s/{pluginname}_spec.rb spec/{plugintype}s/mypluginname_spec.rb <5>\n+----------------------------------\n+\n+<1> We don't need this `.git` directory or its contents.  They match the example\n+repository instead of our newly created repository, so we will delete them here.\n+Don't forget to clean up the temporary directory after you've copied the\n+contents. Your file structure should look like the Logstash plugin example\n+shown.\n+\n+<2> Since we've copied the files from the logstash-{plugintype}-{pluginname}\n+repository, there are a few files we should rename accordingly.\n+\n+<3> The gemspec file needs to be renamed.\n+<4> Inside the `lib/logstash/pass:attributes[{plugintype}]s/` directory is the\n+`pass:attributes[{pluginname}].rb` file.  It should be renamed to match\n+`mypluginname`, e.g.\n+\n+<5> In like fashion, inside the `spec/pass:attributes[{plugintype}]s/` directory is\n+the `pass:attributes[{pluginname}]_spec.rb` file.  It, too, should be renamed to\n+match `mypluginname`, e.g.\n+=========================\n+\n+=== An overview of your plugin\n+We'll take a closer look at these details in a bit, but let's see what the full\n+plugin looks like, first!\n+\n+[source,sh]\n+[subs=\"attributes\"]\n+----------------------------------\n+vi lib/logstash/{plugintype}s/mypluginname.rb\n+----------------------------------\n+Substitute your text editor of choice.\n+\n+// /////////////////////////////////////////////////////////////////////////////\n+// Input (conditionally recognized by the presence of the run_method attribute)\n+// /////////////////////////////////////////////////////////////////////////////\n+ifdef::run_method[]\n+[source,ruby]\n+[subs=\"attributes\"]\n+----------------------------------\n+# encoding: utf-8\n+require \"logstash/{plugintype}s/base\"\n+require \"logstash/namespace\"\n+require \"stud/interval\"\n+require \"socket\" # for Socket.gethostname\n+\n+# Add any asciidoc formatted documentation here\n+# Generate a repeating message.\n+#\n+# This plugin is intented only as an example.\n+\n+class LogStash::{pluginclass}::{pluginnamecap} < LogStash::{pluginclass}::Base\n+  config_name \"example\"\n+\n+  # If undefined, Logstash will complain, even if codec is unused.\n+  default :codec, \"plain\"\n+\n+  # The message string to use in the event.\n+  config :message, :validate => :string, :default => \"Hello World!\"\n+\n+  # Set how frequently messages should be sent.\n+  #\n+  # The default, `1`, means send a message every second.\n+  config :interval, :validate => :number, :default => 1\n+\n+  public\n+  def register\n+    @host = Socket.gethostname\n+  end # def register\n+\n+  def run(queue)\n+    Stud.interval(@interval) do\n+      event = LogStash::Event.new(\"message\" => @message, \"host\" => @host)\n+      decorate(event)\n+      queue << event\n+    end # loop\n+  end # def run\n+\n+end # class LogStash::{pluginclass}::{pluginnamecap}\n+----------------------------------\n+endif::run_method[]\n+\n+// /////////////////////////////////////////////////////////////////////////////\n+// Codec (conditionally recognized by the presence of the encode_method\n+// attribute)\n+// /////////////////////////////////////////////////////////////////////////////\n+ifdef::encode_method[]\n+[source,ruby]\n+[subs=\"attributes\"]\n+----------------------------------\n+# encoding: utf-8\n+require \"logstash/{plugintype}s/base\"\n+require \"logstash/codecs/line\"\n+\n+# Add any asciidoc formatted documentation here\n+class LogStash::{pluginclass}::{pluginnamecap} < LogStash::{pluginclass}::Base\n+\n+  # This example codec will append a string to the message field\n+  # of an event, either in the decoding or encoding methods\n+  #\n+  # This is only intended to be used as an example.\n+  #\n+  # input {\n+  #   stdin { codec => example }\n+  # }\n+  #\n+  # or\n+  #\n+  # output {\n+  #   stdout { codec => example }\n+  # }\n+  config_name \"example\"\n+\n+  # Append a string to the message\n+  config :append, :validate => :string, :default => ', Hello World!'\n+\n+  public\n+  def register\n+    @lines = LogStash::Codecs::Line.new\n+    @lines.charset = \"UTF-8\"\n+  end\n+\n+  public\n+  def decode(data)\n+    @lines.decode(data) do |line|\n+      replace = { \"message\" => line[\"message\"].to_s + @append }\n+      yield LogStash::Event.new(replace)\n+    end\n+  end # def decode\n+\n+  public\n+  def encode(event)\n+    @on_event.call(event, event[\"message\"].to_s + @append + NL)\n+  end # def encode\n+\n+end # class LogStash::{pluginclass}::{pluginnamecap}\n+----------------------------------\n+endif::encode_method[]\n+\n+// /////////////////////////////////////////////////////////////////////////////\n+// Filter (conditionally recognized by the presence of the filter_method\n+// attribute)\n+// /////////////////////////////////////////////////////////////////////////////\n+ifdef::filter_method[]\n+[source,ruby]\n+[subs=\"attributes\"]\n+----------------------------------\n+# encoding: utf-8\n+require \"logstash/{plugintype}s/base\"\n+require \"logstash/namespace\"\n+\n+# Add any asciidoc formatted documentation here\n+# This example filter will replace the contents of the default\n+# message field with whatever you specify in the configuration.\n+#\n+# It is only intended to be used as an example.\n+class LogStash::{pluginclass}::{pluginnamecap} < LogStash::{pluginclass}::Base\n+\n+  # Setting the config_name here is required. This is how you\n+  # configure this {plugintype} from your Logstash config.\n+  #\n+  # {plugintype} {\n+  #   {pluginname} { message => \"My message...\" }\n+  # }\n+  config_name \"example\"\n+\n+  # Replace the message with this value.\n+  config :message, :validate => :string, :default => \"Hello World!\"\n+\n+\n+  public\n+  def register\n+    # Add instance variables\n+  end # def register\n+\n+  public\n+  def filter(event)\n+\n+    if @message\n+      # Replace the event message with our message as configured in the\n+      # config file.\n+      event[\"message\"] = @message\n+    end\n+\n+    # filter_matched should go in the last line of our successful code\n+    filter_matched(event)\n+  end # def {plugintype}\n+\n+end # class LogStash::{pluginclass}::{pluginnamecap}\n+----------------------------------\n+endif::filter_method[]\n+\n+// /////////////////////////////////////////////////////////////////////////////\n+// Output (conditionally recognized by the presence of the receive_method\n+// attribute)\n+// /////////////////////////////////////////////////////////////////////////////\n+ifdef::receive_method[]\n+[source,ruby]\n+[subs=\"attributes\"]\n+----------------------------------\n+# encoding: utf-8\n+require \"logstash/{plugintype}s/base\"\n+require \"logstash/namespace\"\n+\n+# Add any asciidoc formatted documentation here\n+# An example output that does nothing.\n+class LogStash::{pluginclass}::{pluginnamecap} < LogStash::{pluginclass}::Base\n+  config_name \"example\"\n+\n+  public\n+  def register\n+  end # def register\n+\n+  public\n+  def receive(event)\n+  end # def receive\n+\n+end # class LogStash::{pluginclass}::{pluginnamecap}\n+----------------------------------\n+endif::receive_method[]\n+\n+=== Anatomy of a {plugintype} plugin\n+\n+Now let's take a line-by-line look at this new example plugin.","path":"docs/asciidoc/static/include/pluginbody.asciidoc","position":333,"original_position":334,"commit_id":"21378b93e978c8052dda85f248d3c959ca4a767e","original_commit_id":"ed06318a91dcd174af520a3d5a6a5d030970cde8","user":{"login":"debadair","id":362578,"avatar_url":"https://avatars.githubusercontent.com/u/362578?v=3","gravatar_id":"","url":"https://api.github.com/users/debadair","html_url":"https://github.com/debadair","followers_url":"https://api.github.com/users/debadair/followers","following_url":"https://api.github.com/users/debadair/following{/other_user}","gists_url":"https://api.github.com/users/debadair/gists{/gist_id}","starred_url":"https://api.github.com/users/debadair/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/debadair/subscriptions","organizations_url":"https://api.github.com/users/debadair/orgs","repos_url":"https://api.github.com/users/debadair/repos","events_url":"https://api.github.com/users/debadair/events{/privacy}","received_events_url":"https://api.github.com/users/debadair/received_events","type":"User","site_admin":false},"body":"this new > the","created_at":"2015-01-21T02:40:00Z","updated_at":"2015-01-21T02:40:00Z","html_url":"https://github.com/elasticsearch/logstash/pull/2365#discussion_r23274874","pull_request_url":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365","_links":{"self":{"href":"https://api.github.com/repos/elasticsearch/logstash/pulls/comments/23274874"},"html":{"href":"https://github.com/elasticsearch/logstash/pull/2365#discussion_r23274874"},"pull_request":{"href":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365"}}},"pull_request":{"url":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365","id":27476998,"html_url":"https://github.com/elasticsearch/logstash/pull/2365","diff_url":"https://github.com/elasticsearch/logstash/pull/2365.diff","patch_url":"https://github.com/elasticsearch/logstash/pull/2365.patch","issue_url":"https://api.github.com/repos/elasticsearch/logstash/issues/2365","number":2365,"state":"open","locked":false,"title":"Rough draft: First commit of new plugin howto docs","user":{"login":"untergeek","id":1020383,"avatar_url":"https://avatars.githubusercontent.com/u/1020383?v=3","gravatar_id":"","url":"https://api.github.com/users/untergeek","html_url":"https://github.com/untergeek","followers_url":"https://api.github.com/users/untergeek/followers","following_url":"https://api.github.com/users/untergeek/following{/other_user}","gists_url":"https://api.github.com/users/untergeek/gists{/gist_id}","starred_url":"https://api.github.com/users/untergeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/untergeek/subscriptions","organizations_url":"https://api.github.com/users/untergeek/orgs","repos_url":"https://api.github.com/users/untergeek/repos","events_url":"https://api.github.com/users/untergeek/events{/privacy}","received_events_url":"https://api.github.com/users/untergeek/received_events","type":"User","site_admin":false},"body":"This includes 4 small _plugintype_ asciidoc files which are little more than macro placeholders.\r\n\r\nThe real document is singular at `include/pluginbody.asciidoc` and has many `ifdef` blocks to include code (or `ifndef`blocks to exclude code) as needed.\r\n\r\nBe warned! Viewing the `pluginbody.asciidoc` file as github may interpret it will omit most of these blocks because of the `ifdef` statements.","created_at":"2015-01-16T01:05:21Z","updated_at":"2015-01-21T02:40:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9bc7496f8dc322819ba61c89c6b3d3afae800a36","assignee":null,"milestone":{"url":"https://api.github.com/repos/elasticsearch/logstash/milestones/2","labels_url":"https://api.github.com/repos/elasticsearch/logstash/milestones/2/labels","id":624113,"number":2,"title":"v1.5.0","description":"","creator":{"login":"colinsurprenant","id":2010,"avatar_url":"https://avatars.githubusercontent.com/u/2010?v=3","gravatar_id":"","url":"https://api.github.com/users/colinsurprenant","html_url":"https://github.com/colinsurprenant","followers_url":"https://api.github.com/users/colinsurprenant/followers","following_url":"https://api.github.com/users/colinsurprenant/following{/other_user}","gists_url":"https://api.github.com/users/colinsurprenant/gists{/gist_id}","starred_url":"https://api.github.com/users/colinsurprenant/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colinsurprenant/subscriptions","organizations_url":"https://api.github.com/users/colinsurprenant/orgs","repos_url":"https://api.github.com/users/colinsurprenant/repos","events_url":"https://api.github.com/users/colinsurprenant/events{/privacy}","received_events_url":"https://api.github.com/users/colinsurprenant/received_events","type":"User","site_admin":false},"open_issues":20,"closed_issues":211,"state":"open","created_at":"2014-04-08T16:53:38Z","updated_at":"2015-01-20T21:14:59Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365/commits","review_comments_url":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365/comments","review_comment_url":"https://api.github.com/repos/elasticsearch/logstash/pulls/comments/{number}","comments_url":"https://api.github.com/repos/elasticsearch/logstash/issues/2365/comments","statuses_url":"https://api.github.com/repos/elasticsearch/logstash/statuses/21378b93e978c8052dda85f248d3c959ca4a767e","head":{"label":"untergeek:plugindocs","ref":"plugindocs","sha":"21378b93e978c8052dda85f248d3c959ca4a767e","user":{"login":"untergeek","id":1020383,"avatar_url":"https://avatars.githubusercontent.com/u/1020383?v=3","gravatar_id":"","url":"https://api.github.com/users/untergeek","html_url":"https://github.com/untergeek","followers_url":"https://api.github.com/users/untergeek/followers","following_url":"https://api.github.com/users/untergeek/following{/other_user}","gists_url":"https://api.github.com/users/untergeek/gists{/gist_id}","starred_url":"https://api.github.com/users/untergeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/untergeek/subscriptions","organizations_url":"https://api.github.com/users/untergeek/orgs","repos_url":"https://api.github.com/users/untergeek/repos","events_url":"https://api.github.com/users/untergeek/events{/privacy}","received_events_url":"https://api.github.com/users/untergeek/received_events","type":"User","site_admin":false},"repo":{"id":6462322,"name":"logstash","full_name":"untergeek/logstash","owner":{"login":"untergeek","id":1020383,"avatar_url":"https://avatars.githubusercontent.com/u/1020383?v=3","gravatar_id":"","url":"https://api.github.com/users/untergeek","html_url":"https://github.com/untergeek","followers_url":"https://api.github.com/users/untergeek/followers","following_url":"https://api.github.com/users/untergeek/following{/other_user}","gists_url":"https://api.github.com/users/untergeek/gists{/gist_id}","starred_url":"https://api.github.com/users/untergeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/untergeek/subscriptions","organizations_url":"https://api.github.com/users/untergeek/orgs","repos_url":"https://api.github.com/users/untergeek/repos","events_url":"https://api.github.com/users/untergeek/events{/privacy}","received_events_url":"https://api.github.com/users/untergeek/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/untergeek/logstash","description":"logstash - logs/event transport, processing, management, search.","fork":true,"url":"https://api.github.com/repos/untergeek/logstash","forks_url":"https://api.github.com/repos/untergeek/logstash/forks","keys_url":"https://api.github.com/repos/untergeek/logstash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/untergeek/logstash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/untergeek/logstash/teams","hooks_url":"https://api.github.com/repos/untergeek/logstash/hooks","issue_events_url":"https://api.github.com/repos/untergeek/logstash/issues/events{/number}","events_url":"https://api.github.com/repos/untergeek/logstash/events","assignees_url":"https://api.github.com/repos/untergeek/logstash/assignees{/user}","branches_url":"https://api.github.com/repos/untergeek/logstash/branches{/branch}","tags_url":"https://api.github.com/repos/untergeek/logstash/tags","blobs_url":"https://api.github.com/repos/untergeek/logstash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/untergeek/logstash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/untergeek/logstash/git/refs{/sha}","trees_url":"https://api.github.com/repos/untergeek/logstash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/untergeek/logstash/statuses/{sha}","languages_url":"https://api.github.com/repos/untergeek/logstash/languages","stargazers_url":"https://api.github.com/repos/untergeek/logstash/stargazers","contributors_url":"https://api.github.com/repos/untergeek/logstash/contributors","subscribers_url":"https://api.github.com/repos/untergeek/logstash/subscribers","subscription_url":"https://api.github.com/repos/untergeek/logstash/subscription","commits_url":"https://api.github.com/repos/untergeek/logstash/commits{/sha}","git_commits_url":"https://api.github.com/repos/untergeek/logstash/git/commits{/sha}","comments_url":"https://api.github.com/repos/untergeek/logstash/comments{/number}","issue_comment_url":"https://api.github.com/repos/untergeek/logstash/issues/comments/{number}","contents_url":"https://api.github.com/repos/untergeek/logstash/contents/{+path}","compare_url":"https://api.github.com/repos/untergeek/logstash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/untergeek/logstash/merges","archive_url":"https://api.github.com/repos/untergeek/logstash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/untergeek/logstash/downloads","issues_url":"https://api.github.com/repos/untergeek/logstash/issues{/number}","pulls_url":"https://api.github.com/repos/untergeek/logstash/pulls{/number}","milestones_url":"https://api.github.com/repos/untergeek/logstash/milestones{/number}","notifications_url":"https://api.github.com/repos/untergeek/logstash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/untergeek/logstash/labels{/name}","releases_url":"https://api.github.com/repos/untergeek/logstash/releases{/id}","created_at":"2012-10-30T18:33:19Z","updated_at":"2014-05-16T13:57:06Z","pushed_at":"2015-01-20T21:08:15Z","git_url":"git://github.com/untergeek/logstash.git","ssh_url":"git@github.com:untergeek/logstash.git","clone_url":"https://github.com/untergeek/logstash.git","svn_url":"https://github.com/untergeek/logstash","homepage":"http://logstash.net/","size":70840,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":true,"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":"elasticsearch:master","ref":"master","sha":"c8d78f5fb3ddaffb306cc4c451e6b94e860b0aa6","user":{"login":"elasticsearch","id":141304,"avatar_url":"https://avatars.githubusercontent.com/u/141304?v=3","gravatar_id":"","url":"https://api.github.com/users/elasticsearch","html_url":"https://github.com/elasticsearch","followers_url":"https://api.github.com/users/elasticsearch/followers","following_url":"https://api.github.com/users/elasticsearch/following{/other_user}","gists_url":"https://api.github.com/users/elasticsearch/gists{/gist_id}","starred_url":"https://api.github.com/users/elasticsearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elasticsearch/subscriptions","organizations_url":"https://api.github.com/users/elasticsearch/orgs","repos_url":"https://api.github.com/users/elasticsearch/repos","events_url":"https://api.github.com/users/elasticsearch/events{/privacy}","received_events_url":"https://api.github.com/users/elasticsearch/received_events","type":"Organization","site_admin":false},"repo":{"id":1090311,"name":"logstash","full_name":"elasticsearch/logstash","owner":{"login":"elasticsearch","id":141304,"avatar_url":"https://avatars.githubusercontent.com/u/141304?v=3","gravatar_id":"","url":"https://api.github.com/users/elasticsearch","html_url":"https://github.com/elasticsearch","followers_url":"https://api.github.com/users/elasticsearch/followers","following_url":"https://api.github.com/users/elasticsearch/following{/other_user}","gists_url":"https://api.github.com/users/elasticsearch/gists{/gist_id}","starred_url":"https://api.github.com/users/elasticsearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elasticsearch/subscriptions","organizations_url":"https://api.github.com/users/elasticsearch/orgs","repos_url":"https://api.github.com/users/elasticsearch/repos","events_url":"https://api.github.com/users/elasticsearch/events{/privacy}","received_events_url":"https://api.github.com/users/elasticsearch/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/elasticsearch/logstash","description":"logstash - logs/event transport, processing, management, search.","fork":false,"url":"https://api.github.com/repos/elasticsearch/logstash","forks_url":"https://api.github.com/repos/elasticsearch/logstash/forks","keys_url":"https://api.github.com/repos/elasticsearch/logstash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/elasticsearch/logstash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/elasticsearch/logstash/teams","hooks_url":"https://api.github.com/repos/elasticsearch/logstash/hooks","issue_events_url":"https://api.github.com/repos/elasticsearch/logstash/issues/events{/number}","events_url":"https://api.github.com/repos/elasticsearch/logstash/events","assignees_url":"https://api.github.com/repos/elasticsearch/logstash/assignees{/user}","branches_url":"https://api.github.com/repos/elasticsearch/logstash/branches{/branch}","tags_url":"https://api.github.com/repos/elasticsearch/logstash/tags","blobs_url":"https://api.github.com/repos/elasticsearch/logstash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/elasticsearch/logstash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/elasticsearch/logstash/git/refs{/sha}","trees_url":"https://api.github.com/repos/elasticsearch/logstash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/elasticsearch/logstash/statuses/{sha}","languages_url":"https://api.github.com/repos/elasticsearch/logstash/languages","stargazers_url":"https://api.github.com/repos/elasticsearch/logstash/stargazers","contributors_url":"https://api.github.com/repos/elasticsearch/logstash/contributors","subscribers_url":"https://api.github.com/repos/elasticsearch/logstash/subscribers","subscription_url":"https://api.github.com/repos/elasticsearch/logstash/subscription","commits_url":"https://api.github.com/repos/elasticsearch/logstash/commits{/sha}","git_commits_url":"https://api.github.com/repos/elasticsearch/logstash/git/commits{/sha}","comments_url":"https://api.github.com/repos/elasticsearch/logstash/comments{/number}","issue_comment_url":"https://api.github.com/repos/elasticsearch/logstash/issues/comments/{number}","contents_url":"https://api.github.com/repos/elasticsearch/logstash/contents/{+path}","compare_url":"https://api.github.com/repos/elasticsearch/logstash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/elasticsearch/logstash/merges","archive_url":"https://api.github.com/repos/elasticsearch/logstash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/elasticsearch/logstash/downloads","issues_url":"https://api.github.com/repos/elasticsearch/logstash/issues{/number}","pulls_url":"https://api.github.com/repos/elasticsearch/logstash/pulls{/number}","milestones_url":"https://api.github.com/repos/elasticsearch/logstash/milestones{/number}","notifications_url":"https://api.github.com/repos/elasticsearch/logstash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/elasticsearch/logstash/labels{/name}","releases_url":"https://api.github.com/repos/elasticsearch/logstash/releases{/id}","created_at":"2010-11-18T01:31:50Z","updated_at":"2015-01-21T02:07:36Z","pushed_at":"2015-01-21T02:07:36Z","git_url":"git://github.com/elasticsearch/logstash.git","ssh_url":"git@github.com:elasticsearch/logstash.git","clone_url":"https://github.com/elasticsearch/logstash.git","svn_url":"https://github.com/elasticsearch/logstash","homepage":"http://logstash.net/","size":86206,"stargazers_count":3566,"watchers_count":3566,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1319,"mirror_url":null,"open_issues_count":558,"forks":1319,"open_issues":558,"watchers":3566,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365"},"html":{"href":"https://github.com/elasticsearch/logstash/pull/2365"},"issue":{"href":"https://api.github.com/repos/elasticsearch/logstash/issues/2365"},"comments":{"href":"https://api.github.com/repos/elasticsearch/logstash/issues/2365/comments"},"review_comments":{"href":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365/comments"},"review_comment":{"href":"https://api.github.com/repos/elasticsearch/logstash/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/elasticsearch/logstash/pulls/2365/commits"},"statuses":{"href":"https://api.github.com/repos/elasticsearch/logstash/statuses/21378b93e978c8052dda85f248d3c959ca4a767e"}}}}