Skip to content

MemoryMonitor API

Version: 1.0.0

Status: ⚫⚪⚪

MemoryMonitor interface for Thunder framework.

(Defined with IMemoryMonitor in IMemoryMonitor.h)

Table of Contents

Introduction

Scope

This document describes purpose and functionality of the MemoryMonitor 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

MemoryMonitor JSON-RPC interface.

This interface uses legacy lowercase naming convention. With the next major release the naming convention will change to camelCase.

Methods

The following methods are provided by the MemoryMonitor interface:

MemoryMonitor interface methods:

Method Description
resetstatistics Resets memory statistics for a given service

resetstatistics method

Resets memory statistics for a given service.

Parameters

Name Type M/O Description
params object mandatory ...
params.callsign string mandatory Callsign of the service

Result

Name Type M/O Description
result null mandatory Always null

Example

Request

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

Response

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

Properties

The following properties are provided by the MemoryMonitor interface:

MemoryMonitor interface properties:

Property R/W Description
restartinglimits read/write Limits of restarting of a service
observables read-only List of services watched by the Monitor
measurementdata read-only Memory statistics for a given service

restartinglimits property

Provides access to the limits of restarting of a service.

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

Index

Name Type M/O Description
callsign string mandatory Callsign of the service

Value

Name Type M/O Description
(property) object mandatory Limits of restarting of a service
(property).value object mandatory Limits of restarts applying to a given service
(property).value.limit integer mandatory Maximum number or restarts to be attempted
(property).value.window integer mandatory Time period (in seconds) within which failures must happen for the limit to be considered crossed
Name Type M/O Description
(property) object mandatory Limits of restarting of a service
(property).limit integer mandatory Maximum number or restarts to be attempted
(property).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.restartinglimits@WebServer"
}

Get Response

{
  "jsonrpc": "2.0",
  "id": 42,
  "result": {
    "limit": 3,
    "window": 60
  }
}

Set Request

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

Set Response

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

observables property

Provides access to the list of services watched by the Monitor.

This property is read-only.

Value

Name Type M/O Description
(property) array mandatory List of monitored services
(property)[#] string mandatory ...

Example

Get Request

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "<callsign>.1.observables"
}

Get Response

{
  "jsonrpc": "2.0",
  "id": 42,
  "result": [
    "..."
  ]
}

measurementdata property

Provides access to the memory statistics for a given service.

This property is read-only.

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

Index

Name Type M/O Description
callsign string mandatory Callsign of the service

Value

Name Type M/O Description
(property) object mandatory Statistics for the requested callsign
(property).resident object mandatory Resident memory measurement
(property).resident.min integer mandatory Minimal value measured
(property).resident.max integer mandatory Maximal value measured
(property).resident.average integer mandatory Average of all measurements
(property).resident.last integer mandatory Last measured value
(property).allocated object mandatory Allocated memory measurement
(property).allocated.min integer mandatory Minimal value measured
(property).allocated.max integer mandatory Maximal value measured
(property).allocated.average integer mandatory Average of all measurements
(property).allocated.last integer mandatory Last measured value
(property).shared object mandatory Shared memory measurement
(property).shared.min integer mandatory Minimal value measured
(property).shared.max integer mandatory Maximal value measured
(property).shared.average integer mandatory Average of all measurements
(property).shared.last integer mandatory Last measured value
(property).process object mandatory Processes measurement
(property).process.min integer mandatory Minimal value measured
(property).process.max integer mandatory Maximal value measured
(property).process.average integer mandatory Average of all measurements
(property).process.last integer mandatory Last measured value
(property).operational boolean mandatory Whether the service is up and running
(property).count integer mandatory Number of measurements

Example

Get Request

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

Get Response

{
  "jsonrpc": "2.0",
  "id": 42,
  "result": {
    "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
  }
}

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 MemoryMonitor interface:

MemoryMonitor interface events:

Notification Description
statuschanged Signals an action taken by the Monitor

statuschanged 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 Ation executed by the Monitor on a service (must be one of the following: Activated, Deactivated, RestartingStopped)
params?.reason string optional Mssage describing the reason the action was taken (must be one of the following: ExceededMemory, NotOperational)

Example

Registration

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

Notification

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

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