SOL002 VNF Performance Management - Implementation of deltas between v4.3.1 and v3.6.1

This merge request refers to the implementation of deltas between v4.3.1 and v3.6.1 of SOL002 VNF Performance Management Interface.

@lynchpi @matsuurat @sayama @hamza @ayuba @ishaqm @reinaortega

Deadline for review: Friday 13th January 2023 @6pm CET

Edited by Giacomo Bernini

Merge request reports

Loading
+2 −0
Changes for SOL002/VNFPerformanceManagement-API/environment/variables.txt: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@ ${AUTHORIZATION_HEADER} Authorization
${AUTHORIZATION_TOKEN}    Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
${AUTH_USAGE}    1

${HEADER_TEST_SUPPORTED}    0

${VNFM_CHECKS_NOTIF_ENDPOINT}    1
${callback_uri}    http://localhost
${unreachable_callback_uri}    http://not-reachable-uri
+16 −3
Changes for SOL002/VNFPerformanceManagement-API/schemas/PMJobModifications.json: 16 added lines, 3 removed lines.
Original line number Diff line number Diff line
{
    "description": "This type represents modifications to a PM job. It shall comply with the provisions defined in table 6.5.2.12-1.\n",
  "description": "This type represents modifications to a PM job.\nNOTE:\tAt least one of the attributes defined in this type shall be present in request bodies.\n",
  "type": "object",
  "oneOf": [
    {
      "required": [
        "callbackUri"
      ]
    },
    {
      "required": [
        "authentication"
      ]
    }
  ],
  "properties": {
    "callbackUri": {
      "description": "String formatted according to IETF RFC 3986.\n",
      "type": "string"
    },
    "authentication": {
      "description": "* NOTE: The clientId and clientPassword passed in a subscription shall not be the same as the clientId and\n        clientPassword that are used to obtain authorization for API requests. Client credentials may differ between\n        subscriptions. The value of clientPassword should be generated by a random process\n",
      "type": "object",
      "required": [
        "authType"
@@ -43,11 +56,11 @@
          "type": "object",
          "properties": {
            "clientId": {
                "description": "Client identifier to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
              "description": "Client identifier to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. See note.\n",
              "type": "string"
            },
            "clientPassword": {
                "description": "Client password to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
              "description": "Client password to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. See note.\n",
              "type": "string"
            },
            "tokenEndpoint": {
+66 −1
Changes for SOL002/VNFPerformanceManagement-API/schemas/PerformanceReport.schema.json: 66 added lines, 1 removed line.
Original line number Diff line number Diff line
{  "description": "This type defines the format of a performance report provided by the VNFM to the NFVO as a result of collecting performance information as part of a PM job.\n",  "type": "object",  "properties": {    "entries": {      "description": "List of performance information entries. Each performance report entry is for a given metric of a given object (i.e. VNF instance), but can include multiple collected values.\n",      "type": "array",      "items": {        "type": "object",        "required": [          "objectType",          "objectInstanceId",          "performanceMetric",          "performanceValue"        ],        "properties": {          "objectType": {            "description": "Defines the object type for which performance information is reported (i.e. VNF type). The string value shall be set to the vnfdId of the VNF instance to which the performance information relates.\n",            "type": "string"          },          "objectInstanceId": {            "description": "An identifier with the intention of being globally unique.\n",            "type": "string"          },          "performanceMetric": {            "description": "Name of the metric collected.\n",            "type": "string"          },          "performanceValues": {            "description": "List of performance values with associated timestamp.\n",            "type": "array",            "items": {              "type": "object",              "required": [                "timeStamp",                "performanceValue"              ],              "properties": {                "timeStamp": {                  "description": "Date-time stamp.  Representation: String formatted according to IETF RFC 3339.\n",                  "type": "string",                  "format": "date-time"                },                "value": {                  "description": "Value of the metric collected. The type of the \"value\" attribute (i.e. scalar, structure (Object in JSON), or array (of scalars, arrays or structures / Objects)) is assumed to be defined in the external measurement specification (see ETSI GS NFV-IFA 027).\n",                  "type": "object"                }              }            }          }        }      }    }  }}
 No newline at end of file
{
    "description": "This type defines the format of a performance report provided by the VNFM to the NFVO as a result of collecting  performance information as part of a PM job.\nNOTE:\tThe sub-object allows to structure the measured object but is not to be confused with sub-counters which allow \n      to structure the measurement value.\n\nEXAMPLE:\n  Measured object: VnfInstanceXYZ\n  Sub-object: VnfcInstance1\n  Measurement: vCPU_utilization\n  Sub-counters: vCPU utilization of each of the vCPUs of VnfcInstance1 (vCPU utilization.vCPU1, vCPU_utilization.vCPU2, etc.).\n",
    "type": "object",
    "required": [
        "entries"
    ],
    "properties": {
        "entries": {
            "description": "List of performance information entries. Each performance report entry is for a given metric of a given object (i.e. VNF instance), but can include multiple collected values.\n",
            "type": "array",
            "items": {
                "type": "object",
                "required": [
                    "objectType",
                    "objectInstanceId",
                    "performanceMetric",
                    "performanceValue"
                ],
                "properties": {
                    "objectType": {
                        "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                        "type": "string"
                    },
                    "objectInstanceId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                    },
                    "subObjectInstanceId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                    },
                    "performanceMetric": {
                        "description": "Name of the metric collected. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                        "type": "string"
                    },
                    "performanceValues": {
                        "description": "List of performance values with associated timestamp.\n",
                        "type": "array",
                        "items": {
                            "type": "object",
                            "required": [
                                "timeStamp",
                                "value"
                            ],
                            "properties": {
                                "timeStamp": {
                                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                                    "type": "string",
                                    "format": "date-time"
                                },
                                "value": {
                                    "description": "Value of the metric collected. The type of this attribute shall correspond to the related \"Measurement Unit\" as defined in clause 7.2. of ETSI GS NFV-IFA 027.\n",
                                    "type": "object"
                                },
                                "context": {
                                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
 No newline at end of file
+153 −1
Changes for SOL002/VNFPerformanceManagement-API/schemas/PmJob.schema.json: 153 added lines, 1 removed line.
Original line number Diff line number Diff line
{  "description": "This type represents a PM job.\n",  "type": "object",  "required": [    "id",    "objectInstanceIds",    "criteria"  ],  "properties": {    "id": {      "description": "An identifier with the intention of being globally unique.\n",      "type": "string"    },    "objectInstanceIds": {      "description": "Identifiers of the VNF instances for which performance information is collected.\n",      "type": "array",      "items": {        "description": "An identifier with the intention of being globally unique.\n",        "type": "string"      }    },    "criteria": {      "description": "Criteria of the collection of performance information.\n",      "type": "object",      "required": [        "collectionPeriod",        "reportingPeriod"      ],      "properties": {        "performanceMetric": {          "description": "This defines the types of performance metrics for the specified object instances, as specified in ETSI GS NFV-IFA 027). At least one of the two attributes (performance metric or group) shall be present.\n",          "type": "array",          "items": {            "type": "string"          }        },        "performanceMetricGroup": {          "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the producer that it can decompose to individual metrics. At least one of the two attributes (performance metric or group) shall be present.\n",          "type": "array",          "items": {            "type": "string"          }        },        "collectionPeriod": {          "description": "Specifies the periodicity at which the producer will collect performance information. The unit shall be seconds. At the end of each reportingPeriod, the producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",          "type": "integer"        },        "reportingPeriod": {          "description": "Specifies the periodicity at which the producer will report to the consumer. about performance information. The unit shall be seconds. At the end of each reportingPeriod, the producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",          "type": "integer"        },        "reportingBoundary": {          "description": "Date-time stamp.  Representation: String formatted according to IETF RFC 3339.\n",          "type": "string",          "format": "date-time"        }      }    },    "reports": {      "description": "Information about available reports collected by this PM job.\n",      "type": "object",      "required": [        "href",        "readyTime",        "_links"      ],      "properties": {        "href": {          "description": "The Uri where the report can be obtained.\n",          "type": "string",          "format": "url"        },        "readyTime": {          "description": "Date-time stamp.  Representation: String formatted according to IETF RFC 3339.\n",          "type": "string",          "format": "date-time"        },        "expiryTime": {          "description": "Date-time stamp.  Representation: String formatted according to IETF RFC 3339.\n",          "type": "string",          "format": "date-time"        },        "fileSize": {          "description": "The size of the report file in bytes, if known.\n",          "type": "integer"        },        "_links": {          "description": "Links for this resource.\n",          "type": "object",          "required": [            "self"          ],          "properties": {            "self": {              "description": "This type represents a link to a resource.\n",              "type": "object",              "required": [                "href"              ],              "properties": {                "href": {                  "description": "URI of the referenced resource.\n",                  "type": "string",                  "format": "url"                }              }            },            "objects": {              "description": "Links to resources representing the VNF instances for which performance information is collected. Shall be present if the VNF instance information is accessible as a resource.\n",              "type": "array",              "items": {                "description": "This type represents a link to a resource.\n",                "type": "object",                "required": [                  "href"                ],                "properties": {                  "href": {                    "description": "URI of the referenced resource.\n",                    "type": "string",                    "format": "url"                  }                }              }            }          }        }      }    }  }}
 No newline at end of file
{
    "description": "This type represents a PM job.\n",
    "type": "object",
    "required": [
      "id",
      "objectType",
      "objectInstanceIds",
      "criteria",
      "callbackUri",
      "_links"
    ],
    "properties": {
      "id": {
        "description": "An identifier with the intention of being globally unique.\n",
        "type": "string"
      },
      "objectType": {
        "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
        "type": "string"
      },
      "objectInstanceIds": {
        "description": "Identifiers of the VNF instances for which performance information is collected.\n",
        "type": "array",
        "items": {
          "description": "An identifier with the intention of being globally unique.\n",
          "type": "string"
        }
      },
      "subObjectInstanceIds": {
        "description": "Identifiers of the sub-object instances of the measured object instance for which performance information is requested to be collected. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type. If this attribute is present, the cardinality of the \"objectInstanceIds\" attribute shall be 1. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
        "type": "array",
        "items": {
          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
          "type": "string"
        }
      },
      "criteria": {
        "description": "This type represents collection criteria for PM jobs.\nNOTE 1:\tAt the end of each reportingPeriod, the API producer will inform the API consumer about availability of the \n        performance data collected for each completed collection period during this reportingPeriod. \n        The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance \n        data for the collection periods within one reporting period are reported together.\nNOTE 2:\tIn particular when choosing short collection and reporting periods, the number of PM jobs that can be supported \n        depends on the capability of the producing entity.\n",
        "type": "object",
        "required": [
          "collectionPeriod",
          "reportingPeriod"
        ],
        "properties": {
          "performanceMetric": {
            "description": "This defines the types of performance metrics for the specified object instances. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "performanceMetricGroup": {
            "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the API producer that it can decompose to individual metrics. Valid values are specified as \"Measurement Group\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "collectionPeriod": {
            "description": "SSpecifies the periodicity at which the API producer will collect performance information.  The unit shall be seconds. See notes 1 and 2.\n",
            "type": "integer",
            "minimum": 0,
            "maximum": 1024
          },
          "reportingPeriod": {
            "description": "Specifies the periodicity at which the API producer will report to the API consumer  about performance information. The unit shall be seconds. See notes 1 and 2.\n",
            "type": "integer",
            "minimum": 0,
            "maximum": 1024
          },
          "reportingBoundary": {
            "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "callbackUri": {
        "description": "String formatted according to IETF RFC 3986.\n",
        "type": "string"
      },
      "reports": {
        "description": "Information about available reports collected by this PM job.\n",
        "type": "object",
        "required": [
          "href",
          "readyTime"
        ],
        "properties": {
          "href": {
            "description": "The URI where the report can be obtained.\n",
            "type": "string",
            "format": "url"
          },
          "readyTime": {
            "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
            "type": "string",
            "format": "date-time"
          },
          "expiryTime": {
            "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
            "type": "string",
            "format": "date-time"
          },
          "fileSize": {
            "description": "The size of the report file in bytes, if known.\n",
            "type": "integer",
            "minimum": 0,
            "maximum": 1024
          }
        }
      },
      "_links": {
        "description": "Links for this resource.\n",
        "type": "object",
        "required": [
          "self"
        ],
        "properties": {
          "self": {
            "description": "This type represents a link to a resource using an absolute URI.\n",
            "type": "object",
            "required": [
              "href"
            ],
            "properties": {
              "href": {
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              }
            }
          },
          "objects": {
            "description": "Links to resources representing the measure object instances for which performance information is collected. Shall be present if the measured object instance information is accessible as a resource.\n",
            "type": "array",
            "items": {
              "description": "This type represents a link to a resource using an absolute URI.\n",
              "type": "object",
              "required": [
                "href"
              ],
              "properties": {
                "href": {
                  "description": "String formatted according to IETF RFC 3986.\n",
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  }
 No newline at end of file
+45 −23
Changes for SOL002/VNFPerformanceManagement-API/schemas/PmJobs.schema.json: 45 added lines, 23 removed lines.
Original line number Diff line number Diff line
@@ -5,14 +5,21 @@
    "type": "object",
    "required": [
      "id",
      "objectType",
      "objectInstanceIds",
      "criteria"
      "criteria",
      "callbackUri",
      "_links"
    ],
    "properties": {
      "id": {
        "description": "An identifier with the intention of being globally unique.\n",
        "type": "string"
      },
      "objectType": {
        "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
        "type": "string"
      },
      "objectInstanceIds": {
        "description": "Identifiers of the VNF instances for which performance information is collected.\n",
        "type": "array",
@@ -21,8 +28,16 @@
          "type": "string"
        }
      },
      "subObjectInstanceIds": {
        "description": "Identifiers of the sub-object instances of the measured object instance for which performance information is requested to be collected. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type. If this attribute is present, the cardinality of the \"objectInstanceIds\" attribute shall be 1. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
        "type": "array",
        "items": {
          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
          "type": "string"
        }
      },
      "criteria": {
        "description": "Criteria of the collection of performance information.\n",
        "description": "This type represents collection criteria for PM jobs.\nNOTE 1:\tAt the end of each reportingPeriod, the API producer will inform the API consumer about availability of the \n        performance data collected for each completed collection period during this reportingPeriod. \n        The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance \n        data for the collection periods within one reporting period are reported together.\nNOTE 2:\tIn particular when choosing short collection and reporting periods, the number of PM jobs that can be supported \n        depends on the capability of the producing entity.\n",
        "type": "object",
        "required": [
          "collectionPeriod",
@@ -30,26 +45,30 @@
        ],
        "properties": {
          "performanceMetric": {
            "description": "This defines the types of performance metrics for the specified object instances, as specified in ETSI GS NFV-IFA 027). At least one of the two attributes (performance metric or group) shall be present.\n",
            "description": "This defines the types of performance metrics for the specified object instances. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "performanceMetricGroup": {
            "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the producer that it can decompose to individual metrics. At least one of the two attributes (performance metric or group) shall be present.\n",
            "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the API producer that it can decompose to individual metrics. Valid values are specified as \"Measurement Group\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "collectionPeriod": {
            "description": "Specifies the periodicity at which the producer will collect performance information. The unit shall be seconds. At the end of each reportingPeriod, the producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
            "type": "integer"
            "description": "SSpecifies the periodicity at which the API producer will collect performance information.  The unit shall be seconds. See notes 1 and 2.\n",
            "type": "integer",
            "minimum": 0,
            "maximum": 1024
          },
          "reportingPeriod": {
            "description": "Specifies the periodicity at which the producer will report to the consumer. about performance information. The unit shall be seconds. At the end of each reportingPeriod, the producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
            "type": "integer"
            "description": "Specifies the periodicity at which the API producer will report to the API consumer  about performance information. The unit shall be seconds. See notes 1 and 2.\n",
            "type": "integer",
            "minimum": 0,
            "maximum": 1024
          },
          "reportingBoundary": {
            "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
@@ -58,17 +77,20 @@
          }
        }
      },
      "callbackUri": {
        "description": "String formatted according to IETF RFC 3986.\n",
        "type": "string"
      },
      "reports": {
        "description": "Information about available reports collected by this PM job.\n",
        "type": "object",
        "required": [
          "href",
          "readyTime",
          "_links"
          "readyTime"
        ],
        "properties": {
          "href": {
            "description": "The Uri where the report can be obtained.\n",
            "description": "The URI where the report can be obtained.\n",
            "type": "string",
            "format": "url"
          },
@@ -84,7 +106,11 @@
          },
          "fileSize": {
            "description": "The size of the report file in bytes, if known.\n",
            "type": "integer"
            "type": "integer",
            "minimum": 0,
            "maximum": 1024
          }
        }
      },
      "_links": {
        "description": "Links for this resource.\n",
@@ -94,35 +120,31 @@
        ],
        "properties": {
          "self": {
                "description": "This type represents a link to a resource.\n",
            "description": "This type represents a link to a resource using an absolute URI.\n",
            "type": "object",
            "required": [
              "href"
            ],
            "properties": {
              "href": {
                    "description": "URI of the referenced resource.\n",
                    "type": "string",
                    "format": "url"
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              }
            }
          },
          "objects": {
                "description": "Links to resources representing the VNF instances for which performance information is collected. Shall be present if the VNF instance information is accessible as a resource.\n",
            "description": "Links to resources representing the measure object instances for which performance information is collected. Shall be present if the measured object instance information is accessible as a resource.\n",
            "type": "array",
            "items": {
                  "description": "This type represents a link to a resource.\n",
              "description": "This type represents a link to a resource using an absolute URI.\n",
              "type": "object",
              "required": [
                "href"
              ],
              "properties": {
                "href": {
                      "description": "URI of the referenced resource.\n",
                      "type": "string",
                      "format": "url"
                    }
                  }
                  "description": "String formatted according to IETF RFC 3986.\n",
                  "type": "string"
                }
              }
            }
Loading
Loading