Skip to content

Monitor API

Version: 1.0.0

Status: ⚫⚪⚪

Monitor interface for Thunder framework.

(Defined by Monitor.json)

Table of Contents

Introduction

Scope

This document describes purpose and functionality of the Monitor interface (version 1.0.0). It includes detailed specification about its methods and properties as well as sent notifications.

Case Sensitivity

All identifiers of the interfaces described in this document are case-sensitive. Thus, unless stated otherwise, all keywords, entities, properties, relations and actions should be treated as such.

Acronyms, Abbreviations and Terms

The table below provides and overview of acronyms used in this document and their definitions.

Acronym Description
API Application Programming Interface
HTTP Hypertext Transfer Protocol
JSON JavaScript Object Notation; a data interchange format
JSON-RPC A remote procedure call protocol encoded in JSON

The table below provides and overview of terms and abbreviations used in this document and their definitions.

Term Description
callsign The name given to an instance of a plugin. One plugin can be instantiated multiple times, but each instance the instance name, callsign, must be unique.

References

Ref ID Description
HTTP HTTP specification
JSON-RPC JSON-RPC 2.0 specification
JSON JSON specification
Thunder Thunder API Reference

Description

Monitor JSON-RPC interface.

Methods

The following methods are provided by the Monitor interface:

Monitor interface methods:

Method Description
restartlimits Sets new restart limits for a service
resetstats Resets memory and process statistics for a single service watched by the Monitor

restartlimits method

Sets new restart limits for a service.

Parameters

Name Type M/O Description
params object mandatory ...
params.callsign string mandatory The callsign of a service to reset measurements snapshot of
params.restart object mandatory Restart limits for failures applying to the service
params.restart.limit integer mandatory Maximum number or restarts to be attempted
params.restart.window integer mandatory Time period (in seconds) within which failures must happen for the limit to be considered crossed

Result

Name Type M/O Description
result null mandatory Always null (default: None)

Example

Request

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "<callsign>.1.restartlimits",
  "params": {
    "callsign": "WebServer",
    "restart": {
      "limit": 3,
      "window": 60
    }
  }
}

Response

{
  "jsonrpc": "2.0",
  "id": 42,
  "result": null
}

resetstats method

Resets memory and process statistics for a single service watched by the Monitor.

Parameters

Name Type M/O Description
params object mandatory ...
params.callsign string mandatory The callsign of a service to reset statistics of

Result

Name Type M/O Description
result object mandatory Measurements for the service before reset
result.measurements object mandatory Measurements for the service
result.measurements.resident object mandatory Resident memory measurement
result.measurements.resident.min integer mandatory Minimal value measured
result.measurements.resident.max integer mandatory Maximal value measured
result.measurements.resident.average integer mandatory Average of all measurements
result.measurements.resident.last integer mandatory Last measured value
result.measurements.allocated object mandatory Allocated memory measurement
result.measurements.allocated.min integer mandatory Minimal value measured
result.measurements.allocated.max integer mandatory Maximal value measured
result.measurements.allocated.average integer mandatory Average of all measurements
result.measurements.allocated.last integer mandatory Last measured value
result.measurements.shared object mandatory Shared memory measurement
result.measurements.shared.min integer mandatory Minimal value measured
result.measurements.shared.max integer mandatory Maximal value measured
result.measurements.shared.average integer mandatory Average of all measurements
result.measurements.shared.last integer mandatory Last measured value
result.measurements.process object mandatory Processes measurement
result.measurements.process.min integer mandatory Minimal value measured
result.measurements.process.max integer mandatory Maximal value measured
result.measurements.process.average integer mandatory Average of all measurements
result.measurements.process.last integer mandatory Last measured value
result.measurements.operational boolean mandatory Whether the service is up and running
result.measurements.count integer mandatory Number of measurements
result.observable string mandatory A callsign of the watched service
result.restart object mandatory Restart limits for failures applying to the service
result.restart.limit integer mandatory Maximum number or restarts to be attempted
result.restart.window integer mandatory Time period (in seconds) within which failures must happen for the limit to be considered crossed

Example

Request

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "<callsign>.1.resetstats",
  "params": {
    "callsign": "WebServer"
  }
}

Response

