From 52de658bab2b02795a6d25c33faa23b8ff58fb59 Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Tue, 24 Mar 2020 19:25:54 +0800 Subject: [PATCH] =?UTF-8?q?arangoApi=20=E6=96=B0=E5=A2=9E=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +- include/agHttpCli.hrl | 3 + include/erlArango.hrl | 3 - src/arangoApi/agAdminMonitor.erl | 327 +++++++++++++++++++++ src/arangoApi/agCluster.erl | 94 +++++- src/arangoApi/agEndPoints.erl | 41 +++ src/arangoApi/agFoxxServices.erl | 407 ++++++++++++++++++++++++++ src/arangoApi/agHotBackup.erl | 108 +++++++ src/arangoApi/agMiscFun.erl | 234 +++++++++++++++ src/arangoApi/agOtherFunc.erl | 73 ----- src/arangoApi/agReplication.erl | 446 +++++++++++++++++++++++++++++ src/arangoApi/agTasks.erl | 89 ++++++ src/arangoApi/agUserMgr.erl | 234 +++++++++++++++ src/erlArango_sup.erl | 1 + src/httpCli/agAgencyPoolMgrIns.erl | 3 +- 15 files changed, 1981 insertions(+), 90 deletions(-) create mode 100644 src/arangoApi/agAdminMonitor.erl create mode 100644 src/arangoApi/agEndPoints.erl create mode 100644 src/arangoApi/agFoxxServices.erl create mode 100644 src/arangoApi/agHotBackup.erl create mode 100644 src/arangoApi/agMiscFun.erl delete mode 100644 src/arangoApi/agOtherFunc.erl create mode 100644 src/arangoApi/agTasks.erl create mode 100644 src/arangoApi/agUserMgr.erl diff --git a/README.md b/README.md index 5845da3..e849d4a 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ 等待接收数据返回,当前改驱动封装的API均使用同步操作,如果需要异步操作可自行修改。单进程操作时仅支持同步操作。 单进程模式下相对连接池模式可以减少一次数据在进程间的复制,对于大量数据的操作,可以考虑在数据管理进程单独建立数据库连接,而不用连接池。 4. 连接池模式和非连接池模式API接口保证了同一性,不用区别对待, 易于理解和连接池模式和非连接池模式相互转换修改。 + +## 暂不支持批处理请求 + https://www.arangodb.com/docs/stable/http/batch-request.html ## 编译 rebar get-deps; rebar compile or rebar3 compile @@ -29,5 +32,8 @@ application:ensure_all_started(erlArango). %%启动app agHttpCli:startPool(poolName, [], []). %%初始连接池 然后就可以使用poolName作为第一个参数调用各种API了 - agMgrDb:curDbInfo(poolName). + agMgrDb:curDbInfo(poolName). + +## TODO + 将注释转为edoc格式 diff --git a/include/agHttpCli.hrl b/include/agHttpCli.hrl index 4bba474..8bd3c31 100644 --- a/include/agHttpCli.hrl +++ b/include/agHttpCli.hrl @@ -1,3 +1,6 @@ +%% agency 管理进程的名称 +-define(agAgencyPoolMgr, agAgencyPoolMgr). + %% beam cache 模块名 -define(agBeamPool, agBeamPool). -define(agBeamAgency, agBeamAgency). diff --git a/include/erlArango.hrl b/include/erlArango.hrl index ddbb853..065343c 100644 --- a/include/erlArango.hrl +++ b/include/erlArango.hrl @@ -1,6 +1,3 @@ -%% agency 管理进程的名称 --define(agAgencyPoolMgr, agAgencyPoolMgr). - -define(Get, <<"GET">>). -define(Put, <<"PUT">>). -define(Post, <<"POST">>). diff --git a/src/arangoApi/agAdminMonitor.erl b/src/arangoApi/agAdminMonitor.erl new file mode 100644 index 0000000..939567c --- /dev/null +++ b/src/arangoApi/agAdminMonitor.erl @@ -0,0 +1,327 @@ +-module(agAdminMonitor). +-include("erlArango.hrl"). + +-compile([export_all, nowarn_export_all]). + +% doc_address:https://www.arangodb.com/docs/stable/http/administration-and-monitoring.html + +% 返回服务器日志 +% GET /_admin/log +% 查询参数 +% 高达(可选):返回所有日志条目多达日志级别高达。请注意,upto必须为: +% 致命或0 +% 错误或1 +% 警告或2 +% 信息或3 +% debug 或4 默认值为info。 +% 级别(可选):返回日志级别的所有日志条目级别。请注意,查询参数 upto和level是互斥的。 +% start(可选):返回所有日志条目,以使其日志条目标识符(lid值)大于或等于start。 +% size(可选):将结果限制为最大大小的日志条目。 +% offset(可选):开始返回日志条目,跳过第一个偏移日志条目。偏移量 和大小可用于分页。 +% 搜索(可选):仅返回包含search中指定的文本的日志条目。 +% sort(可选):根据日志条目的盖值对日志条目进行升序(如果sort为asc)或降序(如果sort为desc)。请注意,盖子会 按时间顺序排列。默认值为asc。 +% 从服务器的全局日志中返回致命,错误,警告或信息日志消息。结果是具有以下属性的JSON对象: +% HTTP 200 +% lid:日志条目标识符的列表。每个日志消息都由其@LIT {lid}唯一标识,并且标识符按升序排列。 +% level:所有日志条目的日志级别列表。 +% timestamp:所有日志条目的时间戳列表,自1970-01-01开始以秒为单位。 +% text:所有日志条目的文本列表 +% topic:所有日志条目的主题列表 +% totalAmount:分页前的日志条目总数。 +% 400:如果为up或level指定了无效值,则返回。 +% 500:如果服务器由于内存不足错误而无法生成结果,则返回。 +getAdminLog(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/log">>, [], undefined). + +getAdminLog(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_admin/log", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + +% 返回当前的日志级别设置 +% GET /_admin/log/level +% 返回服务器的当前日志级别设置。结果是一个JSON对象,其日志主题为对象键,日志级别为对象值。 +% 返回码 +% 200:如果请求有效,则返回 +% 500:如果服务器由于内存不足错误而无法生成结果,则返回。 +getAdminLogLevel(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/log/level">>, [], undefined). + +% 修改当前的日志级别设置 +% PUT /_admin/log/level +% 具有以下属性的JSON对象是必需的: +% agency:可能的日志级别之一。 +% agencycomm:可能的日志级别之一。 +% authentication:可能的日志级别之一。 +% 授权:可能的日志级别之一。 +% cache:可能的日志级别之一。 +% cluster:可能的日志级别之一。 +% collector:可能的日志级别之一。 +% 通信:可能的日志级别之一。 +% 压缩器:可能的日志级别之一。 +% config:可能的日志级别之一。 +% datafiles:可能的日志级别之一。 +% 开发:可能的日志级别之一。 +% 引擎:可能的日志级别之一。 +% general:可能的日志级别之一。 +% graphs:可能的日志级别之一。 +% 心跳:可能的日志级别之一。 +% 内存:可能的日志级别之一。 +% mmap:可能的日志级别之一。 +% 性能:可能的日志级别之一。 +% pregel:可能的对数水平之一。 +% 查询:可能的日志级别之一。 +% 复制:可能的日志级别之一。 +% 请求:可能的日志级别之一。 +% rocksdb:可能的日志级别之一。 +% ssl:可能的日志级别之一。 +% startup:可能的日志级别之一。 +% 监视:可能的日志级别之一。 +% syscall:可能的日志级别之一。 +% 线程:可能的日志级别之一。 +% trx:可能的日志级别之一。 +% v8:可能的日志级别之一。 +% views:可能的日志级别之一。 +% ldap:可能的日志级别之一。 +% audit-authentication:可能的日志级别之一。 +% audit-authorization:可能的日志级别之一。 +% audit-database:可能的日志级别之一。 +% audit-collection:可能的日志级别之一。 +% audit-view:可能的日志级别之一。 +% audit-document:可能的日志级别之一。 +% audit-service:可能的日志级别之一。 +% 修改并返回服务器的当前日志级别设置。请求主体必须是JSON对象,日志主题为对象键,日志级别为对象值。 +% 结果是一个JSON对象,其中调整后的日志主题为对象键,调整后的日志级别为对象值。 +% 它可以通过仅将日志级别指定为字符串而不设置json来设置所有功能的日志级别。 +% 可能的日志级别为: +% 致命-这是没有办法的。此消息后,ArangoDB将关闭。 +% 错误-这是一个错误。您应该调查并修复它。它可能会损害您的生产。 +% 警告-这可能是严重的应用程序明智的选择,但我们不知道。 +% 信息-发生了什么事,请注意,但没有发生任何戏剧事件。 +% 调试-输出调试消息 +% 跟踪-跟踪-准备要淹没的日志-请勿在生产中使用。 +% 返回码 +% 200:如果请求有效,则返回 +% 400:当请求正文包含无效JSON时返回。 +% 405:使用无效的HTTP方法时返回。 +% 500:如果服务器由于内存不足错误而无法生成结果,则返回。 +modifyAdminLogLevel(PoolNameOrSocket, MapData) -> + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Put, <<"/_admin/log/level">>, [], BodyStr). + +% 返回统计信息 +% GET /_admin/statistics +% 返回统计信息。返回的对象包含根据_admin / statistics-description返回的描述分组在一起的 统计数字。例如, 要从组系统访问图userTime,您首先选择描述存储在系统中的组的子对象,然后在该子对象中,userTime的值存储在同名属性中。 +% 如果是分发,则返回的对象包含以count为单位的总计 数和以counts为单位的分发列表。各个值的总和(或全部)中被返回总和。 +% 事务统计信息显示本地已启动,已提交和已中止的事务,以及为查询的服务器完成的中间提交。对于RocksDB存储引擎,中间提交计数将仅采用非零值。协调器几乎不会在其本地数据库中进行任何本地事务,因此,群集事务(在协调器上启动的事务需要DBServer在事务提交到群集范围之前完成)才被添加到其本地统计信息中。这意味着您将在单个服务器上看到的统计信息大致是在使用单个协调器查询该协调器的群集设置中所期望的统计信息。区别在于群集事务没有中间提交的概念,也不会增加价值。 +% HTTP 200统计信息已成功返回。 +% error:布尔值标志,指示是否发生错误(在这种情况下为false) +% code:HTTP状态码-在这种情况下为200 +% time:当前服务器时间戳 +% errorMessage:描述性错误消息 +% enabled:如果服务器启用了统计模块,则为true。如果没有,不要期望任何值。 +% 系统:从系统收集的有关此过程的指标;可能取决于主机操作系统 +% minorPageFaults:pagefaults +% majorPageFaults:pagefaults +% userTime:服务器进程使用的用户CPU时间 +% systemTime:服务器进程使用的系统CPU时间 +% numberOfThreads:服务器中的线程数 +% residentSize:流程的RSS +% residentSizePercent:进程的RSS,以%为单位 +% virtualSize:进程的VSS +% client:有关连接的客户端及其资源使用情况的信息 +% sum:所有计数的汇总值 +% count:汇总的值数 +% counts:包含值的数组 +% connectionTime:总连接时间 +% totalTime:系统时间 +% requestTime:请求时间 +% queueTime:请求排队等待处理的时间 +% ioTime:IO时间 +% bytesSent:发送给客户端的字节数 +% bytesReceived:从客户端收到的字节数 +% httpConnections:打开的http连接数 +% http:动词的请求数 +% requestsTotal:http请求总数 +% requestsAsync:异步http请求的总数 +% RequestsGet:使用GET动词的请求数 +% requestHead:使用HEAD动词的请求数 +% requestPost:使用POST动词的请求数 +% requestsPut:使用PUT动词的请求数 +% requestsPatch:使用PATCH动词的请求数 +% requestsDelete:使用DELETE动词的请求数 +% requestsOptions:使用OPTIONS动词的请求数 +% requestOther:没有使用以上识别的动词的任何请求 +% 服务器:服务器的统计信息 +% 正常运行时间:服务器启动和运行的时间 +% physicalMemory:服务器上的可用物理内存 +% Transactions:交易统计 +% 已开始:已开始交易的数量 +% 已提交:已提交交易的数量 +% 已中止:已中止交易的数量 +% middleCommits:完成的中间提交数 +% v8Context:有关V8 JavaScript上下文的统计信息 +% 可用:当前生成的V8上下文的数量 +% busy:当前活动的V8上下文的数量 +% dirty:先前使用的上下文数量,现在应该在重新使用之前对其进行垃圾回收 +% free:可以免费使用的V8上下文的数量 +% max:我们可以通过--javascript.v8-contexts配置生成的V8上下文总数 +% 内存:V8内存/垃圾回收水印列表;每次运行垃圾回收时都要刷新;将当时使用的最小/最大内存保留10秒钟 +% contextId:这组内存统计信息来自的上下文的ID +% tMax:10秒间隔开始的时间戳 +% countOfTimes:这10秒内垃圾回收运行了多少次 +% heapMax:所有垃圾收集的高水位标记在10秒内运行 +% heapMin:这10秒内运行的所有垃圾回收的低水印 +% 线程:有关服务器工作线程的统计信息(不包括特定于V8或jemalloc的线程和系统线程) +% scheduler-threads:产生的工作线程数 +% 进行中:当前繁忙的工作线程数 +% 排队:排队等待工作线程可用的作业数 +getAdminStatistics(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/statistics">>, [], undefined). + +% 统计数据说明 +% 获取统计信息的描述性信息 +% GET /_admin/statistics-description +% 返回/ _admin / statistics返回的统计信息的描述。返回的对象在属性组中包含一组统计信息组,在属性图中包含一组统计信息 图。 +% 统计组由 +% group:组的标识符。 +% name:组的名称。 +% description:组的描述。 +% 统计数字由 +% group:此图所属的组的标识符。 +% 标识符:图形的标识符。它在组中是唯一的。 +% name:图形名称。 +% description:对图形的描述。 +% 类型:当前,累计或分配。 +% cuts:分布向量。 +% 单位:测量数字的单位。 +% HTTP 200描述已成功返回。 +% 组:统计组 +% group:组的标识符。 +% name:组的名称。 +% description:组的描述。 +% 数字:统计数字 +% group:此图所属的组的标识符。 +% 标识符:图形的标识符。它在组中是唯一的。 +% name:图形名称。 +% description:对图形的描述。 +% 类型:当前,累计或分配。 +% cuts:分布向量。 +% 单位:测量数字的单位。 +% code:HTTP状态码 +% 错误:错误,在这种情况下为false +getAdminStatisticsDesc(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/statistics-description">>, [], undefined). + +% 返回当前实例指标 +% GET /_admin/metrics +% 以Prometheus格式返回实例的当前指标。返回的文档收集所有实例指标,这些指标在任何给定时间进行测量,并将其公开以供Prometheus收集。 +% 该文档包含不同的度量标准和度量标准组,具体取决于查询实例的角色。所有导出的指标都使用arangodb_或rocksdb_字符串发布,以将其与其他收集的数据区分开。 +% 然后需要将API添加到Prometheus配置文件中进行收集。 +% 返回码 +% 200:指标已成功返回。 +% 404:可以使用--server.export-metrics-api false 服务器中的设置禁用指标API 。在这种情况下,调用结果表明找不到该API。 +getAdminMetrics(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/metrics">>, [], undefined). + + +% 集群 +% 服务器返回是否是在只读模式 +% 返回此服务器的模式(只读或默认) +% GET /_admin/server/mode +% 关于服务器的返回模式信息。json响应将包含一个mode值为readonly或的字段default。在只读服务器中,所有写入操作将失败,错误代码为1004(ERROR_READ_ONLY)。创建或删除数据库和集合也将失败,并显示错误代码11(ERROR_FORBIDDEN)。 +% 这是一个公共API,因此它不要求身份验证。 +% 返回码 +% 200:如果一切正常,此API将返回HTTP 200 +getAdminServerMode(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/server/mode">>, [], undefined). + +% 返回集群永久链接中服务器的ID +% 了解服务器的内部ID +% GET /_admin/server/id +% 返回集群中服务器的ID。如果服务器未在集群模式下运行,则请求将失败。 +% 返回码 +% 200:当服务器以群集模式运行时返回。 +% 500:当服务器未在群集模式下运行时返回。 +getAdminServerId(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/server/id">>, [], undefined). + +% 返回集群中服务器的角色 +% GET /_admin/server/role +% 返回集群中服务器的角色。该角色在结果的role属性中返回。角色的可能返回值是: +% SINGLE:服务器是没有集群的独立服务器 +% 协调器:服务器是集群中的协调器 +% PRIMARY:服务器是集群中的DBServer +% 次要的:不再使用此角色 +% 代理:服务器是集群中的代理节点 +% UNDEFINED:在集群中,如果无法确定服务器角色,则返回UNDEFINED。 +% 在所有情况下均返回HTTP 200。 +% 错误:始终为假 +% code:HTTP状态码,始终为200 +% errorNum:服务器错误号 +% 作用:之一[ SINGLE,协调员,PRIMARY,SECONDARY,AGENT,UNDEFINED ] +getAdminServerRole(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/server/role">>, [], undefined). + + +% 返回服务器是否可用 +% GET /_admin/server/availability +% 返回有关服务器的可用性信息。 +% 这是一个公共API,因此它不要求身份验证。它仅在服务器监视的上下文中使用。 +% 返回码 +% 200:如果服务器已启动并且正在运行并且可用于任意操作,并且未设置为只读模式,并且在活动故障转移设置的情况下当前不是关注者,则此API将返回HTTP 200。 +% 503:如果服务器在启动或关闭过程中,设置为只读模式或当前在活动故障转移设置中为关注者,则将返回HTTP 503。 +getAdminServerAvailability(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/server/availability">>, [], undefined). + +% DBserver 永久链接的查询统计信息 +% 允许查询集群中数据库服务器的统计信息 +% GET /_admin/clusterStatistics +% 查询参数 +% DBserver(必填):查询给定DBserver的统计信息 +% 返回码 +% 200: +% 400:数据库服务器的ID +% 403: +getAdminClusterStatistics(PoolNameOrSocket, DBserver) -> + Path = <<"/_admin/clusterStatistics?DBserver=", (agMiscUtils:toBinary(DBserver))/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + +% 查询集群的运行状况以监视Permalink +% 返回由监督(机构)评估的集群的运行状况 +% GET /_admin/cluster/health +% 查询群集的运行状况以进行监视。该响应是一个JSON对象,包含标准code,error,errorNum,和errorMessage字段适当。特定于端点的字段如下: +% ClusterId:标识集群的UUID字符串 +% Health:一个对象,该对象包含群集中每个节点的描述性子对象。 +% :中的每个条目Health将由节点ID键入,并包含以下属性: +% Endpoint:代表服务器网络端点的字符串。 +% Role:服务器扮演的角色。可能的值是"AGENT","COORDINATOR"和"DBSERVER"。 +% CanBeDeleted:布尔值,表示是否可以安全地从群集中删除节点。 +% Version:该节点使用的ArangoDB的版本字符串。 +% Engine:该节点使用的存储引擎。 +% Status:一个字符串,指示由监督(机构)评估的节点的运行状况。对于协调器和dbservers节点运行状况,应将其视为真实的主要来源。如果节点正常响应请求,则为"GOOD"。如果错过了一个心跳,那就是"BAD"。如果在缺少心跳约15秒钟后通过监督宣布它失败,则会对其进行标记"FAILED"。 +% 此外,它还将具有以下属性: +% 协调器和数据库服务器 +% SyncStatus:节点上次报告的同步状态。该值主要用于确定的值Status。可能的值包括"UNKNOWN","UNDEFINED","STARTUP","STOPPING","STOPPED","SERVING","SHUTDOWN"。 +% LastAckedTime:ISO 8601时间戳记,指定接收到的最后一个心跳。 +% ShortName:代表服务器的简称的字符串,例如"Coordinator0001"。 +% Timestamp:ISO 8601时间戳记,指定接收到的最后一个心跳。(已弃用) +% Host:可选字符串,指定主机(如果已知)。 +% 仅协调员 +% AdvertisedEndpoint:表示已播报端点的字符串(如果已设置)。(例如,外部IP地址或负载平衡器,可选) +% 代理商 +% Leader:此节点视为领导者的代理的ID。 +% Leading:此代理程序是否是领导者(true)或不是(false)。 +% LastAckedTime:自上次以来的时间(acked以秒为单位)。 +% 返回码 +% 200: +getAdminClusterHealth(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/cluster/health">>, [], undefined). + +% 重新加载路由表。 +% POST /_admin/routing/reload +% 从集合路由中重新加载路由信息。 +% 返回码 +% 200:路由信息重新加载成功 +reloadAdminRouting(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/routing/reload">>, [], undefined). diff --git a/src/arangoApi/agCluster.erl b/src/arangoApi/agCluster.erl index 57633aa..067b929 100644 --- a/src/arangoApi/agCluster.erl +++ b/src/arangoApi/agCluster.erl @@ -5,25 +5,97 @@ %% doc_address:https://www.arangodb.com/docs/stable/http/cluster.html -%% GET /_admin/server/id -serverId(PoolNameOrSocket) -> +% 集群的HTTP接口 +% 本章介绍了ArangoDB群集的REST API。 +% +% 服务器ID +% 服务器角色 +% 集群统计 +% 集群健康 +% 集群维护 +% 机构 + +% 返回集群中服务器的ID +% 了解服务器的内部ID +% GET /_admin/server/id +% 返回集群中服务器的ID。如果服务器未在集群模式下运行,则请求将失败。 +% 返回码 +% 200:当服务器以群集模式运行时返回。 +% 500:当服务器未在群集模式下运行时返回。 +getServerId(PoolNameOrSocket) -> agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/server/id">>, [], undefined). -%% GET /_admin/server/role -serverRole(PoolNameOrSocket) -> +%返回集群中服务器的角色 +%GET /_admin/server/role +%返回集群中服务器的角色。该角色在结果的role属性中返回。角色的可能返回值是: +%SINGLE:服务器是没有集群的独立服务器 +%协调器:服务器是集群中的协调器 +%PRIMARY:服务器是集群中的DBServer +%次要的:不再使用此角色 +%代理:服务器是集群中的代理节点 +%UNDEFINED:在集群中,如果无法确定服务器角色,则返回UNDEFINED。 +%在所有情况下均返回HTTP 200。 +%错误:始终为假 +%code:HTTP状态码,始终为200 +%errorNum:服务器错误号 +%作用:之一[ SINGLE,协调员,PRIMARY,SECONDARY,AGENT,UNDEFINED ] +getServerRole(PoolNameOrSocket) -> agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/server/role">>, [], undefined). -%% GET /_admin/clusterStatistics -clusterStatistics(PoolNameOrSocket) -> +% DBserver查询统计 +% 允许查询集群中数据库服务器的统计信息 +% GET /_admin/clusterStatistics +% 查询参数 +% DBserver(必填):查询给定DBserver的统计信息 +% 返回码 +% 200: +% 400:数据库服务器的ID +% 403: +getClusterStatistics(PoolNameOrSocket) -> agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/clusterStatistics">>, [], undefined). -%% GET /_admin/cluster/health -clusterHealth(PoolNameOrSocket) -> +% 查询集群的运行状况以进行监视 +% 返回由监督(机构)评估的集群的运行状况 +% GET /_admin/cluster/health +% 查询群集的运行状况以进行监视。该响应是一个JSON对象,包含标准code,error,errorNum,和errorMessage字段适当。特定于端点的字段如下: +% ClusterId:标识集群的UUID字符串 +% Health:一个对象,该对象包含群集中每个节点的描述性子对象。 +% :中的每个条目Health将由节点ID键入,并包含以下属性: +% Endpoint:代表服务器网络端点的字符串。 +% Role:服务器扮演的角色。可能的值是"AGENT","COORDINATOR"和"DBSERVER"。 +% CanBeDeleted:布尔值,表示是否可以安全地从群集中删除节点。 +% Version:该节点使用的ArangoDB的版本字符串。 +% Engine:该节点使用的存储引擎。 +% Status:一个字符串,指示由监督(机构)评估的节点的运行状况。对于协调器和dbservers节点运行状况,应将其视为真实的主要来源。如果节点正常响应请求,则为"GOOD"。如果错过了一个心跳,那就是"BAD"。如果在缺少心跳约15秒钟后通过监督宣布它失败,则会对其进行标记"FAILED"。 +% 此外,它还将具有以下属性: +% 协调器和数据库服务器 +% SyncStatus:节点上次报告的同步状态。该值主要用于确定的值Status。可能的值包括"UNKNOWN","UNDEFINED","STARTUP","STOPPING","STOPPED","SERVING","SHUTDOWN"。 +% LastAckedTime:ISO 8601时间戳记,指定接收到的最后一个心跳。 +% ShortName:代表服务器的简称的字符串,例如"Coordinator0001"。 +% Timestamp:ISO 8601时间戳记,指定接收到的最后一个心跳。(已弃用) +% Host:可选字符串,指定主机(如果已知)。 +% 仅协调员 +% AdvertisedEndpoint:表示已播报端点的字符串(如果已设置)。(例如,外部IP地址或负载平衡器,可选) +% 代理商 +% Leader:此节点视为领导者的代理的ID。 +% Leading:此代理程序是否是领导者(true)或不是(false)。 +% LastAckedTime:自上次以来的时间(acked以秒为单位)。 +% 返回码 200: +getClusterHealth(PoolNameOrSocket) -> agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/cluster/health">>, [], undefined). -%% PUT /_admin/cluster/maintenance -clusterMaintenance(PoolNameOrSocket) -> - agHttpCli:callAgency(PoolNameOrSocket, ?Put, <<"/_admin/cluster/maintenance">>, [], undefined). +% 启用或禁用监督维护模式 +% 启用或禁用集群监督(机构)维护模式 +% PUT /_admin/cluster/maintenance +% 通过此API,您可以临时启用监督维护模式。请注意,启用维护模式后,不会进行任何类型的自动故障转移。该集群监控会自动重新激活自身60分钟禁用后。 +% 要启用维护模式,请求正文必须包含字符串"on"。要禁用它,请发送字符串"off"(请注意,该字符串 必须为小写并包括引号)。 +% 返回码 +% 200: +% 400: +% 501: +% 504: +setClusterMaintenance(PoolNameOrSocket, OnOrOff) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Put, <<"/_admin/cluster/maintenance">>, [], OnOrOff). diff --git a/src/arangoApi/agEndPoints.erl b/src/arangoApi/agEndPoints.erl new file mode 100644 index 0000000..8be9ed5 --- /dev/null +++ b/src/arangoApi/agEndPoints.erl @@ -0,0 +1,41 @@ +-module(agEndPoints). +-include("erlArango.hrl"). + +-compile([export_all, nowarn_export_all]). + +% doc_address:https://www.arangodb.com/docs/stable/http/endpoints.html + +% 端点的HTTP接口 +% 该API /_api/endpoint已弃用。对于集群模式,/_api/cluster/endpoints可以找到所有当前的Coordinator端点(请参见下文)。 +% +% ArangoDB服务器可以在多个端点上侦听传入的请求。 +% +% 通常使用“ --server.endpoint”选项在ArangoDB的配置文件或命令行中指定端点。ArangoDB的默认终结点是tcp://127.0.0.1:8529或 tcp:// localhost:8529。 +% +% 请注意,所有端点管理操作只能通过默认数据库(_system)访问,而不能通过其他任何数据库访问。 + +% 获取有关所有协调器端点的信息固定链接 +% 此API调用返回有关所有协调器终结点的信息(仅集群)。 +% GET /_api/cluster/endpoints +% 返回带有属性endpoints的对象,该对象包含一个对象数组,每个对象都有一个属性endpoint,其值是带有端点描述的字符串。集群中的每个协调器都有一个条目。此方法仅适用于群集模式下的协调器。如果发生错误,则将error属性设置为 true。 +% HTTP 200 +% error:布尔值标志,指示是否发生错误(在这种情况下为true) +% code:HTTP状态码-200 +% 端点:活动集群端点的列表。 +% 端点:协调器的绑定,例如tcp://[::1]:8530 +% 501: +getClusterEndpoints(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/cluster/endpoints">>, [], undefined, true). + +% 所有端点的返回列表永久链接 +% 此API调用返回所有端点(单个服务器)的列表。 +% GET /_api/endpoint +% 此路由不应再使用。从3.4.0版开始,它被视为已弃用。 +% 返回服务器正在侦听的所有已配置端点的数组。 +% 结果是一个JSON对象的JSON数组,每个对象均带有“ entrypoint”作为唯一属性,并且值是描述端点的字符串。 +% 注意:仅在系统数据库中允许检索所有端点的数组。在任何其他数据库中调用此操作将使服务器返回错误。 +% 返回码 +% 200:可以成功确定端点数组时返回。 +% 400:如果未在系统数据库中执行该操作,则返回。 +% 405:如果使用了不受支持的HTTP方法,则服务器将以HTTP 405进行响应。 + diff --git a/src/arangoApi/agFoxxServices.erl b/src/arangoApi/agFoxxServices.erl new file mode 100644 index 0000000..b302904 --- /dev/null +++ b/src/arangoApi/agFoxxServices.erl @@ -0,0 +1,407 @@ +-module(agFoxxServices). +-include("erlArango.hrl"). + +-compile([export_all, nowarn_export_all]). + +% doc_address:https://www.arangodb.com/docs/stable/http/foxx.html + +% Foxx HTTP API +% 这些路由允许操作数据库中安装的Foxx服务。 +% +% 有关Foxx及其JavaScript API的更多信息,请参见主要文档的Foxx章节。 + +% Foxx服务管理 +% 这是用于管理Foxx服务的ArangoDB HTTP接口的简介。 +% +% 列出已安装的服务 +% GET /_api/foxx +% 查询参数 +% excludeSystem(可选):是否应从结果中排除系统服务。 +% 获取当前数据库中安装的服务列表。 +% 返回具有以下属性的对象列表: +% mount:服务的安装路径 +% development:如果服务以开发模式运行,则为true +% legacy:如果服务以2.8旧版兼容模式运行,则为true +% 提供:服务清单的提供值或空对象 +% 此外,如果在清单上设置了以下对象,则该对象可能包含以下属性: +% name:标识服务类型的字符串 +% version:与semver兼容的版本字符串 +% 返回码 +% 200:如果请求成功,则返回。 +getFoxxList(PoolNameOrSocket) -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/foxx">>, [], undefined). + +getFoxxList(PoolNameOrSocket, ExcludeSystem) -> + case ExcludeSystem of + true -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/foxx?excludeSystem=true">>, [], undefined); + _ -> + agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/foxx?excludeSystem=false">>, [], undefined) + end. + +% 服务说明 +% GET /_api/foxx/service +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 在给定的安装路径中获取服务的详细信息。 +% 返回具有以下属性的对象: +% mount:服务的安装路径 +% path:服务的本地文件系统路径 +% development:如果服务以开发模式运行,则为true +% legacy:如果服务以2.8旧版兼容模式运行,则为true +% manifest:服务的规范化JSON清单 +% 此外,如果在清单上设置了以下对象,则该对象可能包含以下属性: +% name:标识服务类型的字符串 +% version:与semver兼容的版本字符串 +% 返回码 +% 200:如果请求成功,则返回。 +% 400:如果安装路径未知,则返回。 +getFoxxService(PoolNameOrSocket, Mount) -> + Path = <<"/_api/foxx/service?mount=", (agMiscUtils:toBinary(Mount))/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + + +% 安装新服务 +% 安装新服务 +% POST /_api/foxx +% 查询参数 +% mount(必需):应在其中安装服务的安装路径。 +% 开发(可选):设置true为启用开发模式。 +% 安装程序(可选):设置为false不运行服务的安装脚本。 +% legacy(可选):设置为true以2.8旧版兼容性模式安装服务。 +% 在给定的安装路径上安装给定的新服务。 +% 请求主体可以是以下任何格式: +% application/zip:包含服务的原始zip捆绑包 +% application/javascript:独立的JavaScript文件 +% application/json:服务定义为JSON +% multipart/form-data:服务定义为多部分形式 +% 服务定义是具有以下属性或字段的对象或表单: +% configuration:描述配置值的JSON对象 +% 依赖项:一个描述依赖项设置的JSON对象 +% source:服务器文件系统上的标准URL或绝对路径 +% 使用多部分数据时,源字段也可以是包含zip捆绑包或独立JavaScript文件的文件字段。 +% 使用独立的JavaScript文件时,将执行给定的文件来定义我们服务的HTTP端点。main与在服务清单字段中定义的相同。 +% 如果源是URL,则必须可以从服务器访问该URL。如果source是文件系统路径,则该路径将在服务器上解析。在任何情况下,路径或URL都应解析为zip包,JavaScript文件或(如果是文件系统路径)目录。 +% 请注意,在具有多个协调器的群集中使用文件系统路径时,文件系统路径必须解析为每个协调器上的等效文件。 +% 返回码 +% 201:如果请求成功,则返回。 +installFoxx(PoolNameOrSocket, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx", QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Post, Path, [], BodyStr). + + +% 卸载服务 +% DELETE /_api/foxx/service +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 拆卸(可选):设置为false不运行服务的拆卸脚本。 +% 从数据库和文件系统中删除给定安装路径中的服务。 +% 成功返回空响应。 +% 返回码 +% 204:如果请求成功,则返回。 +uninstallFoxx(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/service", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Delete, Path, [], undefined). + +% 更换服务 +% PUT /_api/foxx/service +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 拆卸(可选):设置为false不运行旧服务的拆卸脚本。 +% 安装程序(可选):设置为false不运行新服务的安装脚本。 +% legacy(可选):设置为true以2.8 Legacy兼容模式安装新服务。 +% 强制(可选):设置为true强制安装服务,即使在给定的安装下未安装任何服务也是如此。 +% 从数据库和文件系统中删除给定安装路径中的服务。然后在相同的安装路径上安装给定的新服务。 +% 这与执行旧服务的卸载,然后安装新服务的安全性等效。在删除旧服务之前,将检查新服务的主文件和脚本文件(如果有)是否存在基本语法错误。 +% 请求主体可以是以下任何格式: +% application/zip:包含服务的原始zip捆绑包 +% application/javascript:独立的JavaScript文件 +% application/json:服务定义为JSON +% multipart/form-data:服务定义为多部分形式 +% 服务定义是具有以下属性或字段的对象或表单: +% configuration:描述配置值的JSON对象 +% 依赖项:一个描述依赖项设置的JSON对象 +% source:服务器文件系统上的标准URL或绝对路径 +% 使用多部分数据时,源字段也可以是包含zip捆绑包或独立JavaScript文件的文件字段。 +% 使用独立的JavaScript文件时,将执行给定的文件来定义我们服务的HTTP端点。main与在服务清单字段中定义的相同。 +% 如果源是URL,则必须可以从服务器访问该URL。如果source是文件系统路径,则该路径将在服务器上解析。在任何情况下,路径或URL都应解析为zip包,JavaScript文件或(如果是文件系统路径)目录。 +% 请注意,在具有多个协调器的群集中使用文件系统路径时,文件系统路径必须解析为每个协调器上的等效文件。 +% 返回码 +% 200:如果请求成功,则返回。 +replaceFoxx(PoolNameOrSocket, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/service", QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Put, Path, [], BodyStr). + +% 升级服务 +% PATCH /_api/foxx/service +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 拆卸(可选):设置为true运行旧服务的拆卸脚本。 +% 安装程序(可选):设置为false不运行新服务的安装脚本。 +% legacy(可选):设置为true以2.8 Legacy兼容模式安装新服务。 +% 强制(可选):设置为true强制安装服务,即使在给定的安装下未安装任何服务也是如此。 +% 将给定的新服务安装在给定的安装路径上当前安装的服务之上。仅建议在同一服务的不同版本之间进行切换时使用。 +% 与替换服务不同,升级服务会保留旧服务的配置和依赖关系(如果有),因此仅应用于将现有服务迁移到新服务或等效服务。 +% 请求主体可以是以下任何格式: +% application/zip:包含服务的原始zip捆绑包 +% application/javascript:独立的JavaScript文件 +% application/json:服务定义为JSON +% multipart/form-data:服务定义为多部分形式 +% 服务定义是具有以下属性或字段的对象或表单: +% configuration:描述配置值的JSON对象 +% 依赖项:一个描述依赖项设置的JSON对象 +% source:服务器文件系统上的标准URL或绝对路径 +% 使用多部分数据时,源字段也可以是包含zip捆绑包或独立JavaScript文件的文件字段。 +% 使用独立的JavaScript文件时,将执行给定的文件来定义我们服务的HTTP端点。main与在服务清单字段中定义的相同。 +% 如果源是URL,则必须可以从服务器访问该URL。如果source是文件系统路径,则该路径将在服务器上解析。在任何情况下,路径或URL都应解析为zip包,JavaScript文件或(如果是文件系统路径)目录。 +% 请注意,在具有多个协调器的群集中使用文件系统路径时,文件系统路径必须解析为每个协调器上的等效文件。 +% 返回码 +% 200:如果请求成功,则返回。 +upgradeFoxx(PoolNameOrSocket, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/service", QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Patch, Path, [], BodyStr). + +% Foxx服务配置/依赖关系 +% 这是用于管理Foxx服务配置和依赖关系的ArangoDB HTTP接口的简介。 +% +% 获取配置选项 +% GET /_api/foxx/configuration +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 在给定的安装路径中获取服务的当前配置。 +% 返回一个对象,该对象将配置选项名称映射到其定义,包括易于理解的标题和当前值(如果有)。 +% 返回码 +% 200:如果请求成功,则返回。 +getFoxxConfig(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/configuration", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + +% 更新配置选项 +% PATCH /_api/foxx/configuration +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 请求正文(json) +% JSON对象映射配置选项名称为其新值。任何省略的选项将被忽略。 +% 替换给定服务的配置。 +% 返回一个将所有配置选项名称映射到其新值的对象。 +% 返回码 +% 200:如果请求成功,则返回。 +updateFoxxConfig(PoolNameOrSocket, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/configuration", QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Patch, Path, [], BodyStr). + +% 替换配置选项 +% PUT /_api/foxx/configuration +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 请求正文(json) +% JSON对象映射配置选项名称为其新值。任何省略的选项将重置为默认值或标记为未配置。 +% 完全替换给定服务的配置。 +% 返回一个将所有配置选项名称映射到其新值的对象。 +% 返回码 +% 200:如果请求成功,则返回。 +replaceFoxxConfig(PoolNameOrSocket, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/configuration", QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Put, Path, [], BodyStr). + +% 获取依赖项选项 +% GET /_api/foxx/dependencies +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 在给定的安装路径中获取服务的当前依赖关系。 +% 返回一个对象,该对象将依赖项名称映射到它们的定义,包括易于理解的标题和当前的安装路径(如果有)。 +% 返回码 +% 200:如果请求成功,则返回。 +getFoxxDependencies(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/dependencies", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + + +% 更新依赖项选项 +% PATCH /_api/foxx/dependencies +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 请求正文(json) +% 映射依赖项名称到其新安装路径的JSON对象。任何省略的依赖项将被忽略。 +% 替换给定服务的依赖项。 +% 返回一个将所有依赖项名称映射到其新安装路径的对象。 +% 返回码 +% 200:如果请求成功,则返回。 +updateFoxxDependencies(PoolNameOrSocket, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/dependencies", QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Patch, Path, [], BodyStr). + +% 替换依赖项选项 +% PUT /_api/foxx/dependencies +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 请求正文(json) +% 映射依赖项名称到其新安装路径的JSON对象。任何省略的依赖项将被禁用。 +% 完全替换给定服务的依赖项。 +% 返回一个将所有依赖项名称映射到其新安装路径的对象。 +% 返回码 +% 200:如果请求成功,则返回。 +replaceFoxxDependencies(PoolNameOrSocket, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/dependencies", QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Put, Path, [], BodyStr). + +% Foxx服务杂项 +% +% 列出服务脚本 +% GET /_api/foxx/scripts +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 获取服务定义的脚本列表。 +% 返回一个将原始脚本名称映射到人类友好名称的对象。 +% 返回码 +% 200:如果请求成功,则返回。 +getFoxxScripts(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/scripts", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + +% 运行服务脚本 +% POST /_api/foxx/scripts/{name} +% 路径参数 +% 名称(必填):要运行的脚本的名称。 +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 请求正文(json) +% 一个任意的JSON值,将被解析并作为第一个参数传递给脚本。 +% 在给定的安装路径上为服务运行给定的脚本。 +% 返回脚本的导出(如果有)。 +% 返回码 +% 200:如果请求成功,则返回。 +runFoxxScripts(PoolNameOrSocket, ScriptName, MapData, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/scripts/", ScriptName/binary, QueryBinary/binary>>, + BodyStr = jiffy:encode(MapData), + agHttpCli:callAgency(PoolNameOrSocket, ?Post, Path, [], BodyStr). + +% 运行服务测试 +% POST /_api/foxx/tests +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 记者(可选):测试记者使用。 +% 惯用的(可选):与报告器使用匹配的格式,而与Accept标头无关。 +% filter(可选):仅运行全名(包括完整的测试套件和测试用例)与该字符串匹配的测试。 +% 在给定的安装路径上运行该服务的测试并返回结果。 +% 支持的测试报告者为: +% 默认值:测试用例的简单列表 +% suite:嵌套在套件中的测试用例的对象 +% 流:测试结果的原始流 +% xunit:与XUnit / JUnit兼容的结构 +% tap:原始TAP兼容流 +% 该接受请求报头可以被用于进一步控制的响应格式: +% 使用流报告器时,application/x-ldjson将导致响应主体被格式化为以换行符分隔的JSON流。 +% 使用点击报告程序text/plain或时,text/*将导致响应正文被格式化为纯文本TAP报告。 +% 使用xunit报告程序时,application/xml或text/xml将导致响应正文被格式化为XML而不是JSONML。 +% 否则,响应主体将被格式化为非prettyprinted JSON。 +% 返回码 +% 200:如果请求成功,则返回。 +runFoxxTest(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/tests", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Post, Path, [], undefined). + + +% 启用开发模式 +% POST /_api/foxx/development +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 将服务置于开发模式。 +% 当服务在开发模式下运行时,每次服务处理请求时,将从文件系统重新加载服务,并且将重新执行其设置脚本(如果有)。 +% 在具有多个协调器的集群中运行ArangoDB时,请注意,一个协调器上文件系统的更改不会在其他协调器上反映出来。这意味着只要任何服务都在开发模式下运行,就应该将协调器视为不一致。 +% 返回码 +% 200:如果请求成功,则返回。 +% 禁用开发模式 +% 禁用开发模式 +enableFoxxDevelopment(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/development", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Post, Path, [], undefined). + +% 禁用开发模式 +% DELETE /_api/foxx/development +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 将给定安装路径上的服务置于生产模式。 +% 在具有多个协调器的集群中运行ArangoDB时,这会将所有其他协调器上的服务替换为该协调器上的版本。 +% 返回码 +% 200:如果请求成功,则返回。 +disableFoxxDevelopment(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/development", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Delete, Path, [], undefined). + + +% 服务自述文件 +% GET /_api/foxx/readme +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 获取服务的README或README.md文件的内容(如果有)。 +% 返回码 +% 200:如果请求成功,则返回。 +% 204:如果未找到自述文件,则返回。 +getFoxxReadme(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/readme", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + +% 招摇说明 +% GET /_api/foxx/swagger +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 在给定的安装路径中获取服务的Swagger API描述。 +% 响应主体将是服务API的与OpenAPI 2.0兼容的JSON描述。 +% 返回码 +% 200:如果请求成功,则返回。 +getFoxxSwagger(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/swagger", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). + +% 下载服务包 +% POST /_api/foxx/download +% 查询参数 +% mount(必需):已安装服务的安装路径。 +% 下载服务目录的zip捆绑包。 +% 启用开发模式后,将始终创建一个新捆绑包。 +% 否则,捆绑软件将代表该ArangoDB实例上安装的服务的版本。 +% 返回码 +% 200:如果请求成功,则返回。 +% 400:如果安装路径未知,则返回。 +downloadFoxxBundle(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/download", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Post, Path, [], undefined). + +% 提交本地服务状态 +% POST /_api/foxx/commit +% 查询参数 +% replace(可选):覆盖数据库中的现有服务文件,即使它们已经存在也是如此。 +% 将协调器的本地服务状态提交到数据库。 +% 这可用于解决由于数据丢失而无法自动修复的协调器之间的服务冲突。 +% 返回码 +% 204:如果请求成功,则返回。 +commitFoxxState(PoolNameOrSocket, QueryPars) -> + QueryBinary = agMiscUtils:spellQueryPars(QueryPars), + Path = <<"/_api/foxx/commit", QueryBinary/binary>>, + agHttpCli:callAgency(PoolNameOrSocket, ?Post, Path, [], undefined). \ No newline at end of file diff --git a/src/arangoApi/agHotBackup.erl b/src/arangoApi/agHotBackup.erl new file mode 100644 index 0000000..f570629 --- /dev/null +++ b/src/arangoApi/agHotBackup.erl @@ -0,0 +1,108 @@ +-module(agHotBackup). +-include("erlArango.hrl"). + +-compile([export_all, nowarn_export_all]). + +% doc_address:https://www.arangodb.com/docs/stable/http/hot-backup.html + +% HTTP接口进行热备份和还原 +% 在v3.5.1中引入 +% 这是用于热备份和还原的ArangoDB HTTP接口的简介。 +% 热备份仅在企业版中可用 +% 热备份 +% 热备份接近整个 ArangoDB服务的即时一致快照 。这包括在任何给定时间的所有数据库,集合,索引,视图定义和用户。 +% 对于创建,可以指定标签,如果省略,则将其替换为生成的UUID。然后,此标签与时间戳组合以为创建的热备份生成标识符。随后,所有其他API在这些标识符上运行。 +% 以下API专用于处理POST操作。 +% 使用API​​之前,请确保了解热备份的所有方面,以及所有要求和限制。 + +% 创建本地备份 +% POST /_admin/backup/create +% 具有以下属性的JSON对象是必需的: +% label:此备份的标签。该标签与时间戳字符串一起使用,创建唯一的备份标识符_