{"action":"created","comment":{"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments/35483525","id":35483525,"diff_hunk":"@@ -0,0 +1,1138 @@\n+# Arm Plugin Interface 2.0 Specification(2015/04/16)\n+\n+## Overview\n+\n+Hatohol Arm Plugin Interface (HAPI) 2.0 is protocol for information exchange between Hatohol server and Monitoring server plugin.\n+It is constructed as JSON-RPC appllication on the communication path that is consolidated between them.\n+\n+The following figure express the above overview.\n+\n+![overview](../hapi_overview.png)\n+\n+## Words\n+\n+|words|description|\n+|:---|:---|\n+|SRV|Hatohol server|\n+|HAP|Hatohol monitoring server plugin|\n+\n+\"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\" and \"OPTIONAL\" conform to [RFC2119](http://www.ietf.org/rfc/rfc2119.txt).\n+\n+## Involved protocol\n+\n+### Communication path \n+\n+Use Advanced Message Queuing Protocol (AMQP) 0.9.1 as communication path.\n+- AMQP 0.9.1: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf\n+\n+### JSON-RPC\n+\n+Use JSON-RPC 2.0 as basic protocol of information exchange.\n+- [JSON-RPC 2.0 (2013-01-04)](http://www.jsonrpc.org/specification)\n+- [JSON(RFC4627)](https://www.ietf.org/rfc/rfc4627.txt)\n+\n+#### Attention\n+- Encoding is UTF-8(MUST). Normalization form C(SHOULD). String can escape(MAY).\n+- Enough randomness is needed from ID object that is used in request and response(SHOULD).\n+- Must not use batch request of JSON_RPC in HAPI2.0(MUST NOT).\n+- HAPI2.0 does not assume to generate and use AMQP queue name dynamically. The user need to dicide queue name that is used when contanct to Hatohol server. HAPI2.0 assume Hatohol server and plugin use the above queue name.\n+\n+## Operating overview\n+The following sequence figure express basic operating of procedures request and response that are exchanged between Hatohol server and Hatohol arm plugin. \n+\n+```\n+\n+   SRV                                            HAP\n+    |\n+    |                                        Turn on HAP\n+    |                                              |\n+    |<----------exchangeProfile(Request)---------->|\n+    |<----------exchangeProfile(Response)--------->|\n+    |                                          |   |\n+    |                             Polling interval |\n+    |                                          |   |\n+    |<-----getMonitoringServerInfo(Request)--------|\n+    |------getMonitoringServerInfo(Response)------>|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putHosts(Request)----------------|\n+    |-------------putHosts(Response)-------------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<---------putHostGroups(Request)--------------|\n+    |----------putHostGroups(Response)------------>|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<-----putHostGroupMembership(Request)---------|\n+    |------putHostGroupMembership(Response)------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putTriggers(Request)-------------|\n+    |-------------putTriggers(Response)----------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putEvents(Request)---------------|\n+    |-------------putEvents(Response)------------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putHostParents(Request)----------|\n+    |-------------putHostParents(Response)-------->|\n+    |                                              |\n+    |<------------putArmInfo(Request)--------------|\n+    |-------------putArmInfo(Response)------------>|\n+    |                                          |   |\n+    |                             Polling interval |\n+    |                                          |   |\n+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+    |                                              |\n+    |-----------fetchItems(Request)--------------->|\n+    |<----------fetchItems(Response)---------------|\n+    |<------------putItems(Request)----------------|\n+    |-------------putItems(Response)-------------->|\n+    |                                              |\n+    |-----------fetchHistory(Request)------------->|\n+    |<----------fetchHistory(Response)-------------|\n+    |<------------putHistory(Request)--------------|\n+    |-------------putHistory(Response)------------>|\n+    |                                              |\n+    |-----------fetchTriggers(Request)------------>|\n+    |<----------fetchTriggers(Response)------------|\n+    |<-----------putTriggers(Request)--------------|\n+    |                Use \"ALL\"option               |\n+    |-----------putTriggers(Response)------------->|\n+    |                                              |\n+    |-------------fetchEvents(Request)------------>|\n+    |<------------fetchEvents(Response)------------|\n+    |<------------putEvents(Request)---------------|\n+    |-------------putEvents(Response)------------->|\n+    |                                              |\n+    |--updateMonitoringServerInfo(notification)--->|\n+    |                                              |\n+\n+```\n+## Data type\n+\n+ - In this section explains about data type that is defined for Hatohol. They use date type that is defined in the JSON-RPC internally.\n+\n+|Name|JSON type|description|\n+|:---|:---------|:---|\n+|TimeStamp|string|This type stores times of day. Use UTC. Format is YYYYMMDDhhmmss.nnnnnnnnn. YYYY, MM, DD, hh, mm, ss, and nnnnnnnnn each express the A.D., Month, Day, hour, minute, second, nano second. Can abbreviate nano second. In case of the above or nano second digits less than nine, insert zero to spare parts(Ex.100 -> 100.000000000, 100.1234 -> 100.123400000).|\n+|Boolean|true, false|This type stores boolean. Assign true or false to show authenticity of value.|\n+|Number|number|This type stores number type value. Need to keep the number within the 0 and 2147483647.|\n+|String255|string|This type stores string type value. Need to keep the number of characters within less than 255 characters.|\n+|URI2047|string|This type stores string type value. Need to keep the number of characters within less than 2047 characters(MUST). It match URI that is defined in the RFC3986,RFC6874, and keep octet size  of within lessthan 2047(SHOULD).|\n+|String32767|string|This type stores string type value. Need to keep the number of characters within less than 32767 characters.|\n+\n+In case of all cases, the number of character is counted by UTF-32 code point number after NFC(MUST).\n+\n+## About start up operation\n+\n+ - When start Hatohol server and HAP or restart them, there exchange each profile and usuable procedures to use exchangeProfile. There can optimize procedures based on exchanged information.\n+\n+## Procedures\n+\n+ - [M/O] is show whether that procedure is Mandatory or Optional. Mandatory procedure can not abbreviate to implement.\n+ - When does not complate exchange profile yet to use exchangeProfile procedure and get other procedures, it must return [putResult](#user-content-putresult) response that is inserted \"FAILURE\u001B$B!I\u001B(B to result object.\n+\n+### Hatohol server procedures\n+\n+|name|description|type|M/O|\n+|:-------------|:---|:-----|:-:|\n+|[exchangeProfile](#user-content-exchangeprofilemethod)|Receive view of procedures that is implemented in HAP and HAP name, after that return procedures view that is implemented in yourself and yourself name.|method|M|\n+|[getMonitoringServerInfo](#user-content-getmonitoringserverinfomethod)|Return connecting information with HAP and polling interval seconds to HAP.|method|M|\n+|[getLastInfo](#user-content-getlastinfomethod)|Return latest information that is designated by request.|method|M|\n+|[putItems](#user-content-putitemsmethod)|Receive items view that is monitored by HAP.|method|O|\n+|[putHistory](#user-content-puthistorymethod)|Receive history of each item that is monitored by HAP.|method|O|\n+|[putHosts](#user-content-puthostsmethod)|Receive hosts view from HAP and update it.|method|O|\n+|[putHostGroups](#user-content-puthostgroupsmethod)|Receive host groups view from HAP and update it.|method|O|\n+|[putHostGroupMembership](#user-content-puthostgroupmembershipmethod)|Receive host group membership from HAP and update it.|method|O|\n+|[putTriggers](#user-content-puttriggersmethod)|Receive triggers view from HAP and update it.|method|O|\n+|[putEvents](#user-content-puteventsmethod)|Receive events view from HAP and update it.|method|O|\n+|[putHostParents](#user-content-puthostparentsmethod)|Receive host parent relations view from HAP and update it.|method|O|\n+|[putArmInfo](#user-content-putarminfomethod)|Receive connecting status of HAP and update it.|method|M|\n+\n+### HAP procedures\n+\n+|name|desscription|type|M/O|\n+|:-------------|:---|:-----|:-:|\n+|[exchangeProfile](#user-content-exchangeprofilemethod)|Receive view of procedures that is implemented in Hatohol server and Hatohol server name, after that return procedures view that is implemented in yourself and yourself name.|method|M|\n+|[fetchItems](#user-content-fetchitemsmethod)|Accept request to get item from Hatohol server.|method|O|\n+|[fetchHistory](#user-content-fetchhistorymethod)|Accept request to get history from Hatohol server.|method|O|\n+|[fetchTriggers](#user-content-fetchtriggersmethod)|Accept request to get trigger from Hatohol server.|method|O|\n+|[fetchEvents](#user-content-fetcheventsmethod)|Accept request to get event from Hatohol server.|method|O|\n+|[updateMonitoringServerInfo](#user-content-updatemonitoringserverinfomethod)|Receive connecting information with Hatohol server and polling interval seconds as notification.|method|M|\n+\n+### exchangeProfile(method)\n+\n+ This procedure is had Hatohol server and HAP in common. It uses when start and restart mainly. Please look at the [About start up oetation](#user-content-about-start-up-content).\n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|procedures|String255 array|M|-|Usual procedures list of sender.|\n+|name      |String255    |M|-|Process name of sender. It is used in the log message and etc.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"name\": \"exampleName\",\n+    \"procedures\": [\n+      \"getMonitoringServerInfo\",\n+      \"getLastInfo\",\n+      \"putItems\",\n+      \"putArmInfo\",\n+      \"fetchItems\"\n+    ]\n+  },\n+  \"method\": \"exchangeProfile\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|procedures|String255 array|M|-|Usual procedures list of destination.|\n+|name      |String255    |M|-|Process name of destination. It is used in the log message and etc.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": {\n+    \"name\": \"exampleName\",\n+    \"procedures\": [\n+      \"getMonitoringServerInfo\",\n+      \"getLastInfo\",\n+      \"putItems\",\n+      \"putHistory\",\n+      \"putHosts\",\n+      \"putHostGroups\",\n+      \"putHostGroupMembership\",\n+      \"putTriggers\",\n+      \"putEvents\",\n+      \"putHostParent\",\n+      \"putArmInfo\"\n+    ]\n+  },\n+  \"jsonrpc\": 2\n+}\n+```\n+\n+### getMonitoringServerInfo(method)\n+\n+To inquire myself conecting information and polling interval to Hatohol server per polling interval is the standard motion, but can inquire anytime.\n+\n+\n+***Request(params)***\n+\n+ getMonitoringServerInfo method does not have arguments. Send a params of request as empty string.\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": \"\",\n+  \"method\": \"getMonitoringServerInfo\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|serverId          |Number     |M|-|A Server ID of the monitoring server.|\n+|url               |URI2047    |M|-|A URL of monitoring server. [[Description](#user-content-servertype)]|\n+|type              |string     |M|-|A type of monitoring server. [[List](#user-content-servertype)]|\n+|nickName          |String255  |M|-|A nickname of monitoring server.|\n+|userName          |String255  |M|-|A user name of monitoring server.|\n+|password          |String255  |M|-|A pass word of monitoring server.|\n+|pollingIntervalSec|Number     |M|-|Polling interval seconds.|\n+|retryIntervalSec  |Number     |M|-|Retry interval seconds in case of fail polling.|\n+|extendedInfo      |String32767|M|-|Can store your any information.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": {\n+    \"serverId\": 1,\n+    \"url\": \"http://example.com:80\",\n+    \"type\": \"12345678-9abc-def0-1234-567891abcdef\",\n+    \"nickName\": \"exampleName\",\n+    \"userName\": \"Admin\",\n+    \"password\": \"examplePass\",\n+    \"pollingIntervalSec\": 30,\n+    \"retryIntervalSec\": 10,\n+    \"extendedInfo\": \"exampleExtraInfo\"\n+  },\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### getLastInfo(method)\n+\n+Can send the diffarence between sent data and having data currently to use got lastInfo.\n+\n+Such as when start up a plugin, in case of does not saved lastInfo in Hatohol server, get lastInfo as empty string.\n+\n+***Request(params)***\n+\n+|params object value|Type |M/O|Default value|Description|\n+|:---------------------|:--|:-:|:----------:|:---|\n+|Designate element|String255|M|-|Need to select in the following elements list.|\n+\n+|Value list|Description|\n+|:-------------------------|:---|\n+|\"host\"               |Select latest host information.|\n+|\"hostGroup\"          |Select latest host group information.|\n+|\"hostGroupMembership\"|Select latest host group membership information.|\n+|\"trigger\"            |Select latest trigger information.|\n+|\"event\"              |Select latest event information.|\n+|\"hostParent\"         |Select latest host parent information.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": \"trigger\",\n+  \"method\": \"getLastInfo\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+|Object value|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|latest information|String255|M|-|Designate element latest information of to saved in Hatohol server.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"201504011349\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+In this example, receive a timestamp as lastInfo.\n+\n+### putItems(method)\n+\n+Standard motion is to send all item information to Hatohol server when complate conect to Hatohol server and get [fetchItems](#user-content-fetchitemsmethod) request from Hatohol server. It has possible that burden to Hatohol server, can not use anytime. \n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|items  |object   |M|-|This is object that stores item information. Look at the following table for details.|\n+|fetchId|String255|O|-|This is ID that indicates whether response for request from Hatohol server. Insert fetchId value to this object, in case of only receive fetchItems request.\n+\n+***items object***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|itemId       |String255    |M|-|ID of the item.|\n+|hostId       |String255    |M|-|Host ID of the the item belongs.|\n+|brief        |String255    |M|-|Overview of the item.|\n+|lastValueTime|TimeStamp    |M|-|Time of when the item was last updated.|\n+|lastValue    |String255    |M|-|Value of when the item was last updated.|\n+|itemGroupName|String255 array|M|-|Group name of the item belongs.|\n+|unit         |String255    |M|-|Unit of value.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"fetchId\": \"1\",\n+    \"items\": [\n+      {\n+        \"unit\": \"example unit\",\n+        \"itemGroupName\": \"example name\",\n+        \"lastValue\": \"example value\",\n+        \"lastValueTime\": \"20150410175500\",\n+        \"brief\": \"example brief\",\n+        \"hostId\": \"1\",\n+        \"itemId\": \"1\"\n+      },\n+      {\n+        \"unit\": \"example unit\",\n+        \"itemGroupName\": \"example name\",\n+        \"lastValue\": \"example value\",\n+        \"lastValueTime\": \"201504101755\",\n+        \"brief\": \"example brief\",\n+        \"hostId\": \"1\",\n+        \"itemId\": \"2\"\n+      }\n+    ]\n+  },\n+  \"method\": \"putItems\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+Receive result as result object value whether sent data has been updated. Look at the [[Values](#user-content-putresult)].\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"SUCCESS\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### putHistory(method)\n+\n+ - When receive [fetchHistory](#user-content-fetchhistorymethod) procedure from Hatohol server, return matched history to conditions. It has possible that burden to Hatohol server, can not use anytime. \n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|itemId    |String255 |M|-|Id of the got item|\n+|samples   |object array|M|-|This is sample array to configure history information. Look at the following table for details. The samples is needed to sort by ascending order of time.|\n+|fetchId|String255|O|-|This is ID that indicates whether response for request from Hatohol server. Insert fetchId value to this object, in case of only receive fetchHistory request.\n+\n+***samples object***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|value |String255|M|-|Item value at that time.|\n+|time  |TimeStamp|M|-|Time of recorded.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"fetchId\": \"1\",\n+    cccc\n+      {\n+        \"time\": \"20150323113000\",\n+        \"value\": \"exampleValue\"\n+      },\n+      {\n+        \"time\": \"201503231130\",\n+        \"value\": \"exampleValue2\"\n+      }\n+    ],\n+    \"itemId\": \"1\"\n+  },\n+  \"method\": \"putHistory\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+Receive result as result object value whether sent data has been updated. Look at the [[Values](#user-content-putresult)].\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"SUCCESS\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### putHosts(method)\n+\n+Send all hosts information to Hatohol server to use \"ALL\" option when complate conect to Hatohol server and changed hosts information that saved in internal.\n+\n+ In case of using \"UPDATE\" option, send diffarence to use lastInfo that got using [getLastInfo](#user-content-getlastinfomethod) or saved in internal to Hatohol server.\n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|hosts       |object array|M|-|This is object array that stores hosts information. Look at the following table for details.|\n+|updateType|string    |M|-|Select sending option that match the situation from [[List](#user-content-updatetype)].|\n+|lastInfo    |String32767 |O|-|Insert to here host information of last. This information is result of [getLastInfo](#user-content-getlastinfomethod).|\n+\n+***hosts object***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|hostId  |String255|M|-|Host Id of monitered by monitoring server.|\n+|hostName|String255|M|-|Host name of monitored by monitoring server.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"lastInfo\": \"201504091052\",\n+    \"updateType\": \"UPDATED\",\n+    \"hosts\": [\n+      {\n+        \"hostName\": \"exampleHostName1\",\n+        \"hostId\": \"1\"\n+      }\n+    ]\n+  },\n+  \"method\": \"putHosts\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+Receive result as result object value whether sent data has been updated. Look at the [[Values](#user-content-putresult)].\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"SUCCESS\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### putHostGroups(method)\n+\n+Send all host groups information to Hatohol server to use \"ALL\" option when complate conect to Hatohol server and changed hosts information that saved in internal.\n+\n+ In case of using \"UPDATE\" option, send diffarence to use lastInfo that got using [getLastInfo](#user-content-getlastinfomethod) or saved in internal to Hatohol server.\n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|hostGroups  |object array|M|-|This is object array that stores host groups information. Look at the following table for details.|\n+|updateType|string    |M|-|Select sending option that match the situation from [[List](#user-content-updatetype)].|\n+|lastInfo    |String32767 |O|-|Insert to here host group information of last. This information is result of [getLastInfo](#user-content-getlastinfomethod).|\n+\n+***hostGroups object***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|groupId  |String255|M|-|Id of host group.|\n+|groupName|String255|M|-|Host grou name of compliant the above group Id.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"lastInfo\": \"201504091049\",\n+    \"updateType\": \"ALL\",\n+    \"hostGroups\": [\n+      {\n+        \"groupName\": \"Group2\",\n+        \"groupId\": \"1\"\n+      }\n+    ]\n+  },\n+  \"method\": \"putHostGroups\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+Receive result as result object value whether sent data has been updated. Look at the [[Values](#user-content-putresult)].\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"SUCCESS\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### putHostGroupMembership(method)\n+\n+Send all host group membership information to Hatohol server to use \"ALL\" option when complate conect to Hatohol server and changed hosts information that saved in internal.\n+\n+ In case of using \"UPDATE\" option, send diffarence to use lastInfo that got using [getLastInfo](#user-content-getlastinfomethod) or saved in internal to Hatohol server.\n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|hostGroupMembership|object array|M|-|This is object array that stores host group membership information. Look at the following table for details.|\n+|updateType|string    |M|-|Select sending option that match the situation from [[List](#user-content-updatetype)].|\n+|lastInfo    |String32767 |O|-|Insert to here host group membership information of last. This information is result of [getLastInfo](#user-content-getlastinfomethod).|\n+\n+***hostGroupMembership object***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|hostId  |String255    |M|-|Id of host.|\n+|groupIds|String255 array|M|-|Id of host group.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"updateType\": \"ALL\",\n+    \"lastInfo\": \"201504091056\",\n+    \"hostGroupMembership\": [\n+      {\n+        \"groupIds\": [\n+          \"1\",\n+          \"2\",\n+          \"5\"\n+        ],\n+        \"hostId\": \"1\"\n+      }\n+    ]\n+  },\n+  \"method\": \"putHostGroupMembership\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+Receive result as result object value whether sent data has been updated. Look at the [[Values](#user-content-putresult)].\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"SUCCESS\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### putTriggers(method)\n+\n+Send all triggers information to Hatohol server to use \"ALL\" option when complate conect to Hatohol server or reseive [fetchTriggers](#user-content-fetchtriggersmethod) procedure from Hatohol server.\n+\n+ In case of using \"UPDATE\" option, send diffarence to use lastInfo that got using [getLastInfo](#user-content-getlastinfomethod) or saved in internal to Hatohol server.","path":"en/README.md","position":606,"original_position":606,"commit_id":"f7dac81ef224a87f4702e3a5e84545862012a326","original_commit_id":"f7dac81ef224a87f4702e3a5e84545862012a326","user":{"login":"cosmo0920","id":700876,"avatar_url":"https://avatars.githubusercontent.com/u/700876?v=3","gravatar_id":"","url":"https://api.github.com/users/cosmo0920","html_url":"https://github.com/cosmo0920","followers_url":"https://api.github.com/users/cosmo0920/followers","following_url":"https://api.github.com/users/cosmo0920/following{/other_user}","gists_url":"https://api.github.com/users/cosmo0920/gists{/gist_id}","starred_url":"https://api.github.com/users/cosmo0920/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cosmo0920/subscriptions","organizations_url":"https://api.github.com/users/cosmo0920/orgs","repos_url":"https://api.github.com/users/cosmo0920/repos","events_url":"https://api.github.com/users/cosmo0920/events{/privacy}","received_events_url":"https://api.github.com/users/cosmo0920/received_events","type":"User","site_admin":false},"body":"Typo:\r\n\r\n```diff\r\n-differance\r\n+difference\r\n```","created_at":"2015-07-25T14:36:54Z","updated_at":"2015-07-25T14:36:54Z","html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/68#discussion_r35483525","pull_request_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68","_links":{"self":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments/35483525"},"html":{"href":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/68#discussion_r35483525"},"pull_request":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68"}}},"pull_request":{"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68","id":40103001,"html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/68","diff_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/68.diff","patch_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/68.patch","issue_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/68","number":68,"state":"open","locked":false,"title":"Create english document.","user":{"login":"Mnakagawa","id":7106792,"avatar_url":"https://avatars.githubusercontent.com/u/7106792?v=3","gravatar_id":"","url":"https://api.github.com/users/Mnakagawa","html_url":"https://github.com/Mnakagawa","followers_url":"https://api.github.com/users/Mnakagawa/followers","following_url":"https://api.github.com/users/Mnakagawa/following{/other_user}","gists_url":"https://api.github.com/users/Mnakagawa/gists{/gist_id}","starred_url":"https://api.github.com/users/Mnakagawa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mnakagawa/subscriptions","organizations_url":"https://api.github.com/users/Mnakagawa/orgs","repos_url":"https://api.github.com/users/Mnakagawa/repos","events_url":"https://api.github.com/users/Mnakagawa/events{/privacy}","received_events_url":"https://api.github.com/users/Mnakagawa/received_events","type":"User","site_admin":false},"body":"文法的におかしい点も多いと思うので，添削よろしくお願いします。","created_at":"2015-07-16T07:52:04Z","updated_at":"2015-07-25T14:36:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"19689d7bf5559ba2ef1901879bdccdf348ca5104","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68/commits","review_comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68/comments","review_comment_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments{/number}","comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/68/comments","statuses_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/f7dac81ef224a87f4702e3a5e84545862012a326","head":{"label":"project-hatohol:make-english-document","ref":"make-english-document","sha":"f7dac81ef224a87f4702e3a5e84545862012a326","user":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"repo":{"id":34365876,"name":"HAPI-2.0-Specification","full_name":"project-hatohol/HAPI-2.0-Specification","owner":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","description":"","fork":false,"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification","forks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/forks","keys_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/teams","hooks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/hooks","issue_events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/events{/number}","events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/events","assignees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/assignees{/user}","branches_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/branches{/branch}","tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/tags","blobs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/{sha}","languages_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/languages","stargazers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/stargazers","contributors_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contributors","subscribers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscribers","subscription_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscription","commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contents/{+path}","compare_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/merges","archive_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/downloads","issues_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues{/number}","pulls_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls{/number}","milestones_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/milestones{/number}","notifications_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/labels{/name}","releases_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/releases{/id}","created_at":"2015-04-22T03:13:09Z","updated_at":"2015-05-13T09:50:41Z","pushed_at":"2015-07-23T00:53:19Z","git_url":"git://github.com/project-hatohol/HAPI-2.0-Specification.git","ssh_url":"git@github.com:project-hatohol/HAPI-2.0-Specification.git","clone_url":"https://github.com/project-hatohol/HAPI-2.0-Specification.git","svn_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","homepage":null,"size":891,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":3,"forks":1,"open_issues":3,"watchers":0,"default_branch":"master"}},"base":{"label":"project-hatohol:master","ref":"master","sha":"1d7cefa2d6149f715899b7998442e0ea9acf5324","user":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"repo":{"id":34365876,"name":"HAPI-2.0-Specification","full_name":"project-hatohol/HAPI-2.0-Specification","owner":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","description":"","fork":false,"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification","forks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/forks","keys_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/teams","hooks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/hooks","issue_events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/events{/number}","events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/events","assignees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/assignees{/user}","branches_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/branches{/branch}","tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/tags","blobs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/{sha}","languages_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/languages","stargazers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/stargazers","contributors_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contributors","subscribers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscribers","subscription_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscription","commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contents/{+path}","compare_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/merges","archive_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/downloads","issues_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues{/number}","pulls_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls{/number}","milestones_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/milestones{/number}","notifications_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/labels{/name}","releases_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/releases{/id}","created_at":"2015-04-22T03:13:09Z","updated_at":"2015-05-13T09:50:41Z","pushed_at":"2015-07-23T00:53:19Z","git_url":"git://github.com/project-hatohol/HAPI-2.0-Specification.git","ssh_url":"git@github.com:project-hatohol/HAPI-2.0-Specification.git","clone_url":"https://github.com/project-hatohol/HAPI-2.0-Specification.git","svn_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","homepage":null,"size":891,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":3,"forks":1,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68"},"html":{"href":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/68"},"issue":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/68"},"comments":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/68/comments"},"review_comments":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68/comments"},"review_comment":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/68/commits"},"statuses":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/f7dac81ef224a87f4702e3a5e84545862012a326"}}}}