"swagger": "2.0",
"info": {
"title": "PM Subscription Handler Service",
- "version": "1.1.0",
+ "version": "2.0.0",
"description": "PM subscription handler enables control of performance management jobs on network functions in ONAP"
},
+ "consumes": [
+ "application/json"
+ ],
"produces": [
"application/json"
],
"basePath": "/",
"schemes": [
- "https"
+ "https",
+ "http"
],
"paths": {
- "/subscriptions": {
- "get": {
- "description": "Get all defined Subscriptions and their related Network Functions from ONAP.",
- "operationId": "mod.api.controller.get_all_sub_to_nf_relations",
- "responses": {
- "200": {
- "description": "OK; Array of subscriptions are returned as an object",
- "schema": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "subscription_name": {
- "type": "string",
- "description": "Name of the Subscription"
- },
- "subscription_status": {
- "type": "string",
- "description": "Status of the Subscription"
- },
- "network_functions": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "nf_name": {
- "type": "string",
- "description": "Name of the Network Function"
- },
- "nf_sub_status": {
- "type": "string",
- "description": "Status of the Subscription on the Network Function"
- },
- "orchestration_status": {
- "type": "string",
- "description": "Orchestration status of the Network Function"
- }
- }
- }
- }
- }
- }
- }
- },
- "401": {
- "description": "Unauthorized"
- },
- "403": {
- "description": "Forbidden"
- },
- "404": {
- "description": "there are no subscriptions defined"
- }
- }
- }
- },
"/healthcheck": {
"get": {
"operationId": "mod.api.controller.status",
}
},
"503": {
- "description": "the pmsh service is unavailable"
+ "description": "The PMSH service is unavailable"
+ }
+ }
+ }
+ },
+ "/subscription": {
+ "post": {
+ "tags": [
+ "Subscription"
+ ],
+ "description": "Create a PM Subscription",
+ "operationId": "mod.api.controller.post_subscription",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/subscription"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Successfully created PM Subscription"
+ },
+ "400": {
+ "description": "Invalid input"
+ },
+ "409": {
+ "description": "Duplicate data"
+ }
+ }
+ },
+ "get": {
+ "description": "Get all the subscriptions from PMSH.",
+ "operationId": "mod.api.controller.get_subscriptions",
+ "tags": [
+ "Subscription"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK; Array of subscriptions are returned else empty if not found",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/subscription"
+ }
+ }
+ },
+ "500": {
+ "description": "Exception occurred while querying database"
+ }
+ }
+ }
+ },
+ "/subscription/{subscription_name}": {
+ "get": {
+ "description": "Get the Subscription from PMSH specified by Name",
+ "operationId": "mod.api.controller.get_subscription_by_name",
+ "tags": [
+ "Subscription"
+ ],
+ "parameters": [
+ {
+ "name": "subscription_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the subscription",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK; Requested Subscription was returned",
+ "schema": {
+ "$ref": "#/definitions/subscription"
+ }
+ },
+ "404": {
+ "description": "Subscription with specified name not found"
+ },
+ "500": {
+ "description": "Exception occurred while querying database"
+ }
+ }
+ },
+ "delete": {
+ "description": "Deletes the Subscription from PMSH specified by Name",
+ "operationId": "mod.api.controller.delete_subscription_by_name",
+ "tags": [
+ "Subscription"
+ ],
+ "parameters": [
+ {
+ "name": "subscription_name",
+ "in": "path",
+ "required": true,
+ "description": "The name of the subscription to delete",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successfully deleted the subscription and returns NO Content"
+ },
+ "404": {
+ "description": "Subscription with the specified name not found"
+ },
+ "409": {
+ "description": "Subscription could not be deleted as it contains measurement groups with state UNLOCKED OR state change to LOCKED was under process"
+ },
+ "500": {
+ "description": "Exception occurred on the server"
+ }
+ }
+ }
+ },
+ "/subscription/{subscription_name}/nfFilter": {
+ "put": {
+ "description": "Update nfFilter for",
+ "tags": [
+ "Subscription"
+ ],
+ "parameters": [
+ {
+ "name": "subscription_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the subscription",
+ "type": "string"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/nfFilter"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Successfully updated filter"
+ },
+ "400": {
+ "description": "Invalid input"
+ },
+ "409": {
+ "description": "Duplicate data"
+ }
+ }
+ }
+ },
+ "/subscription/{subscription_name}/measurementGroups/{measurement_group_name}": {
+ "get": {
+ "description": "Get the measurement group and associated network functions from PMSH by using sub name and meas group name",
+ "operationId": "mod.api.controller.get_meas_group_with_nfs",
+ "tags": [
+ "measurement group"
+ ],
+ "parameters": [
+ {
+ "name": "subscription_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the subscription",
+ "type": "string"
+ },
+ {
+ "name": "measurement_group_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the measurement group name",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK; Received requested measurement group with associated NF's",
+ "schema": {
+ "$ref": "#/definitions/measGroupWithNFs"
+ }
+ },
+ "404": {
+ "description": "Measurement group with specified name not found"
+ },
+ "500": {
+ "description": "Exception occurred while querying database"
+ }
+ }
+ },
+ "post": {
+ "description": "Create a measurement group",
+ "tags": [
+ "measurement group"
+ ],
+ "parameters": [
+ {
+ "name": "subscription_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the subscription",
+ "type": "string"
+ },
+ {
+ "name": "measurement_group_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the measurement group name",
+ "type": "string"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/measurementGroup"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Successfully created measurement group"
+ },
+ "400": {
+ "description": "Invalid input"
+ },
+ "409": {
+ "description": "Duplicate data"
+ }
+ }
+ },
+ "delete": {
+ "description": "Delete a measurement group",
+ "tags": [
+ "measurement group"
+ ],
+ "parameters": [
+ {
+ "name": "subscription_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the subscription",
+ "type": "string"
+ },
+ {
+ "name": "measurement_group_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the measurement group name",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successfully deleted the measurement group and returns NO Content"
+ },
+ "404": {
+ "description": "Measurement group with the specified name not found"
+ },
+ "409": {
+ "description": "Measurement not deleted because state UNLOCKED OR state change to LOCKED was under process"
+ },
+ "500": {
+ "description": "Exception occurred on the server"
+ }
+ }
+ }
+ },
+ "/subscription/{subscription_name}/measurementGroups/{measurement_group_name}/{administrativeState}": {
+ "put": {
+ "description": "Update administrative state for a measurement group",
+ "tags": [
+ "measurement group"
+ ],
+ "parameters": [
+ {
+ "name": "subscription_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the subscription",
+ "type": "string"
+ },
+ {
+ "name": "measurement_group_name",
+ "in": "path",
+ "required": true,
+ "description": "Name of the measurement group name",
+ "type": "string"
+ },
+ {
+ "name": "administrativeState",
+ "in": "path",
+ "required": true,
+ "description": "New administrative state of measurement group",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Successfully updated administrative state"
+ },
+ "400": {
+ "description": "Invalid input"
+ },
+ "409": {
+ "description": "Duplicate data"
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "subscription": {
+ "type": "object",
+ "properties": {
+ "subscription": {
+ "type": "object",
+ "properties": {
+ "subscriptionName": {
+ "type": "string"
+ },
+ "operationalPolicyName": {
+ "type": "string"
+ },
+ "controlLoopName": {
+ "type": "string"
+ },
+ "nfFilter": {
+ "$ref": "#/definitions/nfFilter"
+ },
+ "measurementGroups": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/measurementGroup"
+ }
+ }
+ },
+ "required": [
+ "subscriptionName",
+ "operationalPolicyName",
+ "nfFilter",
+ "measurementGroups"
+ ]
+ }
+ },
+ "required": [
+ "subscription"
+ ]
+ },
+ "nfFilter": {
+ "type": "object",
+ "description": "At least one valid filter value within nfFilter is required",
+ "additionalProperties": false,
+ "properties": {
+ "nfNames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "modelInvariantIDs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "modelVersionIDs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "modelNames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "nfNames",
+ "modelInvariantIDs",
+ "modelVersionIDs",
+ "modelNames"
+ ]
+ },
+ "measurementGroup": {
+ "type": "object",
+ "properties": {
+ "measurementGroup": {
+ "type": "object",
+ "properties": {
+ "measurementGroupName": {
+ "type": "string"
+ },
+ "fileBasedGP": {
+ "type": "integer"
+ },
+ "fileLocation": {
+ "type": "string"
+ },
+ "administrativeState": {
+ "type": "string",
+ "enum": [
+ "LOCKED",
+ "UNLOCKED"
+ ]
+ },
+ "measurementTypes": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/measurementType"
+ }
+ },
+ "managedObjectDNsBasic": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/managedObjectDNs"
+ }
+ }
+ },
+ "allOf": [
+ {
+ "required": [
+ "measurementGroupName",
+ "fileBasedGP",
+ "fileLocation",
+ "administrativeState",
+ "measurementTypes",
+ "managedObjectDNsBasic"
+ ]
+ }
+ ]
+ }
+ },
+ "required": [
+ "measurementGroup"
+ ]
+ },
+ "measurementType": {
+ "type": "object",
+ "properties": {
+ "measurementType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "measurementType"
+ ]
+ },
+ "managedObjectDNs": {
+ "type": "object",
+ "properties": {
+ "DN": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "DN"
+ ]
+ },
+ "measGroupWithNFs": {
+ "type": "object",
+ "properties": {
+ "subscriptionName": {
+ "type": "string"
+ },
+ "measurementGroupName": {
+ "type": "string"
+ },
+ "administrativeState": {
+ "type": "string",
+ "enum": [
+ "LOCKED",
+ "UNLOCKED"
+ ]
+ },
+ "fileBasedGP": {
+ "type": "integer"
+ },
+ "fileLocation": {
+ "type": "string"
+ },
+ "measurementTypes": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/measurementType"
+ }
+ },
+ "managedObjectDNsBasic": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/managedObjectDNs"
+ }
+ },
+ "network_functions": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "nfName": {
+ "type": "string",
+ "description": "Name of the Network Function"
+ },
+ "ipv4Address": {
+ "type": "string",
+ "description": "Address of the IPV4"
+ },
+ "ipv6Address": {
+ "type": "string",
+ "description": "Address of the IPV6"
+ },
+ "nfMgStatus": {
+ "type": "string",
+ "description": "status of network function for one meas group"
+ },
+ "modelInvariantId": {
+ "type": "string",
+ "description": "ID of the model invariant"
+ },
+ "modelVersionId": {
+ "type": "string",
+ "description": "ID of the model version"
+ },
+ "modelName": {
+ "type": "string",
+ "description": "Name of the model"
+ },
+ "sdncModelName": {
+ "type": "string",
+ "description": "Name of the sdnc model"
+ },
+ "sdncModelVersion": {
+ "type": "string",
+ "description": "Version of the sdnc model"
+ }
+ }
}
}
}
}
}
-}
\ No newline at end of file
+}