blob: 054e776702d5ec7dbe67b7d8d45d155ecc11929b [file] [log] [blame]
{
"description": "Schema for the Qpid Dispatch Router management model. See qdrouter.json.readme.txt.",
"prefix": "org.apache.qpid.dispatch",
"annotations": {
"addrPort": {
"description": "Attributes for internet address and port.",
"attributes": {
"addr": {
"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
}
}
},
"connectionRole": {
"description": "Attribute for the role of a connection.",
"attributes": {
"role": {
"type": [
"normal",
"inter-router",
"on-demand"
],
"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.",
"create": true
}
}
},
"sslProfile": {
"description":"Attributes for setting TLS/SSL configuration for connections.",
"referential": true,
"attributes": {
"certDb": {
"type": "path",
"description": "The path to the database that contains the public certificates of trusted certificate authorities (CA).",
"create": true
},
"certFile": {
"type": "path",
"description": "The 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
},
"keyFile": {
"type": "path",
"description": "The path to the file containing the PEM-formatted private key for the above certificate.",
"create": true
},
"passwordFile": {
"type": "path",
"description": "If the above private key is password protected, this is the path to a file containing the password that unlocks the certificate key.",
"create": true
},
"password": {
"type": "string",
"description": "An alternative to storing the password in a file referenced by passwordFile is to supply the password right here in the configuration file. This option can be used by supplying the password in the 'password' option. Don't use both password and passwordFile in the same profile.",
"create": true
}
}
}
},
"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,
"value": "$$entityType",
"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 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"
}
}
},
"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 and the annotations they implement",
"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": {}
},
"container": {
"description":"Attributes related to the AMQP container.",
"extends": "configurationEntity",
"singleton": true,
"attributes": {
"containerName": {
"type": "string",
"description": "The name of the AMQP container. If not specified, the container name will be set to a value of the container's choosing. The automatically assigned container name is not guaranteed to be persistent across restarts of the container.",
"create": true
},
"workerThreads": {
"type": "integer",
"default": 1,
"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
},
"debugDump": {
"type": "path",
"description": "A file to dump debugging information that can't be logged normally.",
"create": true
},
"saslConfigPath": {
"type": "path",
"description": "Absolute path to the SASL configuration file.",
"required": false,
"create": true
},
"saslConfigName": {
"type": "string",
"description": "Name of the SASL configuration. This string + '.conf' is the name of the configuration file.",
"required": false,
"default": "qdrouterd",
"create": true
}
}
},
"router": {
"description":"Tracks peer routers and computes routes to destinations.",
"extends": "configurationEntity",
"singleton": true,
"attributes": {
"routerId": {
"description":"Router's unique identity.",
"type": "string",
"create": true
},
"mode": {
"type": [
"standalone",
"interior"
],
"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.",
"create": true
},
"area": {
"type": "string",
"description": "Unused placeholder.",
"default": 0
},
"helloInterval": {
"type": "integer",
"default": 1,
"description": "Interval in seconds between HELLO messages sent to neighbor routers.",
"create": true
},
"helloMaxAge": {
"type": "integer",
"default": 3,
"description": "Time in seconds after which a neighbor is declared lost if no HELLO is received.",
"create": true
},
"raInterval": {
"type": "integer",
"default": 30,
"description": "Interval in seconds between Router-Advertisements sent to all routers in a stable network.",
"create": true
},
"raIntervalFlux": {
"type": "integer",
"default": 4,
"description": "Interval in seconds between Router-Advertisements sent to all routers during topology fluctuations.",
"create": true
},
"remoteLsMaxAge": {
"type": "integer",
"default": 60,
"description": "Time in seconds after which link state is declared stale if no RA is received.",
"create": true
},
"mobileAddrMaxAge": {
"type": "integer",
"default": 60,
"description": "Deprecated - This value is no longer used in the router.",
"create": true
},
"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
},
"nodeCount": {
"type": "integer",
"description":"Number of known peer router nodes.",
"graph": true
}
}
},
"listener": {
"description": "Listens for incoming connections to the router.",
"extends": "configurationEntity",
"operations": ["CREATE"],
"annotations": [
"addrPort",
"connectionRole",
"sslProfile"
],
"attributes": {
"saslMechanisms": {
"type": "string",
"required": false,
"description": "Comma 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
},
"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
},
"trustedCerts": {
"type": "path",
"description": "This optional setting can be used to reduce the set of available CAs for client authentication. If used, this setting must provide a path to a PEM file that contains the trusted certificates.",
"create": true
},
"maxFrameSize": {
"type": "integer",
"default": 65536,
"description": "Defaults to 65536. If specified, it is 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.",
"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.",
"create": true
},
"requirePeerAuth": {
"type": "boolean",
"create": true,
"description": "Deprecated - This attribute is now controlled by the authenticatePeer attribute."
},
"allowUnsecured": {
"type": "boolean",
"create": true,
"description": "Deprecated - This attribute is now controlled by the requireEncryption attribute."
},
"allowNoSasl": {
"type": "boolean",
"create": true,
"description": "Deprecated - This attribute is now controlled by the authenticatePeer attribute."
},
"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
}
}
},
"connector": {
"description": "Establishes an outgoing connection from the router.",
"extends": "configurationEntity",
"operations": ["CREATE"],
"annotations": [
"addrPort",
"connectionRole",
"sslProfile"
],
"attributes": {
"saslMechanisms": {
"type": "string",
"required": false,
"description": "Comma 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": 65536,
"description": "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.",
"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
},
"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.",
"create": true,
"hidden": 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_HELLO",
"ROUTER_LS",
"ROUTER_MA",
"MESSAGE",
"SERVER",
"AGENT",
"CONTAINER",
"CONFIG",
"ERROR",
"DISPATCH",
"DEFAULT"
],
"required": true,
"description": "Module to configure. The special module 'DEFAULT' specifies defaults for all modules."
},
"enable": {
"type": "string",
"default": "default",
"required": true,
"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. The value 'default' means use the value from the DEFAULT module.",
"update": true
},
"timestamp": {
"type": "boolean",
"description": "Include timestamp in log messages.",
"update": true
},
"source": {
"type": "boolean",
"description": "Include source file and line number in log messages.",
"update": true
},
"output": {
"type": "string",
"description": "Where to send log messages. Can be 'stderr', 'syslog' or a file name.",
"update": true
}
}
},
"fixedAddress": {
"description":"Establishes semantics for addresses starting with a prefix.",
"extends": "configurationEntity",
"operations": ["CREATE"],
"attributes": {
"prefix": {
"type": "string",
"required": true,
"description": "The address prefix (always starting with '/').",
"create": true
},
"phase": {
"type": "integer",
"description": "The phase of a multi-hop address passing through one or more waypoints.",
"create": true
},
"fanout": {
"type": [
"multiple",
"single"
],
"default": "multiple",
"description": "One of 'multiple' or 'single'. Multiple fanout is a non-competing pattern. If there are multiple consumers using the same address, each consumer will receive its own copy of every message sent to the address. Single fanout is a competing pattern where each message is sent to only one consumer.",
"create": true
},
"bias": {
"type": [
"closest",
"spread"
],
"default": "closest",
"description": "Only if fanout is single. One of 'closest' or 'spread'. Closest bias means that messages to an address will always be delivered to the closest (lowest cost) subscribed consumer. Spread bias will distribute the messages across subscribers in an approximately even manner.",
"create": true
}
}
},
"waypoint": {
"description":"A remote node that messages for an address pass through.",
"extends": "configurationEntity",
"operations": ["CREATE"],
"attributes": {
"address": {
"description":"The AMQP address of the waypoint.",
"type": "string",
"required": true,
"create": true
},
"connector": {
"description":"The name of the on-demand connector used to reach the waypoint's container.",
"type": "string",
"required": true,
"create": true
},
"inPhase": {
"description":"The phase of the address as it is routed _to_ the waypoint.",
"type": "integer",
"default": -1,
"create": true
},
"outPhase": {
"description":"The phase of the address as it is routed _from_ the waypoint.",
"type": "integer",
"default": -1,
"create": true
}
}
},
"linkRoutePattern": {
"description":"An address pattern to match against link sources and targets to cause the router to link-route the attach across the network to a remote node.",
"extends": "configurationEntity",
"operations": ["CREATE"],
"attributes": {
"prefix": {
"description":"An address prefix to match against target and source addresses. This pattern must be of the form '<text>.<text1>.<textN>' or '<text>' or '<text>.' and matches any address that contains that prefix. For example, if the prefix is set to org.apache (or org.apache.), any address that has the prefix 'org.apache' (like org.apache.dev) will match. Note that a prefix must not start with a (.), can end in a (.) and can contain zero or more dots (.). Any characters between the dots are simply treated as part of the address",
"type": "string",
"required": true,
"create": true
},
"dir": {
"description":"Link direction for match: 'in' matches only links inbound to the client; 'out' matches only links outbound from the client; 'both' matches any link.",
"type": ["in", "out", "both"],
"required": false,
"default": "both",
"create": true
},
"connector": {
"description":"The name of the on-demand connector used to reach the target node's container. If this value is not provided, it means that the target container is expected to be connected to a different router in the network. This prevents links to a link-routable address from being misinterpreted as message-routing links when there is no route to a valid destination available.",
"type": "string",
"required": false,
"default": "",
"create": true
}
}
},
"router.link": {
"description": "Link to another AMQP endpoint: router node, client or other AMQP process.",
"extends": "operationalEntity",
"attributes": {
"linkName": {"type": "string"},
"linkType": {"type": ["endpoint", "waypoint", "inter-router", "inter-area"]},
"linkDir": {"type": ["in", "out"]},
"owningAddr": {"type": "string"},
"eventFifoDepth": {"type": "integer", "graph": true},
"msgFifoDepth": {"type": "integer", "graph": true},
"remoteContainer": {"type": "string"}
}
},
"router.address": {
"description": "AMQP address managed by the router.",
"extends": "operationalEntity",
"attributes": {
"inProcess": {"type": "boolean"},
"subscriberCount": {"type": "integer", "graph": true},
"remoteCount": {"type": "integer", "graph": true},
"deliveriesIngress": {"type": "integer", "graph": true},
"deliveriesEgress": {"type": "integer", "graph": true},
"deliveriesTransit": {"type": "integer", "graph": true},
"deliveriesToContainer": {"type": "integer", "graph": true},
"deliveriesFromContainer": {"type": "integer", "graph": true},
"key": {
"description": "Internal unique (to this router) key to identify the address",
"type": "string"
}
}
},
"router.node": {
"description": "Remote router node connected to this router.",
"extends": "operationalEntity",
"attributes": {
"routerId": {
"description": "Remote node identifier.",
"type": "string"
},
"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"
}
}
},
"connection": {
"description": "Connections to the router's container.",
"extends": "operationalEntity",
"attributes": {
"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"
},
"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"
},
"properties": {
"description": "Connection properties supplied by the peer.",
"type": "map"
}
}
},
"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": "Start a websocket/tcp proxy and http file server to serve the web console",
"extends": "configurationEntity",
"singleton": 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", "description": "The full path to the proxy program to run."},
"home": {"type": "string", "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."}
}
},
"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},
"map": {"type": "map", "create": true, "update": true}
}
}
}
}