hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
HandlerTypes.hpp
Go to the documentation of this file.
1 
15 #ifndef __HCE_HANDLER_TYPES_INCLUDED__
16 #define __HCE_HANDLER_TYPES_INCLUDED__
17 
18 #include "zmsg.hpp"
19 #include "ClientWorkerItem.hpp"
20 
21 namespace HCE {
22  namespace handlers {
24  const unsigned int HEARTBEAT_DELAY = 15000;
25  const unsigned int HEARTBEAT_TIMEOUT = 60000;
26  const unsigned int LOG_STATISTIC_PERIOD = 30000;
27  const unsigned int RECONNECT_INTERVAL_INIT = 10000;
28  const unsigned int RECONNECR_INTERVAL_MAX = 30000;
29  const unsigned int POLL_TIMEOUT = HEARTBEAT_DELAY/2;
30  const unsigned int STAT_INTERVAL = 60000;
31  const unsigned int PROPERTY_INTERVAL = 10000;
32  const unsigned int DUMP_INTERVAL = 3600*1000;
33 
34  const unsigned int MIN_ALLOWED_HEARTBEAT_DELAY = 5000;
35  const unsigned int MIN_ALLOWED_HEARTBEAT_TIMEOUT = 5000;
36  const unsigned int MIN_ALLOWED_POLL_TIMEOUT = 5000;
37  const unsigned int MIN_ALLOWED_PROPERTY_INTERVAL = 5000;
38  const unsigned int MIN_ALLOWED_DUMP_INTERVAL = 5000;
39 
41  const unsigned int HEARBEAT_MODE_FIXED_TIME = 0;
42  const unsigned int HEARBEAT_MODE_IMMEDIATE_AFTER_HB = 1;
43  const unsigned int HEARBEAT_MODE_MIXED = 2;
44  const unsigned int HEARBEAT_MODE_ADAPTIVE = 3;
45 
48 
50  const unsigned char NODE_MODE_PROXY = 0;
51  const unsigned char NODE_MODE_SHARD = 1;
52  const unsigned char NODE_MODE_DATA = 2;
53  const unsigned char NODE_MODE_ROUTER = 3;
54  const unsigned char NODE_MODE_SHARD_RND = 4;
55  const unsigned char NODE_MODE_SHARD_RU = 5;
56 
58  const unsigned int NODE_MSG_DATA_MIN_FIELDS = 2;
59  const unsigned int NODE_MSG_CMD_MIN_FIELDS = 1;
60 
62  const unsigned int NODE_LOG_MODE_NONE = 0;
63  const unsigned int NODE_LOG_MODE_FATAL = 1;
64  const unsigned int NODE_LOG_MODE_CRITICAL = 2;
65  const unsigned int NODE_LOG_MODE_ERROR = 3;
66  const unsigned int NODE_LOG_MODE_WARNING = 4;
67  const unsigned int NODE_LOG_MODE_NOTICE = 5;
68  const unsigned int NODE_LOG_MODE_INFORMATION = 6;
69  const unsigned int NODE_LOG_MODE_DEBUG = 7;
70  const unsigned int NODE_LOG_MODE_TRACE = 8;
71 
73 
75  const unsigned int NODE_EXIT_CODE_GENERAL_CRITICAL_ERROR = 1;
76  const unsigned int NODE_EXIT_CODE_SPHINX_CRITICAL_ERROR = 2;
77  const unsigned int NODE_EXIT_CODE_DRCE_CRITICAL_ERROR = 3;
78 
80  const unsigned int NODE_CONNECTION_REBUILD_DELAY_DEFAULT = 60000; //Connection rebuild delay, ms
81  const unsigned int NODE_CONNECTION_REBUILD_MAX_TRIES = 100; //Connection rebuild max tries number
82 
84  const char NODE_ROUTER_MSG_DELIMITER = '@';
85  const char NODE_ADMIN_COMMAND_DELIMITER = 0x09;
86  const char NODE_JSON_BEGIN_CHAR = '{';
87  const std::string NODE_JSON_EMPTY_DEFAULT = "{}";
91  const char ROUTE_LIST_NAMES_DELIMITER = ',';
92  const char ROUTE_LIST_COUNT_DELIMITER = ':';
93  const char HEARTBEAT_MSG_DELIMITER = ':';
94  const char PROPERTY_MSG_DELIMITER = ':';
95  const std::string HEARTBEAT_JSON_RESOURCES = "resources";
96  const std::string HEARTBEAT_JSON_ROUTES = "routes";
97 
98  //Ini file params values related
101 
103  const unsigned int NODE_DATA_PROCESSING_MODE_NORMAL = 0;
104  const unsigned int NODE_DATA_PROCESSING_MODE_SIMULATE = 1;
105 
107  const std::string ZMQ_PROTOCOL_PREFIX_TCP = "tcp://";
108  const std::string ZMQ_PROTOCOL_PREFIX_INPROC = "inproc://";
109 
111  const std::string NODE_CS_INPROC_ADMIN = ZMQ_PROTOCOL_PREFIX_INPROC + "inproc_admin";
112  const std::string NODE_CS_INPROC_PROXY = ZMQ_PROTOCOL_PREFIX_INPROC + "inproc_proxy";
113  const std::string NODE_CS_INPROC_DATA = ZMQ_PROTOCOL_PREFIX_INPROC + "inproc_data";
114  const std::string NODE_CS_INPROC_REDUCER_OUT = ZMQ_PROTOCOL_PREFIX_INPROC + "inproc_reducer_out";
115  const std::string NODE_CS_INPROC_REDUCER_IN = ZMQ_PROTOCOL_PREFIX_INPROC + "inproc_reducer_in";
116 
118  const std::string NODE_MSG_READY = "READY";
119  const std::string NODE_MSG_HEARTBEAT = "HEARTBEAT";
120  const std::string NODE_MSG_BYE = "BYE";
121 
123  const std::string NODE_MSG_ECHO = "ECHO";
124  const std::string NODE_MSG_LOG_LEVEL_SET = "LLSET";
125  const std::string NODE_MSG_LOG_LEVEL_GET = "LLGET";
126  const std::string NODE_MSG_HEARTBEAT_DELAY_SET = "HEARTBEAT_DELAY_SET";
127  const std::string NODE_MSG_HEARTBEAT_DELAY_GET = "HEARTBEAT_DELAY_GET";
128  const std::string NODE_MSG_HEARTBEAT_TIMEOUT_SET = "HEARTBEAT_TIMEOUT_SET";
129  const std::string NODE_MSG_HEARTBEAT_TIMEOUT_GET = "HEARTBEAT_TIMEOUT_GET";
130  const std::string NODE_MSG_HEARTBEAT_MODE_SET = "HEARTBEAT_MODE_SET";
131  const std::string NODE_MSG_HEARTBEAT_MODE_GET = "HEARTBEAT_MODE_GET";
132  const std::string NODE_MSG_POLL_TIMEOUT_SET = "POLL_TIMEOUT_SET";
133  const std::string NODE_MSG_POLL_TIMEOUT_GET = "POLL_TIMEOUT_GET";
134  const std::string NODE_MSG_PROPERTY_INTERVAL_SET = "PROPERTY_INTERVAL_SET";
135  const std::string NODE_MSG_PROPERTY_INTERVAL_GET = "PROPERTY_INTERVAL_GET";
136  const std::string NODE_MSG_DUMP_INTERVAL_SET = "DUMP_INTERVAL_SET";
137  const std::string NODE_MSG_DUMP_INTERVAL_GET = "DUMP_INTERVAL_GET";
138 
140  const std::string NODE_MSG_STAT = "STAT";
141  const std::string NODE_MSG_TIME = "TIME";
142  const std::string NODE_MSG_PROPERTIES = "PROPERTIES";
143  const std::string NODE_MSG_rebuildServerConnection = "rebuildServerConnection";
144  const std::string NODE_MSG_REBUILD_CLIENT_CONNECTION = "REBUILD_CLIENT_CONNECTION";
145  const std::string NODE_MSG_UPDATE_SCHEMA = "UPDATE_SCHEMA";
146  const std::string NODE_MSG_DISCONNECT_SERVER_CONNECTION = "DISCONNECT_SERVER_CONNECTION";
147  const std::string NODE_MSG_DISCONNECT_CLIENT_CONNECTION = "DISCONNECT_CLIENT_CONNECTION";
148  const std::string NODE_MSG_SHUTDOWN = "SHUTDOWN";
149  const std::string NODE_MSG_SPHINX = "SPHINX";
150  const std::string NODE_MSG_DRCE = "DRCE";
151  const std::string NODE_MSG_DRCE_SET_HOST = "DRCE_SET_HOST";
152  const std::string NODE_MSG_DRCE_GET_HOST = "DRCE_GET_HOST";
153  const std::string NODE_MSG_DRCE_SET_PORT = "DRCE_SET_PORT";
154  const std::string NODE_MSG_DRCE_GET_PORT = "DRCE_GET_PORT";
155  const std::string NODE_MSG_DRCE_GET_TASKS = "DRCE_GET_TASKS"; // for return async task queue
156  const std::string NODE_MSG_DRCE_GET_TASKS_INFO = "DRCE_GET_TASKS_INFO"; // for return async tasks information
157 
158  const std::string NODE_MSG_ROUTES = "NODE_ROUTES"; // for return routes of cluster nodes
159  const std::string NODE_MSG_RESOURCE_USAGE = "NODE_RESOURCE_USAGE"; // for return resource usage array
160  const std::string NODE_MSG_SET_DATA_PROCESSING_MODE = "SET_DATA_PROCESSING_MODE";
161  const std::string NODE_MSG_GET_DATA_PROCESSING_MODE = "GET_DATA_PROCESSING_MODE";
162  const std::string NODE_MSG_MANAGER_MODE_SET = "MMSET";
163  const std::string NODE_MSG_MANAGER_MODE_GET = "MMGET";
164  const std::string NODE_MSG_MANAGER_PURGE_MODE_SET = "MPMSET";
165  const std::string NODE_MSG_MANAGER_PURGE_MODE_GET = "MPMGET";
166  const std::string NODE_MSG_MANAGER_RESOURCES_COLLECTED_SIZE_SET = "MRCSSET";
167  const std::string NODE_MSG_MANAGER_RESOURCES_COLLECTED_SIZE_GET = "MRCSGET";
168  const std::string NODE_MSG_STOP = "STOP"; //Supported by all handlers except of "Admin"
169 
171  const std::string NODE_ADMIN_ERROR_WRONG_FORMAT = "Wrong admin message format, expected string - DESTINATION_IDENTITY:COMMAND_NAME:PARAMETERS, or destination admin handler not found";
172  const std::string NODE_ADMIN_ERROR_UNSUPPORTED_COMMAND = "REDEFINED admin command handler - unsupported admin command!";
173  const std::string NODE_ADMIN_ERROR_HANDLER_NOT_FOUND = "Handler not found or not connected to inproc admin server";
174  const std::string NODE_ADMIN_ERROR_UNSUPPORTED_CC_REBUILD = "Client connection rebuild not supported for handler ";
175  const std::string NODE_ADMIN_ERROR_OK = "OK";
176  const std::string NODE_ADMIN_ERROR_ERROR = "ERROR";
177  const std::string NODE_ADMIN_ERROR_MAIN_MSG_LOOP_STARTED = "Main messages loop started";
178  const std::string NODE_ADMIN_ERROR_MAIN_MSG_LOOP_STOPPED = "Main messages loop stopped";
179 
181  const std::string NODE_ADMIN_HANDLER = "Admin";
182 
184  const std::string NODE_FUNCTIONAL_ERROR_SPHINX = "SPHINX_FO_ERR";
185  const std::string NODE_FUNCTIONAL_ERROR_SPHINX_ADMIN = "SPHINX_FO_ADMIN_ERR";
186  const std::string NODE_FUNCTIONAL_ERROR_SPHINX_ADMIN_JSON_MSG = "{\"error_code\":\"1\", \"error_message\": \"Sphinx FO error\", \"data\":\"ERROR\", \"time\":\"-1\"}";
187  const std::string NODE_FUNCTIONAL_ERROR_SPHINX_INTERNAL_LOG_BEGIN = "\n!!!SPHINXFO!!![\n";
188  const std::string NODE_FUNCTIONAL_ERROR_SPHINX_INTERNAL_LOG_END = "\n]!!!SPHINXFO!!!\n";
189  const std::string NODE_CRITICAL_ERROR_MESSAGE = "Critical error, can't continue, execution aborted!";
190  const std::string NODE_FUNCTIONAL_ERROR_SPHINX_REDUCER = "SPHINX_REDUCER_FO_ERR";
191 
193  const std::string NODE_FUNCTIONAL_PROJECT_ROOT_DIR = "hce-node-bundle";
196  const unsigned int NODE_FUNCTIONAL_SPHINX_RANKER_0 = 0;
197  const std::string NODE_FUNCTIONAL_DRCE_TASKS_DATA_DIR = "data";
198  const std::string NODE_FUNCTIONAL_DRCE_TASKS_STATUS_DIR = "log";
199 
201  const std::string NODE_FUNCTIONAL_ERROR_DRCE = "DRCE_FO_ERR";
202  const std::string NODE_FUNCTIONAL_ERROR_DRCE_INTERNAL_LOG_BEGIN = "\n!!!DRCEFO!!![\n";
203  const std::string NODE_FUNCTIONAL_ERROR_DRCE_INTERNAL_LOG_END = "\n]!!!DRCEFO!!!\n";
204 
206  const std::string NODE_ADMIN_PROPERTY_NAME_LOG = "log";
207  const std::string NODE_ADMIN_PROPERTY_NAME_MMODE = "mode";
208  const std::string NODE_ADMIN_PROPERTY_HEARTBEAT_DELAY = "hb_delay";
209  const std::string NODE_ADMIN_PROPERTY_HEARTBEAT_TIMEOUT = "hb_timeout";
210  const std::string NODE_ADMIN_PROPERTY_HEARTBEAT_MODE = "hb_mode";
211  const std::string NODE_ADMIN_PROPERTY_POLL_TIMEOUT = "poll_timeout";
212  const std::string NODE_ADMIN_PROPERTY_PROPERTY_INTERVAL = "property_interval";
213  const std::string NODE_ADMIN_PROPERTY_DUMP_INTERVAL = "dump_interval";
214  const std::string NODE_ADMIN_PROPERTY_RESOURCES_COLLECTED_SIZE = "collected_size";
215 
223  const unsigned int RESOURCES_USAGE_COLLECTED_SIZE = 10;
226 
228  const std::string NODE_LOG_DEAFULT_TIME_FORMAT = "[%Y-%m-%d %H:%M:%s] ";
229  const int NODE_LOG_DEAFULT_MASK = 8+4+2+1;
230 
233 
235  const unsigned int PROPERTY_REALTIME_DEFAULT = 1;
236 
238  const unsigned int DUMP_ALLOWED_RESTORE = 1;
239 
241  const std::string DUMP_DIR = "/tmp/hce-node";
242 
244  typedef struct {
245  std::string bodies;
246  size_t count;
248 
249  namespace properties {
252  const std::string NAME = "name";
253  const std::string CLIENT_IDENTITY = "clientIdentity";
254  const std::string STARTED_AT = "startedAt";
255  const std::string LOG_PRIORITY = "logPriority";
256  const std::string INI_FILE = "iniFile";
257  const std::string CONNECTION_REBUILD_TRIES_MAX = "connectionRebuildTriesMax";
258  const std::string CONNECTION_REBUILD_TRIES_DELAY = "connectionRebuildTriesDelay";
259  const std::string CONNECTION_STRING = "connectionString";
260  const std::string POLL_TIMEOUT = "pollTimeout";
261  const std::string PROPERTY_INTERVAL = "node.property_interval";
262  const std::string DUMP_INTERVAL = "node.dump_interval";
263  const std::string DUMP_ALLOW_RESTORE = "node.dump_allow_restore";
264  const std::string DUMP_DIR = "node.dump_dir";
266  const std::string STAT_REQUESTS_TOTAL = "statRequestsTotal";
268  const std::string STAT_REQUESTS = "statRequests";
269  const std::string STAT_RESPONSES = "statResponses";
270  const std::string STAT_REQUESTS_SIZE = "statRequestsSize";
271  const std::string STAT_RESPONSES_SIZE = "statResponsesSize";
272  const std::string STAT_REQUESTS_PROCESSED = "statRequestsProcessed";
273  const std::string STAT_RESPONSES_PROCESSED = "statResponsesProcessed";
274  const std::string STAT_REQUESTS_PROCESSED_SIZE = "statRequestsProcessedSize";
275  const std::string STAT_RESPONSES_PROCESSED_SIZE = "statResponsesProcessedSize";
276  const std::string STAT_QPS = "statQPS";
277  const std::string STAT_RPS = "statRPS";
278  const std::string STAT_REQUESTS_BANDWIDTH = "statRequestsBandwidth";
279  const std::string STAT_RESPONSES_BANDWIDTH = "statResponsesBandwidth";
280  const std::string PSTATS_AT = "pstatsAt";
282  const std::string CLIENTS_NUMBER = "clientsNumber";
283  const std::string NODE_MODE = "nodeMode";
285  const std::string RESOURCES_USAGE_ALG = "node.resources_usage_alg";
286  const std::string RESOURCES_USAGE_ALG0_WEIGHTS = "node.resources_usage_alg0_weights";
287  const std::string RESOURCES_USAGE_USAGE_ORDER = "node.resources_usage_order";
288  const std::string RESOURCES_USAGE_LIMITS = "node.resources_usage_limits";
289  const std::string RESOURCES_USAGE_COLLECTED_SIZE = "node.resources_usage_collected_size";
290  const std::string RESOURCES_USAGE_MAX_ALLOWED_RANGE = "node.resources_usage_max_allowed_range";
291  const std::string DRCE_RESOURCES_EXTRACTOR_MAX_THREADS = "drce.drce_resources_extractor_max_threads";
292  const std::string DRCE_RESOURCES_EXTRACTOR_MAX_PROCESSES = "drce.drce_resources_extractor_max_processes";
293  const std::string DRCE_RESOURCES_EXTRACTOR_MAX_DISK_SIZE = "drce.drce_resources_extractor_max_disk_size";
294  const std::string DRCE_RESOURCES_EXTRACTOR_MAX_VRAM_SIZE = "drce.drce_resources_extractor_max_vram_size";
295  const std::string DRCE_RESOURCES_EXTRACTOR_MAX_RRAM_SIZE = "drce.drce_resources_extractor_max_rram_size";
296  const std::string STAT_CLIENT_REQUESTS = "statClientRequests";
297  const std::string STAT_CLIENT_RESPONSES = "statClientResponses";
298  const std::string STAT_CLIENT_REQUESTS_SIZE = "statClientRequestsSize";
299  const std::string STAT_CLIENT_RESPONSES_SIZE = "statClientResponsesSize";
300  const std::string PEREODIC_STAT_CLIENT_REQUESTS = "periodicStatClientRequests";
301  const std::string PEREODIC_STAT_CLIENT_RESPONSES = "periodicStatClientResponses";
302  const std::string PEREODIC_STAT_CLIENT_REQUESTS_SIZE = "periodicStatClientRequestsSize";
303  const std::string PEREODIC_STAT_CLIENT_RESPONSES_SIZE = "periodicStatClientResponsesSize";
304  const std::string STAT_QPS_CLIENT = "statQPSClient";
305  const std::string STAT_QPS_SERVER = "statQPSServer";
306  const std::string STAT_RPS_CLIENT = "statRPSClient";
307  const std::string STAT_RPS_SERVER = "statRPSServer";
308  const std::string STAT_REQUESTS_BANDWIDTH_CLIENT = "statRequestsBandwidthClient";
309  const std::string STAT_REQUESTS_BANDWIDTH_SERVER = "statRequestsBandwidthServer";
310  const std::string STAT_RESPONSES_BANDWIDTH_CLIENT = "statResponsesBandwidthClient";
311  const std::string STAT_RESPONSES_BANDWIDTH_SERVER = "statResponsesBandwidthServer";
313  const std::string HEARTBEAT_DELAY = "node.hb_delay";
314  const std::string HEARTBEAT_TIMEOUT = "node.hb_timeout";
315  const std::string HEARTBEAT_MODE = "node.hb_mode";
317  const std::string HEARTBEAT_AT = "heartbeatAt";
318  const std::string HEARTBEATED_AT = "heartbeatedAt";
320  const std::string DATA_CLIENT_SOCK_MODE = "dataClientSockMode";
322  const std::string NODE_NAME = "nodeName";
323  const std::string NODE_NUMBER = "node.number";
324  const std::string DATA_PROCESSING_MODE = "node.data_processing_mode";
325  const std::string DATA_PROCESSING_FAKE_RESULTS = "node.data_processing_fake_results";
326  const std::string DATA_PROCESSING_FAKE_RESULTS_MAX = "node.data_processing_fake_max_results";
327 
328  const std::string STAT_SPHINX_REQUESTS_SEARCH = "statSphinxRequestsSearch";
329  const std::string STAT_SPHINX_REQUESTS_ADMIN = "statSphinxRequestsAdmin";
330  const std::string STAT_SPHINX_TIME_TOTAL_SEARCH = "statSphinxTimeTotalSearch";
331  const std::string STAT_SPHINX_TIME_TOTAL_ADMIN = "statSphinxTimeTotalAdmin";
332  const std::string STAT_DRCE_REQUESTS = "statDRCERequests";
333  const std::string STAT_DRCE_TIME_TOTAL = "statDRCETimeTotal";
334 
335  const std::string SPHINX_HOME_DIR = "sphinx.home_dir";
336  const std::string SPHINX_DEFAULT_INDEX = "sphinx.default_index";
337  const std::string SPHINX_START_SEARCHD = "sphinx.start_searchd";
338  const std::string SPHINX_STOP_SEARCHD = "sphinx.stop_searchd";
339  const std::string SPHINX_RANKER = "sphinx.ranker";
340  const std::string SPHINX_RANKER_EXPRESSION = "sphinx.ranker_expression";
341 
342  const std::string SPHINX_INDEX_NAME = "sphinx.indexName";
343  const std::string SPHINX_SEARCHD_HOST = "sphinx.searchdHost";
344  const std::string SPHINX_SEARCHD_PORT = "sphinx.searchdPort";
345  const std::string SPHINX_TIMEOUTED_REQUESTS = "sphinx.timeoutedRequests";
346  const std::string SPHINX_NODE_NUMBER = "sphinx.nodeNumber";
347  const std::string SPHINX_NODE_NAME = "sphinx.nodeName";
348 
349  const std::string DRCE_HOME_DIR = "drce.home_dir";
350  const std::string DRCE_TASKS_DATA_DIR = "drce.tasks_data_dir";
351  const std::string DRCE_TASKS_STATUS_DIR = "drce.tasks_status_dir";
352  const std::string DRCE_NODE_HOST = "drce.node_host";
353  const std::string DRCE_NODE_PORT = "drce.node_port";
354  const std::string DRCE_MAX_THREADS = "drce.max_threads";
355  const std::string DRCE_TASKS_QUEUE_DUMP_PERIOD = "drce.tasks_queue_dump_period";
356  const std::string DRCE_RESOURCES_MONITOR_PERIOD = "drce.resources_monitor_period";
357  const std::string DRCE_STATE_NOTIFICATION_HOST = "drce.state_notification_host";
358  const std::string DRCE_STATE_NOTIFICATION_PORT = "drce.state_notification_port";
359  const std::string DRCE_STATE_NOTIFICATION_RESET_ERROR_CODE = "drce.state_notification_reset_error_code";
360  const std::string DRCE_ENV_VARS = "drce.env_vars";
361 
362  const std::string DRCE_NODE_NAME = "drce.nodeName";
363  const std::string DRCE_TASK_DATA_DIR = "tasksDataDir";
364  const std::string DRCE_TASK_STATUS_DIR = "tasksStatusDir";
365  const std::string DRCE_MAX_THREAD_COUNT = "maxThreadCount";
366  const std::string DRCE_TASK_QUEUE_DUMP_PERIOD = "tasksQueueDumpPeriod";
367  const std::string DRCE_RESOURCE_MONITOR_TIME_PERIOD = "resourceMonitorTimePeriod";
368 
369  }
370  }
371 
372  const std::string DRCE_FAKE_RESPONSE =
373  "[{"
374  " \"error_code\": 1,"
375  " \"error_message\": \"!!!FAKE JSON!!!\","
376  " \"id\": 12345,"
377  " \"type\": 1,"
378  " \"host\": \"\","
379  " \"port\": 0,"
380  " \"state\": 0,"
381  " \"pid\": 0,"
382  " \"stdout\": \"\","
383  " \"stderror\": \"\","
384  " \"exit_status\": \"\","
385  " \"files\": [],"
386  " \"node\": \"FAKE NODE\","
387  " \"time\": 0"
388  "}]";
389 }
390 
391 #endif /* __HCE_HANDLER_TYPES_INCLUDED__ */