{
  "jsonrpc": "2.0",
  "id": 42,
  "result": {
    "measurements": {
      "resident": {
        "min": 0,
        "max": 100,
        "average": 50,
        "last": 100
      },
      "allocated": {
        "min": 0,
        "max": 100,
        "average": 50,
        "last": 100
      },
      "shared": {
        "min": 0,
        "max": 100,
        "average": 50,
        "last": 100
      },
      "process": {
        "min": 0,
        "max": 100,
        "average": 50,
        "last": 100
      },
      "operational": true,
      "count": 100
    },
    "observable": "callsign",
    "restart": {
      "limit": 3,
      "window": 60
    }
  }
}

Properties

The following properties are provided by the Monitor interface:

Monitor interface properties:

Property R/W Description
status read-only Service statistics

status property

Provides access to the service statistics.

This property is read-only.

The callsign parameter shall be passed as the index to the property, i.e. status@<callsign>.

Index

Name Type M/O Description
callsign string mandatory If omitted then all observed objects will be returned on read

Value

Name Type M/O Description
(property) array mandatory Service statistics
(property)[#] object mandatory ...
(property)[#].measurements object mandatory Measurements for the service
(property)[#].measurements.resident object mandatory Resident memory measurement
(property)[#].measurements.resident.min integer mandatory Minimal value measured
(property)[#].measurements.resident.max integer mandatory Maximal value measured
(property)[#].measurements.resident.average integer mandatory Average of all measurements
(property)[#].measurements.resident.last integer mandatory Last measured value
(property)[#].measurements.allocated object mandatory Allocated memory measurement
(property)[#].measurements.allocated.min integer mandatory Minimal value measured
(property)[#].measurements.allocated.max integer mandatory Maximal value measured
(property)[#].measurements.allocated.average integer mandatory Average of all measurements
(property)[#].measurements.allocated.last integer mandatory Last measured value
(property)[#].measurements.shared object mandatory Shared memory measurement
(property)[#].measurements.shared.min integer mandatory Minimal value measured
(property)[#].measurements.shared.max integer mandatory Maximal value measured
(property)[#].measurements.shared.average integer mandatory Average of all measurements
(property)[#].measurements.shared.last integer mandatory Last measured value
(property)[#].measurements.process object mandatory Processes measurement
(property)[#].measurements.process.min integer mandatory Minimal value measured
(property)[#].measurements.process.max integer mandatory Maximal value measured
(property)[#].measurements.process.average integer mandatory Average of all measurements
(property)[#].measurements.process.last integer mandatory Last measured value
(property)[#].measurements.operational boolean mandatory Whether the service is up and running
(property)[#].measurements.count integer mandatory Number of measurements
(property)[#].observable string mandatory A callsign of the watched service
(property)[#].restart object mandatory Restart limits for failures applying to the service
(property)[#].restart.limit integer mandatory Maximum number or restarts to be attempted
(property)[#].restart.window integer mandatory Time period (in seconds) within which failures must happen for the limit to be considered crossed

Example

Get Request

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "<callsign>.1.status@WebServer"
}

Get Response

{
  "jsonrpc": "2.0",
  "id": 42,
  "result": [
    {
      "measurements": {
        "resident": {
          "min": 0,
          "max": 100,
          "average": 50,
          "last": 100
        },
        "allocated": {
          "min": 0,
          "max": 100,
          "average": 50,
          "last": 100
        },
        "shared": {
          "min": 0,
          "max": 100,
          "average": 50,
          "last": 100
        },
        "process": {
          "min": 0,
          "max": 100,
          "average": 50,
          "last": 100
        },
        "operational": true,
        "count": 100
      },
      "observable": "callsign",
      "restart": {
        "limit": 3,
        "window": 60
      }
    }
  ]
}

Notifications

Notifications are autonomous events triggered by the internals of the implementation and broadcasted via JSON-RPC to all registered observers. Refer to [Thunder] for information on how to register for a notification.

The following events are provided by the Monitor interface:

Monitor interface events:

Notification Description
action Signals an action taken by the Monitor

action notification

Signals an action taken by the Monitor.

Notification Parameters

Name Type M/O Description
params object mandatory ...
params.callsign string mandatory Callsign of the service the Monitor acted upon
params.action string mandatory The action executed by the Monitor on a service. One of: "Activate", "Deactivate", "StoppedRestarting"
params.reason string mandatory A message describing the reason the action was taken

Example

Registration

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "<callsign>.1.register",
  "params": {
    "event": "action",
    "id": "myid"
  }
}

Notification

{
  "jsonrpc": "2.0",
  "method": "myid.action",
  "params": {
    "callsign": "WebServer",
    "action": "Deactivate",
    "reason": "EXCEEDED_MEMORY"
  }
}

The client ID parameter is passed within the notification designator, i.e. <client-id>.action.