blob: fbc5c63993304616cf702bb31afa3ce1aca801a1 [file] [log] [blame]
{
"description": "Schema for the Qpid Dispatch Router management model. See qdrouter.json.readme.txt.",
"prefix": "org.apache.qpid.dispatch",
"entityTypes": {
"entity": {
"description": "Base entity type for all entities.",
"attributes": {
"name": {
"type": "string",
"unique": true,
"description": "Unique name optionally assigned by user. Can be changed.",
"create": true
},
"identity": {
"type": "string",
"unique": true,
"description": "Unique identity generated by the system. Will not change."
},
"type": {
"type": "string",
"required": true,
"description": "Management entity type.",
"create": true
}
},
"operationDefs": {
"CREATE": {
"description": "Create a new entity.",
"request": {
"properties": {
"name": {
"description": "Name of new entity. Optional, defaults to identity.",
"type": "string"
},
"type": {
"description": "Type of new entity.",
"type": "string",
"required": true
}
},
"body": {
"description": "Attributes for the new entity. Can include name and/or type.",
"type": "map",
"required": true
}
},
"response": {
"body": {
"description": "Attributes of the entity",
"type": "map"
}
}
},
"READ": {
"description": "Read attributes of a single entity",
"request": {
"properties": {
"name": {
"description": "Name of desired entity. Must supply name or identity.",
"type": "string"
},
"identity": {
"description": "Identity of desired entity. Must supply name or identity.",
"type": "string"
},
"type": {
"description": "Type of desired entity.",
"type": "string"
}
}
},
"response": {
"body": {
"description": "Attributes of the entity",
"type": "map"
}
}
},
"UPDATE": {
"description": "Update attributes of an entity",
"request": {
"properties": {
"name": {
"description": "Name of desired entity. Must supply name or identity.",
"type": "string"
},
"identity": {
"description": "Identity of desired entity. Must supply name or identity.",
"type": "string"
},
"type": {
"description": "Type of desired entity.",
"type": "string"
}
},
"body": {
"description": "Attributes to update for the entity. Can include name or identity.",
"type": "map"
}
},
"response": {
"body": {
"description": "Updated attributes of the entity",
"type": "map"
}
}
},
"DELETE": {
"description": "Delete an entity",
"request": {
"properties": {
"name": {
"description": "Name of desired entity. Must supply name or identity.",
"type": "string"
},
"identity": {
"description": "Identity of desired entity. Must supply name or identity.",
"type": "string"
},
"type": {
"description": "Type of desired entity.",
"type": "string"
}
}
}
}
}
},
"org.amqp.management": {
"description": "The standard AMQP management node interface.",
"fullName": true,
"extends": "operationalEntity",
"operations": ["QUERY", "GET-TYPES", "GET-ANNOTATIONS", "GET-OPERATIONS", "GET-ATTRIBUTES", "GET-MGMT-NODES"],
"operationDefs": {
"QUERY": {
"description": "Query for attribute values of multiple entities.",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"entityType": {
"description": "If set, restrict query results to entities that extend (directly or indirectly) this type",
"type": "string"
},
"offset": {
"description": "If set, specifies the number of the first element of the result set to be returned.",
"type": "integer",
"default": 0
},
"count": {
"description": "If set, specifies the number of entries from the result set to return. If not set return all from `offset`",
"type": "integer"
}
},
"body": {
"description": "A map containing the key `attributeNames` with value a list of (string) attribute names to return. If the list or the map is empty or the body is missing all attributes are returned.",
"type": "map"
}
},
"response": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"count": {
"description": "Number of results returned",
"type": "integer"
}
},
"body": {
"description": "A map with two entries. `attributeNames` is a list of the attribute names returned. `results` is a list of lists each containing the attribute values for a single entity in the same order as the names in the `attributeNames` entry. If an attribute name is not applicable for an entity then the corresponding value is `null`",
"type": "map"
}
}
},
"GET-TYPES": {
"description": "Get the set of entity types and their inheritance relationships",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"entityType": {
"description": "If set, restrict query results to entities that extend (directly or indirectly) this type",
"type": "string"
}
}
},
"response": {
"body": {
"description": "A map where each key is an entity type name (string) and the corresponding value is the list of the entity types (strings) that it extends.",
"type": "map"
}
}
},
"GET-OPERATIONS": {
"description": "Get the set of entity types and the operations they support",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"entityType": {
"description": "If set, restrict query results to entities that extend (directly or indirectly) this type",
"type": "string"
}
}
},
"response": {
"body": {
"description": "A map where each key is an entity type name (string) and the corresponding value is the list of operation names (strings) that it supports.",
"type": "map"
}
}
},
"GET-ANNOTATIONS": {
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"entityType": {
"description": "If set, restrict query results to entities that extend (directly or indirectly) this type",
"type": "string"
}
}
},
"response": {
"body": {
"description": "A map where each key is an entity type name (string) and the corresponding value is the list of annotations (strings) that it implements.",
"type": "map"
}
}
},
"GET-ATTRIBUTES": {
"description": "Get the set of entity types",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"entityType": {
"description": "If set, restrict query results to entities that extend (directly or indirectly) this type",
"type": "string"
}
}
},
"response": {
"body": {
"description": "A map where each key is an entity type name (string) and the corresponding value is a list (of strings) of attributes on that entity type.",
"type": "map"
}
}
},
"GET-MGMT-NODES": {
"description": "Get the addresses of all management nodes known to this router",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
}
}
},
"response": {
"body": {
"description": "A list of addresses (strings) of management nodes known to this management node.",
"type": "list"
}
}
}
}
},
"management": {
"description": "Qpid Dispatch Router extensions to the standard org.amqp.management interface.",
"extends": "org.amqp.management",
"singleton": true,
"operations": ["GET-SCHEMA", "GET-JSON-SCHEMA", "GET-LOG", "PROFILE"],
"operationDefs": {
"GET-SCHEMA": {
"description": "Get the qdrouterd schema for this router in AMQP map format",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
}
}
},
"response": {
"body": {
"description": "The qdrouter schema as a map.",
"type": "map"
}
}
},
"GET-SCHEMA-JSON": {
"description": "Get the qdrouterd schema for this router in JSON format",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"indent": {
"description": "Number of spaces to indent the formatted result. If not specified, the result is in minimal format, no unnecessary spaces or newlines.",
"type": "integer"
}
}
},
"response": {
"body": {
"description": "The qdrouter schema as a JSON string.",
"type": "string"
}
}
},
"GET-LOG": {
"description": "Get recent log entries from the router.",
"request": {
"properties": {
"identity": {
"description": "Set to the value `self`",
"type": "string"
},
"limit": {
"description": "Maximum number of log entries to get.",
"type": "integer"
}
}
},
"response": {
"body": {
"description": "A list of log entries where each entry is a list of: module name(string), level name(string), message text(string), file name(string or None), line number(integer or None) , timestamp(integer)",
"type": "string"
}
}
}
}
},
"configurationEntity": {
"description": "Base type for entities containing configuration information.",
"extends": "entity",
"attributes": {},
"operations": ["READ"]
},
"operationalEntity": {
"description": "Base type for entities containing current operational information.",
"extends": "entity",
"operations": ["READ"],
"attributes": {}
},
"router": {
"description":"Tracks peer routers and computes routes to destinations. This entity is mandatory. The router will not start without this entity.",
"extends": "configurationEntity",
"singleton": true,
"attributes": {
"id": {
"description":"Router's unique identity. This field may not contain whitespace or control characters. If not specified, a random identity will be assigned at startup.",
"type": "string",
"required": false,
"create": true
},
"mode": {
"type": [
"standalone",
"interior",
"edge"
],
"default": "standalone",
"description": "In standalone mode, the router operates as a single component. It does not participate in the routing protocol and therefore will not cooperate with other routers. In interior mode, the router operates in cooperation with other interior routers in an interconnected network. In edge mode, the router can make a connection to an interior router and join a network without causing that network to recompute paths.",
"create": true
},
"area": {
"type": "string",
"description": "Unused placeholder.",
"default": 0
},
"version": {
"type": "string",
"description": "Software Version"
},
"hostName": {
"type": "string",
"description": "hostName of machine on which router is running"
},
"helloIntervalSeconds": {
"type": "integer",
"default": 1,
"description": "Interval in seconds between HELLO messages sent to neighbor routers.",
"deprecationName": "helloInterval",
"create": true
},
"helloMaxAgeSeconds": {
"type": "integer",
"default": 3,
"description": "Time in seconds after which a neighbor is declared lost if no HELLO is received.",
"deprecationName": "helloMaxAge",
"create": true
},
"raIntervalSeconds": {
"type": "integer",
"default": 30,
"description": "Interval in seconds between Router-Advertisements sent to all routers in a stable network.",
"deprecationName": "raInterval",
"create": true
},
"raIntervalFluxSeconds": {
"type": "integer",
"default": 4,
"description": "Interval in seconds between Router-Advertisements sent to all routers during topology fluctuations.",
"deprecationName": "raIntervalFlux",
"create": true
},
"remoteLsMaxAgeSeconds": {
"type": "integer",
"default": 60,
"description": "Time in seconds after which link state is declared stale if no RA is received.",
"deprecationName": "remoteLsMaxAge",
"create": true
},
"workerThreads": {
"type": "integer",
"default": 4,
"description": "The number of threads that will be created to process message traffic and other application work (timers, non-amqp file descriptors, etc.) .",
"create": true
},
"debugDumpFile": {
"type": "path",
"description": "The absolute path to the location for the debug dump file. The router writes debug-level information to this file if the logger is not available.",
"deprecationName": "debugDump",
"create": true
},
"saslConfigDir": {
"type": "path",
"description": "Absolute path to the SASL configuration file.",
"deprecationName": "saslConfigPath",
"required": false,
"create": true
},
"saslConfigName": {
"type": "string",
"description": "Name of the SASL configuration. This string + '.conf' is the name of the configuration file.",
"default": "qdrouterd",
"required": false,
"create": true
},
"allowResumableLinkRoute": {
"type": "boolean",
"description": "Whether links can be routed where timeout is non-zero or expiry-policy is not link-detach",
"create": true,
"required": false,
"default": true
},
"timestampsInUTC": {
"type": "boolean",
"description": "Use UTC time rather than localtime in logs.",
"create": true
},
"timestampFormat": {
"type": "string",
"description": "Format string to use for timestamps in logs.",
"create": true
},
"allowUnsettledMulticast": {
"type": "boolean",
"description": "(DEPRECATED) If true, allow senders to send unsettled deliveries to multicast addresses. These deliveries shall be settled by the ingress router. If false, unsettled deliveries to multicast addresses shall be rejected.",
"create": true,
"required": false,
"default": false
},
"defaultDistribution": {
"type": ["multicast", "closest", "balanced", "unavailable"],
"description": "Default forwarding treatment for any address without a specified treatment. multicast - one copy of each message delivered to all subscribers; closest - messages delivered to only the closest subscriber; balanced - messages delivered to one subscriber with load balanced across subscribers; unavailable - this address is unavailable, messages sent and link attaches to the address will be rejected.",
"create": true,
"required": false,
"default": "balanced"
},
"metadata": {
"type": "string",
"description": "Optional metadata text to describe or label this router. This text does not affect the function of the router, but it can be used by external tools (such as the console or orchestration software) to control how the router is displayed.",
"create": true,
"required": false
},
"addrCount": {
"type": "integer",
"description":"Number of addresses known to the router.",
"graph": true
},
"linkCount": {
"type": "integer",
"description":"Number of links attached to the router node.",
"graph": true
},
"blockedLinkCount": {
"type": "integer",
"description": "The number of links that are flagged as blocked. A blocked link is one in which the available credit has remained zero for more than 10 seconds.",
"graph": true
},
"nodeCount": {
"type": "integer",
"description":"Number of known peer router nodes.",
"graph": true
},
"linkRouteCount": {
"type": "integer",
"description":"Number of link routes attached to the router node.",
"graph": true
},
"autoLinkCount": {
"type": "integer",
"description":"Number of auto links attached to the router node.",
"graph": true
},
"connectionCount": {
"type": "integer",
"description":"Number of open connections to the router node.",
"graph": true
},
"presettledDeliveries": {
"type": "integer",
"description":"Number of presettled deliveries handled by the router.",
"graph": true
},
"droppedPresettledDeliveries": {
"type": "integer",
"description":"Number of presettled deliveries that were dropped by the router.",
"graph": true
},
"acceptedDeliveries": {
"type": "integer",
"description":"Number of deliveries whose delivery state was set to ACCEPTED by the router. These deliveries were successfully processed by the router.",
"graph": true
},
"rejectedDeliveries": {
"type": "integer",
"description":"Number of deliveries whose delivery state was set to REJECTED by the router. These deliveries were Invalid and unprocessable.",
"graph": true
},
"releasedDeliveries": {
"type": "integer",
"description":"Number of deliveries whose delivery state was set to RELEASED by the router. These deliveries was not (and will not be) processed",
"graph": true
},
"modifiedDeliveries": {
"type": "integer",
"description":"Number of deliveries whose delivery state was set to MODIFIED by the router. These deliveries were modified but not processed.",
"graph": true
},
"deliveriesDelayed1Sec": {
"type": "integer",
"graph": true,
"description": "The total number of settled deliveries that were held in the router for 1 to 10 seconds."
},
"deliveriesDelayed10Sec": {
"type": "integer",
"graph": true,
"description": "The total number of settled deliveries that were held in the router for more than 10 seconds."
},
"deliveriesStuck": {
"type": "integer",
"graph": true,
"description": "The current number of deliveries that are unsettled and have been held in the router for more than 10 seconds."
},
"deliveriesIngress": {
"type": "integer",
"description":"Number of deliveries that were sent to it by a sender that is directly attached to the router.",
"graph": true
},
"deliveriesEgress": {
"type": "integer",
"description":"Number of deliveries that were sent by the router to a receiver that is directly attached to the router.",
"graph": true
},
"deliveriesTransit": {
"type": "integer",
"description":"Number of deliveries that were sent to another router in the network.",
"graph": true
},
"deliveriesIngressRouteContainer": {
"type": "integer",
"description":"Number of deliveries that were received from router container connections.",
"graph": true
},
"deliveriesEgressRouteContainer": {
"type": "integer",
"description":"Number of deliveries that were sent to route container connections.",
"graph": true
},
"deliveriesRedirectedToFallback": {
"type": "integer",
"description": "Number of deliveries that were sent to the fallback destination due to the primary destination being unreachable.",
"graph": true
},
"uptimeSeconds": {
"type": "integer",
"graph": true,
"description": "The number of seconds since the router was started."
},
"memoryUsage": {
"type": "integer",
"graph": true,
"description": "The current amount of memory in use by the qdrouterd process in bytes. This includes memory provisioned for stack, data, and code (VmSize). This value is set to Null if the platform does not provide access to the process memory size."
}
}
},
"sslProfile": {
"description":"Attributes for setting TLS/SSL configuration for connections.",
"referential": true,
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"ciphers": {
"type": "string",
"description": "Specifies the enabled ciphers so the SSL Ciphers can be hardened. In other words, use this field to disable weak ciphers. The ciphers are specified in the format understood by the OpenSSL library. For example, ciphers can be set to ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; -- The full list of allowed ciphers can be viewed using the openssl ciphers command",
"create": true
},
"protocols": {
"type": "string",
"description": "The TLS protocols that this sslProfile can use. You can specify a list of one or more of TLSv1, TLSv1.1, or TLSv1.2. To specify multiple protocols, separate the protocols with a space. For example, to permit the sslProfile to use TLS v1.1 and TLS v1.2 only, you would set the value to TLSv1.1 TLSv1.2. If you do not specify a value, the sslProfile uses the TLS protocol specified by the system-wide configuration.",
"create": true
},
"caCertFile": {
"type": "path",
"description": "The absolute path to the database that contains the public certificates of trusted certificate authorities (CA).",
"deprecationName": "certDb",
"create": true
},
"certFile": {
"type": "path",
"description": "The absolute path to the file containing the PEM-formatted public certificate to be used on the local end of any connections using this profile.",
"create": true
},
"privateKeyFile": {
"type": "path",
"description": "The absolute path to the file containing the PEM-formatted private key for the above certificate.",
"deprecationName": "keyFile",
"create": true
},
"passwordFile": {
"type": "path",
"description": "(DEPRECATED) If the above private key is password protected, this is the absolute path to the file containing the password that unlocks the certificate key. This file should be permission protected to limit access. This has been deprecated. Use the file: prefix in the password field to specify the absolute path of the file containing the password. If both password and passwordFile are provided, the passwordFile is ignored",
"deprecated": true,
"create": true
},
"password": {
"type": "string",
"description": "The password that unlocks the certificate key. You can specify the password by specifying an environment variable that stores the password, a file that stores the password, or by entering the password in clear text. To use an environment variable, specify 'password: env:<var>'. Use this option with caution, because the environment of other processes is visible on certain platforms (for example, ps on certain Unix OSs). To use a file, specify 'password: file:<absolute-path-to-file>'. This option is the most secure, because permissions can be set on the file that contains the password. To specify the password in clear text, specify 'password: pass:<password>', or 'password: literal:<password>', or 'password: <password>'. This option is insecure, so it should only be used if security is not a concern. If both password and passwordFile are provided, the passwordFile is ignored.",
"create": true
},
"uidFormat": {
"type": "string",
"description": "A list of x509 client certificate fields that will be used to build a string that will uniquely identify the client certificate owner. For e.g. a value of 'cou' indicates that the uid will consist of c - common name concatenated with o - organization-company name concatenated with u - organization unit; or a value of 'o2' indicates that the uid will consist of o (organization name) concatenated with 2 (the sha256 fingerprint of the entire certificate) . Allowed values can be any combination of 'c'( ISO3166 two character country code), 's'(state or province), 'l'(Locality; generally - city), 'o'(Organization - Company Name), 'u'(Organization Unit - typically certificate type or brand), 'n'(CommonName - typically a user name for client certificates) and '1'(sha1 certificate fingerprint, as displayed in the fingerprints section when looking at a certificate with say a web browser is the hash of the entire certificate) and 2 (sha256 certificate fingerprint) and 5 (sha512 certificate fingerprint). The user identifier (uid) that is generated based on the uidFormat is a string which has a semi-colon as a separator between the components",
"create": true
},
"uidNameMappingFile": {
"type": "string",
"description": "The absolute path to the file containing the unique id to display name mapping",
"deprecationName": "displayNameFile",
"create": true
}
}
},
"authServicePlugin": {
"description":"EXPERIMENTAL. Attributes for setting SASL plugin.",
"referential": true,
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"authService": {
"type": "string",
"description": "(DEPRECATED) Address of a service to delegate authentication to. This attribute has been deprecated. Use the host and port attributes instead.",
"deprecated": true,
"create": true
},
"host": {
"description":"A host name, IPV4 or IPV6 literal, of the service to delegate to.",
"type": "string",
"default": "",
"create": true
},
"port": {
"description": "Port number of the service delegated host.",
"type": "string",
"default": "amqp",
"create": true
},
"realm": {
"type": "string",
"description": "Value to set for hostname field on sasl-init",
"required": false,
"deprecationName": "saslInitHostname",
"create": true
},
"sslProfile": {
"type": "string",
"required": false,
"description": "Name of the sslProfile to use for the authentication service.",
"deprecationName": "authSslProfile",
"create": true
}
}
},
"listener": {
"description": "Listens for incoming connections to the router.",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"host": {
"description":"A host name, IPV4 or IPV6 literal, or the empty string. The empty string listens on all local addresses. A host name listens on all addresses associated with the name. An IPV6 literal address (or wildcard '[::]') listens only for IPV6. An IPV4 literal address (or wildcard '0.0.0.0') listens only for IPV4.",
"type": "string",
"default": "",
"create": true
},
"port": {
"description": "Port number or symbolic service name. If '0', the router shall assign an ephemeral port to the listener and log the port number with a log of the form 'SERVER (notice) Listening on <host>:<assigned-port> (<listener-name>)'",
"type": "string",
"default": "amqp",
"create": true
},
"socketAddressFamily": {
"type": ["IPv4", "IPv6"],
"required": false,
"deprecationName": "protocolFamily",
"description": "['IPv4', 'IPv6'] IPv4: Internet Protocol version 4; IPv6: Internet Protocol version 6. If not specified, the protocol family will be automatically determined from the address.",
"create": true
},
"role": {
"type": [
"normal",
"inter-router",
"route-container",
"edge"
],
"default": "normal",
"description": "The role of an established connection. In the normal role, the connection is assumed to be used for AMQP clients that are doing normal message delivery over the connection. In the inter-router role, the connection is assumed to be to another router in the network. Inter-router discovery and routing protocols can only be used over inter-router connections. route-container role can be used for router-container connections, for example, a router-broker connection. In the edge role, the connection is assumed to be between an edge router and an interior router.",
"create": true
},
"cost": {
"type": "integer",
"default": 1,
"required": false,
"create": true,
"description": "For the 'inter-router' role only. This value assigns a cost metric to the inter-router connection. The default (and minimum) value is one. Higher values represent higher costs. The cost is used to influence the routing algorithm as it attempts to use the path with the lowest total cost from ingress to egress."
},
"sslProfile": {
"type": "string",
"required": false,
"description": "Name of the sslProfile.",
"create": true
},
"saslMechanisms": {
"type": "string",
"required": false,
"description": "Space separated list of accepted SASL authentication mechanisms.",
"create": true
},
"authenticatePeer": {
"type": "boolean",
"default": false,
"description": "yes: Require the peer's identity to be authenticated; no: Do not require any authentication.",
"create": true
},
"saslPlugin": {
"type": "string",
"required": false,
"description": "EXPERIMENTAL. Name of the a sasl plugin configuration section to use for this listener (e.g. authServicePlugin).",
"create": true
},
"requireEncryption": {
"type": "boolean",
"default": false,
"description": "yes: Require the connection to the peer to be encrypted; no: Permit non-encrypted communication with the peer",
"create": true
},
"requireSsl": {
"type": "boolean",
"default": false,
"description": "yes: Require the use of SSL or TLS on the connection; no: Allow clients to connect without SSL or TLS.",
"create": true
},
"trustedCertsFile": {
"type": "path",
"description": "(DEPRECATED) Use sslProfile caCertFile instead.",
"deprecationName": "trustedCerts",
"create": true
},
"maxFrameSize": {
"type": "integer",
"default": 16384,
"description": "The maximum frame size in octets that will be used in the connection-open negotiation with a connected peer. The frame size is the largest contiguous set of uninterrupted data that can be sent for a message delivery over the connection. Interleaving of messages on different links is done at frame granularity. Policy settings, if specified, will overwrite this value. Defaults to 16384.",
"create": true
},
"maxSessions": {
"type": "integer",
"default": 32768,
"description": "The maximum number of sessions that can be simultaneously active on the connection. Setting this value to zero selects the default number of sessions. Policy settings, if specified, will overwrite this value. Defaults to 32768.",
"create": true
},
"maxSessionFrames": {
"type": "integer",
"description": "Session incoming window measured in transfer frames for sessions created on this connection. This is the number of transfer frames that may simultaneously be in flight for all links in the session. Setting this value to zero selects the default session window size. Policy settings, if specified, will overwrite this value. The numerical product of maxFrameSize and maxSessionFrames may not exceed 2^31-1. If (maxFrameSize x maxSessionFrames) exceeds 2^31-1 then maxSessionFrames is reduced to (2^31-1 / maxFrameSize). maxSessionFrames has a minimum value of 1. Defaults to 0 (unlimited window).",
"required": false,
"create": true
},
"idleTimeoutSeconds": {
"type": "integer",
"default": 16,
"description": "The idle timeout, in seconds, for connections through this listener. If no frames are received on the connection for this time interval, the connection shall be closed.",
"required": false,
"create": true
},
"initialHandshakeTimeoutSeconds": {
"type": "integer",
"default": 0,
"description": "The timeout, in seconds, for the initial handshake for connections coming in through listeners. If the time interval expires before the peer sends the AMQP OPEN frame, the connection shall be closed. A value of zero (the default) disables this timeout.",
"required": false,
"create": true
},
"stripAnnotations": {
"type": ["in", "out", "both", "no"],
"default": "both",
"description": "['in', 'out', 'both', 'no'] in: Strip the dispatch router specific annotations only on ingress; out: Strip the dispatch router specific annotations only on egress; both: Strip the dispatch router specific annotations on both ingress and egress; no - do not strip dispatch router specific annotations",
"create": true
},
"linkCapacity": {
"type": "integer",
"create": true,
"required": false,
"description": "The capacity of links within this connection, in terms of message deliveries. The capacity is the number of messages that can be in-flight concurrently for each link."
},
"multiTenant": {
"type": "boolean",
"create": true,
"required": false,
"default": false,
"description": "If true, apply multi-tenancy to endpoints connected at this listener. The address space is defined by the virtual host (hostname field in the Open)."
},
"failoverUrls": {
"type": "string",
"create": true,
"required": false,
"deprecationName": "failoverList",
"description": "A comma-separated list of failover urls to be supplied to connected clients. Form: [(amqp|amqps|ws|wss)://]host_or_ip[:port]"
},
"healthz": {
"type": "boolean",
"default": true,
"description": "Provide a simple HTTP based liveness test (using path /healthz). Assumes listener is enabled for http.",
"create": true
},
"metrics": {
"type": "boolean",
"default": true,
"description": "Export metrics in prometheus text format for the router (using path /metrics). Assumes listener is enabled for http.",
"create": true
},
"websockets": {
"type": "boolean",
"default": true,
"description": "For an http enabled listener, determines whether websockets access is enabled (true by default).",
"create": true
},
"http": {
"type": "boolean",
"default": false,
"description": "Accept HTTP connections that can upgrade to AMQP over WebSocket. Plain AMQP connections are not accepted on this listener.",
"create": true
},
"httpRootDir": {
"type": "path",
"description": "Absolute path to a directory from which to serve static HTML files. Defaults to the stand-alone console installation directory (typically /usr/share/qpid-dispatch/console).",
"deprecationName": "httpRoot",
"create": true
},
"messageLoggingComponents": {
"type": "string",
"default": "none",
"description": "A comma separated list that indicates which components of the message should be logged. Defaults to 'none' (log nothing). If you want all properties and application properties of the message logged use 'all'. Specific components of the message can be logged by indicating the components via a comma separated list. The components are message-id, user-id, to, subject, reply-to, correlation-id, content-type, content-encoding, absolute-expiry-time, creation-time, group-id, group-sequence, reply-to-group-id, app-properties. The application-data part of the bare message will not be logged. No spaces are allowed",
"deprecationName": "logMessage",
"create": true
},
"policyVhost": {
"type": "string",
"required": false,
"description": "A listener may optionally define a virtual host to index to a specific policy to restrict the remote container to access only specific resources. This attribute defines the name of the policy vhost for this listener. If multi-tenancy is enabled for the listener, this vhost will override the peer-supplied vhost for the purposes of identifying the desired policy settings for the connections.",
"create": true
},
"openProperties": {
"description": "A JSON map containing connection properties. These will be sent to the peer on connection open. All map keys are restricted to strings containing only valid ASCII characters, Keys must not start with prefixes 'qd.' or 'x-opt-qd.'. The following key values are also reserved: 'product', 'version', 'failover-server-list', 'network-host', 'port', 'scheme' 'hostname'",
"type": "properties",
"required": false,
"create": true
}
}
},
"connector": {
"description": "Establishes an outgoing connection from the router.",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"host": {
"description":"IP address: ipv4 or ipv6 literal or a host name",
"type": "string",
"default": "127.0.0.1",
"create": true
},
"port": {
"description": "Port number or symbolic service name.",
"type": "string",
"default": "amqp",
"create": true
},
"protocolFamily": {
"type": ["IPv4", "IPv6"],
"required": false,
"description": "['IPv4', 'IPv6'] IPv4: Internet Protocol version 4; IPv6: Internet Protocol version 6. If not specified, the protocol family will be automatically determined from the address.",
"create": true
},
"role": {
"type": [
"normal",
"inter-router",
"route-container",
"edge"
],
"default": "normal",
"description": "The role of an established connection. In the normal role, the connection is assumed to be used for AMQP clients that are doing normal message delivery over the connection. In the inter-router role, the connection is assumed to be to another router in the network. Inter-router discovery and routing protocols can only be used over inter-router connections. route-container role can be used for router-container connections, for example, a router-broker connection. In the edge role, the connection is assumed to be between and edge router and an interior router.",
"create": true
},
"cost": {
"type": "integer",
"default": 1,
"required": false,
"create": true,
"description": "For the 'inter-router' role only. This value assigns a cost metric to the inter-router connection. The default (and minimum) value is one. Higher values represent higher costs. The cost is used to influence the routing algorithm as it attempts to use the path with the lowest total cost from ingress to egress."
},
"sslProfile": {
"type": "string",
"required": false,
"description": "Name of the sslProfile.",
"create": true
},
"saslMechanisms": {
"type": "string",
"required": false,
"description": "Space separated list of accepted SASL authentication mechanisms.",
"create": true
},
"allowRedirect": {
"type": "boolean",
"default": true,
"description": "Allow the peer to redirect this connection to another address.",
"create": true
},
"maxFrameSize": {
"type": "integer",
"default": 16384,
"description": "The maximum frame size in octets that will be used in the connection-open negotiation with a connected peer. The frame size is the largest contiguous set of uninterrupted data that can be sent for a message delivery over the connection. Interleaving of messages on different links is done at frame granularity. Policy settings will not overwrite this value. Defaults to 16384.",
"create": true
},
"maxSessions": {
"type": "integer",
"default": 32768,
"description": "The maximum number of sessions that can be simultaneously active on the connection. Setting this value to zero selects the default number of sessions. Policy settings will not overwrite this value. Defaults to 32768.",
"create": true
},
"maxSessionFrames": {
"type": "integer",
"description": "Session incoming window measured in transfer frames for sessions created on this connection. This is the number of transfer frames that may simultaneously be in flight for all links in the session. Setting this value to zero selects the default session window size. Policy settings will not overwrite this value. The numerical product of maxFrameSize and maxSessionFrames may not exceed 2^31-1. If (maxFrameSize x maxSessionFrames) exceeds 2^31-1 then maxSessionFrames is reduced to (2^31-1 / maxFrameSize). maxSessionFrames has a minimum value of 1. Defaults to 0 (unlimited window).",
"required": false,
"create": true
},
"idleTimeoutSeconds": {
"type": "integer",
"default": 16,
"description": "The idle timeout, in seconds, for connections through this connector. If no frames are received on the connection for this time interval, the connection shall be closed.",
"create": true
},
"stripAnnotations": {
"type": ["in", "out", "both", "no"],
"default": "both",
"description": "['in', 'out', 'both', 'no'] in: Strip the dispatch router specific annotations only on ingress; out: Strip the dispatch router specific annotations only on egress; both: Strip the dispatch router specific annotations on both ingress and egress; no - do not strip dispatch router specific annotations",
"create": true
},
"linkCapacity": {
"type": "integer",
"create": true,
"required": false,
"description": "The capacity of links within this connection, in terms of message deliveries. The capacity is the number of messages that can be in-flight concurrently for each link."
},
"verifyHostname": {
"type": "boolean",
"default": true,
"description": "yes: Ensures that when initiating a connection (as a client) the host name in the URL to which this connector connects to matches the host name in the digital certificate that the peer sends back as part of the SSL connection; no: Does not perform host name verification",
"deprecationName": "verifyHostName",
"create": true
},
"saslUsername": {
"type": "string",
"required": false,
"description": "The user name that the connector is using to connect to a peer.",
"create": true
},
"saslPassword": {
"type": "string",
"required": false,
"description": "The password that the connector is using to connect to a peer. You can specify the password by specifying an environment variable that stores the password, a file that stores the password, or by entering the password in clear text. To use an environment variable, specify 'saslPassword: env:<var>'. Use this option with caution, because the environment of other processes is visible on certain platforms (for example, ps on certain Unix OSs). To use a file, specify 'saslPassword: file:<absolute-path-to-file>'. This option is the most secure, because permissions can be set on the file that contains the password. To specify the password in clear text, specify 'saslPassword: pass:<password>' or 'saslPassword: <password>'. This option is insecure, so it should only be used if security is not a concern.",
"create": true,
"hidden": true
},
"messageLoggingComponents": {
"type": "string",
"default": "none",
"description": "A comma separated list that indicates which components of the message should be logged (no spaces allowed between list components). Defaults to 'none' (log nothing). If you want all properties and application properties of the message logged use 'all'. Specific components of the message can be logged by indicating the components via a comma separated list. The components are message-id, user-id, to, subject, reply-to, correlation-id, content-type, content-encoding, absolute-expiry-time, creation-time, group-id, group-sequence, reply-to-group-id, app-properties. The application-data part of the bare message will not be logged. This log message is written to the MESSAGE logging module. In the 'log' entity, set 'module' property to MESSAGE or DEFAULT and 'enable' to trace+ to see this log message",
"deprecationName": "logMessage",
"create": true
},
"failoverUrls": {
"type": "string",
"description": "A read-only, comma-separated list of failover urls. ",
"deprecationName": "failoverList",
"create": false
},
"connectionStatus": {
"type": "string",
"description": "A read-only status of the connection. Could be one of CONNECTING, SUCCESS, FAILED",
"create": false
},
"connectionMsg": {
"type": "string",
"description": "A read-only connection message. Contains the connection message",
"create": false
},
"policyVhost": {
"type": "string",
"required": false,
"description": "A connector may optionally define a policy to restrict the remote container to access only specific resources. This attribute defines the name of the policy vhost for this connector. Within the vhost the connector will use the vhost policy settings from user group '$connector'. If the vhost policy is absent or if the user group '$connector' within that policy is absent then the connector will fail to start. In policy specified via connector attribute 'policyVhost' the following vhostUserGroupSettings attributes are unused: 'users', 'remoteHosts', 'maxFrameSize', 'maxSessionWindow', 'maxSessions'.",
"create": true
},
"openProperties": {
"description": "A JSON map containing connection properties. These will be sent to the peer on connection open. All map keys are restricted to strings containing only valid ASCII characters, Keys must not start with prefixes 'qd.' or 'x-opt-qd.'. The following key values are also reserved: 'product', 'version', 'failover-server-list', 'network-host', 'port', 'scheme' 'hostname'",
"type": "properties",
"required": false,
"create": true
}
}
},
"log": {
"description": "Configure logging for a particular module. You can use the `UPDATE` operation to change log settings while the router is running.",
"extends": "configurationEntity",
"operations": ["UPDATE"],
"attributes": {
"module": {
"type":[
"ROUTER",
"ROUTER_CORE",
"ROUTER_HELLO",
"ROUTER_LS",
"ROUTER_MA",
"MESSAGE",
"SERVER",
"AGENT",
"AUTHSERVICE",
"CONTAINER",
"ERROR",
"POLICY",
"HTTP",
"CONN_MGR",
"PYTHON",
"PROTOCOL",
"DEFAULT"
],
"required": true,
"description": "Module to configure. The special module 'DEFAULT' specifies defaults for all modules."
},
"enable": {
"type": "string",
"description": "Levels are: trace, debug, info, notice, warning, error, critical. The enable string is a comma-separated list of levels. A level may have a trailing '\\+' to enable that level and above. For example 'trace,debug,warning+' means enable trace, debug, warning, error and critical. The value 'none' means disable logging for the module.",
"update": true
},
"includeTimestamp": {
"type": "boolean",
"description": "Include timestamp in log messages.",
"deprecationName": "timestamp",
"update": true
},
"includeSource": {
"type": "boolean",
"description": "Include source file and line number in log messages.",
"deprecationName": "source",
"update": true
},
"outputFile": {
"type": "string",
"description": "Where to send log messages. Can be 'stderr', 'stdout', 'syslog' or a file name.",
"deprecationName": "output",
"update": true
}
}
},
"logStats": {
"description": "histogram of the different severity-levels of events on the given log.",
"extends": "operationalEntity",
"attributes": {
"traceCount": {
"description": "How many trace-level events have happened on this log.",
"graph": true,
"type": "integer"
} ,
"debugCount": {
"description": "How many debug-level events have happened on this log.",
"graph": true,
"type": "integer"
} ,
"infoCount": {
"description": "How many info-level events have happened on this log.",
"graph": true,
"type": "integer"
} ,
"noticeCount": {
"description": "How many notice-level events have happened on this log.",
"graph": true,
"type": "integer"
} ,
"warningCount": {
"description": "How many warning-level events have happened on this log.",
"graph": true,
"type": "integer"
} ,
"errorCount": {
"description": "How many error-level events have happened on this log.",
"graph": true,
"type": "integer"
} ,
"criticalCount": {
"description": "How many critical-level events have happened on this log.",
"graph": true,
"type": "integer"
}
}
},
"router.config.address": {
"description": "Entity type for address configuration. This is used to configure the treatment of message-routed deliveries within a particular address-space. The configuration controls distribution and address phasing.",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"prefix": {
"type": "string",
"description": "The address prefix for the configured settings. Cannot be used with a pattern attribute.",
"create": true,
"required": false
},
"pattern": {
"type": "string",
"description": "A wildcarded pattern for address matching. Incoming addresses are matched against this pattern. Matching addresses use the configured settings. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. Cannot be used with a prefix attribute.",
"create": true,
"required": false
},
"distribution": {
"type": ["multicast", "closest", "balanced", "unavailable"],
"description": "Treatment of traffic associated with the address",
"create": true,
"required": false,
"default": "balanced"
},
"waypoint": {
"type": "boolean",
"description": "Designates this address space as being used for waypoints. This will cause the proper address-phasing to be used.",
"create": true,
"required": false,
"default": false
},
"ingressPhase": {
"type": "integer",
"description": "Advanced - Override the ingress phase for this address",
"create": true,
"required": false
},
"egressPhase": {
"type": "integer",
"description": "Advanced - Override the egress phase for this address",
"create": true,
"required": false
},
"priority": {
"type": "integer",
"description": "All messages sent to this address which lack an intrinsic priority will be assigned this priority.",
"create": true,
"required": false
},
"enableFallback": {
"type": "boolean",
"description": "If false, undeliverable messages are released. If true, undeliverable messages shall be re-delivered to a fallback destination. The fallback destination uses the same address, but is attached using an autoLink with 'fallback' enabled or a link with the qd.fallback capability.",
"create": true,
"required": false,
"default": false
}
}
},
"router.config.linkRoute": {
"description": "Entity type for link-route configuration. This is used to identify remote containers that shall be destinations for routed link-attaches. The link-routing configuration applies to an addressing space defined by a prefix or a pattern.",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"prefix": {
"type": "string",
"description": "The address prefix for the configured settings. Cannot be used with the pattern attribute.",
"create": true,
"required": false
},
"pattern": {
"type": "string",
"description": "A wildcarded pattern for address matching. Link addresses are matched against this pattern. Matching addresses use the configured settings. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. Cannot be used with the prefix attribute.",
"create": true,
"required": false
},
"addExternalPrefix": {
"type": "string",
"description": "add the specified prefix to the address of the remote terminus on the route container link",
"create": true,
"required": false
},
"delExternalPrefix": {
"type": "string",
"description": "remove the specified prefix to the address of the remote terminus on the route container link",
"create": true,
"required": false
},
"containerId": {
"type": "string",
"description": "ContainerID for the target container. Only one of containerId or connection should be specified for a linkRoute. Specifying both will result in the linkRoute not being created.",
"create": true,
"required": false
},
"connection": {
"type": "string",
"description": "The name from a connector or listener. Only one of containerId or connection should be specified for a linkRoute. Specifying both will result in the linkRoute not being created.",
"create": true,
"required": false
},
"distribution": {
"type": ["linkBalanced"],
"description": "Treatment of traffic associated with the address",
"create": true,
"required": false,
"default": "linkBalanced"
},
"direction": {
"type": ["in", "out"],
"description": "The permitted direction of links: 'in' means client senders; 'out' means client receivers",
"create": true,
"deprecationName": "dir",
"required": true
},
"operStatus": {
"type": ["inactive", "active"],
"description": "The operational status of this linkRoute: inactive - The remote container is not connected; active - the remote container is connected and ready to accept link routed attachments.",
"create": false
}
}
},
"router.config.autoLink": {
"description": "Entity type for configuring auto-links. Auto-links are links whose lifecycle is managed by the router. These are typically used to attach to waypoints on remote containers (brokers, etc.).",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"address": {
"type": "string",
"description": "The address of the provisioned object",
"deprecationName": "addr",
"create": true,
"required": true
},
"direction": {
"type": ["in", "out"],
"description": "The direction of the link to be created. In means into the router, out means out of the router.",
"create": true,
"deprecationName": "dir",
"required": true
},
"phase": {
"type": "integer",
"description": "The address phase for this link. Defaults to '0' for 'out' links and '1' for 'in' links.",
"create": true,
"required": false
},
"containerId": {
"type": "string",
"description": "ContainerID for the target container. Only one of containerId or connection should be specified for an autoLink. Specifying both will result in the autoLink not being created",
"create": true,
"required": false
},
"connection": {
"type": "string",
"description": "The name from a connector or listener. Only one of containerId or connection should be specified for an autoLink. Specifying both will result in the autoLink not being created",
"create": true,
"required": false
},
"externalAddress": {
"type": "string",
"description": "If present, an alternate address of the node on the remote container. This is used if the node has a different address than the address used internally by the router to route deliveries.",
"deprecationName": "externalAddr",
"create": true,
"required": false
},
"fallback":
{
"type": "boolean",
"description": "If true, this auto-link is attached to a fallback destination for an address.",
"create": true,
"required": false,
"default": false
},
"linkRef": {
"type": "string",
"description": "Reference to the org.apache.qpid.dispatch.router.link if the link exists",
"create": false
},
"operStatus": {
"type": ["inactive", "attaching", "failed", "active", "quiescing", "idle"],
"description": "The operational status of this autoLink: inactive - The remote container is not connected; attaching - the link is attaching to the remote node; failed - the link attach failed; active - the link is attached and operational; quiescing - the link is transitioning to idle state; idle - the link is attached but there are no deliveries flowing and no unsettled deliveries.",
"create": false
},
"lastError": {
"type": "string",
"description": "The error description from the last attach failure",
"create": false
}
}
},
"router.config.exchange": {
"description":"[EXPERIMENTAL] Defines a topic exchange.",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"address": {
"description": "The address of the exchange. Used by the message publisher as the target for sending messages.",
"type": "string",
"create": true,
"required": true
},
"phase": {
"type": "integer",
"description": "The address phase for the exchange. Defaults to '0'.",
"create": true,
"required": false
},
"alternateAddress": {
"description": "The address to forward the message to if no bindings are matched.",
"type": "string",
"create": true,
"required": false
},
"alternatePhase": {
"type": "integer",
"description": "The address phase for the alternateAddress. Defaults to '0'.",
"create": true,
"required": false
},
"matchMethod": {
"description": "Key matching algorithm used. 'amqp' uses the legacy AMQP topic exchange wildcard match method as described in the pre-1.0 drafts. 'mqtt' uses the MQTT topic filter wildcard match method.",
"type": ["amqp", "mqtt"],
"default": "amqp",
"required": false,
"create": true
},
"bindingCount": {
"description": "The number of bindings associated with this exchange.",
"type": "integer",
"create": false
},
"receivedCount": {
"description": "The total number of deliveries received by this exchange.",
"type": "integer",
"create": false
},
"droppedCount": {
"description": "The total number of deliveries dropped due to the lack of an outgoing subscription.",
"type": "integer",
"create": false
},
"forwardedCount": {
"description": "The total number of deliveries forwarded via matched bindings or to the alternateAddress",
"type": "integer",
"create": false
},
"divertedCount": {
"description": "A count of those deliveries that were forwarded via the alternateAddress only. This is a subset of the forwardedCount.",
"type": "integer",
"create": false
}
}
},
"router.config.binding": {
"description":"[EXPERIMENTAL] Defines a keyed next hop binding for a topic exchange. The subject field of the messages arriving at the exchange is compared against the binding's key value using the exchange's matchMethod. If the subject matches the key the message is forwarded to the nextHopAddress. The nextHopAddress overrides the message's original destination.",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes": {
"exchangeName": {
"description": "The name of the exchange to bind.",
"type": "string",
"create": true,
"required": true
},
"bindingKey": {
"description": "Pattern to compare against incoming message's subject. The key is a string of zero or more tokens and wildcards. The format depends on the matchMethod configured for the exchange. For AMQP each token is delimited by the '.' character and wild-card tokens '*' matches a single token and '#' matches zero or more tokens. For MQTT each token is delimited by the '/' character and wildcard tokens '+' matches a single token and '#' matches zero or more tokens at the end of the topic. If a key is not provided the binding will match all messages arriving at the exchange (fanout behavior).",
"type": "string",
"create": true,
"required": false
},
"nextHopAddress": {
"description": "The address to forward the message to when the message's topic string matches the binding key pattern. This address is used by message consumers as the source of incoming messages.",
"type": "string",
"create": true,
"required": true
},
"nextHopPhase": {
"type": "integer",
"description": "The address phase used when forwarding messages that match this binding.",
"create": true,
"required": false
},
"matchedCount": {
"description": "Total number of deliveries that matched this binding.",
"type": "integer"
}
}
},
"router.link": {
"description": "Link to another AMQP endpoint: router node, client or other AMQP process.",
"extends": "operationalEntity",
"operations": ["UPDATE"],
"attributes": {
"adminStatus": {
"type": ["enabled", "disabled"],
"default": "enabled",
"update": true
},
"operStatus": {
"type": ["up", "down", "quiescing", "idle"]
},
"linkName": {
"type": "string",
"description": "Name assigned to the link in the Attach."
},
"linkType": {
"type": ["endpoint", "router-control", "inter-router"],
"description": "Type of link: endpoint: a link to a normally connected endpoint; inter-router: a link to another router in the network."
},
"linkDir": {
"type": ["in", "out"],
"description": "Direction of delivery flow over the link, inbound or outbound to or from the router."
},
"owningAddr": {
"type": "string",
"description": "Address assigned to this link during attach: The target for inbound links or the source for outbound links."
},
"capacity": {
"type": "integer",
"description": "The capacity, in deliveries, for the link. The number of undelivered plus unsettled deliveries shall not exceed the capacity. This is enforced by link flow control."
},
"peer": {
"type": "string",
"description": "Identifier of the paired link if this is an attach-routed link."
},
"undeliveredCount": {
"type": "integer",
"graph": true,
"description": "The number of undelivered messages pending for the link."
},
"unsettledCount": {
"type": "integer",
"graph": true,
"description": "The number of unsettled deliveries awaiting settlement on the link"
},
"deliveryCount": {
"type": "integer",
"graph": true,
"description": "The total number of deliveries that have traversed this link."
},
"presettledCount": {
"type": "integer",
"graph": true,
"description": "The total number of pre-settled deliveries."
},
"droppedPresettledCount": {
"type": "integer",
"graph": true,
"description": "The total number of pre-settled deliveries that were dropped."
},
"acceptedCount": {
"type": "integer",
"graph": true,
"description": "The total number of accepted deliveries."
},
"rejectedCount": {
"type": "integer",
"graph": true,
"description": "The total number of rejected deliveries."
},
"releasedCount": {
"type": "integer",
"graph": true,
"description": "The total number of released deliveries."
},
"modifiedCount": {
"type": "integer",
"graph": true,
"description": "The total number of modified deliveries."
},
"deliveriesDelayed1Sec": {
"type": "integer",
"graph": true,
"description": "The total number of settled deliveries that were held in the router for 1 to 10 seconds."
},
"deliveriesDelayed10Sec": {
"type": "integer",
"graph": true,
"description": "The total number of settled deliveries that were held in the router for more than 10 seconds."
},
"deliveriesStuck": {
"type": "integer",
"graph": true,
"description": "The current number of deliveries that are unsettled and have been held in the router for more than 10 seconds."
},
"creditAvailable": {
"type": "integer",
"graph": true,
"description": "The number of credits available on this link."
},
"zeroCreditSeconds": {
"type": "integer",
"description": "The number of seconds that the link's available credit has remained zero."
},
"settleRate": {
"type": "integer",
"graph": true,
"description": "The average rate (over five seconds) of settlement in deliveries-per-second. This is included for egress links only."
},
"ingressHistogram": {
"type": "list",
"description": "For outgoing links on connections with 'normal' role. This histogram shows the number of settled deliveries on the link that ingressed the network at each interior router node."
},
"priority": {
"type": "integer",
"description": "For inter-router links, this is the message priority being handled."
}
}
},
"router.address": {
"description": "AMQP address managed by the router.",
"extends": "operationalEntity",
"attributes": {
"distribution": {
"type": ["flood", "multicast", "closest", "balanced", "linkBalanced", "unavailable"],
"description": "Forwarding treatment for the address: flood - messages delivered to all subscribers along all available paths (this will cause duplicate deliveries if there are redundant paths); multicast - one copy of each message delivered to all subscribers; closest - messages delivered to only the closest subscriber; balanced - messages delivered to one subscriber with load balanced across subscribers; linkBalanced - for link-routing, link attaches balanced across destinations; unavailable - this address is unavailable, link attaches to an address of unavailable distribution will be rejected."
},
"inProcess": {
"type": "integer",
"description": "The number of in-process subscribers for this address"
},
"subscriberCount": {
"type": "integer",
"description": "The number of local subscribers for this address (i.e. attached to this router)",
"graph": true
},
"remoteCount": {
"type": "integer",
"description": "The number of remote routers that have at least one subscriber to this address",
"graph": true
},
"containerCount": {
"type": "integer",
"description": "The number of attached containers that serve this route address",
"graph": true
},
"deliveriesIngress": {
"type": "integer",
"description": "The number of deliveries to this address that entered the router network on this router",
"graph": true
},
"deliveriesEgress": {
"type": "integer",
"description": "The number of deliveries to this address that exited the router network on this router",
"graph": true
},
"deliveriesTransit": {
"type": "integer",
"description": "The number of deliveries to this address that transited this router to another router",
"graph": true
},
"deliveriesToContainer": {
"type": "integer",
"description": "The number of deliveries to this address that were given to an in-process subscriber",
"graph": true
},
"deliveriesFromContainer": {
"type": "integer",
"description": "The number of deliveries to this address that were originated from an in-process entity",
"graph": true
},
"deliveriesIngressRouteContainer": {
"type": "integer",
"description": "Number of deliveries that were received from a route-container address.",
"graph": true
},
"deliveriesEgressRouteContainer": {
"type": "integer",
"description": "Number of deliveries that were sent to a route-container address.",
"graph": true
},
"deliveriesRedirectedToFallback": {
"type": "integer",
"description": "Number of deliveries that were sent to the fallback destination due to the primary destination being unreachable.",
"graph": true
},
"key": {
"description": "Internal unique (to this router) key to identify the address",
"type": "string"
},
"remoteHostRouters": {
"type": "list",
"description": "List of remote routers on which there is a destination for this address."
},
"transitOutstanding": {
"type": "list",
"description": "List of numbers of outstanding deliveries across a transit (inter-router) connection for this address. This is for balanced distribution only."
},
"trackedDeliveries": {
"type": "integer",
"description": "Number of transit deliveries being tracked for this address (for balanced distribution)."
},
"priority": {
"type": "integer",
"description": "The message priority being handled by this address."
}
}
},
"router.node": {
"description": "Remote router node connected to this router.",
"extends": "operationalEntity",
"attributes": {
"id": {
"description": "Remote node identifier.",
"type": "string"
},
"protocolVersion": {
"description": "Router-protocol version supported by the node.",
"type": "integer"
},
"instance": {
"description": "Remote node boot number.",
"type": "integer"
},
"linkState": {
"description": "List of remote node's neighbours.",
"type": "list"
},
"nextHop": {
"description": "Neighbour ID of next hop to remote node from here.",
"type": "string"
},
"validOrigins": {
"description": "List of valid origin nodes for messages arriving via the re mote node, used for duplicate elimination in redundant networks.",
"type": "list"
},
"address": {
"description": "Address of the remote node",
"type": "string"
},
"routerLink": {
"description": "Local link to remote node",
"type": "entityId"
},
"cost": {
"description": "Reachability cost",
"type": "integer"
},
"lastTopoChange": {
"description": "Timestamp showing the most recent change to this node's neighborhood.",
"type": "integer"
},
"index": {
"description": "Index number used in statistics histograms for this router node. This index is specific to this router.",
"type": "integer"
}
}
},
"connection": {
"description": "Connections to the router's container.",
"extends": "operationalEntity",
"attributes": {
"adminStatus": {
"type": ["enabled", "deleted"],
"default": "enabled",
"description": "This field is set to enabled when the connection is up and running. Setting this field to deleted will terminate the connection and all links and sessions contained in the connection. Inter-router connections cannot be terminated by setting the adminStatus to deleted.",
"update": true
},
"operStatus": {
"type": ["up", "closing"]
},
"protocol": {
"type": "string",
"description": "The protocol adaptor that is handling this connection"
},
"container": {
"description": "The container for this connection",
"type": "string"
} ,
"opened": {
"type": "boolean",
"description": "The connection has been opened (i.e. AMQP OPEN)"
},
"host": {
"description": "IP address and port number in the form addr:port.",
"type": "string"
},
"dir": {
"description": "Direction of connection establishment in or out of the router.",
"type": ["in", "out"]
},
"role": {"type": "string"},
"isAuthenticated": {
"description": "Indicates whether the identity of the connection's user is authentic.",
"type": "boolean"
},
"isEncrypted": {
"description": "Indicates whether the connection content is encrypted.",
"type": "boolean"
},
"enableProtocolTrace": {
"description": "Indicates whether protocol level amqp frame trace logging is turned on or off for this connection.",
"type": "boolean",
"create": false,
"update": true,
"default": false
},
"sasl": {
"description": "SASL mechanism in effect for authentication.",
"type": "string"
},
"user": {
"description": "Identity of the authenticated user.",
"type": "string"
},
"ssl": {
"description": "True iff SSL/TLS is in effect for this connection.",
"type": "boolean"
},
"sslProto": {
"description": "SSL protocol name",
"type": "string"
},
"sslCipher": {
"description": "SSL cipher name",
"type": "string"
},
"sslSsf": {
"description": "SSL strength factor in effect",
"type": "integer"
},
"tenant": {
"description": "If multi-tenancy is on for this connection, the tenant space in effect",
"type": "string"
},
"uptimeSeconds": {
"type": "integer",
"graph": true,
"description": "The number of seconds since the connection was created."
},
"properties": {
"description": "Connection properties supplied by the peer.",
"type": "map"
},
"lastDlvSeconds": {
"type": "integer",
"graph": true,
"description": "The number of seconds since a delivery was sent on this connection. Will display a - (dash) if no deliveries have been sent on the connection."
}
}
},
"allocator": {
"description": "Memory allocation pool.",
"extends": "operationalEntity",
"attributes": {
"typeName": {"type": "string"},
"typeSize": {"type": "integer"},
"transferBatchSize": {"type": "integer"},
"localFreeListMax": {"type": "integer", "graph": true},
"globalFreeListMax": {"type": "integer", "graph": true},
"totalAllocFromHeap": {"type": "integer", "graph": true},
"totalFreeToHeap": {"type": "integer", "graph": true},
"heldByThreads": {"type": "integer", "graph": true},
"batchesRebalancedToThreads": {"type": "integer", "graph": true},
"batchesRebalancedToGlobal": {"type": "integer", "graph": true}
}
},
"console": {
"description": "(DEPRECATED) Start a websocket/tcp proxy and http file server to serve the web console",
"extends": "configurationEntity",
"singleton": true,
"deprecated": true,
"attributes": {
"listener": {
"type": "string",
"description": "The name of the listener to send the proxied tcp traffic to."
},
"wsport": {
"type": "integer",
"description": "port on which to listen for websocket traffic",
"default": 5673
},
"proxy": {
"type": "string",
"required": true,
"description": "The full path to the proxy program to run."
},
"home": {
"type": "string",
"required": true,
"description": "The full path to the html/css/js files for the console."
},
"args": {
"type": "string",
"description": "Optional args to pass the proxy program for logging, authentication, etc."
}
}
},
"policy": {
"description": "Defines global connection limit",
"extends": "configurationEntity",
"singleton": true,
"attributes": {
"maxConnections": {
"type": "integer",
"default": 65535,
"description": "The maximum number of concurrent client connections allowed for this router. This limit is always enforced, even if no other policy settings have been defined. The limit is applied to all incoming connections regardless of remote host, authenticated user, or targeted vhost.",
"required": false,
"create": true
},
"maxMessageSize": {
"type": "integer",
"default": 0,
"description": "The maximum size in bytes of AMQP message transfers allowed for this router as messages enter the router network. This limit is applied to transfers over user connections and to transfers to interior routers from edge routers. This limit is not applied to interior-to-interior router connections. This limit may be overridden by vhost or by vhost user group settings. A value of zero disables this limit. Administrators are advised not set interior router maximum message sizes so low that edge router management requests or responses are blocked. Administrators are also advised to set edge router maximum message sizes lower than the attached interior router maximum message size.",
"required": false,
"create": true
},
"enableVhostPolicy": {
"type": "boolean",
"default": false,
"description": "Enables the router to enforce the connection denials and resource limits defined in the configured vhost policies.",
"required": false,
"create": true
},
"enableVhostNamePatterns": {
"type": "boolean",
"default": false,
"description": "Enable vhost name patterns. When false vhost hostnames are treated as literal strings. When true vhost hostnames are treated as match patterns.",
"required": false,
"create": true
},
"policyDir": {
"type": "path",
"default": "",
"description": "The absolute path to a directory that holds vhost policy definition files in JSON format (*.json). The router processes all of the vhost policies in each JSON file that is in this directory.",
"required": false,
"create": true
},
"defaultVhost": {
"type": "string",
"default": "$default",
"description": "The name of the default vhost policy. This policy rule set is applied to a connection for which a vhost policy has not otherwise been configured. Processing for the default vhost is enabled by default and set to select vhost '$default'. To disable default vhost processing set defaultVhost to blank or do not define a vhost named '$default'.",
"required": false,
"create": true
},
"connectionsProcessed": {"type": "integer", "graph": true},
"connectionsDenied": {"type": "integer", "graph": true},
"connectionsCurrent": {"type": "integer", "graph": true},
"linksDenied": {
"type": "integer",
"graph": true,
"description": "The sum of all vhost sender and receiver denials."
},
"maxMessageSizeDenied": {"type": "integer", "graph": true},
"totalDenials": {
"type": "integer",
"graph": true,
"description": "The total number of connection, link, and transfer denials."
}
}
},
"vhost": {
"description": "AMQP virtual host policy definition of users, user groups, allowed remote hosts, and AMQP restrictions.",
"extends": "configurationEntity",
"operations": ["CREATE", "UPDATE", "DELETE"],
"attributes": {
"hostname": {
"type": "string",
"description": "The hostname of the vhost. This vhost policy will be applied to any client connection that is directed to this hostname.",
"deprecationName": "id",
"required": true,
"create": true
},
"aliases": {
"type": "string",
"description": "Alternate hostnames that share this vhost configuration. Hosts named in this attribute are treated as if this vhost was defined with the alias name in the vhost 'hostname' attribute. This attribute is implemented to help with multitenant configurations where multiple vhosts share a common configuration. The string is a comma- or space-separated list of literal hostnames or hostname patterns. A vhost aliases hostname must be unique across all vhost hostnames and all of their aliases.",
"required": false,
"create": true,
"update": true
},
"maxConnections": {
"type": "integer",
"default": 65535,
"description": "The global maximum number of concurrent client connections allowed for this vhost.",
"required": false,
"create": true,
"update": true
},
"maxMessageSize": {
"type": "integer",
"description": "Optional maximum size in bytes of AMQP message transfers allowed for connections to this vhost. This limit overrides the policy maxMessageSize value and may be overridden by vhost user group settings. A value of zero disables this limit.",
"required": false
},
"maxConnectionsPerUser": {
"type": "integer",
"default": 65535,
"description": "The maximum number of concurrent client connections allowed for any user.",
"required": false,
"create": true,
"update": true
},
"maxConnectionsPerHost": {
"type": "integer",
"default": 65535,
"description": "The maximum number of concurrent client connections allowed for any remote host (the host from which the client is connecting).",
"required": false,
"create": true,
"update": true
},
"allowUnknownUser": {
"type": "boolean",
"description": "Whether unknown users (users who are not members of a defined user group) are allowed to connect to the vhost. Unknown users are assigned to the '$default' user group and receive '$default' settings.",
"default": false,
"required": false,
"create": true,
"update": true
},
"groups": {
"type": "map",
"description": "A map where the key is a vhost user group name and the value is a vhostUserGroupSettings object that holds the settings for that vhost user group.",
"required": false,
"create": true,
"update": true
}
}
},
"vhostUserGroupSettings": {
"description": "Policy settings for users connecting to a vhost. Configuration files including this section must use .json format.",
"extends": "configurationEntity",
"attributes": {
"users": {
"type": "string",
"description": "A list of authenticated users for this user group. Use commas to separate multiple users. A user may belong to only one vhost user group.",
"required": true
},
"remoteHosts": {
"type": "string",
"description": "A list of remote hosts from which the users may connect. A host can be a hostname, IP address, or IP address range. Use commas to separate multiple hosts. To allow access from all remote hosts, specify a wildcard '*'. To deny access from all remote hosts, leave this attribute blank.",
"required": true
},
"maxConnectionsPerUser": {
"type": "integer",
"description": "Optional maximum number of connections that may be created by users in this group. This value, if specified, overrides the vhost maxConnectionsPerUser value",
"required": false,
"create": false
},
"maxConnectionsPerHost": {
"type": "integer",
"description": "Optional maximum number of concurrent connections allowed for any remote host by users in this group. This value, if specified, overrides the vhost maxConnectionsPerHost value",
"required": false,
"create": false
},
"maxMessageSize": {
"type": "integer",
"description": "Optional maximum size in bytes of AMQP message transfers allowed for connections created by users in this group. This limit overrides the policy and vhost maxMessageSize values. A value of zero disables this limit.",
"required": false
},
"maxFrameSize": {
"type": "integer",
"description": "The largest frame, in bytes, that may be sent on this connection. Non-zero policy values overwrite values specified for a listener object (AMQP Open, max-frame-size).",
"required": false,
"create": true
},
"maxSessionWindow": {
"type": "integer",
"description": "The incoming capacity for new AMQP sessions, measured in octets. Non-zero policy values overwrite values specified for a listener object (AMQP Begin, incoming-window).",
"required": false,
"create": true
},
"maxSessions": {
"type": "integer",
"description": "The maximum number of sessions that may be created on this connection. Non-zero policy values overwrite values specified for a listener object (AMQP Open, channel-max).",
"required": false,
"create": true
},
"maxSenders": {
"type": "integer",
"description": "The maximum number of sending links that may be created on this connection. A value of '0' disables all sender links.",
"default": 2147483647,
"required": false,
"create": true
},
"maxReceivers": {
"type": "integer",
"description": "The maximum number of receiving links that may be created on this connection. A value of '0' disables all receiver links.",
"default": 2147483647,
"required": false,
"create": true
},
"allowDynamicSource": {
"type": "boolean",
"description": "Whether this connection is allowed to create dynamic receiving links (links to resources that do not exist on the peer). A value of 'true' means that users are able to automatically create resources on the peer system.",
"default": false,
"required": false,
"create": true
},
"allowAnonymousSender": {
"type": "boolean",
"description": "Whether this connection is allowed to create sending links if the sender does not provide a target address. By prohibiting anonymous senders, the router only needs to verify once, when the link is created, that the sender is permitted to send messages to the target address. The router does not need to verify each message that is sent on the link. A value of 'true' means that users may send messages to any address. Allowing anonymous senders can also decrease performance: if the sender does not specify a target address, then the router must parse each message to determine how to route it.",
"default": false,
"required": false,
"create": true
},
"allowUserIdProxy": {
"type": "boolean",
"description": "Whether this connection is allowed to send messages with a user ID that is different than the connection's authenticated user name.",
"default": false,
"required": false,
"create": true
},
"allowWaypointLinks": {
"type": "boolean",
"description": "Whether this connection is allowed to claim 'waypoint.N' capability for attached links. This allows endpoints to act as waypoints without needing auto-links.",
"default": true,
"required": false,
"create": true
},
"allowDynamicLinkRoutes": {
"type": "boolean",
"description": "Whether this connection is allowed to dynamically create connection-scoped link route destinations.",
"default": true,
"required": false,
"create": true
},
"allowAdminStatusUpdate": {
"type": "boolean",
"description": "Whether this connection is allowed to update the admin status of other connections. Note: Inter-router connections cannot be deleted at any time.",
"default": true,
"required": false,
"create": true
},
"allowFallbackLinks": {
"type": "boolean",
"description": "Whether this connection is allowed to claim 'qd.fallback' capability for attached links. This allows endpoints to act as fallback destinations for addresses that have fallback capability enabled.",
"default": true,
"required": false,
"create": true
},
"sources": {
"type": "string",
"description": "A list of source addresses from which users in this group may receive messages. To specify multiple addresses, separate the addresses with either a comma or a space. If you do not specify any addresses, users in this group are not allowed to receive messages from any addresses. You can use the substitution token `${user}` to specify an address that contains a user's authenticated user name. You can use an asterisk ('*') wildcard to match one or more characters in an address. However, this wildcard is only recognized if it is the last character in the address name. You may specify attributes 'sources' or 'sourcePattern' but not both at the same time.",
"required": false,
"create": true
},
"targets": {
"type": "string",
"description": "A list of target addresses to which users in this group may send messages. To specify multiple addresses, separate the addresses with either a comma or a space. If you do not specify any addresses, users in this group are not allowed to send messages to any addresses. You can use the substitution token `${user}` to specify an address that contains a user's authenticated user name. You can use an asterisk ('*') wildcard to match one or more characters in an address. However, this wildcard is only recognized if it is the last character in the address name. You may specify attributes 'targets' or 'targetPattern' but not both at the same time.",
"required": false,
"create": true
},
"sourcePattern": {
"type": "string",
"description": "A wildcarded pattern for matching source addresses from which users in this group may receive messages. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. To specify multiple addresses, separate the addresses with either a comma or a space. You can use the text string `${user}` in a token to specify an address that contains a user's authenticated user name. If you do not specify any addresses, users in this group are not allowed to receive messages from any addresses. You may specify attributes 'sources' or 'sourcePattern' but not both at the same time.",
"create": true,
"required": false
},
"targetPattern": {
"type": "string",
"description": "A wildcarded pattern for matching target addresses to which users in this group may send messages. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. To specify multiple addresses, separate the addresses with either a comma or a space. You can use the text string `${user}` in a token to specify an address that contains a user's authenticated user name. If you do not specify any addresses, users in this group are not allowed to send messages to any addresses. You may specify attributes 'targets' or 'targetPattern' but not both at the same time.",
"create": true,
"required": false
}
}
},
"vhostStats": {
"description": "Virtual host connection and access statistics.",
"extends": "operationalEntity",
"attributes": {
"id": {
"type": "string",
"description": "The vhost name. DEPRECATED - use 'hostname' instead."
},
"hostname": {
"type": "string",
"description": "The vhost name."
},
"connectionsApproved": {"type": "integer", "graph": true},
"connectionsDenied": {"type": "integer", "graph": true},
"connectionsCurrent": {"type": "integer", "graph": true},
"perUserState": {
"type": "map",
"description": "A map where the key is the authenticated user name and the value is a list of the user's connections."
},
"perHostState": {
"type": "map",
"description": "A map where the key is the host name and the value is a list of the host's connections."
},
"sessionDenied": {"type": "integer", "graph": true},
"senderDenied": {"type": "integer", "graph": true},
"receiverDenied": {"type": "integer", "graph": true},
"maxMessageSizeDenied": {"type": "integer", "graph": true}
}
},
"dummy": {
"description": "Dummy entity for test purposes.",
"extends": "entity",
"operations": ["CREATE", "READ", "UPDATE", "DELETE", "CALLME"],
"attributes": {
"arg1": {"type": "string", "create": true, "update": true},
"arg2": {"type": "string", "create": true, "update": true},
"num1": {"type": "integer", "create": true, "update": true},
"num2": {"type": "integer", "create": true, "update": true}
}
},
"router.connection.linkRoute": {
"description": "[EXPERIMENTAL] A linkRoute that is scoped to the connection that created it. Connection linkRoutes only exist within the context of a connection and when the connection is closed, they vanish. This differs from configured linkRoutes (router.config.linkRoute) which remain configured should their associated connection restart. Connection linkRoutes may be used by a client to create link-routed message flows that are automatically removed when the client disconnects. Note well that connection.linkRoute cannot be declared in a configuration file - they must be created at run time via management operations over the connection which they are to be used. Connection linkRoutes are only visible to management access that is via the containing connection.",
"extends": "configurationEntity",
"operations": ["CREATE", "DELETE"],
"attributes" : {
"pattern": {
"description": "A wildcarded pattern for address matching. Incoming addresses are matched against this pattern. Matching addresses use the configured settings. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence.",
"type": "string",
"create": true,
"required": true
},
"direction": {
"description": "The permitted direction of links: 'in' means client senders; 'out' means client receivers",
"type": ["in", "out"],
"create": true,
"required": true
},
"containerId": {
"type": "string",
"description": "Name of the container which has instantiated this linkRoute.",
"create": false
}
}
}
}
}