Tripwire API Guide#

Overview#

Tripwire is a functional module in the Metropolis Analytics microservice that detects object crossing a defined tripwire line and provides time series metrics, and alerts related to it.

Tripwire API Endpoints#

Analytics Web API is exposed via Ingress Controller.

The URL prefix is http://<INGRESS-HOST-IP>:<INGRESS-PORT>/emdx/. Replace the INGRESS-HOST-IP with the Jetson device IP. Replace the INGRESS-PORT with 30080 or the last value defined in Ingress configuration.

Tripwire API Version v2#

The Tripwire API has a new major version v2 which is not backward compatible with earlier version. The previous version shipped with JPS 1.0 version is still supported in this release. However it is highly recommended to adopt/migrate to v2 version. The v2 version is provided under path /api/v2. Where the earlier version is still functional under /api.

Create tripwire configuration#

HTTP POST

/api/v2/config/tripwire?sensorId=Amcrest_3

{
  "deleteIfPresent": true,
  "tripwires": [
    {
        "direction": {
          "entry": {
            "name": "Inside the room"
          },
          "exit": {
            "name": "Outside of the room"
          },
          "p1": {
            "x": 753,
            "y": 744
          },
          "p2": {
            "x": 448,
            "y": 856
          }
        },
        "id": "door1",
        "name": "Main door",
        "wire": [
          {
            "x": 321,
            "y": 664
          },
          {
            "x": 544,
            "y": 648
          },
          {
            "x": 656,
            "y": 953
          },
          {
            "x": 323,
            "y": 1067
          }
        ]
      }
  ],
  "sensorId": "Amcrest_3"
}

Mandatory query parameters#

sensorId

description: Sensor for which Tripwire config needs to be inserted.

type: string

example: sensorId=Amcrest_3

direction.p1

description: the (x,y) coordinate of the tail of the direction arrow.

type: Dict{x: int, y: int}

example: direction.p1={“x”: 323, “y”: 1067}

direction.p2

description: the (x,y) coordinate of the head of the direction arrow.

type: Dict{x: int, y: int}

example: direction.p1={“x”: 448, “y”: 858}

Optional query parameters#

direction.entry.name

description: User friendly name of the direction of crossing towards the entry side of tripwire

type: string

example: Inside the room

direction.exit.name

description: User friendly name of the direction of crossing towards the exit side of tripwire

type: string

example: Outside of the room

deleteIfPresent

description: If true any existing tripwire timeseries data will be delete for this tripwire.

type: boolean

If not specified or false the tripwire timeseries data is retained.

Note: Need to set User-Type: Admin in the HTTP header of the HTTP POST request.

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

403: Authorization error. User-Type header missing. Must be present with Admin as value 500: Internal server error

Retrieve Tripwire histogram counts#

Histogram of count people crossing the tripwire lines for a given time range and a specified fixed interval.

HTTP GET

/api/v2/metrics/tripwire/histogram?sensorId=Amcrest_3&tripwireId=door1&fromTimestamp=2020-10-30T20:00:00.000Z&toTimestamp=2020-10-31T01:00:00.000Z

Mandatory query parameters#

sensorId

description: Sensor for which Tripwire metrics need to be returned.

type: string

example: sensorId=Amcrest_3

tripwireId

description: tripwire line for which Tripwire metrics need to be returned.

type: string

example: door1

fromTimestamp

description: lower bound of the timestamp for which tripwire count needs to be returned

type: UTC / GMT timestamp string

example: 2020-10-30T20:00:00.000Z

toTimestamp

description: Upper bound of timestamp for which tripwire count & alert needs to be returned.If Not specified defaults to UTC.NOW on the server

type: UTC / GMT timestamp string

example: 2020-10-30T20:05:00.000Z

Optional query parameters#

bucketSizeInSec

description : Requested time range (fromTimestamp - toTimestamp) fragmented into histogram of interval bucketSizeInSec seconds. Minimum value of 1sec. Maximum value of 864000 sec (1 day)

type: int

objectType

description: An optional objectTypes parameter used to breakdown histogram counts by object type (e.g People, Vehicle,…)

type: string

Possible way to breakdown counts by object type is as follows

1) To return counts for only specific type of objects in addition to cumulative counts across all types of objects. objectType=People,Vehicle

2) To return counts for all object types in addition to cumulative counts across all types of objects. objectType=*

  1. When objectType is not specified it returns only cumulative counts across all types of objects.

Example#

HTTP GET

