{"action":"created","comment":{"url":"https://api.github.com/repos/apache/flink/pulls/comments/78270764","id":78270764,"diff_hunk":"@@ -0,0 +1,118 @@\n+/*\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\n+ * contributor license agreements.  See the NOTICE file distributed with\n+ * this work for additional information regarding copyright ownership.\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\n+ * (the \"License\"); you may not use this file except in compliance with\n+ * the License.  You may obtain a copy of the License at\n+ * <p/>\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ * <p/>\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 org.apache.flink.contrib.siddhi;\n+\n+import org.apache.flink.annotation.PublicEvolving;\n+import org.apache.flink.contrib.siddhi.exception.DuplicatedStreamException;\n+import org.apache.flink.contrib.siddhi.exception.UndefinedStreamException;\n+import org.apache.flink.contrib.siddhi.schema.SiddhiStreamSchema;\n+import org.apache.flink.streaming.api.datastream.DataStream;\n+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;\n+\n+import java.util.HashMap;\n+import java.util.Map;\n+\n+/**\n+ * Siddhi CEP Execution Environment\n+ */\n+@PublicEvolving\n+public class SiddhiCEP {\n+\tprivate final StreamExecutionEnvironment executionEnvironment;\n+\tprivate final Map<String, DataStream<?>> dataStreams;\n+\tprivate final Map<String, SiddhiStreamSchema<?>> dataStreamSchemas;\n+\tprivate final Map<String,Class<?>> extensions = new HashMap<>();\n+\n+\tpublic Map<String, DataStream<?>> getDataStreams(){\n+\t\treturn this.dataStreams;\n+\t}\n+\n+\tpublic Map<String, SiddhiStreamSchema<?>> getDataStreamSchemas(){\n+\t\treturn this.dataStreamSchemas;\n+\t}\n+\n+\tpublic boolean isStreamDefined(String streamId){\n+\t\treturn dataStreams.containsKey(streamId);\n+\t}\n+\n+\tpublic Map<String,Class<?>> getExtensions(){\n+\t\treturn this.extensions;\n+\t}\n+\n+\tpublic void checkStreamDefined(String streamId) throws UndefinedStreamException {\n+\t\tif(!isStreamDefined(streamId)){\n+\t\t\tthrow new UndefinedStreamException(\"Stream (streamId: \"+streamId+\") not defined\");\n+\t\t}\n+\t}\n+\n+\tpublic SiddhiCEP(StreamExecutionEnvironment streamExecutionEnvironment) {\n+\t\tthis.executionEnvironment = streamExecutionEnvironment;\n+\t\tthis.dataStreams = new HashMap<>();\n+\t\tthis.dataStreamSchemas = new HashMap<>();\n+\t}\n+\n+\tpublic static <T> SiddhiStream.SingleSiddhiStream<T> define(String streamId, DataStream<T> inStream, String... fieldNames) {\n+\t\tSiddhiCEP environment = SiddhiCEP.getSiddhiEnvironment(inStream.getExecutionEnvironment());\n+\t\treturn environment.from(streamId,inStream,fieldNames);\n+\t}\n+\n+\tpublic <T> SiddhiStream.SingleSiddhiStream<T> from(String streamId, DataStream<T> inStream, String... fieldNames){\n+\t\tthis.registerStream(streamId,inStream,fieldNames);\n+\t\treturn new SiddhiStream.SingleSiddhiStream<>(streamId, this);\n+\t}\n+\n+\tpublic <T> SiddhiStream.SingleSiddhiStream<T> from(String streamId){\n+\t\treturn new SiddhiStream.SingleSiddhiStream<>(streamId, this);\n+\t}\n+\n+\tpublic <T> SiddhiStream.UnionSiddhiStream<T> union(String firstStreamId,String ... unionStreamIds){\n+\t\treturn new SiddhiStream.SingleSiddhiStream<T>(firstStreamId,this).union(unionStreamIds);\n+\t}\n+\n+\tpublic  <T> void registerStream(final String streamId, DataStream<T> dataStream, String... fieldNames) {\n+\t\tif (isStreamDefined(streamId)) {\n+\t\t\tthrow new DuplicatedStreamException(\"Input stream: \" + streamId + \" already exists\");\n+\t\t}\n+\t\tdataStreams.put(streamId, dataStream);\n+\t\tSiddhiStreamSchema<T> schema = new SiddhiStreamSchema<>(dataStream.getType(), fieldNames);\n+\t\tschema.setTypeSerializer(schema.getTypeInfo().createSerializer(dataStream.getExecutionConfig()));\n+\t\tdataStreamSchemas.put(streamId, schema);\n+\t}\n+\n+\tpublic StreamExecutionEnvironment getExecutionEnvironment() {\n+\t\treturn executionEnvironment;\n+\t}\n+\n+\tpublic void registerExtension(String extensionName, Class<?> extensionClass) {\n+\t\tif(extensions.containsKey(extensionName)){\n+\t\t\tthrow new IllegalArgumentException(\"Extension named \"+extensionName+\" already registered\");\n+\t\t}\n+\t\textensions.put(extensionName,extensionClass);\n+\t}\n+\n+\tpublic <T> DataStream<T> getDataStream(String streamId) {\n+\t\tif(this.dataStreams.containsKey(streamId)){\n+\t\t\treturn (DataStream<T>) this.dataStreams.get(streamId);\n+\t\t}else{\n+\t\t\tthrow new UndefinedStreamException(\"Undefined stream \"+streamId);\n+\t\t}","path":"flink-contrib/flink-siddhi/src/main/java/org/apache/flink/contrib/siddhi/SiddhiCEP.java","position":112,"original_position":112,"commit_id":"4cd3ea7646ecdc5c22fa85ae9953675b9448b044","original_commit_id":"4cd3ea7646ecdc5c22fa85ae9953675b9448b044","user":{"login":"apivovarov","id":218087,"avatar_url":"https://avatars.githubusercontent.com/u/218087?v=3","gravatar_id":"","url":"https://api.github.com/users/apivovarov","html_url":"https://github.com/apivovarov","followers_url":"https://api.github.com/users/apivovarov/followers","following_url":"https://api.github.com/users/apivovarov/following{/other_user}","gists_url":"https://api.github.com/users/apivovarov/gists{/gist_id}","starred_url":"https://api.github.com/users/apivovarov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apivovarov/subscriptions","organizations_url":"https://api.github.com/users/apivovarov/orgs","repos_url":"https://api.github.com/users/apivovarov/repos","events_url":"https://api.github.com/users/apivovarov/events{/privacy}","received_events_url":"https://api.github.com/users/apivovarov/received_events","type":"User","site_admin":false},"body":"block 108-112 is not formatted","created_at":"2016-09-10T04:13:57Z","updated_at":"2016-09-10T04:13:57Z","html_url":"https://github.com/apache/flink/pull/2487#discussion_r78270764","pull_request_url":"https://api.github.com/repos/apache/flink/pulls/2487","_links":{"self":{"href":"https://api.github.com/repos/apache/flink/pulls/comments/78270764"},"html":{"href":"https://github.com/apache/flink/pull/2487#discussion_r78270764"},"pull_request":{"href":"https://api.github.com/repos/apache/flink/pulls/2487"}}},"pull_request":{"url":"https://api.github.com/repos/apache/flink/pulls/2487","id":84741890,"html_url":"https://github.com/apache/flink/pull/2487","diff_url":"https://github.com/apache/flink/pull/2487.diff","patch_url":"https://github.com/apache/flink/pull/2487.patch","issue_url":"https://api.github.com/repos/apache/flink/issues/2487","number":2487,"state":"open","locked":false,"title":"[FLINK-4520][flink-siddhi] Integrate Siddhi as a light-weight Streaming CEP Library","user":{"login":"haoch","id":1282617,"avatar_url":"https://avatars.githubusercontent.com/u/1282617?v=3","gravatar_id":"","url":"https://api.github.com/users/haoch","html_url":"https://github.com/haoch","followers_url":"https://api.github.com/users/haoch/followers","following_url":"https://api.github.com/users/haoch/following{/other_user}","gists_url":"https://api.github.com/users/haoch/gists{/gist_id}","starred_url":"https://api.github.com/users/haoch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haoch/subscriptions","organizations_url":"https://api.github.com/users/haoch/orgs","repos_url":"https://api.github.com/users/haoch/repos","events_url":"https://api.github.com/users/haoch/events{/privacy}","received_events_url":"https://api.github.com/users/haoch/received_events","type":"User","site_admin":false},"body":"Thanks for contributing to Apache Flink. Before you open your pull request, please take the following check list into consideration.\r\nIf your changes take all of the items into account, feel free to open your pull request. For more information and/or questions please refer to the [How To Contribute guide](http://flink.apache.org/how-to-contribute.html).\r\nIn addition to going through the list, please provide a meaningful description of your changes.\r\n\r\n- [x] General\r\n  - The pull request references the related JIRA issue (\"[FLINK-XXX] Jira title text\")\r\n  - The pull request addresses only one issue\r\n  - Each commit in the PR has a meaningful commit message (including the JIRA id)\r\n\r\n- [x] Documentation\r\n  - Documentation has been added for new functionality\r\n  - Old documentation affected by the pull request has been updated\r\n  - JavaDoc for public methods has been added\r\n\r\n- [x] Tests & Build\r\n  - Functionality added by the pull request is covered by tests\r\n  - `mvn clean verify` has been executed successfully locally or a Travis build has passed\r\n\r\n# Abstraction\r\nSiddhi CEP is a lightweight and easy-to-use Open Source Complex Event Processing Engine (CEP) released as a Java Library under `Apache Software License v2.0`. Siddhi CEP processes events which are generated by various event sources, analyses them and notifies appropriate complex events according to the user specified queries. \r\n\r\n__It would be very helpful for flink users (especially streaming application developer) to provide a library to run Siddhi CEP query directly in Flink streaming application.__\r\n\r\n# Features\r\n\r\n* Integrate Siddhi CEP as an stream operator (i.e. `TupleStreamSiddhiOperator`), supporting rich CEP features like\r\n  * Filter\r\n  * Join\r\n  * Aggregation\r\n  * Group by\r\n  * Having\r\n  * Window\r\n  * Conditions and Expressions\r\n  * Pattern processing\r\n  * Sequence processing\r\n  * Event Tables\r\n  ...\r\n* Provide easy-to-use Siddhi CEP API to integrate Flink DataStream API (See `SiddhiCEP` and `SiddhiStream`)\r\n  * Register Flink DataStream associating native type information with Siddhi Stream Schema, supporting POJO,Tuple, Primitive Type, etc.\r\n  * Connect with single or multiple Flink DataStreams with Siddhi CEP Execution Plan\r\n  * Return output stream as DataStream with type intelligently inferred from Siddhi Stream Schema\r\n* Integrate siddhi runtime state management with Flink state (See `AbstractSiddhiOperator`)\r\n* Support siddhi plugin management to extend CEP functions. (See `SiddhiCEP#registerExtension`)\r\n\r\n# Test Cases \r\n\r\n* [`org.apache.flink.contrib.siddhi. SiddhiCEPITCase `](https://github.com/haoch/flink/blob/FLINK-4520/flink-contrib/flink-siddhi/src/test/java/org/apache/flink/contrib/siddhi/SiddhiCEPITCase.java)\r\n\r\n# Example\r\n\r\n     StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();\r\n     SiddhiCEP cep = SiddhiCEP.getSiddhiEnvironment(env);\r\n    \r\n     cep.registerExtension(\"custom:plus\",CustomPlusFunctionExtension.class);\r\n    \r\n     cep.registerStream(\"inputStream1\", input1, \"id\", \"name\", \"price\",\"timestamp\");\r\n     cep.registerStream(\"inputStream2\", input2, \"id\", \"name\", \"price\",\"timestamp\");\r\n    \r\n     DataStream<Tuple5<Integer,String,Integer,String,Double>> output = cep\r\n     \t.from(\"inputStream1\").union(\"inputStream2\")\r\n     \t.sql(\r\n    \t\t\"from every s1 = inputStream1[id == 2] \"\r\n    \t\t + \" -> s2 = inputStream2[id == 3] \"\r\n    \t\t + \"select s1.id as id_1, s1.name as name_1, s2.id as id_2, s2.name as name_2 , custom:plus(s1.price,s2.price) as price\"\r\n    \t\t + \"insert into outputStream\"\r\n    \t)\r\n    \t.returns(\"outputStream\");\r\n    \r\n     env.execute();\r\n","created_at":"2016-09-10T02:29:45Z","updated_at":"2016-09-10T04:13:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7a73f979be0341e3a1792d2038dd666536d3a31f","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/apache/flink/pulls/2487/commits","review_comments_url":"https://api.github.com/repos/apache/flink/pulls/2487/comments","review_comment_url":"https://api.github.com/repos/apache/flink/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/flink/issues/2487/comments","statuses_url":"https://api.github.com/repos/apache/flink/statuses/4cd3ea7646ecdc5c22fa85ae9953675b9448b044","head":{"label":"haoch:FLINK-4520","ref":"FLINK-4520","sha":"4cd3ea7646ecdc5c22fa85ae9953675b9448b044","user":{"login":"haoch","id":1282617,"avatar_url":"https://avatars.githubusercontent.com/u/1282617?v=3","gravatar_id":"","url":"https://api.github.com/users/haoch","html_url":"https://github.com/haoch","followers_url":"https://api.github.com/users/haoch/followers","following_url":"https://api.github.com/users/haoch/following{/other_user}","gists_url":"https://api.github.com/users/haoch/gists{/gist_id}","starred_url":"https://api.github.com/users/haoch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haoch/subscriptions","organizations_url":"https://api.github.com/users/haoch/orgs","repos_url":"https://api.github.com/users/haoch/repos","events_url":"https://api.github.com/users/haoch/events{/privacy}","received_events_url":"https://api.github.com/users/haoch/received_events","type":"User","site_admin":false},"repo":{"id":66575549,"name":"flink","full_name":"haoch/flink","owner":{"login":"haoch","id":1282617,"avatar_url":"https://avatars.githubusercontent.com/u/1282617?v=3","gravatar_id":"","url":"https://api.github.com/users/haoch","html_url":"https://github.com/haoch","followers_url":"https://api.github.com/users/haoch/followers","following_url":"https://api.github.com/users/haoch/following{/other_user}","gists_url":"https://api.github.com/users/haoch/gists{/gist_id}","starred_url":"https://api.github.com/users/haoch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haoch/subscriptions","organizations_url":"https://api.github.com/users/haoch/orgs","repos_url":"https://api.github.com/users/haoch/repos","events_url":"https://api.github.com/users/haoch/events{/privacy}","received_events_url":"https://api.github.com/users/haoch/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/haoch/flink","description":"Mirror of Apache Flink","fork":true,"url":"https://api.github.com/repos/haoch/flink","forks_url":"https://api.github.com/repos/haoch/flink/forks","keys_url":"https://api.github.com/repos/haoch/flink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/haoch/flink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/haoch/flink/teams","hooks_url":"https://api.github.com/repos/haoch/flink/hooks","issue_events_url":"https://api.github.com/repos/haoch/flink/issues/events{/number}","events_url":"https://api.github.com/repos/haoch/flink/events","assignees_url":"https://api.github.com/repos/haoch/flink/assignees{/user}","branches_url":"https://api.github.com/repos/haoch/flink/branches{/branch}","tags_url":"https://api.github.com/repos/haoch/flink/tags","blobs_url":"https://api.github.com/repos/haoch/flink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/haoch/flink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/haoch/flink/git/refs{/sha}","trees_url":"https://api.github.com/repos/haoch/flink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/haoch/flink/statuses/{sha}","languages_url":"https://api.github.com/repos/haoch/flink/languages","stargazers_url":"https://api.github.com/repos/haoch/flink/stargazers","contributors_url":"https://api.github.com/repos/haoch/flink/contributors","subscribers_url":"https://api.github.com/repos/haoch/flink/subscribers","subscription_url":"https://api.github.com/repos/haoch/flink/subscription","commits_url":"https://api.github.com/repos/haoch/flink/commits{/sha}","git_commits_url":"https://api.github.com/repos/haoch/flink/git/commits{/sha}","comments_url":"https://api.github.com/repos/haoch/flink/comments{/number}","issue_comment_url":"https://api.github.com/repos/haoch/flink/issues/comments{/number}","contents_url":"https://api.github.com/repos/haoch/flink/contents/{+path}","compare_url":"https://api.github.com/repos/haoch/flink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/haoch/flink/merges","archive_url":"https://api.github.com/repos/haoch/flink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/haoch/flink/downloads","issues_url":"https://api.github.com/repos/haoch/flink/issues{/number}","pulls_url":"https://api.github.com/repos/haoch/flink/pulls{/number}","milestones_url":"https://api.github.com/repos/haoch/flink/milestones{/number}","notifications_url":"https://api.github.com/repos/haoch/flink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/haoch/flink/labels{/name}","releases_url":"https://api.github.com/repos/haoch/flink/releases{/id}","deployments_url":"https://api.github.com/repos/haoch/flink/deployments","created_at":"2016-08-25T16:36:53Z","updated_at":"2016-08-25T16:37:16Z","pushed_at":"2016-09-10T02:39:46Z","git_url":"git://github.com/haoch/flink.git","ssh_url":"git@github.com:haoch/flink.git","clone_url":"https://github.com/haoch/flink.git","svn_url":"https://github.com/haoch/flink","homepage":null,"size":92507,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"apache:master","ref":"master","sha":"9420a775f4689ec57c9026b418c5961c33263265","user":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":20587599,"name":"flink","full_name":"apache/flink","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/flink","description":"Mirror of Apache Flink","fork":false,"url":"https://api.github.com/repos/apache/flink","forks_url":"https://api.github.com/repos/apache/flink/forks","keys_url":"https://api.github.com/repos/apache/flink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/flink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/flink/teams","hooks_url":"https://api.github.com/repos/apache/flink/hooks","issue_events_url":"https://api.github.com/repos/apache/flink/issues/events{/number}","events_url":"https://api.github.com/repos/apache/flink/events","assignees_url":"https://api.github.com/repos/apache/flink/assignees{/user}","branches_url":"https://api.github.com/repos/apache/flink/branches{/branch}","tags_url":"https://api.github.com/repos/apache/flink/tags","blobs_url":"https://api.github.com/repos/apache/flink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/flink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/flink/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/flink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/flink/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/flink/languages","stargazers_url":"https://api.github.com/repos/apache/flink/stargazers","contributors_url":"https://api.github.com/repos/apache/flink/contributors","subscribers_url":"https://api.github.com/repos/apache/flink/subscribers","subscription_url":"https://api.github.com/repos/apache/flink/subscription","commits_url":"https://api.github.com/repos/apache/flink/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/flink/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/flink/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/flink/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/flink/contents/{+path}","compare_url":"https://api.github.com/repos/apache/flink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/flink/merges","archive_url":"https://api.github.com/repos/apache/flink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/flink/downloads","issues_url":"https://api.github.com/repos/apache/flink/issues{/number}","pulls_url":"https://api.github.com/repos/apache/flink/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/flink/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/flink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/flink/labels{/name}","releases_url":"https://api.github.com/repos/apache/flink/releases{/id}","deployments_url":"https://api.github.com/repos/apache/flink/deployments","created_at":"2014-06-07T07:00:10Z","updated_at":"2016-09-10T03:44:28Z","pushed_at":"2016-09-10T03:39:41Z","git_url":"git://github.com/apache/flink.git","ssh_url":"git@github.com:apache/flink.git","clone_url":"https://github.com/apache/flink.git","svn_url":"https://github.com/apache/flink","homepage":null,"size":125076,"stargazers_count":1566,"watchers_count":1566,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1041,"mirror_url":"git://git.apache.org/flink.git","open_issues_count":139,"forks":1041,"open_issues":139,"watchers":1566,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/flink/pulls/2487"},"html":{"href":"https://github.com/apache/flink/pull/2487"},"issue":{"href":"https://api.github.com/repos/apache/flink/issues/2487"},"comments":{"href":"https://api.github.com/repos/apache/flink/issues/2487/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/flink/pulls/2487/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/flink/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/flink/pulls/2487/commits"},"statuses":{"href":"https://api.github.com/repos/apache/flink/statuses/4cd3ea7646ecdc5c22fa85ae9953675b9448b044"}}}}
{"actor":{"display_login":"apivovarov"}}