REST-based API for HTCondor, using the Python bindings.
Currently allows read-only queries for jobs (in-queue and historical), configuration, and machine status.
Installation requires the following Python modules:
htcondor >= 10.0.0
flask 2+
flask-restful 0.3.10
Install them via pip
or your OS's package manager.
Create a virtualenv then pip install -e .
. To run using the
built-in Flask server (not for production), run
FLASK_APP=condor_restd flask run -p 9680
For additional scalability, run using a WSGI server such as gunicorn:
gunicorn -w4 -b127.0.0.1:9680 condor_restd:app
These commands will run the server on port 9680.
NOTE: Running the htcondor-restd as root is not recommended. This
readme assumes that you are running the restd as the unprivileged user
restd
.
The RESTD is configured using HTCondor configuration; see the configuration section of the HTCondor manual for general configuration information. Note that RESTD-specific parameters are not listed in the manual yet.
If you do not have permission to edit global HTCondor configuration, you may configure the RESTD in one of two ways, as described in the Ordered Evaluation to Set the Configuration section of the HTCondor manual:
-
Adding the options to the user configuration file for the user running the restd, in
$HOME/.config/user_config
(or the location defined byUSER_CONFIG_FILE
). This is recommended for non-container installs. -
Using the
_CONDOR_*
environment variables. For example, set the value forRESTD_MAX_JOBS
by setting the environment variable_CONDOR_RESTD_MAX_JOBS
. This is recommended for container installs.
The following HTCondor configuration values apply:
CONDOR_HOST
: The hostname of the HTCondor central manager.RESTD_HIDE_JOB_ATTRS
: A comma or space-separated list of job attributes to redact from queries. Attributes in this list will show the value<REDACTED>
in the jobs and history endpoints.RESTD_MAX_JOBS
: The maximum number of jobs returned for jobs, grouped_jobs, history, and grouped_history queries.
The following queries are implemented. Arguments in brackets {}
are optional:
Access job information (similar to condor_q
and condor_history
).
jobs
and history
behave exactly the same, except jobs
queries jobs in the queue,
and history
queries jobs that have left the queue.
GET /v1/jobs/{schedd}{/clusterid}{?projection,constraint}
GET /v1/history/{schedd}{/clusterid}{?projection,constraint}
Returns a list of job objects. A job object looks like
{
"jobid": "123.45",
"classad": { <classad> }
}
Returns an empty list if no jobs match.
schedd
is the name of the schedd to query, or DEFAULT
to use
the default schedd (if there is one). Raises 404
if the schedd
does not exist.
clusterid
limits the results to jobs with the given cluster ID.
projection
is one or more comma-separated attributes; if specified,
only those attributes will be in the classad
object of each job.
constraint
is a classad expression restricting which jobs to include
in the result.
GET /v1/jobs/{schedd}/{clusterid}/{procid}{?projection}
GET /v1/history/{schedd}/{clusterid}/{procid}{?projection}
Returns a single job object with cluster ID given by clusterid
and
the proc ID given by procid
.
Raises 404
if no such job exists.
schedd
is the name of the schedd to query, or DEFAULT
to use
the default schedd (if there is one). Raises 404
if the schedd
does not exist.
projection
is one or more comma-separated attributes; if specified,
only those attributes will be in the classad
object of the job.
GET /v1/jobs/{schedd}/{clusterid}/{procid}/{attribute}
GET /v1/history/{schedd}/{clusterid}/{procid}/{attribute}
Returns a single attribute of a job with cluster ID given by clusterid
,
proc ID given by procid
, and attribute name given by attribute
.
schedd
is the name of the schedd to query, or DEFAULT
to use
the default schedd (if there is one). Raises 404
if the schedd
does not exist.
Raises 404
if no such job exists, or if the attribute is undefined.
Like jobs
and history
, accesses job information. However, they
group the returned jobs by an attribute.
grouped_jobs
and grouped_history
behave exactly the same, except
grouped_jobs
queries jobs in the queue, and grouped_history
queries jobs that have left the queue.
GET /v1/grouped_jobs/{schedd}/{groupby}{/clusterid}{?projection,constraint}
GET /v1/grouped_history/{schedd}/{groupby}{/clusterid}{?projection,constraint}
Returns an object of lists of job objects, keyed by the value of the
attribute given in groupby
. A job object looks like:
{
"jobid": "123.45",
"classad": { <classad> }
}
The returned object looks like:
{
"value1": [ <job objects> ],
"value2": [ <job objects> ]
}
Returns an empty object if no jobs match. Jobs that do not have the
attribute given in groupby
are omitted from the result. (This is
because null is not a valid key.)
schedd
is the name of the schedd to query, or DEFAULT
to use
the default schedd (if there is one). Raises 404
if the schedd
does not exist.
clusterid
limits the results to jobs with the given cluster ID.
projection
is one or more comma-separated attributes; if specified,
only those attributes, plus the groupby
attribute, will be in the
classad
object of each job.
constraint
is a classad expression restricting which jobs to include
in the result.
Access config information (similar to condor_config_val
).
GET /v1/config{/attribute}{?daemon}
If attribute
is specified, returns the value of the specific
attribute in the condor config. If not specified, returns an object
of the form:
{
"attribute1": "value1",
"attribute2": "value2",
...
}
If daemon
is specified, query the given running daemon; otherwise,
query the static config files.
Returns 404 if attribute
is specified but the attribute is undefined.
Access machine and daemon information (similar to condor_status
).
GET /v1/status{/name}{?projection,constraint,query}
This returns an array of objects of the following form:
{
"name": "<name classad attribute>",
"type": "<ad type>",
"classad": { <classad object> }
}
name
is a specific host or slot to query. If not specified, all
matching ads are returned.
query
is the type of ad to query; see the "Query options" in the
condor_status(1) manpage. "any" is the default.
projection
is one or more comma-separated attributes; if specified,
only those attributes will be in the classad
object of each job.
constraint
is a classad expression restricting which ads to include
in the result.
Like status
, accesses machine and daemon information. However, it
groups the returned objects by a classad attribute.
GET /v1/grouped_status/{groupby}{/name}{?projection,constraint,query}
Returns an object of lists of status objects, keyed by the value of
the attribute given in groupby
. A status object looks like:
{
"name": "<name classad attribute>",
"type": "<ad type>",
"classad": { <classad object> }
}
The returned object looks like:
{
"value1": [ <status objects> ],
"value2": [ <status objects> ]
}
Returns an empty object if nothing matches. Status objects that do
not have the classad attribute given in groupby
are omitted from
the result. (This is because null is not a valid key.)
name
is a specific host or slot to query. If not specified, all
matching ads are returned.
query
is the type of ad to query; see the "Query options" in the
condor_status(1) manpage. "any" is the default.
projection
is one or more comma-separated attributes; if specified,
only those attributes, plus the groupby
attribute, will be in the
classad
object of each job.
constraint
is a classad expression restricting which ads to include
in the result.