{"action":"opened","number":3,"pull_request":{"url":"https://api.github.com/repos/osrg/earthquake/pulls/3","id":36113868,"html_url":"https://github.com/osrg/earthquake/pull/3","diff_url":"https://github.com/osrg/earthquake/pull/3.diff","patch_url":"https://github.com/osrg/earthquake/pull/3.patch","issue_url":"https://api.github.com/repos/osrg/earthquake/issues/3","number":3,"state":"open","locked":false,"title":"Introduced pluggable architecture (pyearthquake + libearthquake.so) for programmable exploration","user":{"login":"AkihiroSuda","id":9248427,"avatar_url":"https://avatars.githubusercontent.com/u/9248427?v=3","gravatar_id":"","url":"https://api.github.com/users/AkihiroSuda","html_url":"https://github.com/AkihiroSuda","followers_url":"https://api.github.com/users/AkihiroSuda/followers","following_url":"https://api.github.com/users/AkihiroSuda/following{/other_user}","gists_url":"https://api.github.com/users/AkihiroSuda/gists{/gist_id}","starred_url":"https://api.github.com/users/AkihiroSuda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AkihiroSuda/subscriptions","organizations_url":"https://api.github.com/users/AkihiroSuda/orgs","repos_url":"https://api.github.com/users/AkihiroSuda/repos","events_url":"https://api.github.com/users/AkihiroSuda/events{/privacy}","received_events_url":"https://api.github.com/users/AkihiroSuda/received_events","type":"User","site_admin":false},"body":"### QUICKSTART\r\n*QUICKSTART*: Please refer to `example/zk/{README.md, config_example.json, example-output}`.\r\n\r\nNOTE: Pre-built binaries (including `earthquake-classic` and `earthquake-inspector-classsic.jar`) are commited in `bin`.\r\n\r\n### Implemented Backend and Bindings:\r\n * `libearthquake`: backend library for recording execution history.\r\n * `pyearthquake`: python binding for `libearthquake`\r\n\r\n### Implemented Plug-ins:\r\n * orchestrator: [`BasicOrchestrator`]\r\n * explorer: [`DumbExplorer`, `RandomExplorer`, `GreedyExplorer`]\r\n * process watcher: [`BasicProcessWatcher`]\r\n * Process Watcher watches events from processes, maps event->action, and execute actions. You can check safety properties(i.e. assertion) in Process Watcher.\r\n * termination detector: [`InspectionEndDetector`, `IdleForWhileDetector`]\r\n  * Termination Detector detects termination of one-shot execution.\r\n    Execution histories are recorded to storage on such terminations.\r\n  * `InspectionEndDetector`: detects termination when `InspectionEndEvent`s are observed\r\n  from all processes\r\n  * `IdleForWhileDetector`: detects termination when no event are observed\r\n  for several milliseconds.\r\n\r\n### Implemented API:\r\n * Orchestartor provides RESTful (JSON over HTTP) API.\r\n  * HTTP enables simplification of connection handling and proxying\r\n   * Even if inspectors crashed unexpectedly, you can send\r\n   `InspectionEndEvent`s to the orchestrator manually with `curl`/`wget`.\r\n  * JSON enables flexible structuralization. Some JSON-friendly\r\n  tools (e.g., JQ, MongoDB, ..) can be used with execution history\r\n  JSONs.\r\n * `POST /api/v1` (Non-blocking): send an event\r\n * `GET /api/v1/<process_id>` (Blocking): receive an action for\r\n <process_id>\r\n * `GET /visualize_api/csv`: GET CSV statistics. You may use `gnuplot` to\r\n visualize CSV\r\n\r\n### Implemented Entities:\r\n * Events: [`FunctionCallEvent`(with support for args), `PacketEvent`(WIP),\r\n `LogEvent`(WIP), `InspectionEndEvent`]\r\n * Actions: [`NopAction`, `PassDeferredEventAction`(for `FunctionCallEvent` and\r\n `PacketEvent`), `ExecuteCommandOnInspectorAction`(WIP),\r\n `ExecuteCommandOnOrchestratorAction`(usable for fault-injection that\r\n kills inspectors)]","created_at":"2015-05-25T02:50:20Z","updated_at":"2015-05-25T02:50:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/osrg/earthquake/pulls/3/commits","review_comments_url":"https://api.github.com/repos/osrg/earthquake/pulls/3/comments","review_comment_url":"https://api.github.com/repos/osrg/earthquake/pulls/comments{/number}","comments_url":"https://api.github.com/repos/osrg/earthquake/issues/3/comments","statuses_url":"https://api.github.com/repos/osrg/earthquake/statuses/813116c8635a6aa0feeb773d625e71d627d894ab","head":{"label":"AkihiroSuda:pluggable","ref":"pluggable","sha":"813116c8635a6aa0feeb773d625e71d627d894ab","user":{"login":"AkihiroSuda","id":9248427,"avatar_url":"https://avatars.githubusercontent.com/u/9248427?v=3","gravatar_id":"","url":"https://api.github.com/users/AkihiroSuda","html_url":"https://github.com/AkihiroSuda","followers_url":"https://api.github.com/users/AkihiroSuda/followers","following_url":"https://api.github.com/users/AkihiroSuda/following{/other_user}","gists_url":"https://api.github.com/users/AkihiroSuda/gists{/gist_id}","starred_url":"https://api.github.com/users/AkihiroSuda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AkihiroSuda/subscriptions","organizations_url":"https://api.github.com/users/AkihiroSuda/orgs","repos_url":"https://api.github.com/users/AkihiroSuda/repos","events_url":"https://api.github.com/users/AkihiroSuda/events{/privacy}","received_events_url":"https://api.github.com/users/AkihiroSuda/received_events","type":"User","site_admin":false},"repo":{"id":35932952,"name":"earthquake","full_name":"AkihiroSuda/earthquake","owner":{"login":"AkihiroSuda","id":9248427,"avatar_url":"https://avatars.githubusercontent.com/u/9248427?v=3","gravatar_id":"","url":"https://api.github.com/users/AkihiroSuda","html_url":"https://github.com/AkihiroSuda","followers_url":"https://api.github.com/users/AkihiroSuda/followers","following_url":"https://api.github.com/users/AkihiroSuda/following{/other_user}","gists_url":"https://api.github.com/users/AkihiroSuda/gists{/gist_id}","starred_url":"https://api.github.com/users/AkihiroSuda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AkihiroSuda/subscriptions","organizations_url":"https://api.github.com/users/AkihiroSuda/orgs","repos_url":"https://api.github.com/users/AkihiroSuda/repos","events_url":"https://api.github.com/users/AkihiroSuda/events{/privacy}","received_events_url":"https://api.github.com/users/AkihiroSuda/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AkihiroSuda/earthquake","description":"A framework of fault injectors and DMCKs","fork":true,"url":"https://api.github.com/repos/AkihiroSuda/earthquake","forks_url":"https://api.github.com/repos/AkihiroSuda/earthquake/forks","keys_url":"https://api.github.com/repos/AkihiroSuda/earthquake/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AkihiroSuda/earthquake/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AkihiroSuda/earthquake/teams","hooks_url":"https://api.github.com/repos/AkihiroSuda/earthquake/hooks","issue_events_url":"https://api.github.com/repos/AkihiroSuda/earthquake/issues/events{/number}","events_url":"https://api.github.com/repos/AkihiroSuda/earthquake/events","assignees_url":"https://api.github.com/repos/AkihiroSuda/earthquake/assignees{/user}","branches_url":"https://api.github.com/repos/AkihiroSuda/earthquake/branches{/branch}","tags_url":"https://api.github.com/repos/AkihiroSuda/earthquake/tags","blobs_url":"https://api.github.com/repos/AkihiroSuda/earthquake/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AkihiroSuda/earthquake/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AkihiroSuda/earthquake/git/refs{/sha}","trees_url":"https://api.github.com/repos/AkihiroSuda/earthquake/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AkihiroSuda/earthquake/statuses/{sha}","languages_url":"https://api.github.com/repos/AkihiroSuda/earthquake/languages","stargazers_url":"https://api.github.com/repos/AkihiroSuda/earthquake/stargazers","contributors_url":"https://api.github.com/repos/AkihiroSuda/earthquake/contributors","subscribers_url":"https://api.github.com/repos/AkihiroSuda/earthquake/subscribers","subscription_url":"https://api.github.com/repos/AkihiroSuda/earthquake/subscription","commits_url":"https://api.github.com/repos/AkihiroSuda/earthquake/commits{/sha}","git_commits_url":"https://api.github.com/repos/AkihiroSuda/earthquake/git/commits{/sha}","comments_url":"https://api.github.com/repos/AkihiroSuda/earthquake/comments{/number}","issue_comment_url":"https://api.github.com/repos/AkihiroSuda/earthquake/issues/comments{/number}","contents_url":"https://api.github.com/repos/AkihiroSuda/earthquake/contents/{+path}","compare_url":"https://api.github.com/repos/AkihiroSuda/earthquake/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AkihiroSuda/earthquake/merges","archive_url":"https://api.github.com/repos/AkihiroSuda/earthquake/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AkihiroSuda/earthquake/downloads","issues_url":"https://api.github.com/repos/AkihiroSuda/earthquake/issues{/number}","pulls_url":"https://api.github.com/repos/AkihiroSuda/earthquake/pulls{/number}","milestones_url":"https://api.github.com/repos/AkihiroSuda/earthquake/milestones{/number}","notifications_url":"https://api.github.com/repos/AkihiroSuda/earthquake/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AkihiroSuda/earthquake/labels{/name}","releases_url":"https://api.github.com/repos/AkihiroSuda/earthquake/releases{/id}","created_at":"2015-05-20T07:30:32Z","updated_at":"2015-05-20T07:30:32Z","pushed_at":"2015-05-25T02:40:34Z","git_url":"git://github.com/AkihiroSuda/earthquake.git","ssh_url":"git@github.com:AkihiroSuda/earthquake.git","clone_url":"https://github.com/AkihiroSuda/earthquake.git","svn_url":"https://github.com/AkihiroSuda/earthquake","homepage":"","size":578,"stargazers_count":0,"watchers_count":0,"language":"Go","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":"osrg:master","ref":"master","sha":"b4a2628333c8cd82c7043014d1d189ee4e790c45","user":{"login":"osrg","id":1179438,"avatar_url":"https://avatars.githubusercontent.com/u/1179438?v=3","gravatar_id":"","url":"https://api.github.com/users/osrg","html_url":"https://github.com/osrg","followers_url":"https://api.github.com/users/osrg/followers","following_url":"https://api.github.com/users/osrg/following{/other_user}","gists_url":"https://api.github.com/users/osrg/gists{/gist_id}","starred_url":"https://api.github.com/users/osrg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/osrg/subscriptions","organizations_url":"https://api.github.com/users/osrg/orgs","repos_url":"https://api.github.com/users/osrg/repos","events_url":"https://api.github.com/users/osrg/events{/privacy}","received_events_url":"https://api.github.com/users/osrg/received_events","type":"Organization","site_admin":false},"repo":{"id":26900441,"name":"earthquake","full_name":"osrg/earthquake","owner":{"login":"osrg","id":1179438,"avatar_url":"https://avatars.githubusercontent.com/u/1179438?v=3","gravatar_id":"","url":"https://api.github.com/users/osrg","html_url":"https://github.com/osrg","followers_url":"https://api.github.com/users/osrg/followers","following_url":"https://api.github.com/users/osrg/following{/other_user}","gists_url":"https://api.github.com/users/osrg/gists{/gist_id}","starred_url":"https://api.github.com/users/osrg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/osrg/subscriptions","organizations_url":"https://api.github.com/users/osrg/orgs","repos_url":"https://api.github.com/users/osrg/repos","events_url":"https://api.github.com/users/osrg/events{/privacy}","received_events_url":"https://api.github.com/users/osrg/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/osrg/earthquake","description":"A framework of fault injectors and DMCKs","fork":false,"url":"https://api.github.com/repos/osrg/earthquake","forks_url":"https://api.github.com/repos/osrg/earthquake/forks","keys_url":"https://api.github.com/repos/osrg/earthquake/keys{/key_id}","collaborators_url":"https://api.github.com/repos/osrg/earthquake/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/osrg/earthquake/teams","hooks_url":"https://api.github.com/repos/osrg/earthquake/hooks","issue_events_url":"https://api.github.com/repos/osrg/earthquake/issues/events{/number}","events_url":"https://api.github.com/repos/osrg/earthquake/events","assignees_url":"https://api.github.com/repos/osrg/earthquake/assignees{/user}","branches_url":"https://api.github.com/repos/osrg/earthquake/branches{/branch}","tags_url":"https://api.github.com/repos/osrg/earthquake/tags","blobs_url":"https://api.github.com/repos/osrg/earthquake/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/osrg/earthquake/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/osrg/earthquake/git/refs{/sha}","trees_url":"https://api.github.com/repos/osrg/earthquake/git/trees{/sha}","statuses_url":"https://api.github.com/repos/osrg/earthquake/statuses/{sha}","languages_url":"https://api.github.com/repos/osrg/earthquake/languages","stargazers_url":"https://api.github.com/repos/osrg/earthquake/stargazers","contributors_url":"https://api.github.com/repos/osrg/earthquake/contributors","subscribers_url":"https://api.github.com/repos/osrg/earthquake/subscribers","subscription_url":"https://api.github.com/repos/osrg/earthquake/subscription","commits_url":"https://api.github.com/repos/osrg/earthquake/commits{/sha}","git_commits_url":"https://api.github.com/repos/osrg/earthquake/git/commits{/sha}","comments_url":"https://api.github.com/repos/osrg/earthquake/comments{/number}","issue_comment_url":"https://api.github.com/repos/osrg/earthquake/issues/comments{/number}","contents_url":"https://api.github.com/repos/osrg/earthquake/contents/{+path}","compare_url":"https://api.github.com/repos/osrg/earthquake/compare/{base}...{head}","merges_url":"https://api.github.com/repos/osrg/earthquake/merges","archive_url":"https://api.github.com/repos/osrg/earthquake/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/osrg/earthquake/downloads","issues_url":"https://api.github.com/repos/osrg/earthquake/issues{/number}","pulls_url":"https://api.github.com/repos/osrg/earthquake/pulls{/number}","milestones_url":"https://api.github.com/repos/osrg/earthquake/milestones{/number}","notifications_url":"https://api.github.com/repos/osrg/earthquake/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/osrg/earthquake/labels{/name}","releases_url":"https://api.github.com/repos/osrg/earthquake/releases{/id}","created_at":"2014-11-20T07:09:50Z","updated_at":"2015-04-28T08:18:01Z","pushed_at":"2015-05-15T07:46:18Z","git_url":"git://github.com/osrg/earthquake.git","ssh_url":"git@github.com:osrg/earthquake.git","clone_url":"https://github.com/osrg/earthquake.git","svn_url":"https://github.com/osrg/earthquake","homepage":"","size":578,"stargazers_count":4,"watchers_count":4,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/osrg/earthquake/pulls/3"},"html":{"href":"https://github.com/osrg/earthquake/pull/3"},"issue":{"href":"https://api.github.com/repos/osrg/earthquake/issues/3"},"comments":{"href":"https://api.github.com/repos/osrg/earthquake/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/osrg/earthquake/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/osrg/earthquake/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/osrg/earthquake/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/osrg/earthquake/statuses/813116c8635a6aa0feeb773d625e71d627d894ab"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"commits":1,"additions":4126,"deletions":243,"changed_files":169}}