arangodb erlang数据库驱动
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

214 lines
5.7 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. %% agency 管理进程的名称
  2. -define(agAgencyPoolMgr, agAgencyPoolMgr).
  3. %% beam cache 模块名
  4. -define(agBeamPool, agBeamPool).
  5. -define(agBeamAgency, agBeamAgency).
  6. -define(AgUndef, 0). %% Wait One Chunk start
  7. -define(AgCHeader, 1). %% Wait One Chunk header
  8. -define(AgCBody, 2). %% Wait One Chunk Body
  9. -define(AgCBodyStart, 3). %% Ret Start Wait One Chunk Body
  10. -define(AgCBodyGoOn, 4). %% Ret Go On Wait One Chunk Body
  11. %% IMY-todo 考虑多个消息回复的的时候 如果有消息 此时进程自动可能不存在 需要重新订阅获取
  12. %% pidFrom pid() to reply; undefiend discard; waitSend 起送定时器等待requester来获取 过期就删除
  13. -record(msgIdCache, {pidFrom, timerRef, chunkCnt, msgBuffer}).
  14. -define(AgMBIdx, 4).
  15. -define(AgCCIdx, 3).
  16. -define(AgHeaderSize, 24).
  17. %% 默认选项定义
  18. -define(AgDefBaseUrl, <<"http://127.0.0.1:8529">>).
  19. -define(AgDefDbName, <<"_system">>).
  20. -define(AgDefUser, <<"root">>).
  21. -define(AgDefPassWord, <<"156736">>).
  22. -define(AgDefBacklogSize, 1024).
  23. -define(AgDefConnTimeout, 5000).
  24. -define(AgDefPoolSize, 16).
  25. -define(AgDefIsReConn, true).
  26. -define(AgDefReConnMin, 500).
  27. -define(AgDefReConnMax, 120000).
  28. -define(AgDefTimeout, infinity).
  29. -define(AgDefPid, self()).
  30. -define(AgDefSocketOpts, [binary, {active, true}, {nodelay, true}, {delay_send, true}, {keepalive, true}, {recbuf, 1048576}, {send_timeout, 5000}, {send_timeout_close, true}]).
  31. -define(AgGetListKV(Key, List), agMiscUtils:getListValue(Key, List, undefined)).
  32. -define(AgGetListKV(Key, List, Default), agMiscUtils:getListValue(Key, List, Default)).
  33. -define(AgWarn(Tag, Format, Data), agMiscUtils:warnMsg(Tag, Format, Data)).
  34. -define(AgMDoNetConn, mDoNetConn).
  35. -record(agReq, {
  36. method :: method()
  37. , path :: path()
  38. , queryPars :: queryPars()
  39. , headers :: headers()
  40. , body :: body()
  41. , messageId :: pos_integer()
  42. , fromPid :: pid()
  43. , overTime = infinity :: timeout()
  44. , isSystem = false :: boolean()
  45. }).
  46. -record(agReqRet, {
  47. messageId :: messageId(),
  48. reply :: term()
  49. }).
  50. -record(reConnState, {
  51. min :: non_neg_integer(),
  52. max :: non_neg_integer() | infinity,
  53. current :: non_neg_integer() | undefined
  54. }).
  55. -record(srvState, {
  56. poolName :: poolName(),
  57. serverName :: serverName(),
  58. userPassWord :: binary(),
  59. host :: binary(),
  60. dbName :: binary(),
  61. reConnState :: undefined | reConnState(),
  62. socket :: undefined | ssl:sslsocket(),
  63. timerRef :: undefined | reference()
  64. }).
  65. -record(cliState, {
  66. backlogSize = 0 :: integer(),
  67. revStatus = ?AgUndef :: pos_integer(),
  68. backlogNum = 0 :: integer(),
  69. messageId = 0 :: pos_integer(),
  70. chunkIdx = 0 :: pos_integer(),
  71. chunkSize = 0 :: pos_integer(),
  72. chunkBuffer = <<>> :: binary()
  73. }).
  74. -record(recvState, {
  75. revStatus = ?AgUndef :: pos_integer(),
  76. messageId = 0 :: pos_integer(),
  77. msgBuffer = <<>> :: binary(),
  78. chunkIdx = 0 :: pos_integer(),
  79. chunkSize = 0 :: pos_integer(),
  80. chunkBuffer = <<>> :: binary()
  81. }).
  82. -record(dbOpts, {
  83. host :: host(),
  84. port :: 0..65535,
  85. hostname :: hostName(),
  86. dbName :: binary(),
  87. protocol :: protocol(),
  88. poolSize :: poolSize(),
  89. userPassword :: binary(),
  90. socketOpts :: socketOpts()
  91. }).
  92. -record(agencyOpts, {
  93. reconnect :: boolean(),
  94. backlogSize :: backlogSize(),
  95. reConnTimeMin :: pos_integer(),
  96. reConnTimeMax :: pos_integer()
  97. }).
  98. -type miRequest() :: #agReq{}.
  99. -type miRequestRet() :: #agReqRet{}.
  100. -type srvState() :: #srvState{}.
  101. -type cliState() :: #cliState{}.
  102. -type reConnState() :: #reConnState{}.
  103. -type poolName() :: atom().
  104. -type poolNameOrSocket() :: atom() | socket().
  105. -type serverName() :: atom().
  106. -type protocol() :: ssl | tcp.
  107. -type method() :: binary().
  108. -type queryPars() :: map().
  109. -type headers() :: map().
  110. -type body() :: iodata() | undefined.
  111. -type path() :: binary().
  112. -type host() :: binary().
  113. -type hostName() :: string().
  114. -type poolSize() :: pos_integer().
  115. -type backlogSize() :: pos_integer() | infinity.
  116. -type messageId() :: pos_integer().
  117. -type socket() :: inet:socket() | ssl:sslsocket().
  118. -type socketOpts() :: [gen_tcp:connect_option() | ssl:tls_client_option()].
  119. -type error() :: {error, term()}.
  120. -type dbCfg() ::
  121. {baseUrl, binary()} |
  122. {dbName, binary()} |
  123. {user, binary()} |
  124. {password, binary()} |
  125. {poolSize, poolSize()} |
  126. {socketOpts, socketOpts()}.
  127. -type agencyCfg() ::
  128. {reconnect, boolean()} |
  129. {backlogSize, backlogSize()} |
  130. {reConnTimeMin, pos_integer()} |
  131. {reConnTimeMax, pos_integer()}.
  132. -type dbCfgs() :: [dbCfg()].
  133. -type dbOpts() :: #dbOpts{}.
  134. -type agencyCfgs() :: [agencyCfg()].
  135. -type agencyOpts() :: #agencyOpts{}.
  136. %% http header 头
  137. %% -type header() ::
  138. %% 'Cache-Control' |
  139. %% 'Connection' |
  140. %% 'Date' |
  141. %% 'Pragma'|
  142. %% 'Transfer-Encoding' |
  143. %% 'Upgrade' |
  144. %% 'Via' |
  145. %% 'Accept' |
  146. %% 'Accept-Charset'|
  147. %% 'Accept-Encoding' |
  148. %% 'Accept-Language' |
  149. %% 'Authorization' |
  150. %% 'From' |
  151. %% 'Host' |
  152. %% 'If-Modified-Since' |
  153. %% 'If-Match' |
  154. %% 'If-None-Match' |
  155. %% 'If-Range'|
  156. %% 'If-Unmodified-Since' |
  157. %% 'Max-Forwards' |
  158. %% 'Proxy-Authorization' |
  159. %% 'Range'|
  160. %% 'Referer' |
  161. %% 'User-Agent' |
  162. %% 'Age' |
  163. %% 'Location' |
  164. %% 'Proxy-Authenticate'|
  165. %% 'Public' |
  166. %% 'Retry-After' |
  167. %% 'Server' |
  168. %% 'Vary' |
  169. %% 'Warning'|
  170. %% 'Www-Authenticate' |
  171. %% 'Allow' |
  172. %% 'Content-Base' |
  173. %% 'Content-Encoding'|
  174. %% 'Content-Language' |
  175. %% 'Content-Length' |
  176. %% 'Content-Location'|
  177. %% 'Content-Md5' |
  178. %% 'Content-Range' |
  179. %% 'Content-Type' |
  180. %% 'Etag'|
  181. %% 'Expires' |
  182. %% 'Last-Modified' |
  183. %% 'Accept-Ranges' |
  184. %% 'Set-Cookie'|
  185. %% 'Set-Cookie2' |
  186. %% 'X-Forwarded-For' |
  187. %% 'Cookie' |
  188. %% 'Keep-Alive' |
  189. %% 'Proxy-Connection' |
  190. %% binary() |
  191. %% string().