{"action":"created","comment":{"url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/comments/78184591","id":78184591,"diff_hunk":"@@ -111,142 +51,140 @@ func GetAnalysisTasks(tasks chan<- Task, basepath string, projects []string, res\n \n \t// project specific analysis in here.\n \tfor _, p := range projects {\n-\t\tJSONResourceFactory := getDumpedJSONResourceFactory(filepath.Join(basepath, \"projects\", p))\n-\t\ttasks <- CheckProjectTask(p, results, JSONResourceFactory)\n+\t\ttasks <- CheckProjectTask(basepath, p, results)\n \t}\n }\n \n-// CheckProjectTask is a task factory for tasks that diagnose system conditions.\n-func CheckProjectTask(project string, results chan<- CheckResults, JSONResourceFactory DumpedJSONResourceFactory) Task {\n-\treturn checkProjectTask(func() []CheckTask {\n-\t\treturn []CheckTask{CheckEventLogForErrors, CheckDeployConfigsReplicasNotZero, CheckForWaitingPods}\n-\t}, JSONResourceFactory, project, results)\n-}\n-\n-// A getProjectCheckFactory generates tasks to diagnose system conditions.\n-type getProjectCheckFactory func() []CheckTask\n-\n-// CheckResults Stores the result of a check in a scope which can a specfic\n-// project or platform-wide.\n-type CheckResults struct {\n-\tScope   string `json:\"scope\"`\n-\tName    string `json:\"name,omitempty\"`\n-\tResults []Result\n-}\n-\n-// checkTasks executes all the CheckTasks returned from the supplied\n-// checkFactory against the specified project. The results of the checks are\n-// combined into a single JSON object and returned.\n-func checkProjectTask(checkFactory getProjectCheckFactory, JSONResourceFactory DumpedJSONResourceFactory, project string, results chan<- CheckResults) Task {\n+// CheckProjectTask returns a task that diagnoses problems in the project scope.\n+func CheckProjectTask(basepath, project string, results chan<- CheckResults) Task {\n \treturn func() error {\n-\t\tresult := CheckResults{Scope: \"project\", Name: project, Results: []Result{}}\n-\t\tchecks := checkFactory()\n-\n-\t\tvar errors errorList\n-\t\tfor _, check := range checks {\n-\t\t\tres, err := check(JSONResourceFactory)\n-\t\t\tif err != nil {\n-\t\t\t\terrors = append(errors, err)\n-\t\t\t}\n-\t\t\tresult.Results = append(result.Results, res)\n+\t\tresult := CheckResults{\n+\t\t\tProject: project,\n+\t\t}\n \n+\t\tvar (\n+\t\t\tevents            types.EventList\n+\t\t\tdeploymentConfigs types.DeploymentConfigList\n+\t\t\tpods              types.PodList\n+\t\t)\n+\n+\t\tdefinition := definitionLoader{basepath: basepath, project: project}\n+\n+\t\tdefinition.Load(\"events\", &events)\n+\t\tdefinition.Load(\"deploymentconfigs\", &deploymentConfigs)\n+\t\tdefinition.Load(\"pods\", &pods)\n+\n+\t\tif err := definition.Err(); err != nil {\n+\t\t\t// REVIEW: do we want / is there a clean way to have\n+\t\t\t// analysisErrorReadingDumpedResource status in the\n+\t\t\t// output? Alternatively, returning an error will get it\n+\t\t\t// into dump.log and stdout.\n+\t\t\t// result.Status = analysisErrorReadingDumpedResource\n+\t\t\t// result.StatusMessage = fmt.Sprintf(\"Error executing task: %v\", err)\n+\t\t\treturn err\n \t\t}\n \n-\t\tresults <- result\n+\t\tresult.Results = append(result.Results,\n+\t\t\tCheckEventLogForErrors(events),\n+\t\t\tCheckDeployConfigsReplicasNotZero(deploymentConfigs),\n+\t\t\tCheckForWaitingPods(pods),\n+\t\t)\n \n-\t\tif len(errors) > 0 {\n-\t\t\treturn errors\n-\t\t}\n+\t\tresults <- result\n \t\treturn nil\n \t}\n }\n \n-// DumpedJSONResourceFactory takes a string containing the path to a\n-// JSON file which will be parsed and loaded into the supplied interface.\n-type DumpedJSONResourceFactory func(string, interface{}) error\n-\n-// getDumpedJSONResourceFactory returns a factory which will load resource from\n-// a given basepath. The factory parses the file contents as JSON and loads it\n-// into the provided dest interface.\n-func getDumpedJSONResourceFactory(basepath string) DumpedJSONResourceFactory {\n-\treturn func(path string, dest interface{}) error {\n-\t\tcontents, err := ioutil.ReadFile(filepath.Join(basepath, path))\n-\t\tif err != nil {\n-\t\t\treturn err\n-\t\t}\n-\t\treturn json.Unmarshal(contents, dest)\n+// definitionLoader loads JSON resource definitions.\n+type definitionLoader struct {\n+\tbasepath, project string\n+\terr               error\n+}\n+\n+func (l *definitionLoader) Load(kind string, v interface{}) {\n+\tif l.err != nil {\n+\t\treturn\n \t}\n+\tpath := filepath.Join(l.basepath, \"projects\", l.project, \"definitions\", kind+\".json\")\n+\tl.err = load(path, &v)\n }\n \n-// CheckForWaitingPods checks all pods for any containers in waiting status.\n-func CheckForWaitingPods(JSONResourceFactory DumpedJSONResourceFactory) (Result, error) {\n-\tresult := Result{Status: analysisErrorNotDiscovered, StatusMessage: \"this issue was not detected\", CheckName: \"check pods for 'waiting' containers\", Info: []Info{}, Events: []Event{}}\n-\tpods := Pods{}\n-\tif err := JSONResourceFactory(filepath.Join(\"definitions\", \"pods.json\"), &pods); err != nil {\n-\t\tresult.Status = analysisErrorReadingDumpedResource\n-\t\tresult.StatusMessage = \"Error executing task: \" + err.Error()\n-\t\treturn result, err\n+func (l *definitionLoader) Err() error {\n+\treturn l.err\n+}\n+\n+// load loads JSON resource from a given path into dest.\n+func load(path string, dest interface{}) error {\n+\tcontents, err := ioutil.ReadFile(path)\n+\tif err != nil {\n+\t\treturn err\n \t}\n+\treturn json.Unmarshal(contents, dest)\n+}\n \n+// CheckForWaitingPods checks all pods for any containers in waiting status.\n+func CheckForWaitingPods(pods types.PodList) Result {\n+\tresult := Result{\n+\t\tCheckName:     \"check pods for 'waiting' containers\",\n+\t\tStatus:        analysisErrorNotDiscovered,\n+\t\tStatusMessage: \"this issue was not detected\",\n+\t}\n \tfor _, pod := range pods.Items {\n \t\tfor _, container := range pod.Status.ContainerStatuses {\n \t\t\tif container.State.Waiting != nil {\n \t\t\t\tresult.Status = analysisErrorDiscoveredByAnalysis\n \t\t\t\tresult.StatusMessage = \"Waiting containers have been detected\"\n-\t\t\t\tmsg := \"container \" + container.Name + \" in pod \" + pod.Metadata.Name + \" is in waiting state\"\n-\t\t\t\tinfo := Info{Name: container.Name, Count: 1, Namespace: pod.Metadata.Namespace, Kind: \"container\", Message: msg}\n-\t\t\t\tresult.Info = append(result.Info, info)\n+\t\t\t\tresult.Info = append(result.Info, Info{\n+\t\t\t\t\tName:      container.Name,\n+\t\t\t\t\tNamespace: pod.ObjectMeta.Namespace,\n+\t\t\t\t\tKind:      \"container\", // REVIEW: why is this hard coded here while taken from data in other places?!\n+\t\t\t\t\tMessage:   fmt.Sprintf(\"container %s in pod %s is in waiting state\", container.Name, pod.ObjectMeta.Name),\n+\t\t\t\t})\n \t\t\t}\n \t\t}\n \t}\n-\n-\treturn result, nil\n+\treturn result\n }\n \n // CheckEventLogForErrors checks all events in the supplied project and if any\n // are not type 'Normal' (i.e. Warning or Error), it will add them to the\n // returned results.\n-func CheckEventLogForErrors(JSONResourceFactory DumpedJSONResourceFactory) (Result, error) {\n-\tresult := Result{Status: analysisErrorNotDiscovered, StatusMessage: \"this issue was not detected\", CheckName: \"check eventlog for any errors\", Info: []Info{}, Events: []Event{}}\n-\tevents := Events{}\n-\tif err := JSONResourceFactory(filepath.Join(\"definitions\", \"events.json\"), &events); err != nil {\n-\t\tresult.Status = analysisErrorReadingDumpedResource\n-\t\tresult.StatusMessage = \"Error executing task: \" + err.Error()\n-\t\treturn result, err\n+func CheckEventLogForErrors(events types.EventList) Result {\n+\tresult := Result{\n+\t\tCheckName:     \"check eventlog for any errors\",\n+\t\tStatus:        analysisErrorNotDiscovered,\n+\t\tStatusMessage: \"this issue was not detected\",\n \t}\n-\n \tfor _, event := range events.Items {\n \t\tif event.Type != \"Normal\" {\n \t\t\tresult.Status = analysisErrorDiscoveredByAnalysis\n \t\t\tresult.StatusMessage = \"Errors detected in event log\"\n \t\t\tresult.Events = append(result.Events, event)\n \t\t}\n \t}\n-\n-\treturn result, nil\n+\treturn result\n }\n \n // CheckDeployConfigsReplicasNotZero checks all deployment configs in the\n // supplied JSON Resource Factory, and if any are found with a replica of 0, it\n // will add a note about it to the returned result.\n-func CheckDeployConfigsReplicasNotZero(ResourceFactory DumpedJSONResourceFactory) (Result, error) {\n-\tresult := Result{Status: analysisErrorNotDiscovered, StatusMessage: \"this issue was not detected\", CheckName: \"check deployconfig replicas not 0\", Info: []Info{}, Events: []Event{}}\n-\tdeploymentConfigs := DeploymentConfigs{}\n-\terr := ResourceFactory(filepath.Join(\"definitions\", \"deploymentconfigs.json\"), &deploymentConfigs)\n-\tif err != nil {\n-\t\tresult.Status = analysisErrorReadingDumpedResource\n-\t\tresult.StatusMessage = \"Error executing task: \" + err.Error()\n-\t\treturn result, err\n+func CheckDeployConfigsReplicasNotZero(deploymentConfigs types.DeploymentConfigList) Result {\n+\tresult := Result{\n+\t\tCheckName:     \"check deployconfig replicas not 0\",\n+\t\tStatus:        analysisErrorNotDiscovered,\n+\t\tStatusMessage: \"this issue was not detected\",\n \t}\n-\n \tfor _, deploymentConfig := range deploymentConfigs.Items {\n \t\tif deploymentConfig.Spec.Replicas == 0 {\n-\t\t\tinfo := Info{Name: deploymentConfig.Metadata.Name, Namespace: deploymentConfig.Metadata.Namespace, Kind: deploymentConfig.Kind, Count: 1, Message: \"the replica parameter is set to 0, this should be greater than 0\"}\n \t\t\tresult.Status = analysisErrorDiscoveredByAnalysis\n \t\t\tresult.StatusMessage = \"one or more deployConfig replicas are set to 0\"\n-\t\t\tresult.Info = append(result.Info, info)\n+\t\t\tresult.Info = append(result.Info, Info{\n+\t\t\t\tName:      deploymentConfig.ObjectMeta.Name,\n+\t\t\t\tNamespace: deploymentConfig.ObjectMeta.Namespace,\n+\t\t\t\tKind:      deploymentConfig.Kind, // REVIEW: this gets mixed information -- DeploymentConfig, Event, ..., what's the purpose?","path":"analysis.go","position":null,"original_position":332,"commit_id":"3fabb3ab4d25b1577d9a96ffc4cecaaf025740f8","original_commit_id":"9bbde701ff7f5095cb0cec42a048d2b81a5733d2","user":{"login":"rhcarvalho","id":88819,"avatar_url":"https://avatars.githubusercontent.com/u/88819?v=3","gravatar_id":"","url":"https://api.github.com/users/rhcarvalho","html_url":"https://github.com/rhcarvalho","followers_url":"https://api.github.com/users/rhcarvalho/followers","following_url":"https://api.github.com/users/rhcarvalho/following{/other_user}","gists_url":"https://api.github.com/users/rhcarvalho/gists{/gist_id}","starred_url":"https://api.github.com/users/rhcarvalho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhcarvalho/subscriptions","organizations_url":"https://api.github.com/users/rhcarvalho/orgs","repos_url":"https://api.github.com/users/rhcarvalho/repos","events_url":"https://api.github.com/users/rhcarvalho/events{/privacy}","received_events_url":"https://api.github.com/users/rhcarvalho/received_events","type":"User","site_admin":false},"body":"Okay, thanks. I've removed it as well.","created_at":"2016-09-09T14:01:14Z","updated_at":"2016-09-09T14:01:14Z","html_url":"https://github.com/feedhenry/fh-system-dump-tool/pull/49#discussion_r78184591","pull_request_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49","_links":{"self":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/comments/78184591"},"html":{"href":"https://github.com/feedhenry/fh-system-dump-tool/pull/49#discussion_r78184591"},"pull_request":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49"}}},"pull_request":{"url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49","id":84616205,"html_url":"https://github.com/feedhenry/fh-system-dump-tool/pull/49","diff_url":"https://github.com/feedhenry/fh-system-dump-tool/pull/49.diff","patch_url":"https://github.com/feedhenry/fh-system-dump-tool/pull/49.patch","issue_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/issues/49","number":49,"state":"open","locked":false,"title":"Refactor analysis","user":{"login":"rhcarvalho","id":88819,"avatar_url":"https://avatars.githubusercontent.com/u/88819?v=3","gravatar_id":"","url":"https://api.github.com/users/rhcarvalho","html_url":"https://github.com/rhcarvalho","followers_url":"https://api.github.com/users/rhcarvalho/followers","following_url":"https://api.github.com/users/rhcarvalho/following{/other_user}","gists_url":"https://api.github.com/users/rhcarvalho/gists{/gist_id}","starred_url":"https://api.github.com/users/rhcarvalho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhcarvalho/subscriptions","organizations_url":"https://api.github.com/users/rhcarvalho/orgs","repos_url":"https://api.github.com/users/rhcarvalho/repos","events_url":"https://api.github.com/users/rhcarvalho/events{/privacy}","received_events_url":"https://api.github.com/users/rhcarvalho/received_events","type":"User","site_admin":false},"body":"This is an attempt to simplify the code for analysis tasks, and have a single interpretation for a \"task\", so that we could reuse the \"task runner\" and have a common way to (in the near future) filter out errors that we want to log in the dump.log file, but not show to the user in stdout.","created_at":"2016-09-09T09:00:18Z","updated_at":"2016-09-09T14:01:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"97c2c6d6be57a6c44f2e8a1508bf30bcb8a004e4","assignee":{"login":"philbrookes","id":1033452,"avatar_url":"https://avatars.githubusercontent.com/u/1033452?v=3","gravatar_id":"","url":"https://api.github.com/users/philbrookes","html_url":"https://github.com/philbrookes","followers_url":"https://api.github.com/users/philbrookes/followers","following_url":"https://api.github.com/users/philbrookes/following{/other_user}","gists_url":"https://api.github.com/users/philbrookes/gists{/gist_id}","starred_url":"https://api.github.com/users/philbrookes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philbrookes/subscriptions","organizations_url":"https://api.github.com/users/philbrookes/orgs","repos_url":"https://api.github.com/users/philbrookes/repos","events_url":"https://api.github.com/users/philbrookes/events{/privacy}","received_events_url":"https://api.github.com/users/philbrookes/received_events","type":"User","site_admin":false},"assignees":[{"login":"philbrookes","id":1033452,"avatar_url":"https://avatars.githubusercontent.com/u/1033452?v=3","gravatar_id":"","url":"https://api.github.com/users/philbrookes","html_url":"https://github.com/philbrookes","followers_url":"https://api.github.com/users/philbrookes/followers","following_url":"https://api.github.com/users/philbrookes/following{/other_user}","gists_url":"https://api.github.com/users/philbrookes/gists{/gist_id}","starred_url":"https://api.github.com/users/philbrookes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philbrookes/subscriptions","organizations_url":"https://api.github.com/users/philbrookes/orgs","repos_url":"https://api.github.com/users/philbrookes/repos","events_url":"https://api.github.com/users/philbrookes/events{/privacy}","received_events_url":"https://api.github.com/users/philbrookes/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49/commits","review_comments_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49/comments","review_comment_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/comments{/number}","comments_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/issues/49/comments","statuses_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/statuses/3fabb3ab4d25b1577d9a96ffc4cecaaf025740f8","head":{"label":"rhcarvalho:refactor-analysis","ref":"refactor-analysis","sha":"3fabb3ab4d25b1577d9a96ffc4cecaaf025740f8","user":{"login":"rhcarvalho","id":88819,"avatar_url":"https://avatars.githubusercontent.com/u/88819?v=3","gravatar_id":"","url":"https://api.github.com/users/rhcarvalho","html_url":"https://github.com/rhcarvalho","followers_url":"https://api.github.com/users/rhcarvalho/followers","following_url":"https://api.github.com/users/rhcarvalho/following{/other_user}","gists_url":"https://api.github.com/users/rhcarvalho/gists{/gist_id}","starred_url":"https://api.github.com/users/rhcarvalho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhcarvalho/subscriptions","organizations_url":"https://api.github.com/users/rhcarvalho/orgs","repos_url":"https://api.github.com/users/rhcarvalho/repos","events_url":"https://api.github.com/users/rhcarvalho/events{/privacy}","received_events_url":"https://api.github.com/users/rhcarvalho/received_events","type":"User","site_admin":false},"repo":{"id":65453502,"name":"fh-system-dump-tool","full_name":"rhcarvalho/fh-system-dump-tool","owner":{"login":"rhcarvalho","id":88819,"avatar_url":"https://avatars.githubusercontent.com/u/88819?v=3","gravatar_id":"","url":"https://api.github.com/users/rhcarvalho","html_url":"https://github.com/rhcarvalho","followers_url":"https://api.github.com/users/rhcarvalho/followers","following_url":"https://api.github.com/users/rhcarvalho/following{/other_user}","gists_url":"https://api.github.com/users/rhcarvalho/gists{/gist_id}","starred_url":"https://api.github.com/users/rhcarvalho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhcarvalho/subscriptions","organizations_url":"https://api.github.com/users/rhcarvalho/orgs","repos_url":"https://api.github.com/users/rhcarvalho/repos","events_url":"https://api.github.com/users/rhcarvalho/events{/privacy}","received_events_url":"https://api.github.com/users/rhcarvalho/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rhcarvalho/fh-system-dump-tool","description":"This repository contains the system dump tool for the RHMAP On-Prem product","fork":true,"url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool","forks_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/forks","keys_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/teams","hooks_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/hooks","issue_events_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/issues/events{/number}","events_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/events","assignees_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/assignees{/user}","branches_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/branches{/branch}","tags_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/tags","blobs_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/git/refs{/sha}","trees_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/statuses/{sha}","languages_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/languages","stargazers_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/stargazers","contributors_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/contributors","subscribers_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/subscribers","subscription_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/subscription","commits_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/commits{/sha}","git_commits_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/git/commits{/sha}","comments_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/comments{/number}","issue_comment_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/issues/comments{/number}","contents_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/contents/{+path}","compare_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/merges","archive_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/downloads","issues_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/issues{/number}","pulls_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/pulls{/number}","milestones_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/milestones{/number}","notifications_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/labels{/name}","releases_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/releases{/id}","deployments_url":"https://api.github.com/repos/rhcarvalho/fh-system-dump-tool/deployments","created_at":"2016-08-11T08:42:33Z","updated_at":"2016-08-11T08:42:34Z","pushed_at":"2016-09-09T14:00:27Z","git_url":"git://github.com/rhcarvalho/fh-system-dump-tool.git","ssh_url":"git@github.com:rhcarvalho/fh-system-dump-tool.git","clone_url":"https://github.com/rhcarvalho/fh-system-dump-tool.git","svn_url":"https://github.com/rhcarvalho/fh-system-dump-tool","homepage":null,"size":128,"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":"feedhenry:master","ref":"master","sha":"c6f4cc6834f602d8b3ea4e3790c64ecd5324b3d5","user":{"login":"feedhenry","id":772226,"avatar_url":"https://avatars.githubusercontent.com/u/772226?v=3","gravatar_id":"","url":"https://api.github.com/users/feedhenry","html_url":"https://github.com/feedhenry","followers_url":"https://api.github.com/users/feedhenry/followers","following_url":"https://api.github.com/users/feedhenry/following{/other_user}","gists_url":"https://api.github.com/users/feedhenry/gists{/gist_id}","starred_url":"https://api.github.com/users/feedhenry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/feedhenry/subscriptions","organizations_url":"https://api.github.com/users/feedhenry/orgs","repos_url":"https://api.github.com/users/feedhenry/repos","events_url":"https://api.github.com/users/feedhenry/events{/privacy}","received_events_url":"https://api.github.com/users/feedhenry/received_events","type":"Organization","site_admin":false},"repo":{"id":63058395,"name":"fh-system-dump-tool","full_name":"feedhenry/fh-system-dump-tool","owner":{"login":"feedhenry","id":772226,"avatar_url":"https://avatars.githubusercontent.com/u/772226?v=3","gravatar_id":"","url":"https://api.github.com/users/feedhenry","html_url":"https://github.com/feedhenry","followers_url":"https://api.github.com/users/feedhenry/followers","following_url":"https://api.github.com/users/feedhenry/following{/other_user}","gists_url":"https://api.github.com/users/feedhenry/gists{/gist_id}","starred_url":"https://api.github.com/users/feedhenry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/feedhenry/subscriptions","organizations_url":"https://api.github.com/users/feedhenry/orgs","repos_url":"https://api.github.com/users/feedhenry/repos","events_url":"https://api.github.com/users/feedhenry/events{/privacy}","received_events_url":"https://api.github.com/users/feedhenry/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/feedhenry/fh-system-dump-tool","description":"This repository contains the system dump tool for the RHMAP On-Prem product","fork":false,"url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool","forks_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/forks","keys_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/keys{/key_id}","collaborators_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/teams","hooks_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/hooks","issue_events_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/issues/events{/number}","events_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/events","assignees_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/assignees{/user}","branches_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/branches{/branch}","tags_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/tags","blobs_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/git/refs{/sha}","trees_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/git/trees{/sha}","statuses_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/statuses/{sha}","languages_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/languages","stargazers_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/stargazers","contributors_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/contributors","subscribers_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/subscribers","subscription_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/subscription","commits_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/commits{/sha}","git_commits_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/git/commits{/sha}","comments_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/comments{/number}","issue_comment_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/issues/comments{/number}","contents_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/contents/{+path}","compare_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/compare/{base}...{head}","merges_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/merges","archive_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/downloads","issues_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/issues{/number}","pulls_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls{/number}","milestones_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/milestones{/number}","notifications_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/labels{/name}","releases_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/releases{/id}","deployments_url":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/deployments","created_at":"2016-07-11T10:20:52Z","updated_at":"2016-08-08T14:28:41Z","pushed_at":"2016-09-09T14:00:27Z","git_url":"git://github.com/feedhenry/fh-system-dump-tool.git","ssh_url":"git@github.com:feedhenry/fh-system-dump-tool.git","clone_url":"https://github.com/feedhenry/fh-system-dump-tool.git","svn_url":"https://github.com/feedhenry/fh-system-dump-tool","homepage":null,"size":153,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":2,"forks":4,"open_issues":2,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49"},"html":{"href":"https://github.com/feedhenry/fh-system-dump-tool/pull/49"},"issue":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/issues/49"},"comments":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/issues/49/comments"},"review_comments":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49/comments"},"review_comment":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/pulls/49/commits"},"statuses":{"href":"https://api.github.com/repos/feedhenry/fh-system-dump-tool/statuses/3fabb3ab4d25b1577d9a96ffc4cecaaf025740f8"}}}}
{"actor":{"display_login":"rhcarvalho"}}