NAME¶
PMWEBAPI - introduction to the Performance Metrics Web Application
Programming Interface
OVERVIEW¶
The PMWEBAPI interface is a binding of a subset of the PMAPI to the web. It uses
HTTP as transport, REST as organizational style for request/parameter encoding
(the GET and POST methods are interchangeable), and JSON as response encoding.
A context identifier is used as a persistent way to refer to PMAPI contexts
across related web requests. These context identifiers expire after a
configurable period of disuse. Errors generally result in HTTP-level error
responses. An
Access-Control-Allow-Origin: * header is added to all
JSON responses.
CONTEXT CREATION: pmNewContext¶
To create a new web context identifier, a web client invokes:
- /pmapi/context?local=ANYTHING
- Creates a PM_CONTEXT_LOCAL PMAPI context.
- /pmapi/context?hostname=STRING
- /pmapi/context?hostspec=STRING
- Creates a PM_CONTEXT_HOST PMAPI context with the given host name and/or
extended specification. If the host specification contains a
userid/password combination, then the corresponding pmapi context
operations will require HTTP Basic authentication credentials with
matching userid/password.
- /pmapi/context?archivefile=ARCHIVE
- Creates a PM_CONTEXT_ARCHIVE PMAPI context with the given file name.
In addition, the web client may add the parameter
&polltimeout=MMMM
for a maximum interval (in seconds) between expected accesses to the given
context. This value is limited by pmwebd configuration, and is a courtesy to
allow pmwebd to free up memory earlier in case of sudden web application
shutdown.
If successful, the response from these requests is a JSON document of the form:
The number (a 32-bit unsigned decimal) is then used in all later operations.
PMAPI OPERATIONS¶
The general form of the requests is as follows:
/pmapi/NNNNN/OPERATION
where
- /pmapi
- is the fixed prefix for all PMWEBAPI operations,
- NNNNN
- is a PMWEBAPI context number returned from a context-creation call, or
assigned permanently at pmwebd startup, and
- OPERATION?PARAM1=VALUE2&PARAM2=VALUE2
- identifies the operation and its URL-encoded parameters. Some parameters
may be optional.
The general form of the requests is as follows:
- /pmapi/NNNNN/_metric
- Traverse the entire PMNS.
- /pmapi/NNNNN/_metric?prefix=NAME
- Traverse the subtree of PMNS with the prefix NAME.
The response is a JSON document that provides the metric metadata as an array.
For example:
{ "metrics": [
{ "name":"foo.bar", "pmID":PPPP, "indom":DDDD,
"type":"32", "sem":"instant", "units":"MHz",
"text-oneline":"foo bar", "text-help":"blah blah blah" },
{ "name":"foo.bar2", ... }
...
] }
Most of the fields are self-explanatory.
- PPPP
- the PMID
- DDDD
- the instance domain
- type
- from pmTypeStr
- units
- from pmUnitsStr
- sem
- an abbreviation of the metric semantic:
PM_SEM_COUNTER "counter" |
|
PM_SEM_INSTANT "instant" |
|
PM_SEM_DISCRETE "discrete" |
|
METRIC VALUE: pmFetch¶
The general form of the requests is as follows:
- /pmapi/NNNNN/_fetch?names=NAME1,NAME2
- Fetch current values for given named metrics.
- /pmapi/NNNNN/_fetch?pmids=PPPP1,PPPP2
- Fetch current values for given PMIDs.
The response is a JSON document that provides the values for all requested
metrics, for all their instances.
{ "timestamp": { "s":SEC, "us":USEC },
"values": [
{ "pmid":PPPP1, "name":"NAME1",
"instances:" [
{ "instance":IIII1, "value":VALUE1 }
{ "instance":IIII2, "value":VALUE2 }
...
] },
{ "pmid":PPPP2, "name":"NAME2", ... }
...
] }
Most of the fields are self-explanatory. Numeric metric types are represented as
JSON integer or floating-point values. Strings are passed verbatim, except
that non-ASCII values are replaced with a Unicode 0xFFFD REPLACEMENT CHARACTER
code. Event type metrics are not currently supported.
INSTANCE DOMAINS METADATA: pmGetInDom, pmNameInDom, pmLookupInDom¶
The general form of the requests is as follows:
- /pmapi/NNNN/_indom?indom=DDDD
- List instances of the given instance domain.
- /pmapi/NNNN/_indom?name=NAME
- List instances of the instance domain belonging to the named metric.
In addition, either query may be suffixed with:
- &instance=IIII,JJJJ
- Restrict listings to given instance code numbers.
- &iname=INAME1,INAME2
- Restrict listings to given instance names.
The response is a JSON document that provides the metric metadata as an array.
For example:
{ "indom":DDDD,
"instances": [
{ "instance":IIII, "name":"INAME" }
...
] }
INSTANCE PROFILE: pmAddProfile, pmDelProfile¶
- /pmapi/NNNN/_profile_reset?
- These are not currently supported.
- /pmapi/NNNN/_profile_reset?indom=DDDD
- These are not currently supported.
- /pmapi/NNNN/_profile_add?indom=DDDD&instance=IIII,JJJJ
- These are not currently supported.
- /pmapi/NNNN/_profile_add?indom=DDDD&iname=IIII,JJJJ
- These are not currently supported.
- /pmapi/NNNN/_profile_del?indom=DDDD&instance=JJJJ
- These are not currently supported.
- /pmapi/NNNN/_profile_del?indom=DDDD&iname=INAME1,INAME2
- These are not currently supported.
DERIVED METRICS: pmRegisterDerived¶
- /pmapi/NNNNN/_derive?name=NAME&expr=EXPRESSION
- These are not currently supported.
CONTEXT COPY: pmDupContext¶
- /pmapi/NNNNN/copy
- These are not currently supported.
CONTEXT CLOSE: pmDestroyContext¶
- /pmapi/NNNNN/destroy
- This is not likely to be supported, as it is destructive and would offer a
tempting target to brute-force attackers. Instead, the pmwebd timeout is
used to automatically free unused contexts.
SEE ALSO¶
PCPIntro(1),
PCPIntro(3),
pmwebd(3), and
PMAPI(3)