Web Connectors Common Features
Common Web Connector Settings
| Name | Default Value | Description |
|---|---|---|
| attributeKey | The column prefix for connector-related attributes in securities stream. | |
| eventExchange | Exchange name which is returned in order events. Alphanumeric. | |
| ➡️ Connectivity | ||
| reconnectInterval | 5000 | Reconnect interval in milliseconds. |
| websocketEventTimeout | 1m | Timeout for websocket events verification after first request, if not received force reconnect will be initiated. |
| ➡️ Order Sync | ||
| syncSettings.syncInterval | 5m | Order synchronization interval. |
| syncSettings.orderUpdateAge | 30s | Order should be older than this period for adding to synchronization. |
| ➡️ Lost Order Sync | ||
| unackOrderSettings.minUnackOrderAge | 0m | Order should be older than this period for adding to lost orders searching. |
| unackOrderSettings.maxUnackOrderAge | 5m | Not found unacknowledged (lost) orders will be discarded after this period. |
| unackOrderSettings.maxUncertainReplaceAge | 30s | Not found "uncertain" replacements will be considered as rejected after this time interval. |
| unackOrderSettings.maxHistoryDepth | 5h | Max history depth for searching lost orders. |
HTTP Request Routing
Some exchanges have IP-bound rate limits. To work around this limitation, crypto connectors can route HTTP requests via multiple internal IP addresses or proxy servers. HTTP requests are distributed across IPs or proxies in round-robin fashion.
Multiple Internal IP Addresses
settings : {
IPAddresses = ["10.0.1.31", "10.0.1.203"]
}
Upon restart you should see logging like below:
2021-11-06 07:32:32.826 INFO [main]: (BINANCE) Use IP Address: /10.0.1.31
2021-11-06 07:32:32.826 INFO [main]: (BINANCE) Use IP Address: /10.0.1.203
Multiple Proxy Servers
settings : {
proxyServers = [
{
host = "10.0.1.22"
port = 80
},
{
host = "10.0.1.33"
port = 80
username = "user"
password = "pass"
type = SOCKS_V5 # HTTP, SOCKS_V4, SOCKS_V5
}
]
}
Logging
Connector Logger Name
Entire crypto connectors logging can be enabled via pattern ember.connector.<type>.<name>.
For example, for BitMEX connector (plugin key crypto-bitmex), logger name should be ember.connector.crypto.bitmex
<logger name="ember.connector.crypto.bitmex" level="DEBUG">
<appender-ref ref="safeAppender"/>
</logger>
Connector Message Log
Multiple output destinations can be configured for connector messages.
By default only file appender is configured ($EMBER_WORK/connectors/<CONNECTOR-NAME> folder).
Example:
# there are two "appenders" are configured for connector (FILE and GF)
log {
filelogs: [
{
path = null # null means $EMBER_WORK/connectors/<CONNECTOR-NAME>/<CONNECTOR-NAME>.log
bufferSize = 4M
maxFiles = 10
maxFileSize = 1G
}
]
gflogs: [
{
logger = null # null means default connector logger name
level = INFO
}
]
}
# disable connector message log
log = null
HTTP Request Logging
Use the logger below to output low-level HTTP request info:
<logger name="org.asynchttpclient.netty.request" level="DEBUG">
<appender-ref ref="composite"/>
</logger>
The logger to track connection pool activity:
<logger name="org.asynchttpclient.netty.channel" level="DEBUG">
<appender-ref ref="composite"/>
</logger>
<logger name="org.asynchttpclient.netty.handler" level="DEBUG">
<appender-ref ref="composite"/>
</logger>
Tools
Order Ack RTT Statistics
ConnectorLogProcessor calculates order acknowledgement RTT statistics for order submissions.
It creates a file named common-stats.txt containing statistics for all processed orders.
Additional files named <CONNECTOR-NAME>.txt contain statistics for each connector instance.
These files can be opened via the HdrHistogram webpage for charting.
ConnectorLogProcessor Arguments:
| Arguments | Required | Description |
|---|---|---|
| --vendor <vendor> | Y | The connector's vendor. Valid values: DERIBIT, HYPERLIQD. |
| --connectors <connectors> | N | The connector names delimited by comma. The vendor name is used by default. |
| --max-delay <max_delay> | N | Skip all values greater than --max-delay. The default value: 1000 (milliseconds). |
| --log-dir <log_folder> | N | The root directory for connectors logs. $EMBER_WORK/connectors is used by default. |
| --output-dir <result_folder> | N | The output directory. $EMBER_WORK is used by default. |
| --start-date <start_date> | N | The start date to filter logs by date using yyyy-mm-dd format. Example 2024-08-19. |
| --end-date <end_date> | N | The end date to filter logs by date using yyyy-mm-dd format. Example 2024-08-20. |
| --start-time <start_time> | N | The start time to filter orders by time using hh:mm:ss format. Example 00:00:00. |
| --end-time <end_time> | N | The end time to filter orders by time using hh:mm:ss format. Example 23:59:59. |
Usage example:
- Docker
- Windows
JAVA_OPTS="--add-opens=java.base/sun.nio.ch=ALL-UNNAMED"
MAIN_CLASS="deltix.ember.connector.common.stats.ConnectorLogProcessor"
ARGS="--start-date 2024-11-01 --end-date 2024-11-05 --vendor DERIBIT --output-dir /var/lib/emberwork/stats"
docker compose exec ember java $JAVA_OPTS -cp /opt/deltix/ember/lib/*:/opt/deltix/ember/lib/custom/* $MAIN_CLASS $ARGS
export EMBER_INSTALL=<ember-install>
export EMBER_WORK=<ember-work>
java -cp $EMBER_INSTALL/lib/*:$EMBER_INSTALL/lib/custom/* \
deltix.ember.connector.common.stats.ConnectorLogProcessor \
--start-time 14:00:00 --end-time 16:30:00 \
--start-date 2024-11-01 --end-date 2024-11-05 \
--vendor DERIBIT