[PMSH] Finalise API 25/126725/2
authoregernug <gerard.nugent@est.tech>
Mon, 24 Jan 2022 13:46:32 +0000 (13:46 +0000)
committeregernug <gerard.nugent@est.tech>
Tue, 25 Jan 2022 10:14:53 +0000 (10:14 +0000)
Finalised API for release J

Issue-ID: DCAEGEN2-3061

Signed-off-by: egernug <gerard.nugent@est.tech>
Change-Id: I54c13d4d1a1b5576b963f94b690b70d913aef4b8

docs/sections/apis/pmsh_swagger.json
docs/sections/apis/pmsh_swagger.yml

index 2a6624e..6295728 100644 (file)
@@ -5,84 +5,23 @@
     "version": "2.0.0",
     "description": "PM subscription handler enables control of performance management jobs on network functions in ONAP"
   },
-  "produces": [
+  "consumes": [
     "application/json"
   ],
-  "basePath": "/pmsh",
-  "tags": [
-    {
-      "name": "Existing API",
-      "description": "Existing API before Public API work"
-    }
+  "produces": [
+    "application/json"
   ],
+  "basePath": "/",
   "schemes": [
-    "https"
+    "https",
+    "http"
   ],
   "paths": {
-    "/v1/subscriptions": {
-      "get": {
-        "tags": [
-          "Existing API"
-        ],
-        "description": "Get all defined subscription and their related Network Functions from ONAP.",
-        "operationId": "mod.api.controller.get_all_sub_to_nf_relations",
-        "responses": {
-          "200": {
-            "description": "OK; Array of subscription 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 subscription defined"
-          }
-        }
-      }
-    },
     "/healthcheck": {
       "get": {
         "operationId": "mod.api.controller.status",
         "tags": [
-          "Existing API"
+          "HealthCheck"
         ],
         "description": "This is the health check endpoint. If this returns a 200, the server is alive.",
         "responses": {
             }
           },
           "503": {
-            "description": "the pmsh service is unavailable"
+            "description": "The PMSH service is unavailable"
           }
         }
       }
     "/subscription": {
       "post": {
         "tags": [
-          "Subscriptions"
+          "Subscription"
         ],
         "description": "Create a PM Subscription",
-        "operationId": "mod.api.controller.create_subscription",
-        "consumes": [
-          "application/json"
-        ],
-        "produces": [
-          "application/json"
-        ],
+        "operationId": "mod.api.controller.post_subscription",
         "parameters": [
           {
             "in": "body",
             "name": "body",
-            "description": "Subscription object to be created",
             "required": true,
             "schema": {
-              "type": "object",
-              "properties": {
-                "subscription": {
-                  "type": "object",
-                  "properties": {
-                    "subscriptionName": {
-                      "type": "string"
-                    },
-                    "administrativeState": {
-                      "allOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "enum": [
-                            "UNLOCKED",
-                            "LOCKED",
-                            "FILTERING"
-                          ]
-                        }
-                      ]
-                    },
-                    "fileBasedGP": {
-                      "type": "integer"
-                    },
-                    "fileLocation": {
-                      "type": "string"
-                    },
-                    "nfFilter": {
-                      "type": "object",
-                      "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"
-                          }
-                        }
-                      },
-                      "additionalProperties": false
-                    },
-                    "measurementGroups": {
-                      "type": "array",
-                      "minItems": 1,
-                      "items": {
-                        "type": "object",
-                        "properties": {
-                          "measurementGroup": {
-                            "type": "object",
-                            "properties": {
-                              "measurementTypes": {
-                                "type": "array",
-                                "minItems": 1,
-                                "items": {
-                                  "type": "object",
-                                  "properties": {
-                                    "measurementType": {
-                                      "type": "string"
-                                    }
-                                  },
-                                  "required": [
-                                    "measurementType"
-                                  ]
-                                }
-                              },
-                              "managedObjectDNsBasic": {
-                                "type": "array",
-                                "minItems": 1,
-                                "items": {
-                                  "type": "object",
-                                  "properties": {
-                                    "DN": {
-                                      "type": "string"
-                                    }
-                                  },
-                                  "required": [
-                                    "DN"
-                                  ]
-                                }
-                              }
-                            },
-                            "required": [
-                              "measurementTypes",
-                              "managedObjectDNsBasic"
-                            ]
-                          }
-                        },
-                        "required": [
-                          "measurementGroup"
-                        ]
-                      }
-                    }
-                  },
-                  "required": [
-                    "subscriptionName",
-                    "administrativeState",
-                    "fileBasedGP",
-                    "fileLocation",
-                    "nfFilter",
-                    "measurementGroups"
-                  ]
-                }
-              }
+              "$ref": "#/definitions/subscription"
             }
           }
         ],
         "responses": {
           "201": {
-            "description": "successfully created PM Subscription"
+            "description": "Successfully created PM Subscription"
           },
-          "405": {
+          "400": {
             "description": "Invalid input"
+          },
+          "409": {
+            "description": "Duplicate data"
           }
         }
-      }
-    },
-    "/subscription/{subscriptionName}": {
+      },
       "get": {
+        "description": "Get all the subscriptions from PMSH.",
+        "operationId": "mod.api.controller.get_subscriptions",
         "tags": [
-          "Subscriptions"
-        ],
-        "description": "Show the subscription",
-        "operationId": "mod.api.controller.get_subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
+          "Subscription"
         ],
         "responses": {
           "200": {
-            "description": "Requested Subscription returned",
+            "description": "OK; Array of subscriptions are returned else empty if not found",
             "schema": {
-              "type": "object",
-              "properties": {
-                "subscription": {
-                  "type": "object",
-                  "properties": {
-                    "subscriptionName": {
-                      "type": "string"
-                    },
-                    "administrativeState": {
-                      "allOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "enum": [
-                            "UNLOCKED",
-                            "LOCKED",
-                            "FILTERING"
-                          ]
-                        }
-                      ]
-                    },
-                    "fileBasedGP": {
-                      "type": "integer"
-                    },
-                    "fileLocation": {
-                      "type": "string"
-                    },
-                    "nfFilter": {
-                      "type": "object",
-                      "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"
-                          }
-                        }
-                      },
-                      "additionalProperties": false
-                    },
-                    "measurementGroups": {
-                      "type": "array",
-                      "minItems": 1,
-                      "items": {
-                        "type": "object",
-                        "properties": {
-                          "measurementGroup": {
-                            "type": "object",
-                            "properties": {
-                              "measurementTypes": {
-                                "type": "array",
-                                "minItems": 1,
-                                "items": {
-                                  "type": "object",
-                                  "properties": {
-                                    "measurementType": {
-                                      "type": "string"
-                                    }
-                                  }
-                                }
-                              },
-                              "managedObjectDNsBasic": {
-                                "type": "array",
-                                "minItems": 1,
-                                "items": {
-                                  "type": "object",
-                                  "properties": {
-                                    "DN": {
-                                      "type": "string"
-                                    }
-                                  }
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/subscription"
               }
             }
           },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
+          "500": {
+            "description": "Exception occurred while querying database"
           }
         }
-      },
-      "put": {
+      }
+    },
+    "/subscription/{subscription_name}": {
+      "get": {
+        "description": "Get the Subscription from PMSH specified by Name",
+        "operationId": "mod.api.controller.get_subscription_by_name",
         "tags": [
-          "Subscriptions"
-        ],
-        "description": "This is an update for Subscription object",
-        "consumes": [
-          "application/json"
+          "Subscription"
         ],
         "parameters": [
           {
+            "name": "subscription_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "Subscription",
-            "description": "The subscription object to update",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "subscription": {
-                  "type": "object",
-                  "properties": {
-                    "subscriptionName": {
-                      "type": "string"
-                    },
-                    "administrativeState": {
-                      "type": "string",
-                      "enum": [
-                        "UNLOCKED",
-                        "LOCKED",
-                        "FILTERING"
-                      ]
-                    },
-                    "fileBasedGP": {
-                      "type": "integer"
-                    },
-                    "fileLocation": {
-                      "type": "string"
-                    },
-                    "nfFilter": {
-                      "type": "object",
-                      "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"
-                          }
-                        }
-                      }
-                    },
-                    "measurementGroups": {
-                      "type": "array",
-                      "items": {
-                        "type": "object",
-                        "properties": {
-                          "measurementGroup": {
-                            "type": "object",
-                            "properties": {
-                              "measurementTypes": {
-                                "type": "array",
-                                "items": {
-                                  "type": "object",
-                                  "properties": {
-                                    "measurementType": {
-                                      "type": "string"
-                                    }
-                                  }
-                                }
-                              },
-                              "managedObjectDNsBasic": {
-                                "type": "array",
-                                "items": {
-                                  "type": "object",
-                                  "properties": {
-                                    "DN": {
-                                      "type": "string"
-                                    }
-                                  }
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  },
-                  "required": [
-                    "subscriptionName"
-                  ]
-                }
-              },
-              "required": [
-                "subscription"
-              ]
-            }
+            "required": true,
+            "description": "Name of the subscription",
+            "type": "string"
           }
         ],
         "responses": {
-          "201": {
-            "description": "Subscription object updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
+          "200": {
+            "description": "OK; Requested Subscription was returned",
+            "schema": {
+              "$ref": "#/definitions/subscription"
+            }
           },
           "404": {
-            "description": "Subscription object not found"
+            "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": [
-          "Subscriptions"
+          "Subscription"
         ],
-        "description": "This is a delete for Subscription object",
         "parameters": [
           {
+            "name": "subscription_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
+            "required": true,
+            "description": "The name of the subscription to delete",
+            "type": "string"
           }
         ],
         "responses": {
           "204": {
-            "description": "Subscription object deleted"
+            "description": "Successfully deleted the subscription and returns NO Content"
           },
-          "401": {
-            "description": "Unauthorized"
+          "404": {
+            "description": "Subscription with the specified name not found"
           },
-          "403": {
-            "description": "Forbidden"
+          "409": {
+            "description": "Subscription could not be deleted as it contains measurement groups with state UNLOCKED OR state change to LOCKED was under process"
           },
-          "404": {
-            "description": "Subscription object not found"
+          "500": {
+            "description": "Exception occurred on the server"
           }
         }
       }
     },
-    "/subscription/{subscriptionName}/adminState": {
-      "get": {
-        "tags": [
-          "adminState"
-        ],
-        "description": "Show admin state of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested admin state returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "adminState": {
-                  "type": "string",
-                  "enum": [
-                    "UNLOCKED",
-                    "LOCKED",
-                    "FILTERING"
-                  ]
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
+    "/subscription/{subscription_name}/nfFilter": {
       "put": {
+        "description": "Update nfFilter for",
         "tags": [
-          "adminState"
-        ],
-        "description": "This is an update for a specific subscription's admin state",
-        "consumes": [
-          "application/json"
+          "Subscription"
         ],
         "parameters": [
           {
+            "name": "subscription_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
+            "required": true,
+            "description": "Name of the subscription",
+            "type": "string"
           },
           {
+            "name": "body",
             "in": "body",
-            "name": "adminState",
-            "description": "The adminState of the subscription object to update",
+            "required": true,
             "schema": {
-              "type": "object",
-              "required": [
-                "adminState"
-              ],
-              "properties": {
-                "adminState": {
-                  "type": "string",
-                  "enum": [
-                    "UNLOCKED",
-                    "LOCKED",
-                    "FILTERING"
-                  ]
-                }
-              }
+              "$ref": "#/definitions/nfFilter"
             }
           }
         ],
         "responses": {
           "201": {
-            "description": "adminState is updated"
+            "description": "Successfully updated filter"
           },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
+          "400": {
+            "description": "Invalid input"
           },
-          "404": {
-            "description": "Subscription object not found"
+          "409": {
+            "description": "Duplicate data"
           }
         }
       }
     },
-    "/subscription/{subscriptionName}/fileBasedGP": {
+    "/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": [
-          "fileBasedGP"
+          "measurement group"
         ],
-        "description": "Show the fileBasedGP of a subscription",
         "parameters": [
           {
+            "name": "subscription_name",
+            "in": "path",
+            "required": true,
+            "description": "Name of the subscription",
+            "type": "string"
+          },
+          {
+            "name": "measurement_group_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
+            "required": true,
+            "description": "Name of the measurement group name",
+            "type": "string"
           }
         ],
         "responses": {
           "200": {
-            "description": "Requested fileBasedGP returned",
+            "description": "OK; Received requested measurement group with associated NF's",
             "schema": {
-              "type": "object",
-              "properties": {
-                "fileBasedGP": {
-                  "type": "integer"
-                }
-              }
+              "$ref": "#/definitions/measGroupWithNFs"
             }
           },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
           "404": {
-            "description": "there are no subscription defined"
+            "description": "Measurement group with specified name not found"
+          },
+          "500": {
+            "description": "Exception occurred while querying database"
           }
         }
       },
-      "put": {
+      "post": {
+        "description": "Create a measurement group",
         "tags": [
-          "fileBasedGP"
-        ],
-        "description": "This is an update for a specific subscription's fileBasedGP",
-        "consumes": [
-          "application/json"
+          "measurement group"
         ],
         "parameters": [
           {
+            "name": "subscription_name",
+            "in": "path",
+            "required": true,
+            "description": "Name of the subscription",
+            "type": "string"
+          },
+          {
+            "name": "measurement_group_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
+            "required": true,
+            "description": "Name of the measurement group name",
+            "type": "string"
           },
           {
+            "name": "body",
             "in": "body",
-            "name": "fileBasedGP",
-            "description": "The fileBasedGP field of the subscription object to update",
+            "required": true,
             "schema": {
-              "type": "object",
-              "required": [
-                "fileBasedGP"
-              ],
-              "properties": {
-                "fileBasedGP": {
-                  "type": "integer"
-                }
-              }
+              "$ref": "#/definitions/measurementGroup"
             }
           }
         ],
         "responses": {
           "201": {
-            "description": "fileBasedGP is updated"
+            "description": "Successfully created measurement group"
           },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
+          "400": {
+            "description": "Invalid input"
           },
-          "404": {
-            "description": "Subscription object not found"
+          "409": {
+            "description": "Duplicate data"
           }
         }
       },
       "delete": {
+        "description": "Delete a measurement group",
         "tags": [
-          "fileBasedGP"
+          "measurement group"
         ],
-        "description": "This is a delete for fileBasedGP field on a subscription object",
         "parameters": [
           {
+            "name": "subscription_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "fileBasedGP field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
+            "required": true,
+            "description": "Name of the subscription",
+            "type": "string"
           },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      }
-    },
-    "/subscription/{subscriptionName}/fileLocation": {
-      "get": {
-        "tags": [
-          "fileLocation"
-        ],
-        "description": "Show the fileLocation of a subscription",
-        "parameters": [
           {
+            "name": "measurement_group_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
+            "required": true,
+            "description": "Name of the measurement group name",
+            "type": "string"
           }
         ],
         "responses": {
-          "200": {
-            "description": "Requested fileLocation returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "fileLocation": {
-                  "type": "string"
-                }
-              }
-            }
+          "204": {
+            "description": "Successfully deleted the measurement group and returns NO Content"
           },
-          "401": {
-            "description": "Unauthorized"
+          "404": {
+            "description": "Measurement group with the specified name not found"
           },
-          "403": {
-            "description": "Forbidden"
+          "409": {
+            "description": "Measurement  not deleted because state UNLOCKED OR state change to LOCKED was under process"
           },
-          "404": {
-            "description": "there are no subscription defined"
+          "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": [
-          "fileLocation"
-        ],
-        "description": "This is an update for a specific subscription's fileLocation",
-        "consumes": [
-          "application/json"
+          "measurement group"
         ],
         "parameters": [
           {
+            "name": "subscription_name",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
+            "required": true,
+            "description": "Name of the subscription",
+            "type": "string"
           },
           {
-            "in": "body",
-            "name": "fileLocation",
-            "description": "The fileLocation field of the subscription object to update",
-            "schema": {
-              "type": "object",
-              "required": [
-                "fileLocation"
-              ],
-              "properties": {
-                "fileBasedGP": {
-                  "type": "string"
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "fileLocation is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
+            "name": "measurement_group_name",
+            "in": "path",
+            "required": true,
+            "description": "Name of the measurement group name",
+            "type": "string"
           },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      },
-      "delete": {
-        "tags": [
-          "fileLocation"
-        ],
-        "description": "This is a delete for fileLocation field on a subscription object",
-        "parameters": [
           {
+            "name": "administrativeState",
             "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
+            "required": true,
+            "description": "New administrative state of measurement group",
+            "type": "string"
           }
         ],
         "responses": {
-          "204": {
-            "description": "fileLocation field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
+          "201": {
+            "description": "Successfully updated administrative state"
           },
-          "403": {
-            "description": "Forbidden"
+          "400": {
+            "description": "Invalid input"
           },
-          "404": {
-            "description": "Subscription object not found"
+          "409": {
+            "description": "Duplicate data"
           }
         }
       }
-    },
-    "/subscription/{subscriptionName}/nfFilter": {
-      "get": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "Show the nfFilter of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested nfFilter returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "nfFilter": {
-                  "type": "object",
-                  "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"
-                      }
-                    }
-                  }
-                }
+    }
+  },
+  "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"
               }
             }
           },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
+          "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"
           }
         }
       },
-      "put": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is an update for a specific subscription's nfFilter",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "nfFilter",
-            "description": "The nfFilter field of the subscription object to update",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "nfFilter": {
-                  "type": "object",
-                  "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"
               }
             }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "fileLocation is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      },
-      "delete": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is a delete for nfFilter field on a subscription object",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "nfFilter field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      }
-    },
-    "/subscription/{subscriptionName}/nfFilter/nfNames": {
-      "get": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "Show the nfNames of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested nfNames returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "nfNames": {
-                  "items": {
-                    "type": "string"
-                  }
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is an update for a specific subscription's nfNames",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
           },
-          {
-            "in": "body",
-            "name": "nfNames",
-            "description": "The nfNames field of nfFilter of the subscription object to update",
-            "schema": {
-              "type": "object",
+          "allOf": [
+            {
               "required": [
-                "nfNames"
-              ],
-              "properties": {
-                "nfNames": {
-                  "type": "array",
-                  "items": {
-                    "type": "string"
-                  }
-                }
-              }
+                "measurementGroupName",
+                "fileBasedGP",
+                "fileLocation",
+                "administrativeState",
+                "measurementTypes",
+                "managedObjectDNsBasic"
+              ]
             }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "nfNames is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
+          ]
         }
       },
-      "delete": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is a delete for nfNames field on a subscription object",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "nfNames field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      }
+      "required": [
+        "measurementGroup"
+      ]
     },
-    "/subscription/{subscriptionName}/nfFilter/nfinvariantModelIds": {
-      "get": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "Show the nfinvariantModelIds of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested nfinvariantModelIds returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "nfinvariantModelIds": {
-                  "items": {
-                    "type": "string"
-                  }
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is an update for a specific subscription's nfinvariantModelIds",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "nfinvariantModelIds",
-            "description": "The nfinvariantModelIds field of nfFilter of the subscription object to update",
-            "schema": {
-              "type": "object",
-              "required": [
-                "nfNames"
-              ],
-              "properties": {
-                "nfinvariantModelIds": {
-                  "type": "array",
-                  "items": {
-                    "type": "string"
-                  }
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "nfNames is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
+    "measurementType": {
+      "type": "object",
+      "properties": {
+        "measurementType": {
+          "type": "string"
         }
       },
-      "delete": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is a delete for nfinvariantModelIds field on a subscription object",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "nfinvariantModelIds field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      }
+      "required": [
+        "measurementType"
+      ]
     },
-    "/subscription/{subscriptionName}/nfFilter/modelVersionIds": {
-      "get": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "Show the modelVersionIds of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested modelVersionIds returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "modelVersionIds": {
-                  "items": {
-                    "type": "string"
-                  }
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is an update for a specific subscription's modelVersionIds",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "modelVersionIds",
-            "description": "The modelVersionIds field of nfFilter of the subscription object to update",
-            "schema": {
-              "type": "object",
-              "required": [
-                "modelVersionIds"
-              ],
-              "properties": {
-                "modelVersionIds": {
-                  "type": "array",
-                  "items": {
-                    "type": "string"
-                  }
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "modelVersionIds is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
+    "managedObjectDNs": {
+      "type": "object",
+      "properties": {
+        "DN": {
+          "type": "string"
         }
       },
-      "delete": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is a delete for modelVersionIds field on a subscription object",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "modelVersionIds field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      }
+      "required": [
+        "DN"
+      ]
     },
-    "/subscription/{subscriptionName}/nfFilter/modelNames": {
-      "get": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "Show the modelNames of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested modelNames returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "modelNames": {
-                  "items": {
-                    "type": "string"
-                  }
-                }
+    "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"
               }
             }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is an update for a specific subscription's modelNames",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "modelNames",
-            "description": "The modelNames field of nfFilter of the subscription object to update",
-            "schema": {
-              "type": "object",
-              "required": [
-                "modelNames"
-              ],
-              "properties": {
-                "modelNames": {
-                  "type": "array",
-                  "items": {
-                    "type": "string"
-                  }
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "modelNames is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      },
-      "delete": {
-        "tags": [
-          "nfFilter"
-        ],
-        "description": "This is a delete for modelNames field on a subscription object",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "modelNames field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      }
-    },
-    "/subscription/{subscriptionName}/measurementGroups": {
-      "get": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "Show the fileBasedGP of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested measurementGroups returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "measurementGroups": {
-                  "type": "array",
-                  "items": {
-                    "type": "object",
-                    "properties": {
-                      "measurementGroup": {
-                        "type": "object",
-                        "properties": {
-                          "measurementTypes": {
-                            "type": "array",
-                            "items": {
-                              "type": "object",
-                              "properties": {
-                                "measurementType": {
-                                  "type": "string"
-                                }
-                              }
-                            }
-                          },
-                          "managedObjectDNsBasic": {
-                            "type": "array",
-                            "items": {
-                              "type": "object",
-                              "properties": {
-                                "DN": {
-                                  "type": "string"
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is an update for a specific subscription's measurementGroups",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "measurementGroups",
-            "description": "The measurementGroups field of the subscription object to update",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "measurementGroups": {
-                  "type": "array",
-                  "items": {
-                    "type": "object",
-                    "properties": {
-                      "measurementGroup": {
-                        "type": "object",
-                        "properties": {
-                          "measurementTypes": {
-                            "type": "array",
-                            "items": {
-                              "type": "object",
-                              "properties": {
-                                "measurementType": {
-                                  "type": "string"
-                                }
-                              }
-                            }
-                          },
-                          "managedObjectDNsBasic": {
-                            "type": "array",
-                            "items": {
-                              "type": "object",
-                              "properties": {
-                                "DN": {
-                                  "type": "string"
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "measurementGroups is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      },
-      "delete": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is a delete for measurementGroups field on a subscription object",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "measurementGroups field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "Subscription object not found"
-          }
-        }
-      }
-    },
-    "/subscription/{subscriptionName}/measurementGroups/{measurementGroupName}": {
-      "get": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "Show a measurementGroup of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested measurementGroup returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "measurementGroup": {
-                  "type": "object",
-                  "properties": {
-                    "measurementTypes": {
-                      "type": "array",
-                      "items": {
-                        "type": "object",
-                        "properties": {
-                          "measurementType": {
-                            "type": "string"
-                          },
-                          "managedObjectDNsBasic": {
-                            "type": "array",
-                            "items": {
-                              "type": "object",
-                              "properties": {
-                                "DN": {
-                                  "type": "string"
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is an update for a specific a measurementGroup",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "measurementGroup",
-            "description": "The measurementGroup field of the subscription object to update",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "measurementGroup": {
-                  "type": "object",
-                  "properties": {
-                    "measurementTypes": {
-                      "type": "array",
-                      "items": {
-                        "type": "object",
-                        "properties": {
-                          "measurementType": {
-                            "type": "string"
-                          },
-                          "managedObjectDNsBasic": {
-                            "type": "array",
-                            "items": {
-                              "type": "object",
-                              "properties": {
-                                "DN": {
-                                  "type": "string"
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "measurementGroup is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "measurementGroup object not found"
-          }
-        }
-      },
-      "delete": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is a delete for measurementGroup field on a subscription object",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "measurementGroup field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "measurementGroup object not found"
-          }
-        }
-      }
-    },
-    "/subscription/{subscriptionName}/measurementGroups/{measurementGroupName}/measurementTypes": {
-      "get": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "Show the measurementTypes of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested measurementTypes returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "measurementTypes": {
-                  "type": "string"
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is an update for measurementType field in a specific measurementGroup",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "measurementTypes",
-            "description": "The measurementTypes field of the measurementGroup to update",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "measurementTypes": {
-                  "type": "string"
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "measurementType is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "measurementGroup object not found"
-          }
-        }
-      },
-      "delete": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is a delete for measurementType field on a measurementGroup",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "measurementGroup field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "measurementGroup object not found"
-          }
-        }
-      }
-    },
-    "/subscription/{subscriptionName}/measurementGroups/{measurementGroupName}/managedObjectDNsBasic": {
-      "get": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "Show the managedObjectDNsBasic of a subscription",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Requested managedObjectDNsBasic returned",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "managedObjectDNsBasic": {
-                  "type": "string"
-                }
-              }
-            }
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "there are no subscription defined"
-          }
-        }
-      },
-      "put": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is an update for managedObjectDNsBasic field in a specific measurementGroup",
-        "consumes": [
-          "application/json"
-        ],
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "body",
-            "name": "managedObjectDNsBasic",
-            "description": "The managedObjectDNsBasic field of the measurementGroup to update",
-            "schema": {
-              "type": "object",
-              "properties": {
-                "managedObjectDNsBasic": {
-                  "type": "string"
-                }
-              }
-            }
-          }
-        ],
-        "responses": {
-          "201": {
-            "description": "managedObjectDNsBasic is updated"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "measurementGroup object not found"
-          }
-        }
-      },
-      "delete": {
-        "tags": [
-          "measurementGroups"
-        ],
-        "description": "This is a delete for managedObjectDNsBasic field on a measurementGroup",
-        "parameters": [
-          {
-            "in": "path",
-            "name": "subscriptionName",
-            "type": "string",
-            "required": true
-          },
-          {
-            "in": "path",
-            "name": "measurementGroupName",
-            "type": "string",
-            "required": true
-          }
-        ],
-        "responses": {
-          "204": {
-            "description": "managedObjectDNsBasic field is deleted"
-          },
-          "401": {
-            "description": "Unauthorized"
-          },
-          "403": {
-            "description": "Forbidden"
-          },
-          "404": {
-            "description": "measurementGroup object not found"
           }
         }
       }
     }
   }
-}
\ No newline at end of file
+}
index 3d7c6c6..5afdd5f 100644 (file)
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-#  Copyright (C) 2020-2021 Nordix Foundation.
+#  Copyright (C) 2020-2022 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -21,63 +21,21 @@ info:
   title: PM Subscription Handler Service
   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: "/pmsh"
-tags:
-- name: "Existing API"
-  description: "Existing API before Public API work"
+basePath: "/"
 schemes:
   - https
+  - http
 # Paths supported by the server application
 paths:
-  /v1/subscriptions:
-    get:
-      tags:
-        - Existing API
-      description: >-
-        Get all defined subscription and their related Network Functions from ONAP.
-      operationId: mod.api.controller.get_all_sub_to_nf_relations
-      responses:
-        200:
-          description: OK; Array of subscription 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 subscription defined
-
   /healthcheck:
     get:
       operationId: mod.api.controller.status
       tags:
-        - "Existing API"
+        - "HealthCheck"
       description: >-
         This is the health check endpoint. If this returns a 200, the server is alive.
       responses:
@@ -91,1357 +49,383 @@ paths:
                 description: Overall health of PMSH
                 enum: [healthy, unhealthy]
         503:
-          description: the pmsh service is unavailable
+          description: The PMSH service is unavailable
 
   /subscription:
     post:
       tags:
-        - "Subscriptions"
+        - "Subscription"
       description: >-
         Create a PM Subscription
-      operationId: mod.api.controller.create_subscription
-      consumes:
-      - "application/json"
-      produces:
-      - "application/json"
-      parameters:
-      - in: "body"
-        name: "body"
-        description: "Subscription object to be created"
-        required: true
-        schema:
-          type: object
-          properties:
-            subscription:
-              type: object
-              properties:
-                subscriptionName:
-                  type: string
-                administrativeState:
-                  allOf:
-                    - type: string
-                    - enum:
-                        - UNLOCKED
-                        - LOCKED
-                        - FILTERING
-                fileBasedGP:
-                  type: integer
-                fileLocation:
-                  type: string
-                nfFilter:
-                  type: object
-                  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
-                  additionalProperties: false
-                measurementGroups:
-                  type: array
-                  minItems: 1
-                  items:
-                    type: object
-                    properties:
-                      measurementGroup:
-                        type: object
-                        properties:
-                          measurementTypes:
-                            type: array
-                            minItems: 1
-                            items:
-                              type: object
-                              properties:
-                                measurementType:
-                                  type: string
-                              required:
-                                - measurementType
-                          managedObjectDNsBasic:
-                            type: array
-                            minItems: 1
-                            items:
-                              type: object
-                              properties:
-                                DN:
-                                  type: string
-                              required:
-                                - DN
-                        required:
-                          - measurementTypes
-                          - managedObjectDNsBasic
-                    required:
-                      - measurementGroup
-              required:
-                - subscriptionName
-                - administrativeState
-                - fileBasedGP
-                - fileLocation
-                - nfFilter
-                - measurementGroups
-      responses:
-        201:
-          description: successfully created PM Subscription
-        405:
-          description: Invalid input
-
-
-  #subcriptions
-  /subscription/{subscriptionName}:
-   get:
-      tags:
-        - "Subscriptions"
-      description: >-
-        Show the subscription
-      operationId: mod.api.controller.get_subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        200:
-          description: Requested Subscription returned
-          schema:
-            type: object
-            properties:
-              subscription:
-                type: object
-                properties:
-                  subscriptionName:
-                    type: string
-                  administrativeState:
-                    allOf:
-                      - type: string
-                      - enum:
-                          - UNLOCKED
-                          - LOCKED
-                          - FILTERING
-                  fileBasedGP:
-                    type: integer
-                  fileLocation:
-                    type: string
-                  nfFilter:
-                    type: object
-                    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
-                    additionalProperties: false
-                  measurementGroups:
-                    type: array
-                    minItems: 1
-                    items:
-                      type: object
-                      properties:
-                        measurementGroup:
-                          type: object
-                          properties:
-                            measurementTypes:
-                              type: array
-                              minItems: 1
-                              items:
-                                type: object
-                                properties:
-                                  measurementType:
-                                    type: string
-                            managedObjectDNsBasic:
-                              type: array
-                              minItems: 1
-                              items:
-                                type: object
-                                properties:
-                                  DN:
-                                    type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-   put: #full modify sub object
-      tags:
-        - "Subscriptions"
-      description: >-
-        This is an update for Subscription object
-      consumes:
-        - application/json
+      operationId: mod.api.controller.post_subscription
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - in: "body"
+          name: "body"
           required: true
-        - in: body
-          name: Subscription
-          description: The subscription object to update
           schema:
-            type: object
-            properties:
-              subscription:
-                type: object
-                properties:
-                  subscriptionName:
-                    type: string
-                  administrativeState:
-                    type: string
-                    enum:
-                     - UNLOCKED
-                     - LOCKED
-                     - FILTERING
-                  fileBasedGP:
-                    type: integer
-                  fileLocation:
-                    type: string
-                  nfFilter:
-                    type: object
-                    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
-                  measurementGroups:
-                    type: array
-                    items:
-                        type: object
-                        properties:
-                          measurementGroup:
-                            type: object
-                            properties:
-                              measurementTypes:
-                                type: array
-                                items:
-                                    type: object
-                                    properties:
-                                      measurementType:
-                                        type: string
-                              managedObjectDNsBasic:
-                                type: array
-                                items:
-                                    type: object
-                                    properties:
-                                      DN:
-                                        type: string
-                required:
-                  - subscriptionName
-            required:
-              - subscription
-                #add subscription schema here
+            $ref: "#/definitions/subscription"
       responses:
         201:
-          description: Subscription object updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-   delete:
-     tags:
-        - "Subscriptions"
-     description: >-
-       This is a delete for Subscription object
-     parameters:
-       - in: path
-         name: subscriptionName
-         type: string
-         required: true
-     responses:
-       204:
-         description: Subscription object deleted
-       401:
-         description: Unauthorized
-       403:
-         description: Forbidden
-       404:
-         description: Subscription object not found
+          description: Successfully created PM Subscription
+        409:
+          description: Duplicate data
+        400:
+          description: Invalid input
 
-#quick way to update a field here
-  #adminState
-  /subscription/{subscriptionName}/adminState:
     get:
+      description: Get all the subscriptions from PMSH.
+      operationId: mod.api.controller.get_subscriptions
       tags:
-        - "adminState"
-      description: >-
-        Show admin state of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
+        - "Subscription"
       responses:
         200:
-          description: Requested admin state returned
-          schema:
-            type: object
-            properties:
-              adminState:
-                type: string
-                enum:
-                  - UNLOCKED
-                  - LOCKED
-                  - FILTERING
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "adminState"
-      description: >-
-        This is an update for a specific subscription's admin state
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: body
-          name: adminState
-          description: The adminState of the subscription object to update
+          description: OK; Array of subscriptions are returned else empty if not found
           schema:
-            type: object
-            required:
-              - adminState
-            properties:
-              adminState:
-                type: string
-                enum:
-                  - UNLOCKED
-                  - LOCKED
-                  - FILTERING
-      responses:
-        201:
-          description: adminState is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
+            type: array
+            items:
+              $ref: "#/definitions/subscription"
+        500:
+          description: Exception occurred while querying database
 
-  #fileBasedGP
-  /subscription/{subscriptionName}/fileBasedGP:
+  /subscription/{subscription_name}:
     get:
+      description: Get the Subscription from PMSH specified by Name
+      operationId: mod.api.controller.get_subscription_by_name
       tags:
-        - "fileBasedGP"
-      description: >-
-        Show the fileBasedGP of a subscription
+        - "Subscription"
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - name: subscription_name
+          in: path
           required: true
-      responses:
-        200:
-          description: Requested fileBasedGP returned
-          schema:
-            type: object
-            properties:
-              fileBasedGP:
-                type: integer
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "fileBasedGP"
-      description: >-
-        This is an update for a specific subscription's fileBasedGP
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
+          description: Name of the subscription
           type: string
-          required: true
-        - in: body
-          name: fileBasedGP
-          description: The fileBasedGP field of the subscription object to update
-          schema:
-            type: object
-            required:
-              - fileBasedGP
-            properties:
-              fileBasedGP:
-                type: integer
-      responses:
-        201:
-          description: fileBasedGP is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-    delete:
-      tags:
-        - "fileBasedGP"
-      description: >-
-        This is a delete for fileBasedGP field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        204:
-          description: fileBasedGP field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-
-  #fileLocation
-  /subscription/{subscriptionName}/fileLocation:
-    get:
-      tags:
-        - "fileLocation"
-      description: >-
-        Show the fileLocation of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
       responses:
         200:
-          description: Requested fileLocation returned
-          schema:
-            type: object
-            properties:
-              fileLocation:
-                type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "fileLocation"
-      description: >-
-        This is an update for a specific subscription's fileLocation
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: body
-          name: fileLocation
-          description: The fileLocation field of the subscription object to update
+          description: OK; Requested Subscription was returned
           schema:
-            type: object
-            required:
-              - fileLocation
-            properties:
-              fileBasedGP:
-                type: string
-      responses:
-        201:
-          description: fileLocation is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-    delete:
-      tags:
-        - "fileLocation"
-      description: >-
-          This is a delete for fileLocation field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        204:
-          description: fileLocation field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
+            $ref : "#/definitions/subscription"
         404:
-          description: Subscription object not found
+          description: Subscription with specified name not found
+        500:
+          description: Exception occurred while querying database
 
-  #nfFilter
-  /subscription/{subscriptionName}/nfFilter:
-    get:
-      tags:
-        - "nfFilter"
-      description: >-
-        Show the nfFilter of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        200:
-          description: Requested nfFilter returned
-          schema:
-            type: object
-            properties:
-              nfFilter:
-                type: object
-                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
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "nfFilter"
-      description: >-
-        This is an update for a specific subscription's nfFilter
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: body
-          name: nfFilter
-          description: The nfFilter field of the subscription object to update
-          schema:
-            type: object
-            properties:
-              nfFilter:
-                type: object
-                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
-      responses:
-        201:
-          description: fileLocation is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
     delete:
+      description: Deletes the Subscription from PMSH specified by Name
+      operationId: mod.api.controller.delete_subscription_by_name
       tags:
-        - "nfFilter"
-      description: >-
-        This is a delete for nfFilter field on a subscription object
+        - "Subscription"
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - name: subscription_name
+          in: path
           required: true
-      responses:
-        204:
-          description: nfFilter field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-
-  #nfNames
-  /subscription/{subscriptionName}/nfFilter/nfNames:
-    get:
-      tags:
-        - "nfFilter"
-      description: >-
-        Show the nfNames of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        200:
-          description: Requested nfNames returned
-          schema:
-            type: object
-            properties:
-              nfNames:
-                items:
-                  type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "nfFilter"
-      description: >-
-        This is an update for a specific subscription's nfNames
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
+          description: The name of the subscription to delete
           type: string
-          required: true
-        - in: body
-          name: nfNames
-          description: The nfNames field of nfFilter of the subscription object to update
-          schema:
-            type: object
-            required:
-              - nfNames
-            properties:
-              nfNames:
-                type: array
-                items:
-                  type: string
-      responses:
-        201:
-          description: nfNames is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-    delete:
-      tags:
-        - "nfFilter"
-      description: >-
-        This is a delete for nfNames field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
       responses:
         204:
-          description: nfNames field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
+          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
 
-  #nfinvariantModelIds
-  /subscription/{subscriptionName}/nfFilter/nfinvariantModelIds:
-    get:
-      tags:
-        - "nfFilter"
-      description: >-
-        Show the nfinvariantModelIds of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        200:
-          description: Requested nfinvariantModelIds returned
-          schema:
-            type: object
-            properties:
-              nfinvariantModelIds:
-                items:
-                  type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
+  /subscription/{subscription_name}/nfFilter:
     put:
+      description: Update nfFilter for
       tags:
-        - "nfFilter"
-      description: >-
-        This is an update for a specific subscription's nfinvariantModelIds
-      consumes:
-        - application/json
+        - "Subscription"
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - name: subscription_name
+          in: path
           required: true
-        - in: body
-          name: nfinvariantModelIds
-          description: The nfinvariantModelIds field of nfFilter of the subscription object to update
-          schema:
-            type: object
-            required:
-              - nfNames
-            properties:
-              nfinvariantModelIds:
-                type: array
-                items:
-                  type: string
-      responses:
-        201:
-          description: nfNames is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-    delete:
-      tags:
-        - "nfFilter"
-      description: >-
-          This is a delete for nfinvariantModelIds field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
+          description: Name of the subscription
           type: string
+        - name: "body"
+          in: "body"
           required: true
-      responses:
-        204:
-          description: nfinvariantModelIds field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-
-  #modelVersionIds
-  /subscription/{subscriptionName}/nfFilter/modelVersionIds:
-    get:
-      tags:
-        - "nfFilter"
-      description: >-
-        Show the modelVersionIds of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        200:
-          description: Requested modelVersionIds returned
-          schema:
-            type: object
-            properties:
-              modelVersionIds:
-                items:
-                  type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "nfFilter"
-      description: >-
-        This is an update for a specific subscription's modelVersionIds
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: body
-          name: modelVersionIds
-          description: The modelVersionIds field of nfFilter of the subscription object to update
           schema:
-            type: object
-            required:
-              - modelVersionIds
-            properties:
-              modelVersionIds:
-                type: array
-                items:
-                  type: string
+            $ref: "#/definitions/nfFilter"
       responses:
         201:
-          description: modelVersionIds is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-    delete:
-      tags:
-        - "nfFilter"
-      description: >-
-          This is a delete for modelVersionIds field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        204:
-          description: modelVersionIds field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
+          description: Successfully updated filter
+        409:
+          description: Duplicate data
+        400:
+          description: Invalid input
 
-  #modelNames
-  /subscription/{subscriptionName}/nfFilter/modelNames:
-    get:
-      tags:
-        - "nfFilter"
-      description: >-
-        Show the modelNames of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        200:
-          description: Requested modelNames returned
-          schema:
-            type: object
-            properties:
-              modelNames:
-                items:
-                  type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "nfFilter"
-      description: >-
-        This is an update for a specific subscription's modelNames
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: body
-          name: modelNames
-          description: The modelNames field of nfFilter of the subscription object to update
-          schema:
-            type: object
-            required:
-              - modelNames
-            properties:
-              modelNames:
-                type: array
-                items:
-                  type: string
-      responses:
-        201:
-          description: modelNames is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-    delete:
-      tags:
-        - "nfFilter"
-      description: >-
-        This is a delete for modelNames field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-      responses:
-        204:
-          description: modelNames field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
 
-  #measurementGroups
-  /subscription/{subscriptionName}/measurementGroups:
+  /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:
-        - "measurementGroups"
-      description: >-
-        Show the fileBasedGP of a subscription
+        - "measurement group"
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - name : subscription_name
+          in: path
           required: true
-      responses:
-        200:
-          description: Requested measurementGroups returned
-          schema:
-            type: object
-            properties:
-              measurementGroups:
-                type: array
-                items:
-                  type: object
-                  properties:
-                    measurementGroup:
-                      type: object
-                      properties:
-                        measurementTypes:
-                          type: array
-                          items:
-                            type: object
-                            properties:
-                              measurementType:
-                                type: string
-                        managedObjectDNsBasic:
-                          type: array
-                          items:
-                            type: object
-                            properties:
-                              DN:
-                                type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "measurementGroups"
-      description: >-
-        This is an update for a specific subscription's measurementGroups
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
+          description: Name of the subscription
           type: string
+        - name: measurement_group_name
+          in: path
           required: true
-        - in: body
-          name: measurementGroups
-          description: The measurementGroups field of the subscription object to update
-          schema:
-            type: object
-            properties:
-              measurementGroups:
-                type: array
-                items:
-                  type: object
-                  properties:
-                    measurementGroup:
-                      type: object
-                      properties:
-                        measurementTypes:
-                          type: array
-                          items:
-                            type: object
-                            properties:
-                              measurementType:
-                                type: string
-                        managedObjectDNsBasic:
-                          type: array
-                          items:
-                            type: object
-                            properties:
-                              DN:
-                                type: string
-      responses:
-        201:
-          description: measurementGroups is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-    delete:
-      tags:
-        - "measurementGroups"
-      description: >-
-          This is a delete for measurementGroups field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
+          description: Name of the measurement group name
           type: string
-          required: true
-      responses:
-        204:
-          description: measurementGroups field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: Subscription object not found
-
-  #measurementGroupName
-  /subscription/{subscriptionName}/measurementGroups/{measurementGroupName}:
-    get:
-      tags:
-        - "measurementGroups"
-      description: >-
-        Show a measurementGroup of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: path
-          name: measurementGroupName
-          type: string
-          required: true
       responses:
         200:
-          description: Requested measurementGroup returned
+          description: OK; Received requested measurement group with associated NF's
           schema:
-            type: object
-            properties:
-              measurementGroup:
-                type: object
-                properties:
-                  measurementTypes:
-                    type: array
-                    items:
-                      type: object
-                      properties:
-                        measurementType:
-                          type: string
-                        managedObjectDNsBasic:
-                          type: array
-                          items:
-                            type: object
-                            properties:
-                              DN:
-                                type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "measurementGroups"
-      description: >-
-        This is an update for a specific a measurementGroup
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: path
-          name: measurementGroupName
-          type: string
-          required: true
-        - in: body
-          name: measurementGroup
-          description: The measurementGroup field of the subscription object to update
-          schema:
-            type: object
-            properties:
-              measurementGroup:
-                type: object
-                properties:
-                  measurementTypes:
-                    type: array
-                    items:
-                      type: object
-                      properties:
-                        measurementType:
-                          type: string
-                        managedObjectDNsBasic:
-                          type: array
-                          items:
-                            type: object
-                            properties:
-                              DN:
-                                type: string
-      responses:
-        201:
-          description: measurementGroup is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
+            $ref : "#/definitions/measGroupWithNFs"
         404:
-          description: measurementGroup object not found
-    delete:
-      tags:
-        - "measurementGroups"
-      description: >-
-        This is a delete for measurementGroup field on a subscription object
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: path
-          name: measurementGroupName
-          type: string
-          required: true
-      responses:
-        204:
-          description: measurementGroup field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: measurementGroup object not found
+          description: Measurement group with specified name not found
+        500:
+          description: Exception occurred while querying database
 
-  #measurementType
-  /subscription/{subscriptionName}/measurementGroups/{measurementGroupName}/measurementTypes:
-    get:
+    post:
+      description: Create a measurement group
       tags:
-        - "measurementGroups"
-      description: >-
-        Show the measurementTypes of a subscription
+        - "measurement group"
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - name : subscription_name
+          in: path
           required: true
-        - in: path
-          name: measurementGroupName
+          description: Name of the subscription
           type: string
+        - name: measurement_group_name
+          in: path
           required: true
-      responses:
-        200:
-          description: Requested measurementTypes returned
-          schema:
-            type: object
-            properties:
-              measurementTypes:
-                type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
-    put:
-      tags:
-        - "measurementGroups"
-      description: >-
-        This is an update for measurementType field in a specific measurementGroup
-      consumes:
-        - application/json
-      parameters:
-        - in: path
-          name: subscriptionName
+          description: Name of the measurement group name
           type: string
+        - name : "body"
+          in: "body"
           required: true
-        - in: path
-          name: measurementGroupName
-          type: string
-          required: true
-        - in: body
-          name: measurementTypes
-          description: The measurementTypes field of the measurementGroup to update
           schema:
-            type: object
-            properties:
-              measurementTypes:
-                type: string
+            $ref: "#/definitions/measurementGroup"
       responses:
         201:
-          description: measurementType is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: measurementGroup object not found
+          description: Successfully created measurement group
+        409:
+          description: Duplicate data
+        400:
+          description: Invalid input
+
     delete:
+      description: Delete a measurement group
       tags:
-        - "measurementGroups"
-      description: >-
-        This is a delete for measurementType field on a measurementGroup
+        - "measurement group"
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - name : subscription_name
+          in: path
           required: true
-        - in: path
-          name: measurementGroupName
+          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: measurementGroup field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
+          description: Successfully deleted the measurement group and returns NO Content
         404:
-          description: measurementGroup object not found
+          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
 
-  #managedObjectDNsBasic
-  /subscription/{subscriptionName}/measurementGroups/{measurementGroupName}/managedObjectDNsBasic:
-    get:
-      tags:
-        - "measurementGroups"
-      description: >-
-        Show the managedObjectDNsBasic of a subscription
-      parameters:
-        - in: path
-          name: subscriptionName
-          type: string
-          required: true
-        - in: path
-          name: measurementGroupName
-          type: string
-          required: true
-      responses:
-        200:
-          description: Requested managedObjectDNsBasic returned
-          schema:
-            type: object
-            properties:
-              managedObjectDNsBasic:
-                type: string
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: there are no subscription defined
+  /subscription/{subscription_name}/measurementGroups/{measurement_group_name}/{administrativeState}:
     put:
+      description: Update administrative state for a measurement group
       tags:
-        - "measurementGroups"
-      description: >-
-        This is an update for managedObjectDNsBasic field in a specific measurementGroup
-      consumes:
-        - application/json
+        - "measurement group"
       parameters:
-        - in: path
-          name: subscriptionName
-          type: string
+        - name: subscription_name
+          in: path
           required: true
-        - in: path
-          name: measurementGroupName
+          description: Name of the subscription
           type: string
+        - name: measurement_group_name
+          in: path
           required: true
-        - in: body
-          name: managedObjectDNsBasic
-          description: The managedObjectDNsBasic field of the measurementGroup to update
-          schema:
-            type: object
-            properties:
-              managedObjectDNsBasic:
-                type: string
-      responses:
-        201:
-          description: managedObjectDNsBasic is updated
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: measurementGroup object not found
-    delete:
-      tags:
-        - "measurementGroups"
-      description: >-
-        This is a delete for managedObjectDNsBasic field on a measurementGroup
-      parameters:
-        - in: path
-          name: subscriptionName
+          description: Name of the measurement group name
           type: string
+        - name: administrativeState
+          in: path
           required: true
-        - in: path
-          name: measurementGroupName
+          description: New administrative state of measurement group
           type: string
-          required: true
       responses:
-        204:
-          description: managedObjectDNsBasic field is deleted
-        401:
-          description: Unauthorized
-        403:
-          description: Forbidden
-        404:
-          description: measurementGroup object not found
\ No newline at end of file
+        201:
+          description: Successfully updated administrative state
+        409:
+          description: Duplicate data
+        400:
+          description: Invalid input
+
+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