/api/v2/metrics/tripwire/histogram?sensorId=Amcrest_3&tripwireId=door1&fromTimestamp=2020-10-30T20:00:00.000Z&toTimestamp=2020-10-30T20:05:00.000Z&bucketSizeInSec=1

The 5 minutes time range is fragmented into histograms of 1sec fixed interval.

Response#

{
    "bucketSizeInSec": "1",
    "tripwires": [
      {
        "id": "door_1",
        "histogram": [
          {
            "end": "2020-01-26T19:16:30.000Z",
            "start": "2020-01-26T19:16:29.000Z",
            "events": [
              {
                "type": "IN",
                "objects": [
                  {
                    "type": "Person",
                    "count": 1
                  },
                  {
                    "type": "Box",
                    "count": 4
                  }
                ]
              },
              {
                "type": "OUT",
                "objects": [
                  {
                    "type": "Person",
                    "count": 2
                  },
                  {
                    "type": "Box",
                    "count": 1
                  }
                ]
              }
            ]

          }
        ]
      }
    ]
}

Response body attributes#

tripwires[].histogram

description: Histogram of count for all types of objects (e.g People, Vehicle,…) per tripwire and direction type (IN/OUT)

type: Array of object

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

422: No Tripwire metrics found for the requested sensorId and time range 500: Internal server error

Retrieve Tripwire total counts#

Total count of people crossing the tripwire lines for a given time range

HTTP GET

/api/v2/metrics/tripwire/count?sensorId=Amcrest_3&tripwireId=door1&fromTimestamp=2020-10-30T20:00:00.000Z&toTimestamp=2020-10-31T01:00:00.000Z

Mandatory query parameters#

sensorId

description: Sensor for which Tripwire metrics need to be returned.

type: string

example: sensorId=Amcrest_3

tripwireId

description: tripwire line for which Tripwire metrics need to be returned.

type: string

example: door1

fromTimestamp

description: lower bound of the timestamp for which tripwire count needs to be returned

type: UTC / GMT timestamp string

example: 2020-10-30T20:00:00.000Z

toTimestamp

description: Upper bound of timestamp for which tripwire count & alert needs to be returned.If Not specified defaults to UTC.NOW on the server

type: UTC / GMT timestamp string

example: 2020-10-30T20:05:00.000Z

Optional query parameters#

objectType

description: An optional objectTypes parameter used to breakdown counts by object type (e.g People, Vehicle,…)

type: string

Possible way to breakdown counts by object type is as follows

1) To return counts for only specific type of objects in addition to cumulative counts across all types of objects. objectType=People,Vehicle

2) To return counts for all object types in addition to cumulative counts across all types of objects. objectType=*

  1. When objectType is not specified it returns only cumulative counts across all types of objects.

Example#

HTTP GET

/api/v2/metrics/tripwire/count?sensorId=Amcrest_3&tripwireId=door1&fromTimestamp=2020-10-30T20:00:00.000Z&toTimestamp=2020-10-30T20:05:00.000Z

Response#

{

    "tripwireKpis": [
      {

        "id": "door1",
        "events": [
          {
            "type": "IN",
            "objects": [
              {
                "type": "People",
                "count": 2
              }
            ]
          },
          {
            "type": "OUT",
            "objects": [
              {
                "type": "People",
                "count": 1
              }
            ]
          }
        ]
      }
   ]

}

Response body attributes#

tripwireKpis[].id

description: Id of the tripwire for which the counts provided in events.

type: string

tripwireKpis[].events[].type

description: Direction of crossing e.g IN/OUT

type: string

tripwireKpis[].events[].objects[]

description: Count specific to a type of object

type: object

tripwireKpis[].events[].objects[].type

description: Type of the object

type: string

tripwireKpis[].events[].objects[].count

description: Count specific to a type of object

type: integer

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

422: No Tripwire metrics found for the requested sensorId and time range 500: Internal server error

Create Tripwire alert rule#

Two types of alerts rule i.e. Increment and Flow Rate are supported

Flow Rate Alert Type#

Alerts based on every countThreshold crossing the tripwire line within timeInterval seconds.

HTTP POST

/api/v2/config/rule/alerts/tripwire

{
  "sensorId": "Amcrest_1",
  "rules": [
    {
      "ruleId": "cd2218f6-e4d2-4ad4-9b15-3396e4336064",
      "id": "MAIN",
      "type": "tripwire",
      "ruleType": "flowrate",
      "timeInterval": 1,
      "countThreshold": 10,
      "direction": "entry"
    },
    {
      "ruleId": "6f12fd2e-42eb-41aa-b221-44c1368b747f",
      "id": "MAIN",
      "type": "tripwire",
      "ruleType": "flowrate",
      "timeInterval": 1,
      "countThreshold": 2,
      "direction": "exit"
    }
  ]
}

