-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Jack Ding <[email protected]>
- Loading branch information
Showing
3 changed files
with
280 additions
and
213 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,266 @@ | ||
# Rest API | ||
[![go-doc](https://godoc.org/github.com/redhat-cne/rest-api?status.svg)](https://godoc.org/github.com/redhat-cne/rest-api) | ||
[![Go Report Card](https://goreportcard.com/badge/github.com/redhat-cne/rest-api)](https://goreportcard.com/report/github.com/redhat-cne/rest-api) | ||
[![LICENSE](https://img.shields.io/github/license/redhat-cne/rest-api.svg)](https://github.com/redhat-cne/rest-api/blob/main/LICENSE) | ||
|
||
Available Routes | ||
|
||
```html | ||
|
||
POST /api/ocloudNotifications/v2/subscriptions | ||
GET /api/ocloudNotifications/v2/subscriptions | ||
GET /api/ocloudNotifications/v2/subscriptions/{subscription_id} | ||
DELETE /api/ocloudNotifications/v2/subscriptions/{subscription_id} | ||
GET api/ocloudnotifications/v2/{resource_address}/CurrentState | ||
GET /api/ocloudNotifications/v2/health | ||
GET /api/ocloudNotifications/v2/publishers | ||
DELETE /api/ocloudNotifications/v2/subscriptions | ||
``` | ||
|
||
## Pub/Sub Rest API | ||
|
||
Rest API spec . | ||
|
||
### Version: 1.0.0 | ||
|
||
|
||
### /publishers/ | ||
|
||
#### POST | ||
##### Summary | ||
|
||
Creates a new publisher. | ||
|
||
##### Description | ||
|
||
If publisher creation is success(or if already exists), publisher will be returned with Created (201). | ||
|
||
##### Parameters | ||
|
||
| Name | Located in | Description | Required | Schema | | ||
| ---- | ---------- | ----------- | -------- | ---- | | ||
| publisher | body | publisher to add to the list of pub | [PubSub](#pubsub) | | ||
|
||
##### Responses | ||
|
||
| Code | Description | Schema | | ||
| ---- | ----------- | ------ | | ||
| 201 | publisher/subscription data model | [PubSub](#pubsub) | | ||
| 400 | Error Bad Request | object | | ||
|
||
### /subscriptions/ | ||
|
||
#### POST | ||
##### Summary | ||
|
||
Creates a new subscription. | ||
|
||
##### Description | ||
|
||
If subscription creation is success(or if already exists), subscription will be returned with Created (201). | ||
|
||
##### Parameters | ||
|
||
| Name | Located in | Description | Required | Schema | | ||
| ---- | ---------- | ----------- | -------- | ---- | | ||
| subscription | body | subscription to add to the list of subscriptions | yes | [PubSub](#pubsub) | | ||
|
||
##### Responses | ||
|
||
| Code | Description | Schema | | ||
| ---- | ----------- | ------ | | ||
| 201 | publisher/subscription data model | [PubSub](#pubsub) | | ||
| 400 | Error Bad Request | object | | ||
|
||
|
||
|
||
### /create/event/ | ||
|
||
#### POST | ||
##### Summary | ||
|
||
Creates a new event. | ||
|
||
##### Description | ||
|
||
If publisher is present for the event, then event creation is success and be returned with Accepted (202). | ||
|
||
##### Parameters | ||
|
||
| Name | Located in | Description | Required | Schema | | ||
| ---- | ---------- | ----------- | -------- | ---- | | ||
| event | body | event along with publisher id | Yes | [Event](#event) | | ||
|
||
##### Responses | ||
|
||
| Code | Description | Schema | | ||
| ---- | ----------- | ------ | | ||
| 202 | Accepted | object | | ||
| 400 | Error Bad Request | object | | ||
|
||
### /subscriptions/status/{subscriptionid} | ||
|
||
#### PUT | ||
##### Summary | ||
|
||
Creates a new status ping request. | ||
|
||
##### Description | ||
|
||
If a subscription is present for the request, then status request is success and be returned with Accepted (202). | ||
|
||
##### Parameters | ||
|
||
| Name | Located in | Description | Required | Schema | | ||
| ---- | ---------- | ----------- | -------- | ---- | | ||
| subscriptionid | request | subscription id | Yes | | | ||
|
||
##### Responses | ||
|
||
| Code | Description | Schema | | ||
| ---- | ----------- | ------ | | ||
| 202 | Accepted | object | | ||
| 400 | Error Bad Request | object | | ||
|
||
### Models | ||
|
||
#### Data | ||
|
||
Data ... cloud native events' data Json payload is as follows, | ||
```json | ||
|
||
{ | ||
"version": "v1.0", | ||
"values": [{ | ||
"resource": "/cluster/node/ptp", | ||
"dataType": "notification", | ||
"valueType": "enumeration", | ||
"value": "ACQUIRING-SYNC" | ||
}, { | ||
"resource": "/cluster/node/clock", | ||
"dataType": "metric", | ||
"valueType": "decimal64.3", | ||
"value": 100.3 | ||
}] | ||
} | ||
``` | ||
|
||
| Name | Type | Description | Required | | ||
| ---- | ---- | ----------- | -------- | | ||
| values | [ [DataValue](#datavalue) ] | | Yes | | ||
| version | string | | Yes | | ||
|
||
#### DataType | ||
|
||
| Name | Type | Description | Required | | ||
| ---- | ---- | ----------- | -------- | | ||
| DataType | string | | Yes | | ||
|
||
#### DataValue | ||
|
||
DataValue Json payload is as follows, | ||
```json | ||
|
||
{ | ||
"resource": "/cluster/node/ptp", | ||
"dataType": "notification", | ||
"valueType": "enumeration", | ||
"value": "ACQUIRING-SYNC" | ||
} | ||
``` | ||
|
||
| Name | Type | Description | Required | | ||
| ---- | ---- | ----------- | -------- | | ||
| dataType | [DataType](#datatype) | | yes | | ||
| resource | string | | yes | | ||
| value | object | | yes | | ||
| valueType | [ValueType](#valuetype) | | yes | | ||
|
||
#### Event | ||
|
||
Event Json payload is as follows, | ||
```json | ||
|
||
{ | ||
"id": "5ce55d17-9234-4fee-a589-d0f10cb32b8e", | ||
"type": "event.synchronization-state-chang", | ||
"time": "2021-02-05T17:31:00Z", | ||
"data": { | ||
"version": "v1.0", | ||
"values": [{ | ||
"resource": "/cluster/node/ptp", | ||
"dataType": "notification", | ||
"valueType": "enumeration", | ||
"value": "ACQUIRING-SYNC" | ||
}, { | ||
"resource": "/cluster/node/clock", | ||
"dataType": "metric", | ||
"valueType": "decimal64.3", | ||
"value": 100.3 | ||
}] | ||
} | ||
} | ||
``` | ||
Event request model | ||
|
||
| Name | Type | Description | Required | | ||
| ---- | ---- | ----------- | -------- | | ||
| data | [Data](#data) | | yes | | ||
| dataContentType | string | DataContentType - the Data content type +required | yes | | ||
| dataSchema | [URI](#uri) | | No | | ||
| id | string | ID of the event; must be non-empty and unique within the scope of the producer. +required | yes | | ||
| time | [Timestamp](#timestamp) | | yes | | ||
| type | string | Type - The type of the occurrence which has happened. +required | yes | | ||
|
||
#### PubSub | ||
PubSub Json request payload is as follows, | ||
```json | ||
|
||
{ | ||
"id": "789be75d-7ac3-472e-bbbc-6d62878aad4a", | ||
"endpointUri": "http://localhost:9090/ack/event", | ||
"uriLocation": "<http://localhost:8080/api/ocloudNotifications/v2/publishers/{publisherid>}", | ||
"resource": "/east-edge-10/vdu3/o-ran-sync/sync-group/sync-status/sync-state" | ||
} | ||
``` | ||
PubSub request model | ||
|
||
| Name | Type | Description | Required | | ||
| ---- | ---- | ----------- | -------- | | ||
| endpointUri | [URI](#uri) | | yes | | ||
| resource | string | Resource - The type of the Resource. +required | yes | | ||
|
||
|
||
#### Timestamp | ||
|
||
Timestamp wraps time.Time to normalize the time layout to RFC3339. It is | ||
intended to enforce compliance with the Cloud Native events spec for their | ||
definition of Timestamp. Custom marshal methods are implemented to ensure | ||
the outbound Timestamp is a string in the RFC3339 layout. | ||
|
||
| Name | Type | Description | Required | | ||
| ---- | ---- | ----------- | -------- | | ||
| Timestamp | object | Timestamp wraps time.Time to normalize the time layout to RFC3339. It is intended to enforce compliance with the Cloud Native events spec for their definition of Timestamp. Custom marshal methods are implemented to ensure the outbound Timestamp is a string in the RFC3339 layout. | | | ||
|
||
#### URI | ||
|
||
URI is a wrapper to url.URL. It is intended to enforce compliance with | ||
the Cloud Native Events spec for their definition of URI. Custom | ||
marshal methods are implemented to ensure the outbound URI object | ||
is a flat string. | ||
|
||
|
||
#### ValueType | ||
|
||
| Name | Type | Description | Required | | ||
| ---- | ---- | ----------- | -------- | | ||
| ValueType | ENUM | ENUMERATION,DECIMAL | yes | | ||
|
||
|
||
## Collecting metrics with Prometheus | ||
Cloud native events rest API comes with following metrics collectors . | ||
1. Number of events published by the rest api. | ||
2. Number of active subscriptions. | ||
3. Number of active publishers. | ||
|
||
[Metrics details ](docs/metrics.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,9 +20,8 @@ | |
// | ||
// Schemes: http, https | ||
// Host: localhost:8089 | ||
// basePath: /api/ocloudNotifications/v1 | ||
// Version: 1.0.0 | ||
// Contact: Aneesh Puttur<[email protected]> | ||
// BasePath: /api/ocloudNotifications/v2 | ||
// Version: 2.0.0 | ||
// | ||
// Consumes: | ||
// - application/json | ||
|
@@ -265,6 +264,11 @@ func (s *Server) Start() { | |
See note below. | ||
404 Subscription resources are not available (not created). | ||
*/ | ||
// swagger:route GET /subscriptions | ||
// Get a list of subscription object(s) and their associated properties. | ||
// responses: | ||
// 200: Returns the subscription resources and their associated properties that already exist. | ||
// 400: Bad request by the client. | ||
api.HandleFunc("/subscriptions", s.getSubscriptions).Methods(http.MethodGet) | ||
//publishers create publisher and send it to a channel that is shared by middleware to process | ||
// swagger:operation GET /publishers/ publishers getPublishers | ||
|
Oops, something went wrong.