{"action":"created","comment":{"url":"https://api.github.com/repos/insolar/insolar/pulls/comments/217326455","pull_request_review_id":155009645,"id":217326455,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNzMyNjQ1NQ==","diff_hunk":"@@ -0,0 +1,220 @@\n+/*\n+ *    Copyright 2018 INS Ecosystem\n+ *\n+ *    Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *    you may not use this file except in compliance with the License.\n+ *    You may obtain a copy of the License at\n+ *\n+ *        http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ *    Unless required by applicable law or agreed to in writing, software\n+ *    distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *    See the License for the specific language governing permissions and\n+ *    limitations under the License.\n+ */\n+\n+package api\n+\n+import (\n+\t\"context\"\n+\t\"encoding/json\"\n+\t\"fmt\"\n+\t\"io/ioutil\"\n+\t\"log\"\n+\t\"math/rand\"\n+\t\"net/http\"\n+\t\"time\"\n+\n+\t\"github.com/insolar/insolar/configuration\"\n+\t\"github.com/insolar/insolar/core\"\n+\t\"github.com/pkg/errors\"\n+)\n+\n+func init() {\n+\trand.Seed(time.Now().UnixNano())\n+}\n+\n+func WriteError(message string, code int) map[string]interface{} {\n+\terrJson := map[string]interface{}{\n+\t\t\"error\": map[string]interface{}{\n+\t\t\t\"message\": message,\n+\t\t\t\"code\":    code,\n+\t\t},\n+\t}\n+\treturn errJson\n+}\n+\n+func makeHandlerMarshalErrorJson() []byte {\n+\tjsonErr := WriteError(\"Invalid data from handler\", -1)\n+\tserJson, err := json.Marshal(jsonErr)\n+\tif err != nil {\n+\t\tlog.Fatal(\"Can't marshal base error\")\n+\t}\n+\treturn serJson\n+}\n+\n+var handlerMarshalErrorJson = makeHandlerMarshalErrorJson()\n+\n+func ProcessQueryType(rh *RequestHandler, qTypeStr string) map[string]interface{} {\n+\tqtype := QTypeFromString(qTypeStr)\n+\tanswer := make(map[string]interface{})\n+\n+\tvar handlerError error\n+\tswitch qtype {\n+\tcase CreateMember:\n+\t\tanswer, handlerError = rh.ProcessCreateMember()\n+\tcase DumpUserInfo:\n+\t\tanswer, handlerError = rh.ProcessDumpUsers(false)\n+\tcase DumpAllUsers:\n+\t\tanswer, handlerError = rh.ProcessDumpUsers(true)\n+\tcase GetBalance:\n+\t\tanswer, handlerError = rh.ProcessGetBalance()\n+\tcase SendMoney:\n+\t\tanswer, handlerError = rh.ProcessSendMoney()\n+\tdefault:\n+\t\tmsg := fmt.Sprintf(\"Wrong query parameter 'query_type' = '%s'\", qTypeStr)\n+\t\tanswer = WriteError(msg, -2)\n+\t\tlog.Printf(\"[QID=%s] %s\\n\", rh.qid, msg)\n+\t\treturn answer\n+\t}\n+\tif handlerError != nil {\n+\t\terrMsg := \"Handler error: \" + handlerError.Error()\n+\t\tlog.Printf(\"[QID=%s] %s\\n\", rh.qid, errMsg)\n+\t\tanswer = WriteError(errMsg, -3)\n+\t}\n+\n+\treturn answer\n+}\n+\n+const QIDQueryParam = \"qid\"\n+\n+func PreprocessRequest(req *http.Request) (*Params, error) {\n+\tbody, err := ioutil.ReadAll(req.Body)\n+\tif err != nil {\n+\t\treturn nil, errors.Wrap(err, \"[ PreprocessRequest ] Can't read body. So strange\")\n+\t}\n+\tif len(body) == 0 {\n+\t\treturn nil, errors.New(\"[ PreprocessRequest ] Empty body\")\n+\t}\n+\n+\tvar params Params\n+\terr = json.Unmarshal(body, &params)\n+\tif err != nil {\n+\t\treturn nil, errors.Wrap(err, \"[ PreprocessRequest ] Can't parse input params\")\n+\t}\n+\n+\tif len(params.QID) == 0 {\n+\t\tparams.QID = GenQID()\n+\t}\n+\n+\tlog.Printf(\"[QID=%s] Query: %s\\n\", params.QID, string(body))\n+\n+\treturn &params, nil\n+}\n+\n+func WrapApiV1Handler(router core.MessageRouter) func(w http.ResponseWriter, r *http.Request) {\n+\treturn func(response http.ResponseWriter, req *http.Request) {\n+\t\tanswer := make(map[string]interface{})\n+\t\tvar params *Params\n+\t\tdefer func() {\n+\t\t\tif answer == nil {\n+\t\t\t\tanswer = make(map[string]interface{})\n+\t\t\t}\n+\t\t\tif params == nil {\n+\t\t\t\tparams = &Params{}\n+\t\t\t}\n+\t\t\tanswer[QIDQueryParam] = params.QID\n+\t\t\tserJson, err := json.MarshalIndent(answer, \"\", \"    \")\n+\t\t\tif err != nil {\n+\t\t\t\tserJson = handlerMarshalErrorJson\n+\t\t\t}\n+\t\t\tresponse.Header().Add(\"Content-Type\", \"application/json\")\n+\t\t\tvar newLine byte = '\\n'\n+\t\t\tresponse.Write(append(serJson, newLine))\n+\t\t\tlog.Printf(\"[QID=%s] Request completed\\n\", params.QID)\n+\t\t}()\n+\n+\t\tparams, err := PreprocessRequest(req)\n+\t\tif err != nil {\n+\t\t\tanswer = WriteError(\"Bad request\", -3)\n+\t\t\tlog.Println(\"[QID=]Can't parse input request:\", err, req.RequestURI)\n+\t\t\treturn\n+\t\t}\n+\t\trh := NewRequestHandler(params, router)\n+\n+\t\tanswer = ProcessQueryType(rh, params.QType)\n+\t}\n+}\n+\n+type ApiRunner struct {\n+\tmessageRouter core.MessageRouter\n+\tserver        *http.Server\n+\tcfg           *configuration.ApiRunner\n+}\n+\n+func NewApiRunner(cfg *configuration.ApiRunner) (*ApiRunner, error) {\n+\tif cfg == nil {\n+\t\treturn nil, errors.New(\"[ NewApiRunner ] config is nil\")\n+\t}\n+\tif cfg.Port == 0 {\n+\t\treturn nil, errors.New(\"[ NewApiRunner ] Port must not be 0\")\n+\t}\n+\tif len(cfg.Location) == 0 {\n+\t\treturn nil, errors.New(\"[ NewApiRunner ] Location must exist\")\n+\t}\n+\n+\tportStr := fmt.Sprint(cfg.Port)\n+\tar := ApiRunner{\n+\t\tserver: &http.Server{Addr: \":\" + portStr},\n+\t\tcfg:    cfg,\n+\t}\n+\n+\treturn &ar, nil\n+}\n+\n+func (ar *ApiRunner) Start(c core.Components) error {\n+\n+\t// TODO: init message router\n+\t_, ok := c[\"core.MessageRouter\"]\n+\tif !ok {\n+\t\tlog.Println(\"Working in demo mode: without MessageRouter\")\n+\t} else {\n+\t\tar.messageRouter = c[\"core.MessageRouter\"].(core.MessageRouter)\n+\t}\n+\n+\tfw := WrapApiV1Handler(ar.messageRouter)\n+\thttp.HandleFunc(ar.cfg.Location, fw)\n+\tlog.Println(\"Starting ApiRunner ...\")\n+\tlog.Println(\"Config: \", ar.cfg)\n+\tgo func() {\n+\t\tif err := ar.server.ListenAndServe(); err != nil {\n+\t\t\tlog.Printf(\"Httpserver: ListenAndServe() error: %s\\n\", err)\n+\t\t}\n+\t}()\n+\treturn nil\n+}\n+\n+func (ar *ApiRunner) Stop() error {\n+\tconst timeOut = 5\n+\tlog.Printf(\"Shutting down server gracefully ...(waiting for %d seconds)\\n\", timeOut)\n+\tctx, _ := context.WithTimeout(context.Background(), time.Duration(timeOut)*time.Second)\n+\terr := ar.server.Shutdown(ctx)\n+\tif err != nil {\n+\t\treturn errors.Wrap(err, \"Can't gracefully stop API server\")\n+\t}\n+\n+\treturn nil\n+}\n+\n+func main() {\n+\tcfg := configuration.NewApiRunner()\n+\tapi, err := NewApiRunner(&cfg)\n+\tif err != nil {\n+\t\tlog.Fatal(err)\n+\t}\n+\tcs := core.Components{}\n+\tapi.Start(cs)","path":"api/main.go","position":217,"original_position":217,"commit_id":"3081fbe812546ee2165515bfe86b70b3e82a4e7c","original_commit_id":"3081fbe812546ee2165515bfe86b70b3e82a4e7c","user":{"login":"golangcibot","id":42910462,"node_id":"MDQ6VXNlcjQyOTEwNDYy","avatar_url":"https://avatars1.githubusercontent.com/u/42910462?v=4","gravatar_id":"","url":"https://api.github.com/users/golangcibot","html_url":"https://github.com/golangcibot","followers_url":"https://api.github.com/users/golangcibot/followers","following_url":"https://api.github.com/users/golangcibot/following{/other_user}","gists_url":"https://api.github.com/users/golangcibot/gists{/gist_id}","starred_url":"https://api.github.com/users/golangcibot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/golangcibot/subscriptions","organizations_url":"https://api.github.com/users/golangcibot/orgs","repos_url":"https://api.github.com/users/golangcibot/repos","events_url":"https://api.github.com/users/golangcibot/events{/privacy}","received_events_url":"https://api.github.com/users/golangcibot/received_events","type":"User","site_admin":false},"body":"Error return value of `api.Start` is not checked","created_at":"2018-09-13T09:55:32Z","updated_at":"2018-09-13T09:55:35Z","html_url":"https://github.com/insolar/insolar/pull/196#discussion_r217326455","pull_request_url":"https://api.github.com/repos/insolar/insolar/pulls/196","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/insolar/insolar/pulls/comments/217326455"},"html":{"href":"https://github.com/insolar/insolar/pull/196#discussion_r217326455"},"pull_request":{"href":"https://api.github.com/repos/insolar/insolar/pulls/196"}}},"pull_request":{"url":"https://api.github.com/repos/insolar/insolar/pulls/196","id":215226584,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE1MjI2NTg0","html_url":"https://github.com/insolar/insolar/pull/196","diff_url":"https://github.com/insolar/insolar/pull/196.diff","patch_url":"https://github.com/insolar/insolar/pull/196.patch","issue_url":"https://api.github.com/repos/insolar/insolar/issues/196","number":196,"state":"open","locked":false,"title":"Ins 277 make swagger conf file for api description","user":{"login":"ivanshibitov","id":3951515,"node_id":"MDQ6VXNlcjM5NTE1MTU=","avatar_url":"https://avatars3.githubusercontent.com/u/3951515?v=4","gravatar_id":"","url":"https://api.github.com/users/ivanshibitov","html_url":"https://github.com/ivanshibitov","followers_url":"https://api.github.com/users/ivanshibitov/followers","following_url":"https://api.github.com/users/ivanshibitov/following{/other_user}","gists_url":"https://api.github.com/users/ivanshibitov/gists{/gist_id}","starred_url":"https://api.github.com/users/ivanshibitov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivanshibitov/subscriptions","organizations_url":"https://api.github.com/users/ivanshibitov/orgs","repos_url":"https://api.github.com/users/ivanshibitov/repos","events_url":"https://api.github.com/users/ivanshibitov/events{/privacy}","received_events_url":"https://api.github.com/users/ivanshibitov/received_events","type":"User","site_admin":false},"body":"\r\n**- What I did**\r\nAPI for our binary\r\n\r\n**- How to verify it**\r\nRun tests\r\n","created_at":"2018-09-13T09:54:58Z","updated_at":"2018-09-13T09:55:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cc142bcd2dd76446679a889efd344e05a282e0cd","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/insolar/insolar/pulls/196/commits","review_comments_url":"https://api.github.com/repos/insolar/insolar/pulls/196/comments","review_comment_url":"https://api.github.com/repos/insolar/insolar/pulls/comments{/number}","comments_url":"https://api.github.com/repos/insolar/insolar/issues/196/comments","statuses_url":"https://api.github.com/repos/insolar/insolar/statuses/3081fbe812546ee2165515bfe86b70b3e82a4e7c","head":{"label":"insolar:INS-277-Make-swagger-conf-file-for-API-description","ref":"INS-277-Make-swagger-conf-file-for-API-description","sha":"3081fbe812546ee2165515bfe86b70b3e82a4e7c","user":{"login":"insolar","id":31775388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzc1Mzg4","avatar_url":"https://avatars1.githubusercontent.com/u/31775388?v=4","gravatar_id":"","url":"https://api.github.com/users/insolar","html_url":"https://github.com/insolar","followers_url":"https://api.github.com/users/insolar/followers","following_url":"https://api.github.com/users/insolar/following{/other_user}","gists_url":"https://api.github.com/users/insolar/gists{/gist_id}","starred_url":"https://api.github.com/users/insolar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insolar/subscriptions","organizations_url":"https://api.github.com/users/insolar/orgs","repos_url":"https://api.github.com/users/insolar/repos","events_url":"https://api.github.com/users/insolar/events{/privacy}","received_events_url":"https://api.github.com/users/insolar/received_events","type":"Organization","site_admin":false},"repo":{"id":139829328,"node_id":"MDEwOlJlcG9zaXRvcnkxMzk4MjkzMjg=","name":"insolar","full_name":"insolar/insolar","owner":{"login":"insolar","id":31775388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzc1Mzg4","avatar_url":"https://avatars1.githubusercontent.com/u/31775388?v=4","gravatar_id":"","url":"https://api.github.com/users/insolar","html_url":"https://github.com/insolar","followers_url":"https://api.github.com/users/insolar/followers","following_url":"https://api.github.com/users/insolar/following{/other_user}","gists_url":"https://api.github.com/users/insolar/gists{/gist_id}","starred_url":"https://api.github.com/users/insolar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insolar/subscriptions","organizations_url":"https://api.github.com/users/insolar/orgs","repos_url":"https://api.github.com/users/insolar/repos","events_url":"https://api.github.com/users/insolar/events{/privacy}","received_events_url":"https://api.github.com/users/insolar/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/insolar/insolar","description":"Enterprise blockchain platform","fork":false,"url":"https://api.github.com/repos/insolar/insolar","forks_url":"https://api.github.com/repos/insolar/insolar/forks","keys_url":"https://api.github.com/repos/insolar/insolar/keys{/key_id}","collaborators_url":"https://api.github.com/repos/insolar/insolar/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/insolar/insolar/teams","hooks_url":"https://api.github.com/repos/insolar/insolar/hooks","issue_events_url":"https://api.github.com/repos/insolar/insolar/issues/events{/number}","events_url":"https://api.github.com/repos/insolar/insolar/events","assignees_url":"https://api.github.com/repos/insolar/insolar/assignees{/user}","branches_url":"https://api.github.com/repos/insolar/insolar/branches{/branch}","tags_url":"https://api.github.com/repos/insolar/insolar/tags","blobs_url":"https://api.github.com/repos/insolar/insolar/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/insolar/insolar/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/insolar/insolar/git/refs{/sha}","trees_url":"https://api.github.com/repos/insolar/insolar/git/trees{/sha}","statuses_url":"https://api.github.com/repos/insolar/insolar/statuses/{sha}","languages_url":"https://api.github.com/repos/insolar/insolar/languages","stargazers_url":"https://api.github.com/repos/insolar/insolar/stargazers","contributors_url":"https://api.github.com/repos/insolar/insolar/contributors","subscribers_url":"https://api.github.com/repos/insolar/insolar/subscribers","subscription_url":"https://api.github.com/repos/insolar/insolar/subscription","commits_url":"https://api.github.com/repos/insolar/insolar/commits{/sha}","git_commits_url":"https://api.github.com/repos/insolar/insolar/git/commits{/sha}","comments_url":"https://api.github.com/repos/insolar/insolar/comments{/number}","issue_comment_url":"https://api.github.com/repos/insolar/insolar/issues/comments{/number}","contents_url":"https://api.github.com/repos/insolar/insolar/contents/{+path}","compare_url":"https://api.github.com/repos/insolar/insolar/compare/{base}...{head}","merges_url":"https://api.github.com/repos/insolar/insolar/merges","archive_url":"https://api.github.com/repos/insolar/insolar/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/insolar/insolar/downloads","issues_url":"https://api.github.com/repos/insolar/insolar/issues{/number}","pulls_url":"https://api.github.com/repos/insolar/insolar/pulls{/number}","milestones_url":"https://api.github.com/repos/insolar/insolar/milestones{/number}","notifications_url":"https://api.github.com/repos/insolar/insolar/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/insolar/insolar/labels{/name}","releases_url":"https://api.github.com/repos/insolar/insolar/releases{/id}","deployments_url":"https://api.github.com/repos/insolar/insolar/deployments","created_at":"2018-07-05T09:49:28Z","updated_at":"2018-09-13T09:13:05Z","pushed_at":"2018-09-13T09:54:58Z","git_url":"git://github.com/insolar/insolar.git","ssh_url":"git@github.com:insolar/insolar.git","clone_url":"https://github.com/insolar/insolar.git","svn_url":"https://github.com/insolar/insolar","homepage":"","size":8301,"stargazers_count":38,"watchers_count":38,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":5,"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":5,"open_issues":5,"watchers":38,"default_branch":"master"}},"base":{"label":"insolar:master","ref":"master","sha":"37184c0667fb7b5d7ee3f1dbaeed84f1a44d21eb","user":{"login":"insolar","id":31775388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzc1Mzg4","avatar_url":"https://avatars1.githubusercontent.com/u/31775388?v=4","gravatar_id":"","url":"https://api.github.com/users/insolar","html_url":"https://github.com/insolar","followers_url":"https://api.github.com/users/insolar/followers","following_url":"https://api.github.com/users/insolar/following{/other_user}","gists_url":"https://api.github.com/users/insolar/gists{/gist_id}","starred_url":"https://api.github.com/users/insolar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insolar/subscriptions","organizations_url":"https://api.github.com/users/insolar/orgs","repos_url":"https://api.github.com/users/insolar/repos","events_url":"https://api.github.com/users/insolar/events{/privacy}","received_events_url":"https://api.github.com/users/insolar/received_events","type":"Organization","site_admin":false},"repo":{"id":139829328,"node_id":"MDEwOlJlcG9zaXRvcnkxMzk4MjkzMjg=","name":"insolar","full_name":"insolar/insolar","owner":{"login":"insolar","id":31775388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzc1Mzg4","avatar_url":"https://avatars1.githubusercontent.com/u/31775388?v=4","gravatar_id":"","url":"https://api.github.com/users/insolar","html_url":"https://github.com/insolar","followers_url":"https://api.github.com/users/insolar/followers","following_url":"https://api.github.com/users/insolar/following{/other_user}","gists_url":"https://api.github.com/users/insolar/gists{/gist_id}","starred_url":"https://api.github.com/users/insolar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insolar/subscriptions","organizations_url":"https://api.github.com/users/insolar/orgs","repos_url":"https://api.github.com/users/insolar/repos","events_url":"https://api.github.com/users/insolar/events{/privacy}","received_events_url":"https://api.github.com/users/insolar/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/insolar/insolar","description":"Enterprise blockchain platform","fork":false,"url":"https://api.github.com/repos/insolar/insolar","forks_url":"https://api.github.com/repos/insolar/insolar/forks","keys_url":"https://api.github.com/repos/insolar/insolar/keys{/key_id}","collaborators_url":"https://api.github.com/repos/insolar/insolar/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/insolar/insolar/teams","hooks_url":"https://api.github.com/repos/insolar/insolar/hooks","issue_events_url":"https://api.github.com/repos/insolar/insolar/issues/events{/number}","events_url":"https://api.github.com/repos/insolar/insolar/events","assignees_url":"https://api.github.com/repos/insolar/insolar/assignees{/user}","branches_url":"https://api.github.com/repos/insolar/insolar/branches{/branch}","tags_url":"https://api.github.com/repos/insolar/insolar/tags","blobs_url":"https://api.github.com/repos/insolar/insolar/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/insolar/insolar/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/insolar/insolar/git/refs{/sha}","trees_url":"https://api.github.com/repos/insolar/insolar/git/trees{/sha}","statuses_url":"https://api.github.com/repos/insolar/insolar/statuses/{sha}","languages_url":"https://api.github.com/repos/insolar/insolar/languages","stargazers_url":"https://api.github.com/repos/insolar/insolar/stargazers","contributors_url":"https://api.github.com/repos/insolar/insolar/contributors","subscribers_url":"https://api.github.com/repos/insolar/insolar/subscribers","subscription_url":"https://api.github.com/repos/insolar/insolar/subscription","commits_url":"https://api.github.com/repos/insolar/insolar/commits{/sha}","git_commits_url":"https://api.github.com/repos/insolar/insolar/git/commits{/sha}","comments_url":"https://api.github.com/repos/insolar/insolar/comments{/number}","issue_comment_url":"https://api.github.com/repos/insolar/insolar/issues/comments{/number}","contents_url":"https://api.github.com/repos/insolar/insolar/contents/{+path}","compare_url":"https://api.github.com/repos/insolar/insolar/compare/{base}...{head}","merges_url":"https://api.github.com/repos/insolar/insolar/merges","archive_url":"https://api.github.com/repos/insolar/insolar/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/insolar/insolar/downloads","issues_url":"https://api.github.com/repos/insolar/insolar/issues{/number}","pulls_url":"https://api.github.com/repos/insolar/insolar/pulls{/number}","milestones_url":"https://api.github.com/repos/insolar/insolar/milestones{/number}","notifications_url":"https://api.github.com/repos/insolar/insolar/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/insolar/insolar/labels{/name}","releases_url":"https://api.github.com/repos/insolar/insolar/releases{/id}","deployments_url":"https://api.github.com/repos/insolar/insolar/deployments","created_at":"2018-07-05T09:49:28Z","updated_at":"2018-09-13T09:13:05Z","pushed_at":"2018-09-13T09:54:58Z","git_url":"git://github.com/insolar/insolar.git","ssh_url":"git@github.com:insolar/insolar.git","clone_url":"https://github.com/insolar/insolar.git","svn_url":"https://github.com/insolar/insolar","homepage":"","size":8301,"stargazers_count":38,"watchers_count":38,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":5,"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":5,"open_issues":5,"watchers":38,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/insolar/insolar/pulls/196"},"html":{"href":"https://github.com/insolar/insolar/pull/196"},"issue":{"href":"https://api.github.com/repos/insolar/insolar/issues/196"},"comments":{"href":"https://api.github.com/repos/insolar/insolar/issues/196/comments"},"review_comments":{"href":"https://api.github.com/repos/insolar/insolar/pulls/196/comments"},"review_comment":{"href":"https://api.github.com/repos/insolar/insolar/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/insolar/insolar/pulls/196/commits"},"statuses":{"href":"https://api.github.com/repos/insolar/insolar/statuses/3081fbe812546ee2165515bfe86b70b3e82a4e7c"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"golangcibot"}}