Skip to content
Snippets Groups Projects
Commit 50e2b0b4 authored by Elian Kraja's avatar Elian Kraja
Browse files

Adding initial work on Performance Management

parent 4513ddc6
No related branches found
No related tags found
No related merge requests found
Showing
with 428 additions and 0 deletions
*** Settings ***
Library JSONSchemaLibrary schemas/
Resource environment/generic.txt # Generic Parameters
Library JSONLibrary
Resource environment/IndividualPmJob.txt
Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}
*** Test Cases ***
GET Individual PM Job
Log Trying to get a Pm Job present in the NFVO Catalogue
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
GET Individual PM Job - Negative (Not Found)
Log Trying to perform a negative get, using erroneous PM Job identifier
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${erroneousPmJobId}
Integer response status 404
Log Received 404 Not Found as expected
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate ProblemDetails
${problemDetails}= Output response body
${json}= evaluate json.loads('''${problemDetails}''') json
Validate Json ProblemDetails.schema.json ${json}
Log Validation OK
DELETE Individual PM Job
Log Trying to delete an existing PM Job
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
DELETE ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}
Integer response status 204
Log Received 204 No Content as expected
DELETE Individual PM Job - Negative (Not Found)
Log Trying to delete an existing PM Job
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
DELETE ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${erroneousPmJobId}
Integer response status 404
Log Received 204 No Content as expected
POST Individual PM Job - (Method not implemented)
Log Trying to perform a POST (method should not be implemented)
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
POST ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}
Integer response status 405
Log Received 405 Method not implemented as expected
PUT Individual PM Job - (Method not implemented)
Log Trying to perform a PUT. This method should not be implemented
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
PUT ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}
Integer response status 405
Log Received 405 Method not implemented as expected
PATCH Individual PM Job - (Method not implemented)
Log Trying to perform a PATCH. This method should not be implemented
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
PATCH ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}
Integer response status 405
Log Received 405 Method not implemented as expected
*** Settings ***
Documentation This resource represents an individual performance report that was collected by a PM job. The client can use this
... resource to read the performance report. The URI of this report can be obtained from a
... PerformanceInformationAvailableNotification (see clause 6.5.2.5) or from the representation of the "Individual PM job"
... resource.
... It is determined by means outside the scope of the present document, such as configuration or policy, how long an
... individual performance report is available.
Library JSONSchemaLibrary schemas/
Resource environment/generic.txt # Generic Parameters
Resource environment/reports.txt
Library JSONLibrary
Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}
*** Test Cases ***
GET Report on Single PM Job
[Documentation] The client can use this method for reading an individual performance report.
... This method shall follow the provisions specified in the tables 6.4.4.3.2-1 and 6.4.4.3.2-2 for URI query parameters,
... request and response data structures, and response codes.
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": ${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}/reports/${reportId}
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate result with PerformanceReport schema
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PerformanceReport.schema.json ${json}
GET Report on Single PM Job - Negative (Not Found)
[Documentation] The client can use this method for reading an individual performance report.
... This method shall follow the provisions specified in the tables 6.4.4.3.2-1 and 6.4.4.3.2-2 for URI query parameters,
... request and response data structures, and response codes.
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": ${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}/reports/${erroneousReportId}
Integer response status 404
Log Received 404 Not Found as expected
Log Trying to validate ProblemDetails
${problemDetails}= Output response body
${json}= evaluate json.loads('''${problemDetails}''') json
Validate Json ProblemDetails.schema.json ${json}
Log Validation OK
POST Reports - (Method not implemented)
[Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method
... Not Allowed" response as defined in clause 4.3.5.4.
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
POST ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}/reports/${reportId}
Integer response status 405
Log Received 405 Method not implemented as expected
PUT Reports - (Method not implemented)
[Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method
... Not Allowed" response as defined in clause 4.3.5.4.
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
PUT ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}/reports/${reportId}
Integer response status 405
Log Received 405 Method not implemented as expected
PATCH Reports - (Method not implemented)
[Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method
... Not Allowed" response as defined in clause 4.3.5.4.
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
PATCH ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}/reports/${reportId}
Integer response status 405
Log Received 405 Method not implemented as expected
DELETE Reports - (Method not implemented)
[Documentation] This method is not supported. When this method is requested on this resource, the VNFM shall return a "405 Method
... Not Allowed" response as defined in clause 4.3.5.4.
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
DELETE ${apiRoot}/${apiName}/${apiVersion}/pm_jobs/${pmJobId}/reports/${reportId}
Integer response status 405
Log Received 405 Method not implemented as expected
*** Settings ***
Library JSONSchemaLibrary schemas/
Resource environment/generic.txt # Generic Parameters
Library JSONLibrary
Library OperatingSystem
Resource environment/pmJobs.txt
Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT}
*** Test Cases ***
GET all Pm Jobs
Log Trying to get all PM Jobs present in the VNFM
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
Log Checking that reports element is missing
${reports}= Get Value From Json ${json} $..reports
Should Be Empty ${reports}
Log Reports element is empty as expected
GET all Pm Jobs - Filter
Log Trying to get all PM Jobs present in the VNFM, using filter params
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs?${POS_FILTER}
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
GET all Pm Jobs - all_fields
Log Trying to get all PM Jobs present in the VNFM, using 'all_fields' filter
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs?all_fields
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
Log Trying to validate criteria schema
${criteria}= Get Value From Json ${json} $..criteria
Validate Json criteria.schema.json ${criteria[0]}
Log Validation for criteria schema OK
Log Trying to validate criteria schema
${reports}= Get Value From Json ${json} $..reports
Validate Json reports.schema.json ${reports[0]}
Log Validation for reports schema OK
Log Validating _links schema
${links}= Get Value From Json ${json} $.._links
Validate Json links.schema.json ${links[0]}
Log Validation for _links schema OK
GET all Pm Jobs - exclude_default
Log Trying to get all VNF Packages present in the VNFM, using filter params
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs?exclude_default
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
Log Checking that reports element is missing
${reports}= Get Value From Json ${json} $..reports
Should Be Empty ${reports}
Log Reports element is empty as expected
GET all Pm Jobs - fields
Log Trying to get all VNF Packages present in the VNFM, using filter params
Pass Execution If ${FIELDS_USAGE} == 0 Skipping test as VNFM is not supporting 'fields'
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs?fields=${fields}
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
Log Trying to validate criteria schema
${criteria}= Get Value From Json ${json} $..criteria
Validate Json criteria.schema.json ${criteria[0]}
Log Validation for criteria schema OK
Log Trying to validate criteria schema
${reports}= Get Value From Json ${json} $..reports
Validate Json reports.schema.json ${reports[0]}
Log Validation for reports schema OK
GET all Pm Jobs - exclude_fields
Log Trying to get all VNF Packages present in the VNFM, using filter params
Pass Execution If ${FIELDS_USAGE} == 0 Skipping test as VNFM is not supporting 'fields'
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs?fields=${fields}
Integer response status 200
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
Log Checking that reports element is missing
${reports}= Get Value From Json ${json} $..reports
Should Be Empty ${reports}
Log Reports element is empty as expected
Log Checking that criteria element is missing
${criteria}= Get Value From Json ${json} $..criteria
Should Be Empty ${criteria}
Log Criteria element is empty as expected
GET all Pm Jobs - Negative (wronge filter name)
Log Trying to get all PM Jobs present in the VNFM, using an erroneous filter param
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_jobs?${NEG_FILTER}
Integer response status 400
Log Received 400 Bad Request as expected
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate ProblemDetails
${problemDetails}= Output response headers Content-Type
${json}= evaluate json.loads('''${problemDetails}''') json
Validate Json ProblemDetails.schema.json ${json}
Log Validation OK
GET all Pm Jobs (Negative: Not found)
Log Trying to perform a GET on a erroneous URI
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
GET ${apiRoot}/${apiName}/${apiVersion}/pm_job # wrong URI /pm_job instead of /pm_jobs
Integer response status 404
Log Received 404 Not Found as expected
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate ProblemDetails
${problemDetails}= Output response headers Content-Type
${json}= evaluate json.loads('''${problemDetails}''') json
Validate Json ProblemDetails.schema.json ${json}
Log Validation OK
POST all PM Jobs - Create new PM Job
Log Creating a new PM Job
Set Headers {"Accept": "${ACCEPT_JSON}"}
Set Headers {"Content-Type": "${CONTENT_TYPE_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
${body}= Get File jsons/CreatePmJobRequest.json
POST ${apiRoot}/${apiName}/${apiVersion}/pm_jobs ${body}
Integer response status 201
Log Received 201 Created as expected
${contentType}= Output response headers Content-Type
Should Contain ${contentType} ${CONTENT_TYPE_JSON}
Log Trying to validate response
${result}= Output response body
${json}= evaluate json.loads('''${result}''') json
Validate Json PmJob.schema.json ${json}
Log Validation OK
PUT all PM Jobs - (Method not implemented)
Log Trying to perform a PUT. This method should not be implemented
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
PUT ${apiRoot}/${apiName}/${apiVersion}/pm_jobs
Integer response status 405
Log Received 405 Method not implemented as expected
PATCH all Pm Jobs - (Method not implemented)
Log Trying to perform a PATCH. This method should not be implemented
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
PATCH ${apiRoot}/${apiName}/${apiVersion}/pm_jobs
Integer response status 405
Log Received 405 Method not implemented as expected
DELETE all Pm Jobs - (Method not implemented)
Log Trying to perform a DELETE. This method should not be implemented
Set Headers {"Accept": "${ACCEPT_JSON}"}
Run Keyword If ${VNFM_AUTH_USAGE} == 1 Set Headers {"Authorization": "${VNFM_AUTHENTICATION}"}
DELETE ${apiRoot}/${apiName}/${apiVersion}/pm_jobs
Integer response status 405
Log Received 405 Method not implemented as expected
*** Variables ***
${pmJobId} 29f4ff6a-be91-4ec8-856e-fcf1e2479e4e
${erroneousPmJobId} erroneousPmJobId
*** Variables ***
${VNFM_HOST} localhost # Hostname of the VNFM
${VNFM_PORT} 8080 # Listening port of the VNFM
${NFVO_HOST} localhost # Hostname of the NFVO
${NFVO_PORT} 8081 # Listening port of the NFVO
${VNFM_SCHEMA} https
${NFVO_SCHEMA} https
${AUTHORIZATION} Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
${CONTENT_TYPE_JSON} application/json
${ACCEPT_JSON} application/json
${apiRoot} /
${AUTH_USAGE} 1
${NEG_AUTHORIZATION} Bearer negativetoken
${apiVersion} v1
${apiName} vnfpm
${FIELD_USAGE} 1
${VNFM_AUTHENTICATION} Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
${VNFM_AUTH_USAGE} 1
${VNFM_DUPLICATION} 1
*** Variables ***
${subscriptionId} 17563e75-0e14-4bd7-94b4-6bbb869c79aa
${erroneousSubscriptionId} erroneousSubscriptionId
*** Variables ***
${thresholdId} 1f50d68b-82e8-4deb-bd40-c934d4d1ac0a
${erroneousThresholdId} erroneousThresholdId
*** Variables ***
${POS_FILTER} objectInstanceIds=1f50d68b-82e8-4deb-bd40-c934d4d1ac0a
${NEG_FILTER} criteriaPmJob=erroneousAttributeName
${fields} criteria,reports
*** Variables ***
${pmJobId} 1f50d68b-82e8-4deb-bd40-c934d4d1ac0a
${reportId} 0fb4c875-e07f-46ca-a9dd-13907667a568
${erroneousReportId} erroneousReportId
*** Variables ***
${filter_ok} callbackUri=http://localhost/subscriptions
${filter_ko} erroneousFilter=erroneous
*** Variables ***
${FILTER_OK} objectInstanceId=1f50d68b-82e8-4deb-bd40-c934d4d1ac0a
${FILTER_KO} criterias=erroneousFilter
{
"objectInstanceIds" : ["1f50d68b-82e8-4deb-bd40-c934d4d1ac0a"],
"criteria" : {
"performanceMetric": [],
"performanceMetricGroup": [],
"collectionPeriod": 10,
"reportingPeriod": 30,
}
}
\ No newline at end of file
{
"objectInstanceIds" : "1f50d68b-82e8-4deb-bd40-c934d4d1ac0a",
"criteria" : {
"performanceMetric": "cpu_util",
"thresholdType": "SIMPLE",
"simpleThresholdDetails": {
"thresholdValue": 10,
"hysteresis": 50
}
}
}
\ No newline at end of file
{
"callbackUri": "http://127.0.0.1/subscribe",
"filter": {
"notificationTypes": ["ThresholdCrossedNotification"]
}
}
\ 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.\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 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
{ "type": "array", "items": { "description": "This type represents a subscription.\n", "type": "object", "required": [ "id", "callbackUri", "_links" ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "filter": { "description": "This type represents a filter that can be used to subscribe for notifications related to performance management events.\n", "type": "object", "properties": { "vnfInstanceSubscriptionFilter": { "description": "This type represents subscription filter criteria to match VNF instances.\n", "type": "object", "properties": { "vnfdIds": { "description": "If present, match VNF instances that were created based on a VNFD identified by one of the vnfdId values listed in this attribute. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" } }, "vnfProductsFromProviders": { "description": "If present, match VNF instances that belong to VNF products from certain providers. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "type": "object", "required": [ "vnfProvider" ], "properties": { "vnfProvider": { "description": "Name of the VNF provider to match.\n", "type": "string" }, "vnfProducts": { "description": "If present, match VNF instances that belong to VNF products with certain product names, from one particular provider.\n", "type": "array", "items": { "type": "object", "required": [ "vnfProductName" ], "properties": { "vnfProductName": { "description": "Name of the VNF product to match.\n", "type": "string" }, "versions": { "description": "If present, match VNF instances that belong to VNF products with certain versions and a certain product name, from one particular provider.\n", "type": "array", "items": { "type": "object", "required": [ "vnfSoftwareVersion" ], "properties": { "vnfSoftwareVersion": { "description": "A version.\n", "type": "string" }, "vnfdVersions": { "description": "If present, match VNF instances that belong to VNF products with certain VNFD versions, a certain software version and a certain product name, from one particular provider.\n", "type": "array", "items": { "description": "A version.\n", "type": "string" } } } } } } } } } } }, "vnfInstanceIds": { "description": "If present, match VNF instances with an instance identifier listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" } }, "vnfInstanceNames": { "description": "If present, match VNF instances with a VNF Instance Name listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "type": "string" } } } }, "notificationTypes": { "description": "Match particular notification types. Permitted values: * ThresholdCrossedNotification * PerformanceInformationAvailableNotification The permitted values of the \"notificationTypes\" attribute are spelled exactly as the names of the notification types to facilitate automated code generation systems.\n", "type": "string", "enum": [ "ThresholdCrossedNotification", "PerformanceInformationAvailableNotification" ] } } }, "callbackUri": { "description": "The URI of the endpoint to send the notification to.\n", "type": "string", "format": "url" }, "_links": { "description": "Links to resources related to 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" } } } } } } }}
\ No newline at end of file
{ "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n", "type": "object", "required": [ "status", "detail" ], "properties": { "type": { "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n", "type": "string", "format": "URI" }, "title": { "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n", "type": "string" }, "status": { "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n", "type": "integer" }, "detail": { "description": "A human-readable explanation specific to this occurrence of the problem.\n", "type": "string" }, "instance": { "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n", "type": "string", "format": "URI" } }}
\ No newline at end of file
{ "type": "array", "items": { "description": "This type represents a subscription.\n", "type": "object", "required": [ "id", "callbackUri", "_links" ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "filter": { "description": "This type represents a filter that can be used to subscribe for notifications related to performance management events.\n", "type": "object", "properties": { "vnfInstanceSubscriptionFilter": { "description": "This type represents subscription filter criteria to match VNF instances.\n", "type": "object", "properties": { "vnfdIds": { "description": "If present, match VNF instances that were created based on a VNFD identified by one of the vnfdId values listed in this attribute. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" } }, "vnfProductsFromProviders": { "description": "If present, match VNF instances that belong to VNF products from certain providers. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "type": "object", "required": [ "vnfProvider" ], "properties": { "vnfProvider": { "description": "Name of the VNF provider to match.\n", "type": "string" }, "vnfProducts": { "description": "If present, match VNF instances that belong to VNF products with certain product names, from one particular provider.\n", "type": "array", "items": { "type": "object", "required": [ "vnfProductName" ], "properties": { "vnfProductName": { "description": "Name of the VNF product to match.\n", "type": "string" }, "versions": { "description": "If present, match VNF instances that belong to VNF products with certain versions and a certain product name, from one particular provider.\n", "type": "array", "items": { "type": "object", "required": [ "vnfSoftwareVersion" ], "properties": { "vnfSoftwareVersion": { "description": "A version.\n", "type": "string" }, "vnfdVersions": { "description": "If present, match VNF instances that belong to VNF products with certain VNFD versions, a certain software version and a certain product name, from one particular provider.\n", "type": "array", "items": { "description": "A version.\n", "type": "string" } } } } } } } } } } }, "vnfInstanceIds": { "description": "If present, match VNF instances with an instance identifier listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" } }, "vnfInstanceNames": { "description": "If present, match VNF instances with a VNF Instance Name listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n", "type": "array", "items": { "type": "string" } } } }, "notificationTypes": { "description": "Match particular notification types. Permitted values: * ThresholdCrossedNotification * PerformanceInformationAvailableNotification The permitted values of the \"notificationTypes\" attribute are spelled exactly as the names of the notification types to facilitate automated code generation systems.\n", "type": "string", "enum": [ "ThresholdCrossedNotification", "PerformanceInformationAvailableNotification" ] } } }, "callbackUri": { "description": "The URI of the endpoint to send the notification to.\n", "type": "string", "format": "url" }, "_links": { "description": "Links to resources related to 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" } } } } } } }}
\ No newline at end of file
{ "type": "array", "items": { "description": "This type represents a threshold.\n", "type": "object", "required": [ "id", "objectInstanceId", "criteria", "_links" ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "objectInstanceId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "criteria": { "description": "This type represents criteria that define a threshold.\n", "type": "object", "required": [ "performanceMetric", "thresholdType" ], "properties": { "performanceMetric": { "description": "Defines the performance metric associated with the threshold, as specified in ETSI GS NFV-IFA 027).\n", "type": "string" }, "thresholdType": { "description": "Type of threshold. This attribute determines which other attributes are present in the data structure. Permitted values: * SIMPLE: Single-valued static threshold In the present document, simple thresholds are defined. The definition of additional threshold types is left for future specification.\n", "type": "string", "enum": [ "SIMPLE" ] }, "simpleThresholdDetails": { "description": "Details of a simple threshold. Shall be present if thresholdType=\"SIMPLE\".\n", "type": "object", "required": [ "thresholdValue", "hysteresis" ], "properties": { "thresholdValue": { "description": "The threshold value. Shall be represented as a floating point number.\n", "type": "integer" }, "hysteresis": { "description": "The hysteresis of the threshold. Shall be represented as a non-negative floating point number. A notification with crossing direction \"UP\" will be generated if the measured value reaches or exceeds \"thresholdValue\" + \"hysteresis\". A notification with crossing direction \"DOWN\" will be generated if the measured value reaches or undercuts \"thresholdValue\" - \"hysteresis\". The hysteresis is defined to prevent storms of threshold crossing notifications. When processing a request to create a threshold, implementations should enforce a suitable minimum value for this attribute (e.g. override the value or reject the request).\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" } } }, "object": { "description": "Link to a resource representing the VNF instance for which performance information is collected. Shall be present if the VNF instance information is accessible as a resource.\n" } } } } }}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment