{"action":"created","comment":{"url":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/comments/170383488","pull_request_review_id":99071283,"id":170383488,"diff_hunk":"@@ -0,0 +1,119 @@\n+module Transformation\n+  module StateMachines\n+    module VMTransformation\n+      class UpdateStatus\n+        def initialize(handle = $evm)\n+          @handle = handle\n+        end\n+\n+        # This method gets the current state, even in the context of nested\n+        # state machines. Where running a nested state machines, there can be\n+        # more than one active states: one per level of nesting. The real\n+        # active state is the one with the deepest ancestry.\n+        def current_state(states)\n+          active_states = states.select { |_, v| v['status'] == 'active' }.keys\n+          states_depth = active_states.map { |state| state.split('/').length }\n+          active_states[states_depth.index(states_depth.max)]\n+        end\n+\n+        # This method recusrively collects the progress of children states\n+        # and weight them, to finally weight the result with the current state\n+        # weight.\n+        def reconcile_children_percent(path, states)\n+          children = states.reject { |k, _| k.gsub(/^#{path}\\//, '').include?('/') }\n+          if children.empty?\n+            percent = states[path]['percent'].to_f * states[path]['weight'].to_f / 100.to_f\n+          else\n+            percent = 0\n+            children.each_key { |child| percent += reconcile_children_percent(child, states).to_f * children[child]['weight'].to_f / 100.to_f }\n+          end\n+        end\n+\n+        def main\n+          task = @handle.root['service_template_transformation_plan_task']\n+          unless task.nil?\n+            # Initiate the task progress hash if it doesn't exist yet\n+            progress = task.get_option(:progress) || { 'current_state' => '', 'current_description' => '', 'percent' => 0, 'states' => {} }\n+\n+            # Collect the state details\n+            state_name = @handle.root['ae_state']\n+            state_ancestry = @handle.object['state_ancestry'].to_s\n+            state_description = @handle.inputs['state_description'] == '_' ? state_name : @handle.inputs['state_description']\n+            state_weight = @handle.inputs['state_weight']\n+\n+            # Get the current state hash if it already exists\n+            state_hash = progress['states'][\"#{state_ancestry}/#{state_name}\"]\n+\n+            # Get the state progress data provided by the state method\n+            state_progress = @handle.get_state_var('ae_state_progress')\n+            \n+            # Aggregate the state progress in the state hash based on state\n+            # phase (entry, exit, error). This updates the details with live\n+            # data from the method, and also sets sane defaults.\n+            case @handle.root['ae_status_state']\n+            when 'on_entry'\n+              # Initiate the state hash if it doesn't exist yet\n+              state_hash ||= { 'status' => 'active', 'weight' => state_weight, 'description' => state_description, 'message' => state_description }\n+              # Add the start date and set percentage to 0 if entering the\n+              # state for the first time (retries count == 0)\n+              if @handle.root['ae_state_retries'].to_i.zero?\n+                state_hash['started_on'] = Time.now.utc\n+                state_hash['percent'] = 0\n+              end\n+            when 'on_exit'\n+              # If the state is retrying, we leave the status to 'active' and\n+              # update the percentage. If the method provides progress info,\n+              # it is merged, otherwise we set it based on current retry and\n+              # max retries. We also merge the potential message from method.\n+              if @handle.root['ae_result'] == 'retry'\n+                if state_progress.nil?\n+                  state_hash['message'] = \"#{state_name} is not finished yet, retrying in #{@handle.root['ae_retry_interval']} seconds.\"\n+                  state_hash['percent'] = @handle.root['ae_state_retries'].to_f / @handle.root['ae_max_retries'].to_f * 100.to_f\n+                else\n+                  state_hash.merge!(state_progress)\n+                end\n+              # If we don't retry, it means that the state is finished, so we\n+              # set percentage to 100 and status to 'finished'. We also merge\n+              # the potential message from method.\n+              else\n+                state_hash['status'] = 'finished'\n+                state_hash['percent'] = 100\n+                state_hash['message'] = state_progress.nil? ? \"#{state_name} is finished, moving on.\" : state_progress['message']\n+              end\n+              # Then, we set the update time to now, which is also finish time\n+              # when the state is finished.\n+              state_hash['updated_on'] = Time.now.utc","path":"content/automate/ManageIQ/Transformation/StateMachines/VMTransformation.class/__methods__/update_status.rb","position":85,"original_position":85,"commit_id":"85a737dee947ab21edf86f77a251f81ad890bda0","original_commit_id":"85a737dee947ab21edf86f77a251f81ad890bda0","user":{"login":"bzwei","id":7047579,"avatar_url":"https://avatars3.githubusercontent.com/u/7047579?v=4","gravatar_id":"","url":"https://api.github.com/users/bzwei","html_url":"https://github.com/bzwei","followers_url":"https://api.github.com/users/bzwei/followers","following_url":"https://api.github.com/users/bzwei/following{/other_user}","gists_url":"https://api.github.com/users/bzwei/gists{/gist_id}","starred_url":"https://api.github.com/users/bzwei/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bzwei/subscriptions","organizations_url":"https://api.github.com/users/bzwei/orgs","repos_url":"https://api.github.com/users/bzwei/repos","events_url":"https://api.github.com/users/bzwei/events{/privacy}","received_events_url":"https://api.github.com/users/bzwei/received_events","type":"User","site_admin":false},"body":"The task itself has `updated_on` column. Should not need this one.","created_at":"2018-02-23T22:24:04Z","updated_at":"2018-02-23T22:24:04Z","html_url":"https://github.com/ManageIQ/manageiq-content/pull/252#discussion_r170383488","pull_request_url":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/comments/170383488"},"html":{"href":"https://github.com/ManageIQ/manageiq-content/pull/252#discussion_r170383488"},"pull_request":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252"}}},"pull_request":{"url":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252","id":170857845,"html_url":"https://github.com/ManageIQ/manageiq-content/pull/252","diff_url":"https://github.com/ManageIQ/manageiq-content/pull/252.diff","patch_url":"https://github.com/ManageIQ/manageiq-content/pull/252.patch","issue_url":"https://api.github.com/repos/ManageIQ/manageiq-content/issues/252","number":252,"state":"open","locked":false,"title":"[WIP] Add VM Transformation state machine","user":{"login":"fdupont-redhat","id":25821288,"avatar_url":"https://avatars0.githubusercontent.com/u/25821288?v=4","gravatar_id":"","url":"https://api.github.com/users/fdupont-redhat","html_url":"https://github.com/fdupont-redhat","followers_url":"https://api.github.com/users/fdupont-redhat/followers","following_url":"https://api.github.com/users/fdupont-redhat/following{/other_user}","gists_url":"https://api.github.com/users/fdupont-redhat/gists{/gist_id}","starred_url":"https://api.github.com/users/fdupont-redhat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fdupont-redhat/subscriptions","organizations_url":"https://api.github.com/users/fdupont-redhat/orgs","repos_url":"https://api.github.com/users/fdupont-redhat/repos","events_url":"https://api.github.com/users/fdupont-redhat/events{/privacy}","received_events_url":"https://api.github.com/users/fdupont-redhat/received_events","type":"User","site_admin":false},"body":"This state machine describes the states to transform a virtual machine. It uses nested state machines to easily change the behavior based on source and destination EMS, as well as transformation method.\r\n\r\nThe `update_status.rb` method also add tracking information, such as start and update times, and percentage of progress. The percentage is either provided by the method itself, or defaults to the number of retries on the max retries of the state.\r\n\r\nIt also take into account the nesting by creating an artificial ancestry. The ancestry requires the state machine designer to add the following argument to the URI: `?state_ancestry=${#state_ancestry}/${#ae_state}\"`.","created_at":"2018-02-22T20:30:46Z","updated_at":"2018-02-23T22:24:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"39ec69d2741184ba85e2098cbaf3a7765de810a4","assignee":{"login":"gmcculloug","id":2591569,"avatar_url":"https://avatars0.githubusercontent.com/u/2591569?v=4","gravatar_id":"","url":"https://api.github.com/users/gmcculloug","html_url":"https://github.com/gmcculloug","followers_url":"https://api.github.com/users/gmcculloug/followers","following_url":"https://api.github.com/users/gmcculloug/following{/other_user}","gists_url":"https://api.github.com/users/gmcculloug/gists{/gist_id}","starred_url":"https://api.github.com/users/gmcculloug/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gmcculloug/subscriptions","organizations_url":"https://api.github.com/users/gmcculloug/orgs","repos_url":"https://api.github.com/users/gmcculloug/repos","events_url":"https://api.github.com/users/gmcculloug/events{/privacy}","received_events_url":"https://api.github.com/users/gmcculloug/received_events","type":"User","site_admin":false},"assignees":[{"login":"gmcculloug","id":2591569,"avatar_url":"https://avatars0.githubusercontent.com/u/2591569?v=4","gravatar_id":"","url":"https://api.github.com/users/gmcculloug","html_url":"https://github.com/gmcculloug","followers_url":"https://api.github.com/users/gmcculloug/followers","following_url":"https://api.github.com/users/gmcculloug/following{/other_user}","gists_url":"https://api.github.com/users/gmcculloug/gists{/gist_id}","starred_url":"https://api.github.com/users/gmcculloug/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gmcculloug/subscriptions","organizations_url":"https://api.github.com/users/gmcculloug/orgs","repos_url":"https://api.github.com/users/gmcculloug/repos","events_url":"https://api.github.com/users/gmcculloug/events{/privacy}","received_events_url":"https://api.github.com/users/gmcculloug/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"tinaafitz","id":109132,"avatar_url":"https://avatars0.githubusercontent.com/u/109132?v=4","gravatar_id":"","url":"https://api.github.com/users/tinaafitz","html_url":"https://github.com/tinaafitz","followers_url":"https://api.github.com/users/tinaafitz/followers","following_url":"https://api.github.com/users/tinaafitz/following{/other_user}","gists_url":"https://api.github.com/users/tinaafitz/gists{/gist_id}","starred_url":"https://api.github.com/users/tinaafitz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tinaafitz/subscriptions","organizations_url":"https://api.github.com/users/tinaafitz/orgs","repos_url":"https://api.github.com/users/tinaafitz/repos","events_url":"https://api.github.com/users/tinaafitz/events{/privacy}","received_events_url":"https://api.github.com/users/tinaafitz/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":500818510,"url":"https://api.github.com/repos/ManageIQ/manageiq-content/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":830412422,"url":"https://api.github.com/repos/ManageIQ/manageiq-content/labels/transformation","name":"transformation","color":"5319e7","default":false},{"id":536862699,"url":"https://api.github.com/repos/ManageIQ/manageiq-content/labels/wip","name":"wip","color":"eeeeee","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252/commits","review_comments_url":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252/comments","review_comment_url":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ManageIQ/manageiq-content/issues/252/comments","statuses_url":"https://api.github.com/repos/ManageIQ/manageiq-content/statuses/85a737dee947ab21edf86f77a251f81ad890bda0","head":{"label":"fdupont-redhat:v2v_state_machines_vm_transformation","ref":"v2v_state_machines_vm_transformation","sha":"85a737dee947ab21edf86f77a251f81ad890bda0","user":{"login":"fdupont-redhat","id":25821288,"avatar_url":"https://avatars0.githubusercontent.com/u/25821288?v=4","gravatar_id":"","url":"https://api.github.com/users/fdupont-redhat","html_url":"https://github.com/fdupont-redhat","followers_url":"https://api.github.com/users/fdupont-redhat/followers","following_url":"https://api.github.com/users/fdupont-redhat/following{/other_user}","gists_url":"https://api.github.com/users/fdupont-redhat/gists{/gist_id}","starred_url":"https://api.github.com/users/fdupont-redhat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fdupont-redhat/subscriptions","organizations_url":"https://api.github.com/users/fdupont-redhat/orgs","repos_url":"https://api.github.com/users/fdupont-redhat/repos","events_url":"https://api.github.com/users/fdupont-redhat/events{/privacy}","received_events_url":"https://api.github.com/users/fdupont-redhat/received_events","type":"User","site_admin":false},"repo":{"id":82185750,"name":"manageiq-content","full_name":"fdupont-redhat/manageiq-content","owner":{"login":"fdupont-redhat","id":25821288,"avatar_url":"https://avatars0.githubusercontent.com/u/25821288?v=4","gravatar_id":"","url":"https://api.github.com/users/fdupont-redhat","html_url":"https://github.com/fdupont-redhat","followers_url":"https://api.github.com/users/fdupont-redhat/followers","following_url":"https://api.github.com/users/fdupont-redhat/following{/other_user}","gists_url":"https://api.github.com/users/fdupont-redhat/gists{/gist_id}","starred_url":"https://api.github.com/users/fdupont-redhat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fdupont-redhat/subscriptions","organizations_url":"https://api.github.com/users/fdupont-redhat/orgs","repos_url":"https://api.github.com/users/fdupont-redhat/repos","events_url":"https://api.github.com/users/fdupont-redhat/events{/privacy}","received_events_url":"https://api.github.com/users/fdupont-redhat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fdupont-redhat/manageiq-content","description":"Default ManageIQ content","fork":true,"url":"https://api.github.com/repos/fdupont-redhat/manageiq-content","forks_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/forks","keys_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/teams","hooks_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/hooks","issue_events_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/issues/events{/number}","events_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/events","assignees_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/assignees{/user}","branches_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/branches{/branch}","tags_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/tags","blobs_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/git/refs{/sha}","trees_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/statuses/{sha}","languages_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/languages","stargazers_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/stargazers","contributors_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/contributors","subscribers_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/subscribers","subscription_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/subscription","commits_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/commits{/sha}","git_commits_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/git/commits{/sha}","comments_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/comments{/number}","issue_comment_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/issues/comments{/number}","contents_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/contents/{+path}","compare_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/merges","archive_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/downloads","issues_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/issues{/number}","pulls_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/pulls{/number}","milestones_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/milestones{/number}","notifications_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/labels{/name}","releases_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/releases{/id}","deployments_url":"https://api.github.com/repos/fdupont-redhat/manageiq-content/deployments","created_at":"2017-02-16T13:52:24Z","updated_at":"2017-02-16T13:52:27Z","pushed_at":"2018-02-23T01:28:39Z","git_url":"git://github.com/fdupont-redhat/manageiq-content.git","ssh_url":"git@github.com:fdupont-redhat/manageiq-content.git","clone_url":"https://github.com/fdupont-redhat/manageiq-content.git","svn_url":"https://github.com/fdupont-redhat/manageiq-content","homepage":"","size":1406,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ManageIQ:master","ref":"master","sha":"15b3a0e8e859ced52cd66c6ff0ecce91cf47a581","user":{"login":"ManageIQ","id":1125575,"avatar_url":"https://avatars0.githubusercontent.com/u/1125575?v=4","gravatar_id":"","url":"https://api.github.com/users/ManageIQ","html_url":"https://github.com/ManageIQ","followers_url":"https://api.github.com/users/ManageIQ/followers","following_url":"https://api.github.com/users/ManageIQ/following{/other_user}","gists_url":"https://api.github.com/users/ManageIQ/gists{/gist_id}","starred_url":"https://api.github.com/users/ManageIQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ManageIQ/subscriptions","organizations_url":"https://api.github.com/users/ManageIQ/orgs","repos_url":"https://api.github.com/users/ManageIQ/repos","events_url":"https://api.github.com/users/ManageIQ/events{/privacy}","received_events_url":"https://api.github.com/users/ManageIQ/received_events","type":"Organization","site_admin":false},"repo":{"id":76481218,"name":"manageiq-content","full_name":"ManageIQ/manageiq-content","owner":{"login":"ManageIQ","id":1125575,"avatar_url":"https://avatars0.githubusercontent.com/u/1125575?v=4","gravatar_id":"","url":"https://api.github.com/users/ManageIQ","html_url":"https://github.com/ManageIQ","followers_url":"https://api.github.com/users/ManageIQ/followers","following_url":"https://api.github.com/users/ManageIQ/following{/other_user}","gists_url":"https://api.github.com/users/ManageIQ/gists{/gist_id}","starred_url":"https://api.github.com/users/ManageIQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ManageIQ/subscriptions","organizations_url":"https://api.github.com/users/ManageIQ/orgs","repos_url":"https://api.github.com/users/ManageIQ/repos","events_url":"https://api.github.com/users/ManageIQ/events{/privacy}","received_events_url":"https://api.github.com/users/ManageIQ/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ManageIQ/manageiq-content","description":"Default ManageIQ content","fork":false,"url":"https://api.github.com/repos/ManageIQ/manageiq-content","forks_url":"https://api.github.com/repos/ManageIQ/manageiq-content/forks","keys_url":"https://api.github.com/repos/ManageIQ/manageiq-content/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ManageIQ/manageiq-content/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ManageIQ/manageiq-content/teams","hooks_url":"https://api.github.com/repos/ManageIQ/manageiq-content/hooks","issue_events_url":"https://api.github.com/repos/ManageIQ/manageiq-content/issues/events{/number}","events_url":"https://api.github.com/repos/ManageIQ/manageiq-content/events","assignees_url":"https://api.github.com/repos/ManageIQ/manageiq-content/assignees{/user}","branches_url":"https://api.github.com/repos/ManageIQ/manageiq-content/branches{/branch}","tags_url":"https://api.github.com/repos/ManageIQ/manageiq-content/tags","blobs_url":"https://api.github.com/repos/ManageIQ/manageiq-content/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ManageIQ/manageiq-content/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ManageIQ/manageiq-content/git/refs{/sha}","trees_url":"https://api.github.com/repos/ManageIQ/manageiq-content/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ManageIQ/manageiq-content/statuses/{sha}","languages_url":"https://api.github.com/repos/ManageIQ/manageiq-content/languages","stargazers_url":"https://api.github.com/repos/ManageIQ/manageiq-content/stargazers","contributors_url":"https://api.github.com/repos/ManageIQ/manageiq-content/contributors","subscribers_url":"https://api.github.com/repos/ManageIQ/manageiq-content/subscribers","subscription_url":"https://api.github.com/repos/ManageIQ/manageiq-content/subscription","commits_url":"https://api.github.com/repos/ManageIQ/manageiq-content/commits{/sha}","git_commits_url":"https://api.github.com/repos/ManageIQ/manageiq-content/git/commits{/sha}","comments_url":"https://api.github.com/repos/ManageIQ/manageiq-content/comments{/number}","issue_comment_url":"https://api.github.com/repos/ManageIQ/manageiq-content/issues/comments{/number}","contents_url":"https://api.github.com/repos/ManageIQ/manageiq-content/contents/{+path}","compare_url":"https://api.github.com/repos/ManageIQ/manageiq-content/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ManageIQ/manageiq-content/merges","archive_url":"https://api.github.com/repos/ManageIQ/manageiq-content/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ManageIQ/manageiq-content/downloads","issues_url":"https://api.github.com/repos/ManageIQ/manageiq-content/issues{/number}","pulls_url":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls{/number}","milestones_url":"https://api.github.com/repos/ManageIQ/manageiq-content/milestones{/number}","notifications_url":"https://api.github.com/repos/ManageIQ/manageiq-content/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ManageIQ/manageiq-content/labels{/name}","releases_url":"https://api.github.com/repos/ManageIQ/manageiq-content/releases{/id}","deployments_url":"https://api.github.com/repos/ManageIQ/manageiq-content/deployments","created_at":"2016-12-14T17:20:12Z","updated_at":"2018-02-14T13:57:45Z","pushed_at":"2018-02-23T01:28:40Z","git_url":"git://github.com/ManageIQ/manageiq-content.git","ssh_url":"git@github.com:ManageIQ/manageiq-content.git","clone_url":"https://github.com/ManageIQ/manageiq-content.git","svn_url":"https://github.com/ManageIQ/manageiq-content","homepage":"","size":1495,"stargazers_count":10,"watchers_count":10,"language":"Ruby","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":66,"mirror_url":null,"archived":false,"open_issues_count":8,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":66,"open_issues":8,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252"},"html":{"href":"https://github.com/ManageIQ/manageiq-content/pull/252"},"issue":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/issues/252"},"comments":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/issues/252/comments"},"review_comments":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252/comments"},"review_comment":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/pulls/252/commits"},"statuses":{"href":"https://api.github.com/repos/ManageIQ/manageiq-content/statuses/85a737dee947ab21edf86f77a251f81ad890bda0"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"bzwei"}}