Management REST interface

Log and Trace levels

Apart from the NGSI interface, Orion Context Broker exposes a REST API for management that allows to change the log level and the trace levels (whose initial value is set using -t and -logLevel command line options).

To change the log level:

curl -X PUT <host>:<port>/admin/log?level=<NONE|FATAL|ERROR|WARN|INFO|DEBUG>

To retrieve the log level:

curl <host>:<port>:/admin/log

which response follows the following pattern:

{
   "level": "INFO"
}

To manage the trace level:

curl --request DELETE <host>:<port>/log/trace
curl --request DELETE <host>:<port>/log/trace/t1
curl --request DELETE <host>:<port>/log/trace/t1-t2
curl --request DELETE <host>:<port>/log/trace/t1-t2,t3-t4
curl --request GET <host>:<port>/log/trace
curl --request PUT <host>:<port>/log/trace/t1
curl --request PUT <host>:<port>/log/trace/t1-t2
curl --request PUT <host>:<port>/log/trace/t1-t2,t3-t4

'PUT-requests' overwrite the previous log settings. So, in order to ADD a trace level, a GET /log/trace must be issued first and after that the complete trace string to be sent in the PUT request can be assembled.

The following traceleves are particularly useful in order to make Orion print input/output payload in traces:

/* Input/Output payloads (180-199) */
  LmtServiceInputPayload = 180,
  LmtServiceOutPayload,
  LmtClientInputPayload,
  LmtClientOutputPayload = 183,  // Very important for harness test notification_different_sizes
  LmtPartialPayload,
  LmtClientOutputPayloadDump,
  LmtCPrForwardRequestPayload,
  LmtCPrForwardResponsePayload,

Thus, you can enable all them using:

curl --request PUT <host>:<port>/log/trace/180-199

Semaphores

Another useful (especially if the broker stops responding correctly) REST API is the semaphore listing offered:

curl <host>:<port>/admin/sem

The response is a listing of information of all the broker's semaphores:

{
    "alarmMgr": {
        "status": "free"
    },
    "connectionContext": {
        "status": "free"
    },
    "connectionEndpoints": {
        "status": "free"
    },
    "dbConnection": {
        "status": "free"
    },
    "dbConnectionPool": {
        "status": "free"
    },
    "logMsg": {
        "status": "free"
    },
    "metrics": {
        "status": "free"
     },
    "mqttMgr": {
        "status": "free"
     },
    "request": {
        "status": "free"
    },
    "subCache": {
        "status": "free"
    },
    "timeStat": {
        "status": "free"
    },
    "transaction": {
        "status": "free"
    }
}

Short explanation of the semaphores: * alarmMgr, protects the data of the Alarm Manager * connectionContext, protects the curl context for sending HTTP notifications/forwarded messages * connectionEndpoints, protects the curl endpoints when sending HTTP notifications/forwarded messages. * dbConnectionPool, protects mongo connection pool * dbConnection, protects the set of connections of the mongo connection pool * logMsg, makes sure that not two messages are written simultaneously to the log-file * metrics, protects internal data of the Metrics Manager * mqttMgr, protects the data of MTTQ connections manager * request, makes sure there are not two simultaneous requests to mongodb * subCache, protects the Subscription Cache * timeStat, protects the data for timing statistics * transaction, protects the Transaction ID (for the log-file)

The information supplied for each of the semaphores is: * status: free or taken

[ For now only one item per semaphore but the idea is to add more information in the future ]