{"action":"created","comment":{"url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/comments/191881007","pull_request_review_id":124528326,"id":191881007,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5MTg4MTAwNw==","diff_hunk":"@@ -0,0 +1,185 @@\n+package de.uniba.dsg.serverless.provider.google;\n+\n+import java.io.IOException;\n+import java.time.Instant;\n+import java.time.LocalDateTime;\n+import java.time.ZoneId;\n+import java.time.format.DateTimeFormatter;\n+import java.util.ArrayList;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Map;\n+\n+import com.fasterxml.jackson.core.JsonProcessingException;\n+import com.fasterxml.jackson.databind.JsonNode;\n+import com.fasterxml.jackson.databind.ObjectMapper;\n+import com.google.api.gax.paging.Page;\n+import com.google.cloud.logging.LogEntry;\n+import com.google.cloud.logging.Logging;\n+import com.google.cloud.logging.Logging.EntryListOption;\n+import com.google.cloud.logging.LoggingOptions;\n+import com.google.cloud.logging.Payload;\n+import com.google.cloud.logging.Payload.StringPayload;\n+\n+import de.uniba.dsg.serverless.model.PerformanceData;\n+import de.uniba.dsg.serverless.model.SeMoDeException;\n+import de.uniba.dsg.serverless.model.WritableEvent;\n+import de.uniba.dsg.serverless.provider.LogHandler;\n+\n+/**\n+ * Provide your Credentials to use the GoogleLogHandler via the Google Cloud SDK\n+ * command <i>gcloud auth application-default login</i>.\n+ * \n+ */\n+public class GoogleLogHandler implements LogHandler {\n+\n+\tprivate static final DateTimeFormatter QUERY_DATE_FORMATTER = DateTimeFormatter\n+\t\t\t.ofPattern(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n+\n+\tprivate final String functionName;\n+\tprivate final LocalDateTime startTime;\n+\tprivate final LocalDateTime endTime;\n+\n+\tpublic GoogleLogHandler(String functionName, LocalDateTime startTime, LocalDateTime endTime) {\n+\t\tthis.functionName = functionName;\n+\t\tthis.startTime = startTime;\n+\t\tthis.endTime = endTime;\n+\t}\n+\n+\tprivate List<LogEntry> extractLogEntryFromPage(Page<LogEntry> entries) {\n+\t\tList<LogEntry> logEntries = new ArrayList<>();\n+\t\tfor (LogEntry entry : entries.iterateAll()) {\n+\t\t\tlogEntries.add(entry);\n+\t\t}\n+\t\treturn logEntries;\n+\t}\n+\n+\tprivate List<LogEntry> executeListLogEntries() throws SeMoDeException {\n+\n+\t\tList<LogEntry> logEntries = new ArrayList<>();\n+\n+\t\t// project is inferred from the environment\n+\t\tLoggingOptions options = LoggingOptions.getDefaultInstance();\n+\n+\t\ttry (Logging logging = options.getService()) {\n+\n+\t\t\tString filter = \"resource.type=\\\"cloud_function\\\" AND \" + \"resource.labels.function_name = \\\"\"\n+\t\t\t\t\t+ this.functionName + \"\\\" AND \" + \"timestamp > \\\"\" + this.startTime.format(QUERY_DATE_FORMATTER)\n+\t\t\t\t\t+ \"\\\" AND \" + \"timestamp < \\\"\" + this.endTime.format(QUERY_DATE_FORMATTER) + \"\\\"\";\n+\n+\t\t\tEntryListOption entryFilterOption = EntryListOption.filter(filter);\n+\n+\t\t\tPage<LogEntry> entries = logging.listLogEntries(entryFilterOption);\n+\t\t\tlogEntries.addAll(this.extractLogEntryFromPage(entries));\n+\n+\t\t\t// further pages with log entries\n+\t\t\twhile (entries.hasNextPage()) {\n+\t\t\t\tentries = entries.getNextPage();\n+\t\t\t\tlogEntries.addAll(this.extractLogEntryFromPage(entries));\n+\t\t\t}\n+\n+\t\t\treturn logEntries;\n+\t\t} catch (Exception e) {\n+\t\t\tthrow new SeMoDeException(\"An error occured during accessing the stackdriver API\", e);\n+\t\t}\n+\t}\n+\n+\t/**\n+\t * Different as on AWS and Azure. The key in the returned map is typically the\n+\t * platform execution id. At google's platform, this key is not accessible and\n+\t * therefore a self-assigned key within the cloud function in form of a uuid is\n+\t * used to achieve the mapping from platform executions and local REST calls.\n+\t */\n+\t@Override\n+\tpublic Map<String, WritableEvent> getPerformanceData() throws SeMoDeException {\n+\n+\t\tList<LogEntry> logEntries = this.executeListLogEntries();\n+\n+\t\tMap<String, List<LogEntry>> eventMap = this.generateEventMapByExecutionId(logEntries);\n+\n+\t\treturn this.generatePerformanceDataMap(eventMap);\n+\t}\n+\n+\tprivate Map<String, WritableEvent> generatePerformanceDataMap(Map<String, List<LogEntry>> eventMap) {\n+\n+\t\tMap<String, WritableEvent> performanceMap = new HashMap<>();\n+\t\t\n+\t\tfor(String key : eventMap.keySet()) {","path":"src/main/java/de/uniba/dsg/serverless/provider/google/GoogleLogHandler.java","position":107,"original_position":107,"commit_id":"1b137f78dd1fc9a60580d49feba052f686f5c0b4","original_commit_id":"1b137f78dd1fc9a60580d49feba052f686f5c0b4","user":{"login":"strobi","id":1754883,"node_id":"MDQ6VXNlcjE3NTQ4ODM=","avatar_url":"https://avatars1.githubusercontent.com/u/1754883?v=4","gravatar_id":"","url":"https://api.github.com/users/strobi","html_url":"https://github.com/strobi","followers_url":"https://api.github.com/users/strobi/followers","following_url":"https://api.github.com/users/strobi/following{/other_user}","gists_url":"https://api.github.com/users/strobi/gists{/gist_id}","starred_url":"https://api.github.com/users/strobi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strobi/subscriptions","organizations_url":"https://api.github.com/users/strobi/orgs","repos_url":"https://api.github.com/users/strobi/repos","events_url":"https://api.github.com/users/strobi/events{/privacy}","received_events_url":"https://api.github.com/users/strobi/received_events","type":"User","site_admin":false},"body":"Maybe change key to executionId to make clear what the key is.","created_at":"2018-05-30T18:46:38Z","updated_at":"2018-05-30T18:53:12Z","html_url":"https://github.com/johannes-manner/SeMoDe/pull/21#discussion_r191881007","pull_request_url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/comments/191881007"},"html":{"href":"https://github.com/johannes-manner/SeMoDe/pull/21#discussion_r191881007"},"pull_request":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21"}}},"pull_request":{"url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21","id":191459066,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkxNDU5MDY2","html_url":"https://github.com/johannes-manner/SeMoDe/pull/21","diff_url":"https://github.com/johannes-manner/SeMoDe/pull/21.diff","patch_url":"https://github.com/johannes-manner/SeMoDe/pull/21.patch","issue_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/21","number":21,"state":"open","locked":false,"title":"Google cloud integration","user":{"login":"johannes-manner","id":30231151,"node_id":"MDQ6VXNlcjMwMjMxMTUx","avatar_url":"https://avatars1.githubusercontent.com/u/30231151?v=4","gravatar_id":"","url":"https://api.github.com/users/johannes-manner","html_url":"https://github.com/johannes-manner","followers_url":"https://api.github.com/users/johannes-manner/followers","following_url":"https://api.github.com/users/johannes-manner/following{/other_user}","gists_url":"https://api.github.com/users/johannes-manner/gists{/gist_id}","starred_url":"https://api.github.com/users/johannes-manner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johannes-manner/subscriptions","organizations_url":"https://api.github.com/users/johannes-manner/orgs","repos_url":"https://api.github.com/users/johannes-manner/repos","events_url":"https://api.github.com/users/johannes-manner/events{/privacy}","received_events_url":"https://api.github.com/users/johannes-manner/received_events","type":"User","site_admin":false},"body":"Adding another functionality to our tool to fetch the log data from google cloud functions.\r\nThe first commit is objective of PR #20 . So please review only the other commits ","created_at":"2018-05-30T13:47:13Z","updated_at":"2018-05-30T18:53:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"52d9d89406af5be38581ab96887da9e43da5e06e","assignee":null,"assignees":[],"requested_reviewers":[{"login":"martin-endress","id":38721958,"node_id":"MDQ6VXNlcjM4NzIxOTU4","avatar_url":"https://avatars1.githubusercontent.com/u/38721958?v=4","gravatar_id":"","url":"https://api.github.com/users/martin-endress","html_url":"https://github.com/martin-endress","followers_url":"https://api.github.com/users/martin-endress/followers","following_url":"https://api.github.com/users/martin-endress/following{/other_user}","gists_url":"https://api.github.com/users/martin-endress/gists{/gist_id}","starred_url":"https://api.github.com/users/martin-endress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/martin-endress/subscriptions","organizations_url":"https://api.github.com/users/martin-endress/orgs","repos_url":"https://api.github.com/users/martin-endress/repos","events_url":"https://api.github.com/users/martin-endress/events{/privacy}","received_events_url":"https://api.github.com/users/martin-endress/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21/commits","review_comments_url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21/comments","review_comment_url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/comments{/number}","comments_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/21/comments","statuses_url":"https://api.github.com/repos/johannes-manner/SeMoDe/statuses/1b137f78dd1fc9a60580d49feba052f686f5c0b4","head":{"label":"johannes-manner:google-cloud-integration","ref":"google-cloud-integration","sha":"1b137f78dd1fc9a60580d49feba052f686f5c0b4","user":{"login":"johannes-manner","id":30231151,"node_id":"MDQ6VXNlcjMwMjMxMTUx","avatar_url":"https://avatars1.githubusercontent.com/u/30231151?v=4","gravatar_id":"","url":"https://api.github.com/users/johannes-manner","html_url":"https://github.com/johannes-manner","followers_url":"https://api.github.com/users/johannes-manner/followers","following_url":"https://api.github.com/users/johannes-manner/following{/other_user}","gists_url":"https://api.github.com/users/johannes-manner/gists{/gist_id}","starred_url":"https://api.github.com/users/johannes-manner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johannes-manner/subscriptions","organizations_url":"https://api.github.com/users/johannes-manner/orgs","repos_url":"https://api.github.com/users/johannes-manner/repos","events_url":"https://api.github.com/users/johannes-manner/events{/privacy}","received_events_url":"https://api.github.com/users/johannes-manner/received_events","type":"User","site_admin":false},"repo":{"id":118929613,"node_id":"MDEwOlJlcG9zaXRvcnkxMTg5Mjk2MTM=","name":"SeMoDe","full_name":"johannes-manner/SeMoDe","owner":{"login":"johannes-manner","id":30231151,"node_id":"MDQ6VXNlcjMwMjMxMTUx","avatar_url":"https://avatars1.githubusercontent.com/u/30231151?v=4","gravatar_id":"","url":"https://api.github.com/users/johannes-manner","html_url":"https://github.com/johannes-manner","followers_url":"https://api.github.com/users/johannes-manner/followers","following_url":"https://api.github.com/users/johannes-manner/following{/other_user}","gists_url":"https://api.github.com/users/johannes-manner/gists{/gist_id}","starred_url":"https://api.github.com/users/johannes-manner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johannes-manner/subscriptions","organizations_url":"https://api.github.com/users/johannes-manner/orgs","repos_url":"https://api.github.com/users/johannes-manner/repos","events_url":"https://api.github.com/users/johannes-manner/events{/privacy}","received_events_url":"https://api.github.com/users/johannes-manner/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/johannes-manner/SeMoDe","description":"SeMoDe is a tool to support lifecycle activites of Serverless functions on different platforms. Currently automated test generation on AWS Lambda is possible and performance considerations due to the cold start issue are work in progress.","fork":false,"url":"https://api.github.com/repos/johannes-manner/SeMoDe","forks_url":"https://api.github.com/repos/johannes-manner/SeMoDe/forks","keys_url":"https://api.github.com/repos/johannes-manner/SeMoDe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/johannes-manner/SeMoDe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/johannes-manner/SeMoDe/teams","hooks_url":"https://api.github.com/repos/johannes-manner/SeMoDe/hooks","issue_events_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/events{/number}","events_url":"https://api.github.com/repos/johannes-manner/SeMoDe/events","assignees_url":"https://api.github.com/repos/johannes-manner/SeMoDe/assignees{/user}","branches_url":"https://api.github.com/repos/johannes-manner/SeMoDe/branches{/branch}","tags_url":"https://api.github.com/repos/johannes-manner/SeMoDe/tags","blobs_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/refs{/sha}","trees_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/johannes-manner/SeMoDe/statuses/{sha}","languages_url":"https://api.github.com/repos/johannes-manner/SeMoDe/languages","stargazers_url":"https://api.github.com/repos/johannes-manner/SeMoDe/stargazers","contributors_url":"https://api.github.com/repos/johannes-manner/SeMoDe/contributors","subscribers_url":"https://api.github.com/repos/johannes-manner/SeMoDe/subscribers","subscription_url":"https://api.github.com/repos/johannes-manner/SeMoDe/subscription","commits_url":"https://api.github.com/repos/johannes-manner/SeMoDe/commits{/sha}","git_commits_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/commits{/sha}","comments_url":"https://api.github.com/repos/johannes-manner/SeMoDe/comments{/number}","issue_comment_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/comments{/number}","contents_url":"https://api.github.com/repos/johannes-manner/SeMoDe/contents/{+path}","compare_url":"https://api.github.com/repos/johannes-manner/SeMoDe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/johannes-manner/SeMoDe/merges","archive_url":"https://api.github.com/repos/johannes-manner/SeMoDe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/johannes-manner/SeMoDe/downloads","issues_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues{/number}","pulls_url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls{/number}","milestones_url":"https://api.github.com/repos/johannes-manner/SeMoDe/milestones{/number}","notifications_url":"https://api.github.com/repos/johannes-manner/SeMoDe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/johannes-manner/SeMoDe/labels{/name}","releases_url":"https://api.github.com/repos/johannes-manner/SeMoDe/releases{/id}","deployments_url":"https://api.github.com/repos/johannes-manner/SeMoDe/deployments","created_at":"2018-01-25T15:20:02Z","updated_at":"2018-05-29T15:03:08Z","pushed_at":"2018-05-30T17:50:02Z","git_url":"git://github.com/johannes-manner/SeMoDe.git","ssh_url":"git@github.com:johannes-manner/SeMoDe.git","clone_url":"https://github.com/johannes-manner/SeMoDe.git","svn_url":"https://github.com/johannes-manner/SeMoDe","homepage":"","size":307,"stargazers_count":2,"watchers_count":2,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":6,"watchers":2,"default_branch":"master"}},"base":{"label":"johannes-manner:master","ref":"master","sha":"8b35368f8cf90c7d3de5abc63bd06feb68a7dbf9","user":{"login":"johannes-manner","id":30231151,"node_id":"MDQ6VXNlcjMwMjMxMTUx","avatar_url":"https://avatars1.githubusercontent.com/u/30231151?v=4","gravatar_id":"","url":"https://api.github.com/users/johannes-manner","html_url":"https://github.com/johannes-manner","followers_url":"https://api.github.com/users/johannes-manner/followers","following_url":"https://api.github.com/users/johannes-manner/following{/other_user}","gists_url":"https://api.github.com/users/johannes-manner/gists{/gist_id}","starred_url":"https://api.github.com/users/johannes-manner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johannes-manner/subscriptions","organizations_url":"https://api.github.com/users/johannes-manner/orgs","repos_url":"https://api.github.com/users/johannes-manner/repos","events_url":"https://api.github.com/users/johannes-manner/events{/privacy}","received_events_url":"https://api.github.com/users/johannes-manner/received_events","type":"User","site_admin":false},"repo":{"id":118929613,"node_id":"MDEwOlJlcG9zaXRvcnkxMTg5Mjk2MTM=","name":"SeMoDe","full_name":"johannes-manner/SeMoDe","owner":{"login":"johannes-manner","id":30231151,"node_id":"MDQ6VXNlcjMwMjMxMTUx","avatar_url":"https://avatars1.githubusercontent.com/u/30231151?v=4","gravatar_id":"","url":"https://api.github.com/users/johannes-manner","html_url":"https://github.com/johannes-manner","followers_url":"https://api.github.com/users/johannes-manner/followers","following_url":"https://api.github.com/users/johannes-manner/following{/other_user}","gists_url":"https://api.github.com/users/johannes-manner/gists{/gist_id}","starred_url":"https://api.github.com/users/johannes-manner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johannes-manner/subscriptions","organizations_url":"https://api.github.com/users/johannes-manner/orgs","repos_url":"https://api.github.com/users/johannes-manner/repos","events_url":"https://api.github.com/users/johannes-manner/events{/privacy}","received_events_url":"https://api.github.com/users/johannes-manner/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/johannes-manner/SeMoDe","description":"SeMoDe is a tool to support lifecycle activites of Serverless functions on different platforms. Currently automated test generation on AWS Lambda is possible and performance considerations due to the cold start issue are work in progress.","fork":false,"url":"https://api.github.com/repos/johannes-manner/SeMoDe","forks_url":"https://api.github.com/repos/johannes-manner/SeMoDe/forks","keys_url":"https://api.github.com/repos/johannes-manner/SeMoDe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/johannes-manner/SeMoDe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/johannes-manner/SeMoDe/teams","hooks_url":"https://api.github.com/repos/johannes-manner/SeMoDe/hooks","issue_events_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/events{/number}","events_url":"https://api.github.com/repos/johannes-manner/SeMoDe/events","assignees_url":"https://api.github.com/repos/johannes-manner/SeMoDe/assignees{/user}","branches_url":"https://api.github.com/repos/johannes-manner/SeMoDe/branches{/branch}","tags_url":"https://api.github.com/repos/johannes-manner/SeMoDe/tags","blobs_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/refs{/sha}","trees_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/johannes-manner/SeMoDe/statuses/{sha}","languages_url":"https://api.github.com/repos/johannes-manner/SeMoDe/languages","stargazers_url":"https://api.github.com/repos/johannes-manner/SeMoDe/stargazers","contributors_url":"https://api.github.com/repos/johannes-manner/SeMoDe/contributors","subscribers_url":"https://api.github.com/repos/johannes-manner/SeMoDe/subscribers","subscription_url":"https://api.github.com/repos/johannes-manner/SeMoDe/subscription","commits_url":"https://api.github.com/repos/johannes-manner/SeMoDe/commits{/sha}","git_commits_url":"https://api.github.com/repos/johannes-manner/SeMoDe/git/commits{/sha}","comments_url":"https://api.github.com/repos/johannes-manner/SeMoDe/comments{/number}","issue_comment_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/comments{/number}","contents_url":"https://api.github.com/repos/johannes-manner/SeMoDe/contents/{+path}","compare_url":"https://api.github.com/repos/johannes-manner/SeMoDe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/johannes-manner/SeMoDe/merges","archive_url":"https://api.github.com/repos/johannes-manner/SeMoDe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/johannes-manner/SeMoDe/downloads","issues_url":"https://api.github.com/repos/johannes-manner/SeMoDe/issues{/number}","pulls_url":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls{/number}","milestones_url":"https://api.github.com/repos/johannes-manner/SeMoDe/milestones{/number}","notifications_url":"https://api.github.com/repos/johannes-manner/SeMoDe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/johannes-manner/SeMoDe/labels{/name}","releases_url":"https://api.github.com/repos/johannes-manner/SeMoDe/releases{/id}","deployments_url":"https://api.github.com/repos/johannes-manner/SeMoDe/deployments","created_at":"2018-01-25T15:20:02Z","updated_at":"2018-05-29T15:03:08Z","pushed_at":"2018-05-30T17:50:02Z","git_url":"git://github.com/johannes-manner/SeMoDe.git","ssh_url":"git@github.com:johannes-manner/SeMoDe.git","clone_url":"https://github.com/johannes-manner/SeMoDe.git","svn_url":"https://github.com/johannes-manner/SeMoDe","homepage":"","size":307,"stargazers_count":2,"watchers_count":2,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":6,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21"},"html":{"href":"https://github.com/johannes-manner/SeMoDe/pull/21"},"issue":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/21"},"comments":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/issues/21/comments"},"review_comments":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21/comments"},"review_comment":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/pulls/21/commits"},"statuses":{"href":"https://api.github.com/repos/johannes-manner/SeMoDe/statuses/1b137f78dd1fc9a60580d49feba052f686f5c0b4"}},"author_association":"OWNER"}}
{"actor":{"display_login":"strobi"}}