diff --git a/src/agApi/agAdminMonitor.erl b/src/agApi/agAdminMonitor.erl index 65059b2..15a69ed 100644 --- a/src/agApi/agAdminMonitor.erl +++ b/src/agApi/agAdminMonitor.erl @@ -226,7 +226,7 @@ getAdminServerAvailability(PoolNameOrSocket) -> % 400:数据库服务器的ID % 403: getAdminClusterProps(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/clusterStatistics">>, QueryPars). XXXXXX + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/clusterStatistics">>, QueryPars). % 查询集群的运行状况以监视Permalink % 返回由监督(机构)评估的集群的运行状况 @@ -257,7 +257,22 @@ getAdminClusterProps(PoolNameOrSocket, QueryPars) -> % 返回码 % 200: getAdminClusterHealth(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/cluster/health">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/cluster/health">>). + +% 其他 +% 压缩整个数据库系统数据 +% PUT /_admin/compact +% 此命令会导致对所有数据库中的所有数据进行完全重写,这对于大型数据库可能需要很长时间。因此,只有在可以长时间承受额外 I/O 负载的情况下,才应谨慎使用它。 +% 需要具有这些属性的 JSON 对象: +% changeLevel : 压缩的数据是否应该移动到最低可能的级别。默认值为false。 +% compactBottomMostLevel : 是否压缩最底层的数据。默认值为false。 +% +% 此端点可用于在发生大量数据删除后回收磁盘空间。它需要超级用户访问权限。 +% 返回代码 +% 200:压缩成功启动 +% 401:如果请求没有被认证为具有足够权限的用户 +compactSystemData(PoolNameOrSocket) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_admin/compact">>). % 重新加载路由表。 % POST /_admin/routing/reload @@ -265,4 +280,22 @@ getAdminClusterHealth(PoolNameOrSocket) -> % 返回码 % 200:路由信息重新加载成功 reloadAdminRouting(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/routing/reload">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/routing/reload">>). + + +% 指标 API v2 +% 返回当前实例指标 +% GET /_admin/metrics/v2 +% 查询参数 +% serverId(可选):返回指定服务器的指标。如果没有给出 serverId,被询问的服务器将回复。这个参数只对 Coordinator 有意义。 +% 以 Prometheus 格式返回实例的当前指标。返回的文档收集所有实例指标,这些指标在任何给定时间进行测量,并将它们公开以供 Prometheus 收集。 +% 该文档包含不同的指标和指标组,具体取决于所查询实例的角色。所有导出的指标都使用前缀发布,arangodb_以将它们与其他收集的数据区分开来。 +% 然后需要将 API 添加到 Prometheus 配置文件中进行收集。 +% 返回代码 +% 200:成功返回指标。 +% 404:可以使用--server.export-metrics-api false 服务器中的设置禁用指标 API 。在这种情况下,调用的结果表明找不到 API。 +metricsV2(PoolNameOrSocket) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/metrics/v2">>). + +metricsV2(PoolNameOrSocket, QueryPars) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/metrics/v2">>, QueryPars). diff --git a/src/agApi/agAqls.erl b/src/agApi/agAqls.erl index dfa1f43..12f2a87 100644 --- a/src/agApi/agAqls.erl +++ b/src/agApi/agAqls.erl @@ -175,8 +175,7 @@ explainQuery(PoolNameOrSocket, MapData) -> % 200:如果查询有效,服务器将使用HTTP 200进行响应,并在响应的bindVars属性中返回在查询中找到的绑定参数的名称(如果有)。它还将在collections属性中返回查询中使用的collections的数组。如果查询可以成功解析,则返回的JSON 的ast属性将包含查询的抽象语法树表示形式。ast的格式在将来的ArangoDB版本中可能会发生变化,但是可以用来检查ArangoDB如何解释给定查询。请注意,将在不对其应用任何优化的情况下返回抽象语法树。 % 400:如果请求格式错误或查询包含解析错误,服务器将以HTTP 400响应。响应的正文将包含嵌入在JSON对象中的错误详细信息。 parseQuery(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/query">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/query">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 查询跟踪固定链接 % ArangoDB具有HTTP接口,用于检索当前正在执行的AQL查询列表和慢速AQL查询列表。为了有意义地使用这些API,需要在执行HTTP请求的数据库中启用查询跟踪。 @@ -211,8 +210,7 @@ getQueryProps(PoolNameOrSocket) -> % 200:如果属性更改成功,则返回。 % 400:如果请求格式错误,服务器将以HTTP 400进行响应, changeQueryProps(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/query/properties">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/query/properties">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 返回当前运行的 AQL 查询 % GET /_api/query/current diff --git a/src/agApi/agDocuments.erl b/src/agApi/agDocuments.erl index 787dc45..278c568 100644 --- a/src/agApi/agDocuments.erl +++ b/src/agApi/agDocuments.erl @@ -443,13 +443,11 @@ replaceDocs(PoolNameOrSocket, CollName, MapDataList, QueryPars) -> % 404:如果找不到集合,则返回。 updateDocs(PoolNameOrSocket, CollName, MapDataList) -> Path = <<"/_api/document/", CollName/binary>>, - BodyStr = eVPack:encodeBin(MapDataList), - agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapDataList)). updateDocs(PoolNameOrSocket, CollName, MapDataList, QueryPars) -> Path = <<"/_api/document/", CollName/binary>>, - BodyStr = eVPack:encodeBin(MapDataList), - agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, Path, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, Path, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapDataList)). % 删除多个文件 % DELETE /_api/document/{collection} @@ -472,10 +470,8 @@ updateDocs(PoolNameOrSocket, CollName, MapDataList, QueryPars) -> % 404:如果找不到集合,则返回。在这种情况下,响应主体包含一个错误文档。 delDocs(PoolNameOrSocket, CollName, KeyOrMapDataList) -> Path = <<"/_api/document/", CollName/binary>>, - BodyStr = eVPack:encodeBin(KeyOrMapDataList), - agVstCli:callAgency(PoolNameOrSocket, ?AgDelete, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgDelete, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(KeyOrMapDataList)). delDocs(PoolNameOrSocket, CollName, KeyOrMapDataList, QueryPars) -> Path = <<"/_api/document/", CollName/binary>>, - BodyStr = eVPack:encodeBin(KeyOrMapDataList), - agVstCli:callAgency(PoolNameOrSocket, ?AgDelete, Path, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgDelete, Path, QueryPars, ?AgDefHeader, eVPack:encodeBin(KeyOrMapDataList)). diff --git a/src/agApi/agEndPoints.erl b/src/agApi/agEndPoints.erl index 4dc621a..746719c 100644 --- a/src/agApi/agEndPoints.erl +++ b/src/agApi/agEndPoints.erl @@ -27,17 +27,4 @@ % 端点:协调器的绑定,例如tcp://[::1]:8530 % 501: getClusterEndpoints(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/cluster/endpoints">>, ?AgDefQuery, true). - -% 所有端点的返回列表永久链接 -% 此API调用返回所有端点(单个服务器)的列表。 -% GET /_api/endpoint -% 此路由不应再使用。从3.4.0版开始,它被视为已弃用。 -% 返回服务器正在侦听的所有已配置端点的数组。 -% 结果是一个JSON对象的JSON数组,每个对象均带有“ entrypoint”作为唯一属性,并且值是描述端点的字符串。 -% 注意:仅在系统数据库中允许检索所有端点的数组。在任何其他数据库中调用此操作将使服务器返回错误。 -% 返回码 -% 200:可以成功确定端点数组时返回。 -% 400:如果未在系统数据库中执行该操作,则返回。 -% 405:如果使用了不受支持的HTTP方法,则服务器将以HTTP 405进行响应。 - + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/cluster/endpoints">>, ?AgDefQuery, ?AgDefHeader, ?AgDefBody, true). \ No newline at end of file diff --git a/src/agApi/agFoxxServices.erl b/src/agApi/agFoxxServices.erl index 3c3e21c..ab625dc 100644 --- a/src/agApi/agFoxxServices.erl +++ b/src/agApi/agFoxxServices.erl @@ -55,14 +55,14 @@ getFoxxList(PoolNameOrSocket, QueryPars) -> % 200:如果请求成功,则返回。 % 400:如果安装路径未知,则返回。 getFoxxService(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/foxx/service">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/foxx/service">>, QueryPars). % 安装新服务 % POST /_api/foxx % 查询参数 % mount(必需):应在其中安装服务的安装路径。 -% 开发(可选):设置true为启用开发模式。 -% 安装程序(可选):设置为false不运行服务的安装脚本。 +% development (可选):设置true为启用开发模式。 +% setup (可选):设置为false不运行服务的安装脚本。 % legacy(可选):设置为true以2.8旧版兼容性模式安装服务。 % 在给定的安装路径上安装给定的新服务。 % 请求主体可以是以下任何格式: @@ -81,8 +81,7 @@ getFoxxService(PoolNameOrSocket, QueryPars) -> % 返回码 % 201:如果请求成功,则返回。 installFoxx(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/foxx">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/foxx">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % 卸载服务 % DELETE /_api/foxx/service @@ -122,8 +121,7 @@ uninstallFoxx(PoolNameOrSocket, QueryPars) -> % 返回码 % 200:如果请求成功,则返回。 replaceFoxx(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/foxx/service">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/foxx/service">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % 升级服务 % PATCH /_api/foxx/service @@ -151,8 +149,7 @@ replaceFoxx(PoolNameOrSocket, MapData, QueryPars) -> % 返回码 % 200:如果请求成功,则返回。 upgradeFoxx(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, <<"/_api/foxx/service">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, <<"/_api/foxx/service">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % Foxx服务配置/依赖关系 % 这是用于管理Foxx服务配置和依赖关系的ArangoDB HTTP接口的简介。 @@ -179,8 +176,7 @@ getFoxxConfig(PoolNameOrSocket, QueryPars) -> % 返回码 % 200:如果请求成功,则返回。 updateFoxxConfig(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, <<"/_api/foxx/configuration">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, <<"/_api/foxx/configuration">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % 替换配置选项 % PUT /_api/foxx/configuration @@ -193,8 +189,7 @@ updateFoxxConfig(PoolNameOrSocket, MapData, QueryPars) -> % 返回码 % 200:如果请求成功,则返回。 replaceFoxxConfig(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/foxx/configuration">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/foxx/configuration">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % 获取依赖项选项 % GET /_api/foxx/dependencies @@ -219,8 +214,7 @@ getFoxxDependencies(PoolNameOrSocket, QueryPars) -> % 返回码 % 200:如果请求成功,则返回。 updateFoxxDependencies(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, <<"/_api/foxx/dependencies">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, <<"/_api/foxx/dependencies">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % 替换依赖项选项 % PUT /_api/foxx/dependencies @@ -233,8 +227,7 @@ updateFoxxDependencies(PoolNameOrSocket, MapData, QueryPars) -> % 返回码 % 200:如果请求成功,则返回。 replaceFoxxDependencies(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/foxx/dependencies">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/foxx/dependencies">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % Foxx服务杂项 % @@ -262,9 +255,8 @@ getFoxxScripts(PoolNameOrSocket, QueryPars) -> % 返回码 % 200:如果请求成功,则返回。 runFoxxScripts(PoolNameOrSocket, ScriptName, MapData, QueryPars) -> - Path = <<"/_api/foxx/scripts/", ScriptName/binary>>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, Path, QueryPars, ?AgDefHeader, BodyStr). + Path = <<"/_api/foxx/scripts/", ScriptName/binary>>, + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, Path, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % 运行服务测试 % POST /_api/foxx/tests diff --git a/src/agApi/agGraphs.erl b/src/agApi/agGraphs.erl index f456b2f..791d5c1 100644 --- a/src/agApi/agGraphs.erl +++ b/src/agApi/agGraphs.erl @@ -182,9 +182,8 @@ vertexCollList(PoolNameOrSocket, GraphName) -> %% MapData = #{"collection" => "otherVertices"} addVertexColl(PoolNameOrSocket, GraphName, MapData) -> - Path = <<"/_api/gharial/", GraphName/binary, "/vertex">>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + Path = <<"/_api/gharial/", GraphName/binary, "/vertex">>, + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 从图形中删除额外顶点集合。 % DELETE /_api/gharial/{graph}/vertex/{collection} @@ -279,9 +278,8 @@ edgeDefList(PoolNameOrSocket, GraphName) -> % errorNum:发生错误的ArangoDB错误号。 % errorMessage:为此错误创建的消息。 addEdgeDef(PoolNameOrSocket, GraphName, MapData) -> - Path = <<"/_api/gharial/", GraphName/binary, "/edge">>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + Path = <<"/_api/gharial/", GraphName/binary, "/edge">>, + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 替换现有的边缘定义 % PUT /_api/gharial/{graph}/edge/{definition}#definition diff --git a/src/agApi/agHotBackup.erl b/src/agApi/agHotBackup.erl index ae087b3..aed6cde 100644 --- a/src/agApi/agHotBackup.erl +++ b/src/agApi/agHotBackup.erl @@ -30,8 +30,7 @@ % 400:如果使用错误的参数或除之外的任何HTTP方法调用了create命令POST,则返回HTTP 400。具体细节在返回的错误文档中有详细说明。 % 408:如果操作无法在超时时间内获得全局事务锁定,则返回HTTP 408。 newBackup(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/create">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/create">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 从本地备份还原 % POST /_admin/backup/restore @@ -42,8 +41,7 @@ newBackup(PoolNameOrSocket, MapData) -> % 200:如果可以恢复备份,则返回。请注意,单个服务器和群集之间不可避免存在差异。在单个服务器中,请求成功返回,但是还原仅在之后执行。在集群中,仅在成功完成还原操作后才返回请求。群集行为显然是所需的行为,但是在单个实例中,无法在重新启动期间保持连接打开。 % 400:如果使用错误的参数或除以外的任何HTTP方法调用了restore命令POST,则返回HTTP 400。具体细节在返回的错误文档中有详细说明。 restoreBackup(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/restore">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/restore">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 删除特定的本地备份 % POST /_admin/backup/delete @@ -55,8 +53,7 @@ restoreBackup(PoolNameOrSocket, MapData) -> % 400:如果使用错误的参数或除以外的任何HTTP方法调用delete命令POST,则返回HTTP 400。 % 404:如果id找不到与该标识符相对应的备份。 delBackup(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/delete">>,?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/delete">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 列出所有本地备份 % POST /_admin/backup/list @@ -93,8 +90,7 @@ getBackupList(PoolNameOrSocket) -> % 401:如果对转储存储库的身份验证失败,则返回HTTP 400。 % 404:如果id 找不到对应于标识符的备份,或者没有已知的上载操作uploadId。 uploadBackup(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/upload">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/upload">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 下载特定的本地备份 % POST /_admin/backup/download @@ -112,5 +108,4 @@ uploadBackup(PoolNameOrSocket, MapData) -> % 401:如果对转储存储库的身份验证失败,则返回HTTP 401。 % 404:如果id 找不到与该标识符相对应的备份,或者如果没有已知的与的下载操作downloadId。 downloadBackup(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/download">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/backup/download">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). diff --git a/src/agApi/agMiscFuns.erl b/src/agApi/agMiscFuns.erl index d5858be..5c3adfb 100644 --- a/src/agApi/agMiscFuns.erl +++ b/src/agApi/agMiscFuns.erl @@ -111,8 +111,7 @@ getWalProps(PoolNameOrSocket) -> % 200:操作成功返回。 % 405:使用无效的HTTP方法时返回。 setWalProps(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_admin/wal/properties">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_admin/wal/properties">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 返回有关当前正在运行的事务的信息 % GET /_admin/wal/transactions @@ -167,8 +166,7 @@ curDbTime(PoolNameOrSocket) -> % path:此请求的相对路径 % rawRequestBody:已发送字符的数字列表 echo(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/echo">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/echo">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 返回数据库的版本。 % GET /_admin/database/target-version @@ -183,9 +181,35 @@ targetVersion(PoolNameOrSocket) -> % 此调用将启动干净的关机序列。需要管理权限 % 返回码 % 200:在所有情况下OK都将返回,成功时将在结果缓冲区中返回。 -shutDown(PoolNameOrSocket) -> +doShutdown(PoolNameOrSocket) -> agVstCli:callAgency(PoolNameOrSocket, ?AgDelete, <<"/_admin/shutdown">>). +% 查询软关机进程进度 +% +% GET /_admin/shutdown +% 引入:v3.7.12、v3.8.1、v3.9.0 +% 此调用报告有关软协调器关闭的进度(请参阅 的文档DELETE /_admin/shutdown?soft=true)。在这种情况下,将跟踪以下类型的操作: +% AQL 游标(特别是流游标) +% 交易(特别是流交易) +% Pregel 运行(由该协调员进行) +% 正在进行的异步请求(使用x-arango-async: storeHTTP 标头 +% 已完成的异步请求,其结果尚未收集 +% 排队的低优先级请求(最正常的请求) +% 正在进行的低优先级请求 +% 此 API 仅在协调器上可用。 +% HTTP 200响应表明软关机正在进行以及各种类型的活动操作数。一旦所有数字都变为 0,allClear则设置标志并且协调器自动关闭。 +% softShutdownOngoing:是否正在进行协调器的软关闭。 +% AQLcursors:仍处于活动状态的 AQL 游标数。 +% Transactions :正在进行的交易数量。 +% pendingJobs:正在进行的异步请求的数量。 +% doneJobs:已完成的异步请求数,其结果尚未收集。 +% pregelConductors:正在进行的 Pregel 作业的数量。 +% lowPrioOngoingRequests:排队的低优先级请求的数量。 +% lowPrioQueuedRequests:正在进行的低优先级请求的数量。 +% allClear : 所有活动操作是否完成。 +infoShutdown(PoolNameOrSocket) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/shutdown">>). + % 在服务器上执行脚本。 % POST /_admin/execute @@ -198,8 +222,8 @@ shutDown(PoolNameOrSocket) -> % 200:一切正常或发生超时时返回。在后一种情况下,将返回指示超时的application / json类型的主体。根据returnAsJSON的不同,这是一个json对象或纯字符串。 % 403:如果ArangoDB不在集群模式下运行,则返回。 % 404:如果未为群集操作编译ArangoDB,则返回404。 -execute(PoolNameOrSocket, BodyStr) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/execute">>, ?AgDefQuery, ?AgDefHeader, BodyStr). +execute(PoolNameOrSocket, Script) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/execute">>, ?AgDefQuery, ?AgDefHeader, eVPack:decode(Script)). % 返回服务器的状态信息。 % GET /_admin/status diff --git a/src/agApi/agRepairJobs.erl b/src/agApi/agRepairJobs.erl deleted file mode 100644 index 3e3ad80..0000000 --- a/src/agApi/agRepairJobs.erl +++ /dev/null @@ -1,75 +0,0 @@ --module(agRepairJobs). --include("eArango.hrl"). - --compile(inline). --compile({inline_size, 128}). --compile([export_all, nowarn_export_all]). - -%% doc_address:https://www.arangodb.com/docs/stable/http/repairs.html - -% 维修工作 -% DistributionShardsLike -% 在版本3.2.12和3.3.4之前,集合创建中存在一个错误,这可能导致违反该属性,即其碎片与distributeShardsLike设置中的原型集合完全一样地分布在DB-Server上 。 -% -% 使用此API之前,请仔细阅读所有内容! -% -% 有一项可以安全还原此属性的作业。但是,在作业运行期间, -% -% 在replicationFactor 不能改变任何受影响的集合或原型集合(即集distributeShardsLike,包括 SmartGraphs) -% 这些原型之一的碎片也不应移动 -% 修复过程中应避免关闭数据库服务器和关闭数据库服务器。在任何给定时间也只能执行一项维修工作。如果不满足这些要求,通常会导致作业中止,但仍然可以安全地重新启动它。但是,replicationFactor在修理过程中进行更改可能会使其处于无法人工干预而无法修理的状态! -% 关闭执行作业的协调器将中止它,但是可以安全地在另一个协调器上重新启动它。但是,即使作业停止后,仍可能会有碎片移动。如果在移动完成之前再次启动该作业,则修复受影响的集合将失败,但是可以安全地重新启动修复。 -% -% 如果有任何受影响的集合replicationFactor等于数据库服务器的总数,则修复可能会中止。在这种情况下,有必要将其减少replicationFactor一个(或添加一个DB-Server)。这项工作不会自动执行。 -% -% 通常,如果作业的任何假设失败,在开始或维修期间,该作业都会中止。它可以再次启动,并从当前状态恢复。 -% -% 使用测试GET /_admin/repairs/distributeShardsLike -% 使用GET将不会触发任何修复,而只会计算并返回修复群集所需的操作。这样,您还可以检查是否有需要维修的东西。 - -%% 检查修复 -%% GET /_admin/repairs/distributeShardsLike -checkRepair(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/repairs/distributeShardsLike">>). - -% 如果要修复某些内容,则响应将具有该属性 collections,/其中包含每个必须修复的集合的条目。每个集合还作为单独的error属性,true如果该集合(以及false 其他情况)发生错误,则将作为错误。如果error为true,则还将设置属性errorNum和 errorMessage,并且在某些情况下还将errorDetails 提供有关如何处理特定错误的附加信息。 -% 用修复POST /_admin/repairs/distributeShardsLike -% 由于此工作可能需要移动大量数据,因此可能需要一段时间,具体取决于受影响集合的大小。因此,这不应该被同步调用,而只能通过 Async Results 来调用:即,设置标头x-arango-async: store将作业放入后台,并在稍后获取其结果。否则,该请求很可能会导致超时,并且响应将丢失!除非协调器已停止,否则该作业仍将继续,但是无法找到它是否仍在运行,或者之后无法获得成功或错误信息。 -% 可以像这样在后台启动作业: -% -% $ wget --method=POST --header='x-arango-async: store' -qSO - http://localhost:8529/_admin/repair/distributeShardsLike -% HTTP/1.1 202 Accepted -% X-Content-Type-Options: nosniff -% X-Arango-Async-Id: 152223973119118 -% Server: ArangoDB -% Connection: Keep-Alive -% Content-Type: text/plain; charset=utf-8 -% Content-Length: 0 -% -% 这条线非常重要: -% -% X-Arango-Async-Id: 152223973119118 -% 因为它包含作业ID,可用于以后获取作业的状态和结果。GET婷/_api/job/pending和/_api/job/done将列出未完成或者完成,分别作业的作业ID。 -% -% 这也可以通过GET测试方法来完成。 -% -% 必须使用job api来获取状态和结果。它会204在作业运行时返回。实际的响应将仅返回一次,然后删除作业,并且api将返回404。因此,建议将响应直接写到文件中以供以后检查。抓取的结果是通过调用/_api/job通过 PUT: -% -% $ wget --method=PUT -qSO - http://localhost:8529/_api/job/152223973119118 | jq . -% HTTP/1.1 200 OK -% X-Content-Type-Options: nosniff -% X-Arango-Async-Id: 152223973119118 -% Server: ArangoDB -% Connection: Keep-Alive -% Content-Type: application/json; charset=utf-8 -% Content-Length: 53 -% { -% "error": false, -% "code": 200, -% "message": "Nothing to do." -% } - -%% 修复 -%% POST /_admin/repairs/distributeShardsLike -doRepair(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/repairs/distributeShardsLike">>). diff --git a/src/agApi/agSimpleQueries.erl b/src/agApi/agSimpleQueries.erl deleted file mode 100644 index 0520312..0000000 --- a/src/agApi/agSimpleQueries.erl +++ /dev/null @@ -1,10 +0,0 @@ --module(agSimpleQueries). --include("eArango.hrl"). - --compile(inline). --compile({inline_size, 128}). --compile([export_all, nowarn_export_all]). - -% doc_address:https://www.arangodb.com/docs/stable/http/simple-query.html - -% 从版本3.4.0开始不推荐使用简单查询API。这些端点不应再使用。它们被AQL查询取代。 \ No newline at end of file diff --git a/src/agApi/agTasks.erl b/src/agApi/agTasks.erl index 5613152..d2ed0a9 100644 --- a/src/agApi/agTasks.erl +++ b/src/agApi/agTasks.erl @@ -54,8 +54,7 @@ getTask(PoolNameOrSocket, TaskId) -> % error:在这种情况下为false % 400:如果帖子正文不正确,则返回HTTP 400。 newTask(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/tasks">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/tasks">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 注册具有预定义ID的新任务;与负载均衡器不兼容 % PUT /_api/tasks/{id} @@ -72,8 +71,7 @@ newTask(PoolNameOrSocket, MapData) -> % 400:如果任务ID已经存在或其余主体不正确,则返回HTTP 400。 newTask(PoolNameOrSocket, TaskId, MapData) -> Path = <<"/_api/tasks/", (agMiscUtils:toBinary(TaskId))/binary>>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 删除一个当前活动的服务器任务 % DELETE /_api/tasks/{id} diff --git a/src/agApi/agTraversals.erl b/src/agApi/agTraversals.erl deleted file mode 100644 index aa94533..0000000 --- a/src/agApi/agTraversals.erl +++ /dev/null @@ -1,13 +0,0 @@ --module(agTraversals). --include("eArango.hrl"). - --compile(inline). --compile({inline_size, 128}). --compile([export_all, nowarn_export_all]). - -% doc_address:https://www.arangodb.com/docs/stable/http/traversal.html - -% 执行遍历永久链接 -% 执行服务器端遍历 -% POST /_api/traversal -% 此路由不应再使用。从3.4.0版开始,它被视为已弃用。它被AQL图形遍历取代。 diff --git a/src/agApi/agUserMgr.erl b/src/agApi/agUserMgr.erl index 74cb30a..3605466 100644 --- a/src/agApi/agUserMgr.erl +++ b/src/agApi/agUserMgr.erl @@ -28,8 +28,7 @@ % 403:如果您没有访问服务器访问级别,则返回。 % 409:如果已经存在同名用户,则返回。 newUser(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/user">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/user">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 设置数据库访问级别。 % PUT /_api/user/{user}/database/{dbname} @@ -48,8 +47,7 @@ newUser(PoolNameOrSocket, MapData) -> % 403:如果您没有访问服务器访问级别,则返回。 setUserDbAccessLevel(PoolNameOrSocket, UserName, DbName, MapData) -> Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary>>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 设置收集访问级别。 % PUT /_api/user/{user}/database/{dbname}/{collection} @@ -70,8 +68,7 @@ setUserDbAccessLevel(PoolNameOrSocket, UserName, DbName, MapData) -> % 403:如果您没有访问服务器访问级别,则返回。 setUserCollAccessLevel(PoolNameOrSocket, UserName, DbName, CollName, MapData) -> Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary, "/", CollName/binary>>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 清除数据库访问级别,恢复为默认访问级别 % DELETE /_api/user/{user}/database/{dbname} @@ -173,8 +170,7 @@ getUserCollAccessLevel(PoolNameOrSocket, UserName, DbName, CollName) -> % 404:指定的用户不存在 replaceUser(PoolNameOrSocket, UserName, MapData) -> Path = <<"/_api/user/", UserName/binary>>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 修改现有用户的属性 % PATCH /_api/user/{user} @@ -193,8 +189,7 @@ replaceUser(PoolNameOrSocket, UserName, MapData) -> % 404:指定的用户不存在 updateUser(PoolNameOrSocket, UserName, MapData) -> Path = <<"/_api/user/", UserName/binary>>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPatch, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 永久删除用户。 % DELETE /_api/user/{user}