@ -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:一个对象,该对象包含群集中每个节点的描述性子对象。 | |||||
% <nodeID>:中的每个条目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). |
@ -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进行响应。 | |||||
@ -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). |
@ -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:此备份的标签。该标签与时间戳字符串一起使用,创建唯一的备份标识符<timestamp>_<label>。如果未指定标签,则假定为空字符串,并为此ID的此部分创建默认的UUID。 | |||||
% timeout:操作尝试获取一致快照的时间(以秒为单位)。默认值为120秒。 | |||||
% allowInconsistent:如果将此标志设置为,true并且在给定的超时时间内无法获取全局事务锁定,则会进行可能不一致的备份。此标志的默认值为false,在这种情况下,超时将导致HTTP 408错误。 | |||||
% force:如果将此标志设置为,true并且在给定的超时时间内无法获取全局事务锁定,则将强制中止所有正在运行的事务,以确保可以创建一致的备份。这不包括JavaScript事务。它等待事务最多中止 timeout几秒钟。因此,使用force请求超时将增加一倍。中止交易几乎肯定不是您想要的应用程序。在存在中间提交的情况下,它甚至可能破坏交易的原子性。仅在需要不惜一切代价进行一致备份的情况下,使用风险自负。推荐的默认值是false。如果同时 allowInconsistent并force设置为true,则后者优先,事务中止。仅在群集中可用。 | |||||
% 使用给定标签“尽快”创建一致的备份,非常类似于及时快照。短语“尽快”中的歧义是指下一个窗口,在该窗口中可以获得跨所有数据库的全局写锁定以保证一致性。请注意,备份首先与原始数据位于同一台计算机和硬盘驱动器上。确保将其上传到远程站点以进行实际备份。 | |||||
% 返回码 | |||||
% 201:如果一切正常,则返回代码201。 | |||||
% 400:如果使用错误的参数或除之外的任何HTTP方法调用了create命令POST,则返回HTTP 400。具体细节在返回的错误文档中有详细说明。 | |||||
% 408:如果操作无法在超时时间内获得全局事务锁定,则返回HTTP 408。 | |||||
newBackup(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/backup/create">>, [], BodyStr). | |||||
% 从本地备份还原 | |||||
% POST /_admin/backup/restore | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% id:要还原的备份的ID。 | |||||
% 使用给定的ID及时从快照恢复一致的备份。备份快照必须位于本地ArangoDB服务上。 | |||||
% 返回码 | |||||
% 200:如果可以恢复备份,则返回。请注意,单个服务器和群集之间不可避免存在差异。在单个服务器中,请求成功返回,但是还原仅在之后执行。在集群中,仅在成功完成还原操作后才返回请求。群集行为显然是所需的行为,但是在单个实例中,无法在重新启动期间保持连接打开。 | |||||
% 400:如果使用错误的参数或除以外的任何HTTP方法调用了restore命令POST,则返回HTTP 400。具体细节在返回的错误文档中有详细说明。 | |||||
restoreBackup(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/backup/restore">>, [], BodyStr). | |||||
% 删除特定的本地备份 | |||||
% POST /_admin/backup/delete | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% id:此备份的标识符。 | |||||
% 删除给定标识的特定本地备份id。 | |||||
% 返回码 | |||||
% 200:如果一切正常,则返回此代码200。 | |||||
% 400:如果使用错误的参数或除以外的任何HTTP方法调用delete命令POST,则返回HTTP 400。 | |||||
% 404:如果id找不到与该标识符相对应的备份。 | |||||
delBackup(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/backup/delete">>, [], BodyStr). | |||||
% 列出所有本地备份 | |||||
% POST /_admin/backup/list | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% id:正文可以为空(在这种情况下,将列出所有可用的备份),也可以是具有attribute的对象,该属性id为字符串。在后一种情况下,返回的列表仅限于具有给定ID的备份。 | |||||
% 列出所有本地找到的备份。 | |||||
% 返回码 | |||||
% 200:如果一切正常,则返回代码200。 | |||||
% 400:如果使用错误的参数调用list命令,则 返回HTTP 400。 | |||||
% 404:如果id给出了ID或ID列表,但未找到给定ID作为备份的标识符,则返回HTTP 404 NOT FOUND。 | |||||
% 405:如果使用以外的任何HTTP方法调用了list命令POST,则返回HTTP 405 METHOD NOT ALLOWED。 | |||||
getBackupList(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/backup/list">>, [], undefined). | |||||
% 上传特定的本地备份 | |||||
% POST /_admin/backup/upload | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% id:此备份的标识符。计划上载操作时,这是必需的。在这种情况下,请忽略该uploadId 属性。 | |||||
% remoteRepository:远程存储库的URL。计划上载操作时,这是必需的。在这种情况下,请忽略该uploadId属性。所提供的存储库URL进行了规范化和验证,如下所示:必须出现一个冒号,以分隔配置节名称和路径。冒号之前的URL前缀必须作为键存在于以下配置对象中。冒号前不能出现斜线。多个反斜杠折叠为1, ..并相应.地应用。本地存储库必须是绝对路径,并且必须以开头/。尾随/被删除。 | |||||
% config:远程存储库的配置。计划上载操作时,这是必需的。在这种情况下,请忽略该uploadId 属性。有关对象的说明,请参见手册中的arangobackup程序说明config。 | |||||
% uploadId:上传ID,用于指定要查询的上传操作进度或要中止的上传操作。如果指定此参数,则忽略上述所有主体参数。 | |||||
% abort:true如果正在运行的上载操作应中止,则将其设置为。在这种情况下,唯一需要的其他body参数是uploadId。 | |||||
% 将特定的本地备份上载到远程存储库,或查询先前计划的上载操作的进度,或中止正在运行的上载操作。 | |||||
% 返回码 | |||||
% 200:如果一切正常,如果查询进度或操作中止,则返回代码200。 | |||||
% 202:如果一切正常,如果计划了新操作,则返回代码202。 | |||||
% 400:如果使用错误的参数或除以外的任何HTTP方法调用了上载命令POST,则返回HTTP 400。 | |||||
% 401:如果对转储存储库的身份验证失败,则返回HTTP 400。 | |||||
% 404:如果id 找不到对应于标识符的备份,或者没有已知的上载操作uploadId。 | |||||
uploadBackup(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/backup/upload">>, [], BodyStr). | |||||
% 下载特定的本地备份 | |||||
% POST /_admin/backup/download | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% id:此备份的标识符。计划下载操作时,这是必需的。在这种情况下,请忽略该downloadId 属性。 | |||||
% remoteRepository:远程存储库的URL。计划下载操作时,这是必需的。在这种情况下,请忽略该downloadId属性。所提供的存储库URL进行了规范化和验证,如下所示:必须出现一个冒号,以分隔配置节名称和路径。冒号之前的URL前缀必须作为键存在于以下配置对象中。冒号前不能出现斜线。多个反斜杠折叠为1, ..并相应.地应用。本地存储库必须是绝对路径,并且必须以开头/。尾随/被删除。 | |||||
% config:远程存储库的配置。计划下载操作时,这是必需的。在这种情况下,请忽略该downloadId 属性。有关对象的说明,请参见手册中的arangobackup程序说明config。 | |||||
% downloadId:下载ID,用于指定要查询的下载操作进度或要中止的下载操作。如果指定此参数,则忽略上述所有主体参数。 | |||||
% abort:true如果正在运行的下载操作应中止,则将其设置为。在这种情况下,唯一需要的其他body参数是downloadId。 | |||||
% 从远程存储库下载特定的本地备份,或查询先前计划的下载操作的进度,或中止正在运行的下载操作。 | |||||
% 返回码 | |||||
% 200:如果一切正常,如果查询进度或操作中止,则返回代码200。 | |||||
% 202:如果一切正常,如果计划了新操作,则返回代码202。 | |||||
% 400:如果使用错误的参数或除以外的任何HTTP方法调用了download命令POST,则返回HTTP 400。 | |||||
% 401:如果对转储存储库的身份验证失败,则返回HTTP 401。 | |||||
% 404:如果id 找不到与该标识符相对应的备份,或者如果没有已知的与的下载操作downloadId。 | |||||
downloadBackup(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/backup/download">>, [], BodyStr). |
@ -0,0 +1,234 @@ | |||||
-module(agMiscFun). | |||||
-include("erlArango.hrl"). | |||||
-compile([export_all, nowarn_export_all]). | |||||
%% doc_address:https://www.arangodb.com/docs/stable/http/miscellaneous-functions.html | |||||
% 返回服务器版本号 | |||||
% GET /_api/version | |||||
% 查询参数 | |||||
% details(可选):如果设置为true,则响应将包含一个details属性,其中包含有关所包含组件及其版本的附加信息。详细信息对象的属性名称和内部信息可能会因平台和ArangoDB版本而异。 | |||||
% 返回服务器名称和版本号。响应是具有以下属性的JSON对象: | |||||
% 在所有情况下均返回HTTP 200。 | |||||
% 服务器:将始终包含arango | |||||
% version:服务器版本字符串。该字符串的格式为“ major”。小的。子 ”。major和minor将是数字,sub 可能包含数字或文本版本。 | |||||
% details:一个可选的JSON对象,带有其他详细信息。仅当请求中的details查询参数设置为true时,才返回此值。 | |||||
% 体系结构:CPU体系结构,即64位 | |||||
% arm: false-这不在ARM cpu上运行 | |||||
% asan:是否已在asan地址清理器打开的情况下进行编译?(应该是错误的) | |||||
% asm-crc32:我们有汇编程序实现的CRC函数吗? | |||||
% 断言:我们是否有在(=>开发人员版本)中编译的断言 | |||||
% boost-version:我们绑定哪个boost版本 | |||||
% build-date:创建此二进制文件的日期 | |||||
% build-repository:引用从其编译的git-ID | |||||
% 编译器:我们使用了哪个编译器 | |||||
% cplusplus:C ++标准版本 | |||||
% debug: 生产二进制文件为false | |||||
% 字节序:目前仅支持很少 | |||||
% 故障测试: 对于生产二进制文件为false(禁用致命错误的功能) | |||||
% fd-client-event-handler:我们使用哪种方法来处理fd-set,民意调查应该在linux上进行。 | |||||
% fd-setsize:如果不轮询,则fd setsize对于文件描述符的最大数目有效 | |||||
% full-version-string:完整版本字符串 | |||||
% icu-version:我们捆绑哪个版本的ICU | |||||
% jemalloc: 如果我们使用jemalloc,则为true | |||||
% maintenanceer-mode: 如果这是生产二进制文件,则为false | |||||
% openssl-version:我们链接哪个openssl版本? | |||||
% 平台:主机os- linux,windows或darwin | |||||
% 反应堆类型: epoll TODO | |||||
% rockdb-version:此发行版捆绑的rocksdb版本 | |||||
% server-version:ArangoDB发行版本 | |||||
% sizeof int:整数的字节数 | |||||
% sizeof void :* void指针的字节数 | |||||
% sse42:我们是否具有启用SSE 4.2的CPU? | |||||
% unaligned-access:此系统是否支持未对齐的内存访问? | |||||
% v8版本:捆绑的V8 JavaScript引擎版本 | |||||
% vpack-version:使用的velocypack实现的版本 | |||||
% zlib-version:捆绑的zlib的版本 | |||||
% 模式:我们作为-[ 服务器,控制台,脚本 ]中的一种运行的模式 | |||||
% host:主机ID | |||||
getSrvVersion(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/version">>, [], undefined). | |||||
getSrvVersion(PoolNameOrSocket, QueryPars) -> | |||||
QueryBinary = agMiscUtils:spellQueryPars(QueryPars), | |||||
Path = <<"/_api/version", QueryBinary/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). | |||||
% 返回运行服务器的引擎类型 | |||||
% GET /_api/engine | |||||
% 返回服务器配置为使用的存储引擎。响应是具有以下属性的JSON对象: | |||||
% 在所有情况下均返回HTTP 200。 | |||||
% 名称:将是mmfiles或rocksdb | |||||
getSrvEngine(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/engine">>, [], undefined). | |||||
% 将WAL同步到磁盘。 | |||||
% PUT /_admin/wal/flush | |||||
% 查询参数 | |||||
% waitForSync(可选):在预写日志中尚未同步的数据同步到磁盘之前,是否应该阻塞该操作。 | |||||
% waitForCollector(可选):在预写日志垃圾收集器收集刷新日志中的数据之前,是否应阻塞该操作。请注意,如果存在长时间运行的事务并且将预写日志垃圾收集器无法完成垃圾收集,则将此选项设置为true可能会阻塞很长时间。 | |||||
% 刷新预写日志。通过刷新当前活动的预写日志文件,可以将其中的数据传输到收集日志和数据文件中。这对于确保收集的所有数据都存在于收集日志和数据文件中(例如,在转储收集的数据时)很有用。 | |||||
% 返回码 | |||||
% 200:操作成功返回。 | |||||
% 405:使用无效的HTTP方法时返回。 | |||||
flushWal(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Put, <<"/_admin/wal/flush">>, [], undefined). | |||||
% 检索预写日志的配置永久链接 | |||||
% 获取当前配置。 | |||||
% GET /_admin/wal/properties | |||||
% 检索预写日志的配置。结果是具有以下属性的JSON对象: | |||||
% allowOversizeEntries:是否可以执行和存储大于单个日志文件的操作 | |||||
% logfileSize:每个预写日志文件的大小 | |||||
% HistoricLogfiles:要保留的最大历史日志文件数 | |||||
% reserveLogfiles:ArangoDB在后台分配的最大保留日志文件数 | |||||
% syncInterval:尚未同步的预写日志数据的自动同步时间间隔(以毫秒为单位) | |||||
% valveWait:如果发生写限制,则操作在中止之前将等待的最大等待时间(以毫秒为单位) | |||||
% acceleratorWhenPending:达到该数量时将激活写限制的未处理垃圾收集操作的数量。值为 0表示将不触发写限制。 | |||||
% 返回码 | |||||
% 200:操作成功返回。 | |||||
% 405:使用无效的HTTP方法时返回。 | |||||
getWalProperties(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/wal/properties">>, [], undefined). | |||||
% 配置预写日志永久链接 | |||||
% 配置沃尔玛的参数 | |||||
% PUT /_admin/wal/properties | |||||
% 配置预写日志的行为。请求的主体必须是具有以下属性的JSON对象: | |||||
% allowOversizeEntries:是否可以执行和存储大于单个日志文件的操作 | |||||
% logfileSize:每个预写日志文件的大小 | |||||
% HistoricLogfiles:要保留的最大历史日志文件数 | |||||
% reserveLogfiles:ArangoDB在后台分配的最大保留日志文件数 | |||||
% valveWait:如果发生写限制,则操作在中止之前将等待的最大等待时间(以毫秒为单位) | |||||
% acceleratorWhenPending:达到该数量时将激活写限制的未处理垃圾收集操作的数量。值为 0表示将不触发写限制。 | |||||
% 指定以上任何属性都是可选的。未指定的属性将被忽略,并且它们的配置也不会被修改。 | |||||
% 返回码 | |||||
% 200:操作成功返回。 | |||||
% 405:使用无效的HTTP方法时返回。 | |||||
setWalProperties(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Put, <<"/_admin/wal/properties">>, BodyStr, undefined). | |||||
% 关于当前运行的事务返回信息永久链接 | |||||
% 返回有关当前正在运行的事务的信息 | |||||
% GET /_admin/wal/transactions | |||||
% 返回有关当前正在运行的事务的信息。结果是具有以下属性的JSON对象: | |||||
% runningTransactions:当前正在运行的事务数 | |||||
% minLastCollected:最近收集的日志文件的最小ID(在每个正在运行的事务的开始处)。如果没有事务在运行,则为null。 | |||||
% minLastSealed:最后密封的日志文件的最小ID(在每个运行的事务的开始处)。如果没有事务在运行,则为null。 | |||||
% 返回码 | |||||
% 200:操作成功返回。 | |||||
% 405:使用无效的HTTP方法时返回。 | |||||
getTransactions(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/wal/transactions">>, [], undefined). | |||||
% 返回系统时间固定链接 | |||||
% 获取系统的当前时间 | |||||
% GET /_admin/time | |||||
% 该调用返回一个属性为time的对象。它包含当前系统时间(以Unix时间戳为单位,精度为微秒)。 | |||||
% HTTP 200时间已成功返回。 | |||||
% error:布尔值标志,指示是否发生错误(在这种情况下为false) | |||||
% code:HTTP状态码 | |||||
% time:当前系统时间(以Unix时间戳记为单位,服务器以微秒为单位) | |||||
getDbTime(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/time">>, [], undefined). | |||||
% 发回所发送的内容,标题,帖子正文等。 | |||||
% POST /_admin/echo | |||||
% 请求正文(对象) | |||||
% 主体可以是任何类型,只需转发即可。 | |||||
% 调用返回一个带有服务器请求信息的对象 | |||||
% HTTP 200 Echo成功返回。 | |||||
% 授权:会话是否被授权 | |||||
% 用户:当前发送此请求的用户 | |||||
% database:执行此请求的数据库 | |||||
% url:原始请求URL | |||||
% 协议:传输,['http','https','velocystream']之一 | |||||
% 服务器: | |||||
% address:此请求发送到的端点的绑定地址 | |||||
% port:此请求发送到的端口 | |||||
% client:客户端连接的属性 | |||||
% 地址:客户端的IP地址 | |||||
% port:tcp连接的客户端端口 | |||||
% id:服务器生成的id | |||||
% 内部:服务器内部结构的内容 | |||||
% prefix:数据库的前缀 | |||||
% headers:您发送的HTTP标头的列表 | |||||
% requestType:在这种情况下为POST,如果您使用其他HTTP-Verb,您会发现(获取/删除,...) | |||||
% requestBody:我们发送的POST正文的字符串化版本 | |||||
% 参数:包含查询参数的对象 | |||||
% cookies:您发送的cookie列表 | |||||
% 后缀: | |||||
% rawSuffix: | |||||
% path:此请求的相对路径 | |||||
% rawRequestBody:已发送字符的数字列表 | |||||
echo(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/echo">>, [], undefined). | |||||
% 返回数据库的版本。 | |||||
% GET /_admin/database/target-version | |||||
% 返回此服务器所需的数据库版本。版本将在结果的版本属性中返回。 | |||||
% 返回码 | |||||
% 200:在所有情况下均返回。 | |||||
getTargetVersion(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/database/target-version">>, [], undefined). | |||||
% 启动关机序列 | |||||
% DELETE /_admin/shutdown | |||||
% 此调用将启动干净的关机序列。需要管理权限 | |||||
% 返回码 | |||||
% 200:在所有情况下OK都将返回,成功时将在结果缓冲区中返回。 | |||||
shutDown(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Delete, <<"/_admin/shutdown">>, [], undefined). | |||||
% 在服务器上执行脚本。 | |||||
% POST /_admin/execute | |||||
% 请求正文(字符串) | |||||
% 要执行的主体。 | |||||
% 将服务器主体中的javascript代码作为不带参数的函数主体执行。如果您有return语句,那么您产生的返回值将作为内容类型 application / json返回。如果参数returnAsJSON设置为 true,则结果将是一个直接描述返回值的JSON对象,否则将返回JSON.stringify生成的字符串。 | |||||
% 请注意,只有在使用option启动服务器时,此API端点才会存在--javascript.allow-admin-execute true。 | |||||
% 此选项的默认值为false,它禁用用户定义代码的执行并完全禁用此API端点。这也是建议的生产设置。 | |||||
% 返回码 | |||||
% 200:一切正常或发生超时时返回。在后一种情况下,将返回指示超时的application / json类型的主体。根据returnAsJSON的不同,这是一个json对象或纯字符串。 | |||||
% 403:如果ArangoDB不在集群模式下运行,则返回。 | |||||
% 404:如果未为群集操作编译ArangoDB,则返回404。 | |||||
execute(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/execute">>, [], BodyStr). | |||||
% 返回服务器的状态信息。 | |||||
% GET /_admin/status | |||||
% 返回有关服务器的状态信息。 | |||||
% 这是供支持人员手动使用的,决不能用于监视或自动测试。结果如有更改,恕不另行通知。 | |||||
% 该调用返回具有以下属性的对象: | |||||
% 服务器:总是arango。 | |||||
% 执照:社区或企业。 | |||||
% version:服务器版本,以字符串形式。 | |||||
% 模式:服务器或控制台。 | |||||
% host:主机名,请参阅ServerState。 | |||||
% serverInfo.role:单个,协调器,主要,代理。 | |||||
% serverInfo.writeOpsEnabled:布尔值,如果启用写入,则为true。 | |||||
% serverInfo.maintenance:布尔值,如果启用了维护模式,则为true。 | |||||
% agency.endpoints:可能的代理商端点的列表。 | |||||
% 代理商,协调员或主要代理商也将拥有 | |||||
% serverInfo.persistedId:保留的ide,例如“ CRDN-e427b441-5087-4a9a-9983-2fb1682f3e2a”。 | |||||
% 协调员或主要人员也将拥有 | |||||
% serverInfo.state:服务中 | |||||
% serverInfo.address:服务器的地址,例如tcp:// [:: 1]:8530。 | |||||
% serverInfo.serverId:服务器端,例如“ CRDN-e427b441-5087-4a9a-9983-2fb1682f3e2a”。 | |||||
% 协调员还将有 | |||||
% coordinator.foxxmaster:foxx主服务器的服务器ID。 | |||||
% coordinator.isFoxxmaster:布尔值,如果服务器是foxx主服务器,则为true。 | |||||
% 代理商也将拥有 | |||||
% agent.id:此代理的服务器ID。 | |||||
% agent.leaderId:领导者的服务器ID。 | |||||
% agent。Leading:布尔值,如果为领先则为 true。 | |||||
% agent.endpoint:此代理的端点。 | |||||
% agent.term:当前术语编号。 | |||||
% 返回码 | |||||
% 200:状态信息返回成功 | |||||
getDbStatus(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/status">>, [], undefined). | |||||
@ -1,73 +0,0 @@ | |||||
-module(agOtherFunc). | |||||
-include("erlArango.hrl"). | |||||
-compile([export_all, nowarn_export_all]). | |||||
%% doc_address:https://www.arangodb.com/docs/stable/http/miscellaneous-functions.html | |||||
%% 返回server版本 | |||||
%% GET /_api/version | |||||
serverInfo(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/version">>, [], undefined). | |||||
%% 返回server版本详细信息 | |||||
%% GET /_api/version?details=true | |||||
serverDetails(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_api/version?details=true">>, [], undefined). | |||||
%% 返回服务器配置使用的存储引擎 | |||||
%% GET /_api/engine | |||||
engine(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/engine">>, [], undefined). | |||||
%% 日志刷新进磁盘 | |||||
%% PUT /_admin/wal/flush | |||||
logFlush(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Put, <<"/_admin/wal/flush">>, [], undefined). | |||||
%% 获取当前配置 | |||||
%% GET /_admin/wal/properties | |||||
walConfig(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/wal/properties">>, [], undefined). | |||||
%% 设置配置 | |||||
%% PUT /_admin/wal/properties | |||||
setWalConfig(PoolNameOrSocket, LogFileSize, AllowOversizeEntries) -> | |||||
BodyStr = jiffy:encode(#{<<"logfileSize">> => LogFileSize, <<"allowOversizeEntries">> => AllowOversizeEntries}), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Put, <<"/_admin/wal/properties">>, BodyStr, undefined). | |||||
%% 返回有关当前正在运行的事务的信息 | |||||
%% GET /_admin/wal/transactions | |||||
transactions(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/wal/transactions">>, [], undefined). | |||||
%% 获取系统的当前时间 | |||||
%% GET /_admin/time | |||||
ostime(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/time">>, [], undefined). | |||||
%% 将发送的东西发回 | |||||
%% POST /_admin/echo | |||||
echo(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/echo">>, [], undefined). | |||||
%% 返回数据库的版本 | |||||
%% GET /_admin/database/target-version | |||||
dbVersion(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/database/target-version">>, [], undefined). | |||||
%% DELETE /_admin/shutdown | |||||
shutDown(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Delete, <<"/_admin/shutdown">>, [], undefined). | |||||
%% 执行脚本 | |||||
%% POST /_admin/execute | |||||
execute(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_admin/execute">>, [], undefined). | |||||
%% 返回服务器的状态信息 | |||||
%% GET /_admin/status | |||||
status(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_admin/status">>, [], undefined). | |||||
@ -0,0 +1,89 @@ | |||||
-module(agTasks). | |||||
-include("erlArango.hrl"). | |||||
-compile([export_all, nowarn_export_all]). | |||||
% doc_address:https://www.arangodb.com/docs/stable/http/traversal.html | |||||
%HTTP任务接口 | |||||
%接下来,您将看到ArangoDB的任务HTTP接口。 | |||||
%还为每个API操作提供了一些示例。 | |||||
% 检索所有当前活动的服务器任务 | |||||
% GET /_api/tasks/ | |||||
% 获取服务器上的所有现有任务 | |||||
% HTTP 200任务列表 | |||||
% **:所有任务的列表 | |||||
getTaskList(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/tasks/">>, [], undefined). | |||||
% 检索一个当前活动的服务器任务 | |||||
% GET /_api/tasks/{id} | |||||
% 路径参数 | |||||
% id(必填):要提取的任务的ID。 | |||||
% 在ID指定的服务器上获取一个现有任务 | |||||
% HTTP 200请求的任务 | |||||
getTask(PoolNameOrSocket, TaskId) -> | |||||
Path = <<"/_api/tasks/", (agMiscUtils:toBinary(TaskId))/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). | |||||
% 创建一个新任务 | |||||
% POST /_api/tasks | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% name:任务名称 | |||||
% 命令:要执行的JavaScript代码 | |||||
% params:要传递给命令的参数 | |||||
% period:执行之间的秒数 | |||||
% offset:初始延迟的秒数 | |||||
% 用生成的ID创建一个新任务 | |||||
% HTTP 200任务已注册 | |||||
% id:标识任务的字符串 | |||||
% created:创建此任务的时间戳 | |||||
% 类型:这是什么类型的任务[ periodic,timed] | |||||
% 定期重复执行的任务 | |||||
% 定时是在特定时间执行一次的任务 | |||||
% 期:这个任务应该运行的每个period秒 | |||||
% offset:距创建的时间戳的时间偏移(以秒为单位) | |||||
% 命令:此任务的javascript函数 | |||||
% database:此任务所属的数据库 | |||||
% code:状态码,在这种情况下为200。 | |||||
% 错误:在这种情况下为false | |||||
% 400:如果帖子正文不正确,则返回HTTP 400。 | |||||
newTask(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_api/tasks">>, [], BodyStr). | |||||
% 注册具有预定义ID的新任务;与负载均衡器不兼容 | |||||
% PUT /_api/tasks/{id} | |||||
% 路径参数 | |||||
% id(必填):要创建的任务的id | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% name:任务名称 | |||||
% 命令:要执行的JavaScript代码 | |||||
% params:要传递给命令的参数 | |||||
% period:执行之间的秒数 | |||||
% offset:初始延迟的秒数 | |||||
% 注册具有指定ID的新任务 | |||||
% 返回码 | |||||
% 400:如果任务ID已经存在或其余主体不正确,则返回HTTP 400。 | |||||
newTask(PoolNameOrSocket, TaskId, MapData) -> | |||||
Path = <<"/_api/tasks/", (agMiscUtils:toBinary(TaskId))/binary>>, | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, Path, [], BodyStr). | |||||
% 删除一个当前活动的服务器任务 | |||||
% DELETE /_api/tasks/{id} | |||||
% 路径参数 | |||||
% id(必填):要删除的任务的id。 | |||||
% 删除服务器上ID标识的任务。 | |||||
% HTTP 200如果删除了任务,则返回HTTP 200。 | |||||
% code:状态码,在这种情况下为200。 | |||||
% 错误:在这种情况下为false | |||||
% HTTP 404如果任务ID未知,则返回HTTP 404。 | |||||
% code:状态码,在这种情况下为404。 | |||||
% 错误:在这种情况下为true | |||||
% errorMessage:一条纯文本消息,指出出了什么问题。 | |||||
delTask(PoolNameOrSocket, TaskId) -> | |||||
Path = <<"/_api/tasks/", (agMiscUtils:toBinary(TaskId))/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Delete, Path, [], undefined). |
@ -0,0 +1,234 @@ | |||||
-module(agUserMgr). | |||||
-include("erlArango.hrl"). | |||||
-compile([export_all, nowarn_export_all]). | |||||
% doc_address:https://www.arangodb.com/docs/stable/http/user-management.html | |||||
% 用户管理的HTTP接口 | |||||
% 这是用于管理用户的ArangoDB HTTP接口的简介。 | |||||
% | |||||
% 该界面提供了添加,更新和删除用户的简单方法。通过此接口管理的所有用户都将存储在系统集合 _users中。您永远不要直接操作_users集合。 | |||||
% | |||||
% 该专用接口有意不提供常规文档REST API中可用的所有功能。 | |||||
% | |||||
% 请注意,ArangoDB的复制中不包括用户操作。 | |||||
% 创建一个新用户。 | |||||
% POST /_api/user | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% user:用户名(字符串)。这是强制性的。 | |||||
% passwd:用户密码(字符串)。如果未指定密码,将使用空字符串。如果传递特殊值ARANGODB_DEFAULT_ROOT_PASSWORD,则密码将设置为存储在环境变量中的值 ARANGODB_DEFAULT_ROOT_PASSWORD。这可用于将实例变量传递给ArangoDB。例如,来自Amazon的实例标识符。 | |||||
% active:一个可选标志,用于指定用户是否处于活动状态。如果未指定,则默认为true | |||||
% extra:一个可选的JSON对象,其中包含有关用户的任意额外数据。 | |||||
% 创建一个新用户。您需要服务器访问级别“ 管理 ”才能执行此REST调用。 | |||||
% 返回码 | |||||
% 201:如果服务器可以添加用户,则返回 | |||||
% 400:如果JSON格式不正确或请求中缺少必需数据。 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
% 409:如果已经存在同名用户,则返回。 | |||||
newUser(PoolNameOrSocket, MapData) -> | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Post, <<"/_api/user">>, [], BodyStr). | |||||
% 设置数据库访问级别。 | |||||
% PUT /_api/user/{user}/database/{dbname} | |||||
% 路径参数 | |||||
% 用户(必填):用户名。 | |||||
% dbname(必填):数据库的名称。 | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% grant:使用“ rw”将数据库访问级别设置为Administrate。 | |||||
% 使用“ ro”将数据库访问级别设置为Access。 | |||||
% 使用“无”将数据库访问级别设置为“ 无访问权”。 | |||||
% 为用户user的数据库dbname设置数据库访问级别。您需要管理服务器访问级别才能执行此REST调用。 | |||||
% 返回码 | |||||
% 200:如果访问级别更改成功,则返回。 | |||||
% 400:如果JSON格式不正确或请求中缺少必需数据。 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
setUserDbAccessLevel(PoolNameOrSocket, UserName, DbName, MapData) -> | |||||
Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary>>, | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Put, Path, [], BodyStr). | |||||
% 设置收集访问级别。 | |||||
% PUT /_api/user/{user}/database/{dbname}/{collection} | |||||
% 路径参数 | |||||
% 用户(必填):用户名。 | |||||
% dbname(必填):数据库的名称。 | |||||
% 集合(必填):集合的名称。 | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% grant:使用“ rw”将收集级别访问权限设置为“ 读/写”。 | |||||
% 使用“ ro”将收集级别访问权限设置为“ 只读”。 | |||||
% 使用“无”将收集级别访问权限设置为“ 无访问权限”。 | |||||
% 设置用于收集访问级别收集在数据库DBNAME 用户的用户。您需要管理服务器访问级别才能执行此REST调用。 | |||||
% 返回码 | |||||
% 200:成功修改访问权限后返回。 | |||||
% 400:如果JSON格式不正确或请求中缺少必需数据。 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
setUserCollAccessLevel(PoolNameOrSocket, UserName, DbName, CollName, MapData) -> | |||||
Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary, "/", CollName/binary>>, | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Put, Path, [], BodyStr). | |||||
% 清除数据库访问级别,恢复为默认访问级别 | |||||
% DELETE /_api/user/{user}/database/{dbname} | |||||
% 路径参数 | |||||
% 用户(必填):用户名。 | |||||
% dbname(必填):数据库的名称。 | |||||
% 清除用户user的数据库dbname的数据库访问级别。因此,将使用默认的数据库访问级别。如果没有定义的默认数据库访问级别,则默认为No access。您需要获得_system数据库的权限才能执行此REST调用。 | |||||
% 返回码 | |||||
% 202:成功更改访问权限后返回。 | |||||
% 400:如果JSON格式不正确或请求中缺少必需数据。 | |||||
clearUserDbAccessLevel(PoolNameOrSocket, UserName, DbName) -> | |||||
Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Delete, Path, [], undefined). | |||||
% 清除集合访问级别,恢复为默认访问级别 | |||||
% DELETE /_api/user/{user}/database/{dbname}/{collection} | |||||
% 路径参数 | |||||
% 用户(必填):用户名。 | |||||
% dbname(必填):数据库的名称。 | |||||
% 集合(必填):集合的名称。 | |||||
% 清除用户user的数据库dbname中集合集合的集合访问级别。因此,将使用默认的集合访问级别。如果没有定义的默认集合访问级别,则默认为No access。您需要具有_system数据库的权限才能执行此REST调用。 | |||||
% 返回码 | |||||
% 202:成功更改访问权限后返回。 | |||||
% 400:如果有错误 | |||||
clearUserCollAccessLevel(PoolNameOrSocket, UserName, DbName, CollName) -> | |||||
Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary, "/", CollName/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Delete, Path, [], undefined). | |||||
% 列出用户的可访问数据库 | |||||
% GET /_api/user/{user}/database/ | |||||
% 路径参数 | |||||
% 用户(必填):您要查询数据库的用户名。 | |||||
% 查询参数 | |||||
% 完整(可选):返回所有数据库和所有集合的完整访问级别集。 | |||||
% 获取指定用户可用的数据库列表。您需要 管理的服务器访问级别,以执行该REST调用。 | |||||
% 该调用将返回一个具有指定用户按数据库访问权限的JSON对象。该结果对象将包含数据库名称作为对象键,以及相关的权限的数据库值。 | |||||
% 如果您指定full,则结果将包含数据库的权限以及集合的权限。 | |||||
% 返回码 | |||||
% 200:如果可以返回可用数据库列表,则返回。 | |||||
% 400:如果访问权限不正确等 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
getUserDbList(PoolNameOrSocket, UserName) -> | |||||
Path = <<"/_api/user/", UserName/binary, "/database/">>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). | |||||
% 获取特定的数据库访问级别 | |||||
% GET /_api/user/{user}/database/{dbname} | |||||
% 路径参数 | |||||
% 用户(必填):您要查询数据库的用户名。 | |||||
% dbname(必填):要查询的数据库的名称 | |||||
% 获取特定数据库的数据库访问级别 | |||||
% 返回码 | |||||
% 200:如果可以返回访问级别,则返回 | |||||
% 400:如果访问权限不正确等 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
getUserDbAccessLevel(PoolNameOrSocket, UserName, DbName) -> | |||||
Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). | |||||
% 获取集合访问级别 | |||||
% GET /_api/user/{user}/database/{dbname}/{collection} | |||||
% 路径参数 | |||||
% 用户(必填):您要查询数据库的用户名。 | |||||
% dbname(必填):要查询的数据库的名称 | |||||
% 集合(必填):集合的名称 | |||||
% 返回特定集合的集合访问级别 | |||||
% 返回码 | |||||
% 200:如果可以返回访问级别,则返回 | |||||
% 400:如果访问权限不正确等 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
getUserCollAccessLevel(PoolNameOrSocket, UserName, DbName, CollName) -> | |||||
Path = <<"/_api/user/", UserName/binary, "/database/", DbName/binary, "/", CollName/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). | |||||
% 替换现有用户。 | |||||
% PUT /_api/user/{user} | |||||
% 路径参数 | |||||
% 用户(必填):用户名 | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% passwd:用户密码(字符串)。必须指定密码,但是密码允许使用空字符串 | |||||
% active:一个可选标志,用于指定用户是否处于活动状态。如果未指定,则默认为true | |||||
% extra:一个可选的JSON对象,其中包含有关用户的任意额外数据。 | |||||
% 替换现有用户的数据。现有用户的名称必须在user中指定。您需要服务器访问级别“ 管理 ”才能执行此REST调用。另外,用户可以更改他/她自己的数据。 | |||||
% 返回码 | |||||
% 200:如果用户数据可以被服务器替换,则返回。 | |||||
% 400:JSON格式不正确或请求中缺少必需数据 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
% 404:指定的用户不存在 | |||||
replaceUser(PoolNameOrSocket, UserName, MapData) -> | |||||
Path = <<"/_api/user/", UserName/binary>>, | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Put, Path, [], BodyStr). | |||||
% 修改现有用的属性户 | |||||
% PATCH /_api/user/{user} | |||||
% 路径参数 | |||||
% 用户(必填):用户名 | |||||
% 具有以下属性的JSON对象是必需的: | |||||
% passwd:用户密码(字符串)。必须指定密码,但是密码允许使用空字符串 | |||||
% active:一个可选标志,用于指定用户是否处于活动状态。如果未指定,则默认为true | |||||
% extra:一个可选的JSON对象,其中包含有关用户的任意额外数据。 | |||||
% 部分更新现有用户的数据。现有用户的名称必须在user中指定。您需要服务器访问级别“ 管理 ”才能执行此REST调用。另外,用户可以更改他/她自己的数据。 | |||||
% 返回码 | |||||
% 200:如果用户数据可以被服务器替换,则返回。 | |||||
% 400:JSON格式不正确或请求中缺少必需数据。 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
% 404:指定的用户不存在 | |||||
modifyUser(PoolNameOrSocket, UserName, MapData) -> | |||||
Path = <<"/_api/user/", UserName/binary>>, | |||||
BodyStr = jiffy:encode(MapData), | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Patch, Path, [], BodyStr). | |||||
% 永久删除用户。 | |||||
% DELETE /_api/user/{user} | |||||
% 路径参数 | |||||
% 用户(必填):用户名 | |||||
% 删除由user标识的现有用户。您需要管理的服务器访问级别,以执行该REST调用。 | |||||
% 返回码 | |||||
% 202:如果服务器删除了用户,则返回 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
% 404:指定的用户不存在 | |||||
delUser(PoolNameOrSocket, UserName) -> | |||||
Path = <<"/_api/user/", UserName/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Delete, Path, [], undefined). | |||||
% 获取用户的属性。 | |||||
% GET /_api/user/{user} | |||||
% 路径参数 | |||||
% 用户(必填):用户名 | |||||
% 获取有关指定用户的数据。您可以获取有关您自己的信息,或者您需要管理服务器访问级别才能执行此REST调用。 | |||||
% 返回码 | |||||
% 200:找到用户 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
% 404:指定用户名不存在。 | |||||
getUser(PoolNameOrSocket, UserName) -> | |||||
Path = <<"/_api/user/", UserName/binary>>, | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, Path, [], undefined). | |||||
% 列出可用的用户 | |||||
% GET /_api/user/ | |||||
% 获取有关所有用户的数据。您需要管理服务器访问级别才能执行此REST调用。否则,您只会获得有关您自己的信息。 | |||||
% 调用成功后将返回至少具有以下属性的JSON对象: | |||||
% user:用户名(字符串)。 | |||||
% active:一个可选标志,用于指定用户是否处于活动状态。 | |||||
% extra:一个可选的JSON对象,其中包含有关用户的任意额外数据。 | |||||
% 返回码 | |||||
% 200:找到的用户 | |||||
% 401:如果您没有对_system 数据库的访问数据库访问级别,则返回。 | |||||
% 403:如果您没有访问服务器访问级别,则返回。 | |||||
getUserList(PoolNameOrSocket) -> | |||||
agHttpCli:callAgency(PoolNameOrSocket, ?Get, <<"/_api/user/">>, [], undefined). |