Mandatory query parameters#

ruleId

description: Unique ID for this alert rule. This should be unique across all alert rules

type: string

example: UUID e.g cd2218f6-e4d2-4ad4-9b15-3396e4336064

id

description: tripwire line for which Tripwire alert rule is being specified.

type: string

example: id: MAIN

type

description: Type of analytics module this alert relates to. Fixed value ‘tripwire’

type: string

example: tripwire

timeInterval

description: Time window. Specified in seconds.

type: integer

example: timeInterval: 10

countThreshold

description: Number of crossings.

type: integer

example: countThreshold: 10

ruleType

description: Type of alert rule. Fixed value ‘flowrate’

type: string

value: flowrate

direction

description: Directionality for the alert rule. Does it rule refer to objects crossing in the direction of entry (entry) or on the opposite direction (entry)

type: string

enum: One of entry/exit

example: exit

Optional rule parameters#

name

description: User friendly name for the alert rule. For display purpose on the client side

type: string

example: “Over crowding scenario rule”

Note: Will need to set User-Type=Admin in the HTTP header of the HTTP POST request.

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

403: Authorization error. User-Type header missing. Must be present with Admin as value 500: Internal server error

Increment Alert Type#

Alerts based on countThreshold of object entry/exit crossing the tripwire line within timeInterval seconds.

HTTP POST

/api/v2/config/rule/alerts/tripwire

{
  "sensorId": "Amcrest_1",
  "rules": [
    {
      "ruleId": "fb298ea4-30aa-4085-b860-42e37c5bf8d1",
      "id": "MAIN",
      "type": "tripwire",
      "ruleType": "increment",
      "timeInterval": 5,
      "countThreshold": 15,
      "direction": "entry"
    },
    {
      "ruleId": "9c5632af-ba68-46bc-a997-858bdadc6856",
      "id": "MAIN",
      "type": "tripwire",
      "ruleType": "increment",
      "timeInterval": 5,
      "countThreshold": 10,
      "direction": "exit"
    }
  ]
}

Mandatory query parameters#

ruleId

description: Unique ID for this alert rule. This should be unique across all alert rules

type: string

example: UUID e.g fb298ea4-30aa-4085-b860-42e37c5bf8d1

id

description: Tripwire Id for which alert rule is being specified.

type: string

example: id: MAIN

type

description: Type of analytics module. Fixed value ‘tripwire’

type: string

value: tripwire

ruleType

description: Type of alert rule. Fixed value ‘increment’

type: string

value: increment

timeInterval

description: Time window. Specified in seconds.

type: integer

example: timeInterval: 10

countThreshold

description: Number of alert counts.

type: integer

example: countThreshold: 10

direction

description: Directionality for the alert rule. Does it rule refer to objects crossing in the direction of entry (entry) or on the opposite direction (entry)

type: string

enum: One of entry/exit

example: exit

Optional rule parameters#

name

description: User friendly name for the alert rule. For display purpose on the client side

type: string

example: “Over crowding scenario rule”

Note: You will need to set User-Type=Admin in the HTTP header of the HTTP POST request.

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

403: Authorization error. User-Type header missing. Must be present with Admin as value 500: Internal server error

Delete Tripwire alert rule#

HTTP DELETE

/api/v2/config/rule/alerts/tripwire?sensorId=Amcrest_1&tripwireId=MAIN&ruleId=fb298ea4-30aa-4085-b860-42e37c5bf8d1

Mandatory query parameters#

sensorId

description: Sensor for which Tripwire alert needs to be deleted.

type: string

example: sensorId=Amcrest_11

tripwireId

description: id of the tripwire for which this alert rule is to be deleted

type: string

example: id=MAIN

ruleId

description: Unique ruleId of the Alert rule which is to be deleted

type: string

example: fb298ea4-30aa-4085-b860-42e37c5bf8d1

Note: You will need to set User-Type: Admin in the HTTP header of the HTTP DEL request.

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

403: Authorization error. User-Type header missing. Must be present with Admin as value 422: No alert rule present for the specified sensorId, tripwireId and ruleId 500: Internal server error

Retrieve Tripwire alerts#

Alerts can be retrieved using the family of APIs which has filtering for sensor, Tripwire Line, timeranges with optional support for pagination.

All Tripwire Alerts for a specific sensor for time range#

HTTP GET

/api/v2/alerts/tripwire?sensorId=Amcrest_1&fromTimestamp=2021-09-16T06:06:00.000Z&toTimestamp=2021-09-16T06:07:00.000Z

Response:#

{
  "alerts": [
        {
            "count": 10,
            "description": "10 people exited tripwire",
            "duration": 0.734,
            "endTimestamp": "2021-09-16T06:07:00.534Z",
            "id": "unique-alert-id",
            "ruleType": "increment",
            "ruleId": "fb298ea4-30aa-4085-b860-42e37c5bf8d1",
            "sensorId": "Amcrest_1",
            "startTimestamp": "2021-09-16T06:06:59.800Z",
            "type": "tripwire",
            "direction": "entry",
            "directionName": "Inside the room",
            "attributes": [
                {
                  "name": "tripwireId",
                  "value": "door1"
                },
                {
                  "name": "tripwireName",
                  "value": "Main Door"
                },
                {
                  "name": "directionName",
                  "value": "Inside the room"
                },
                {
                  "name": "direction",
                  "value": "entry"
                },
                {
                  "name": "objects",
                  "value": [
                     {
                           "id": "1186",
                           "type": "Person"
                     }
                  ]
               }
            ],
        },
        {
            "count": 2,
            "description": "flowrate exceeds 2 ppl/s in 5 second window",
            "duration": 0.734,
            "endTimestamp": "2021-09-16T06:07:00.534Z",
            "id": "unique-alert-id",
            "ruleId": "fb298ea4-30aa-4085-b860-42e37c5bf8d1",
            "ruleType": "flowrate",
            "sensorId": "Amcrest_1",
            "startTimestamp": "2021-09-16T06:06:59.800Z",
            "type": "tripwire",
            "direction": "exit",
            "directionName": "Out of the room",
            "attributes": [
                {
                  "name": "tripwireId",
                  "value": "door1"
                },
                {
                  "name": "tripwireName",
                  "value": "Main Door"
                },
                {
                  "name": "directionName",
                  "value": "Out of the room"
                },
                {
                  "name": "direction",
                  "value": "exit"
                }
            ],
        }
    ]
}

Mandatory query parameters#

sensorId

description: Sensor for which Tripwire alerts need to be returned.

type: string

example: sensorId=Amcrest_11

fromTimestamp

description: lower bound of the timestamp for which tripwire alert needs to be returned

type: UTC / GMT timestamp string

example: 2020-10-30T20:00:00.000Z

toTimestamp

description: Upper bound of timestamp for which tripwire alert needs to be returned.If Not specified defaults to UTC.NOW on the server

type: UTC / GMT timestamp string

example: 2020-10-30T20:05:00.000Z

Optional query parameters#

limit

description: Max number of alerts to be returned

type: integer

It follows Time based simple pagination. Get 10 (limit) alerts which occurred b/w 2021-09-16T06:06:00.000Z (fromTimestamp) and 2021-09-16T06:07:00.000Z (endTimestamp). Criteria is that endTimestamp > fromTimestamp

Response body attributes#

Alerts of type increment also has in it’s attributes section the list of objects which resulted in those alerts. Each object is represented by it’s id and type. e.g id=100, type=Person.

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

422: No Tripwire alerts found for the requested sensorId,tripwireId and time range 500: Internal server error

Example#

/api/v2/alerts/tripwire?sensorId=Amcrest_1&fromTimestamp=2021-09-16T06:06:00.000Z&toTimestamp=2021-09-16T06:07:00.000Z&limit=10

Delete tripwires configuration#

HTTP DELETE

/api/v2/config/tripwire?sensorId=Amcrest_1&tripwireId=MAIN

Mandatory query parameters#

sensorId

description: Sensor for which Tripwire config needs to be deleted.

type: string

example: sensorId=Amcrest_11

tripwireId

description: tripwire line for which Tripwire config needs to be returned.

type: string

example: tripwireId=MAIN

Note

You will need to set User-Type: Admin in the HTTP header of the HTTP DELETE request.

Error Response#

Response body: See Error response body definition at the end of the page.

HTTP Status codes:

403: Authorization error. User-Type header missing. Must be present with Admin as value 422: No Tripwire configuration found for the specified sensorId and tripwireId 500: Internal server error

Error Response body:#

Error response for all API is JSON object with following attributes.

{
   "detail": "#Detailed error string"
}