summaryrefslogtreecommitdiffstats
path: root/a1-policy-management
diff options
context:
space:
mode:
Diffstat (limited to 'a1-policy-management')
-rw-r--r--a1-policy-management/api/pms-api.json633
-rw-r--r--a1-policy-management/pom.xml4
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTask.java35
-rw-r--r--a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTaskTest.java71
4 files changed, 547 insertions, 196 deletions
diff --git a/a1-policy-management/api/pms-api.json b/a1-policy-management/api/pms-api.json
index 5c5915c5..a81070f7 100644
--- a/a1-policy-management/api/pms-api.json
+++ b/a1-policy-management/api/pms-api.json
@@ -15,18 +15,22 @@
"type": "integer",
"example": 404
}
- }
+ },
+ "example": null
},
"void": {
"description": "Void/empty",
- "type": "object"
+ "type": "object",
+ "example": null
},
"status_info_v2": {
"type": "object",
"properties": {"status": {
"description": "status text",
- "type": "string"
- }}
+ "type": "string",
+ "example": null
+ }},
+ "example": null
},
"ric_info_v2": {
"description": "Information for a Near-RT RIC",
@@ -34,15 +38,18 @@
"properties": {
"ric_id": {
"description": "identity of the Near-RT RIC",
- "type": "string"
+ "type": "string",
+ "example": null
},
"managed_element_ids": {
"description": "O1 identities for managed entities",
"type": "array",
"items": {
"description": "O1 identities for managed entities",
- "type": "string"
- }
+ "type": "string",
+ "example": null
+ },
+ "example": null
},
"state": {
"description": "Represents the states for a Near-RT RIC",
@@ -52,17 +59,21 @@
"AVAILABLE",
"SYNCHRONIZING",
"CONSISTENCY_CHECK"
- ]
+ ],
+ "example": null
},
"policytype_ids": {
"description": "supported policy types",
"type": "array",
"items": {
"description": "supported policy types",
- "type": "string"
- }
+ "type": "string",
+ "example": null
+ },
+ "example": null
}
- }
+ },
+ "example": null
},
"service_registration_info_v2": {
"description": "Information for one service",
@@ -71,18 +82,22 @@
"properties": {
"callback_url": {
"description": "callback for notifying of Near-RT RIC state changes",
- "type": "string"
+ "type": "string",
+ "example": null
},
"service_id": {
"description": "identity of the service",
- "type": "string"
+ "type": "string",
+ "example": null
},
"keep_alive_interval_seconds": {
"format": "int64",
"description": "keep alive interval for the service. This is used to enable optional heartbeat supervision of the service. If set (> 0) the registered service should regularly invoke a 'keepalive' REST call. When a service fails to invoke this 'keepalive' call within the configured time, the service is considered unavailable. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means timeout supervision is disabled.",
- "type": "integer"
+ "type": "integer",
+ "example": null
}
- }
+ },
+ "example": null
},
"policy_info_list_v2": {
"description": "List of policy information",
@@ -90,8 +105,10 @@
"properties": {"policies": {
"description": "List of policy information",
"type": "array",
- "items": {"$ref": "#/components/schemas/policy_info_v2"}
- }}
+ "items": {"$ref": "#/components/schemas/policy_info_v2"},
+ "example": null
+ }},
+ "example": null
},
"policy_status_info_v2": {
"description": "Status for one A1-P Policy",
@@ -99,13 +116,16 @@
"properties": {
"last_modified": {
"description": "timestamp, last modification time",
- "type": "string"
+ "type": "string",
+ "example": null
},
"status": {
"description": "the Policy status",
- "type": "object"
+ "type": "object",
+ "example": null
}
- }
+ },
+ "example": null
},
"service_status_v2": {
"description": "List of service information",
@@ -113,23 +133,28 @@
"properties": {
"callback_url": {
"description": "callback for notifying of RIC synchronization",
- "type": "string"
+ "type": "string",
+ "example": null
},
"service_id": {
"description": "identity of the service",
- "type": "string"
+ "type": "string",
+ "example": null
},
"keep_alive_interval_seconds": {
"format": "int64",
"description": "policy keep alive timeout",
- "type": "integer"
+ "type": "integer",
+ "example": null
},
"time_since_last_activity_seconds": {
"format": "int64",
"description": "time since last invocation by the service",
- "type": "integer"
+ "type": "integer",
+ "example": null
}
- }
+ },
+ "example": null
},
"ric_info_list_v2": {
"description": "List of Near-RT RIC information",
@@ -137,16 +162,20 @@
"properties": {"rics": {
"description": "List of Near-RT RIC information",
"type": "array",
- "items": {"$ref": "#/components/schemas/ric_info_v2"}
- }}
+ "items": {"$ref": "#/components/schemas/ric_info_v2"},
+ "example": null
+ }},
+ "example": null
},
"policytype_v2": {
"description": "Policy type",
"type": "object",
"properties": {"policy_schema": {
"description": "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema",
- "type": "object"
- }}
+ "type": "object",
+ "example": null
+ }},
+ "example": null
},
"policytype_id_list_v2": {
"description": "Information about policy types",
@@ -156,9 +185,12 @@
"type": "array",
"items": {
"description": "Policy type identities",
- "type": "string"
- }
- }}
+ "type": "string",
+ "example": null
+ },
+ "example": null
+ }},
+ "example": null
},
"policy_info_v2": {
"description": "Information for one A1-P Policy",
@@ -173,33 +205,41 @@
"properties": {
"ric_id": {
"description": "identity of the target Near-RT RIC",
- "type": "string"
+ "type": "string",
+ "example": null
},
"policy_id": {
"description": "identity of the policy",
- "type": "string"
+ "type": "string",
+ "example": null
},
"transient": {
"description": "if true, the policy is deleted at RIC restart. If false, its value is maintained by this service until explicitly deleted. Default false.",
- "type": "boolean"
+ "type": "boolean",
+ "example": null
},
"service_id": {
"description": "the identity of the service owning the policy",
- "type": "string"
+ "type": "string",
+ "example": null
},
"policy_data": {
"description": "the configuration of the policy",
- "type": "object"
+ "type": "object",
+ "example": null
},
"status_notification_uri": {
"description": "Callback URI for policy status updates",
- "type": "string"
+ "type": "string",
+ "example": null
},
"policytype_id": {
"description": "identity of the policy type",
- "type": "string"
+ "type": "string",
+ "example": null
}
- }
+ },
+ "example": null
},
"policy_id_list_v2": {
"description": "A list of policy identities",
@@ -209,9 +249,12 @@
"type": "array",
"items": {
"description": "Policy identities",
- "type": "string"
- }
- }}
+ "type": "string",
+ "example": null
+ },
+ "example": null
+ }},
+ "example": null
},
"service_list_v2": {
"description": "List of service information",
@@ -219,8 +262,10 @@
"properties": {"service_list": {
"description": "List of service information",
"type": "array",
- "items": {"$ref": "#/components/schemas/service_status_v2"}
- }}
+ "items": {"$ref": "#/components/schemas/service_status_v2"},
+ "example": null
+ }},
+ "example": null
},
"service_callback_info_v2": {
"description": "Information transferred as in Service callbacks (callback_url)",
@@ -232,21 +277,31 @@
"properties": {
"ric_id": {
"description": "identity of a Near-RT RIC",
- "type": "string"
+ "type": "string",
+ "example": null
},
"event_type": {
"description": "values:\nAVAILABLE: the Near-RT RIC has become available for A1 Policy management",
"type": "string",
- "enum": ["AVAILABLE"]
+ "enum": ["AVAILABLE"],
+ "example": null
}
- }
+ },
+ "example": null
},
"Link": {
"type": "object",
"properties": {
- "templated": {"type": "boolean"},
- "href": {"type": "string"}
- }
+ "templated": {
+ "type": "boolean",
+ "example": null
+ },
+ "href": {
+ "type": "string",
+ "example": null
+ }
+ },
+ "example": null
}
}},
"openapi": "3.0.1",
@@ -258,37 +313,55 @@
"responses": {
"200": {
"description": "Policies",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_info_list_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/policy_info_list_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Near-RT RIC, policy type or service not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "policytype_id",
"description": "Select policies with a given type identity.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "ric_id",
"description": "Select policies for a given Near-RT RIC identity.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "service_id",
"description": "Select policies owned by a given service.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "type_name",
"description": "Select policies of a given type name (type identity has the format <typename_version>)",
@@ -302,7 +375,13 @@
"operationId": "threaddump_2",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -311,7 +390,10 @@
"operationId": "getStatus",
"responses": {"200": {
"description": "Service is living",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/status_info_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/status_info_v2"},
+ "example": null
+ }}
}},
"tags": ["Health Check"]
}},
@@ -320,7 +402,13 @@
"operationId": "loggers",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -329,7 +417,13 @@
"operationId": "health-path",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -340,23 +434,35 @@
"responses": {
"200": {
"description": "Near-RT RIC is found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ric_info_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/ric_info_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Near-RT RIC is not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "managed_element_id",
"description": "The identity of a Managed Element. If given, the Near-RT RIC managing the ME is returned.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "ric_id",
"description": "The identity of a Near-RT RIC to get information for.",
@@ -371,30 +477,45 @@
"responses": {
"200": {
"description": "Policy type IDs",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policytype_id_list_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/policytype_id_list_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Near-RT RIC is not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "ric_id",
"description": "Select types for the given Near-RT RIC identity.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "type_name",
"description": "Select types with the given type name (type identity has the format <typename_version>)",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "compatible_with_version",
"description": "Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.",
@@ -410,15 +531,24 @@
"responses": {
"200": {
"description": "Policy found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_info_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/policy_info_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Policy is not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "policy_id",
"required": true
@@ -431,23 +561,38 @@
"responses": {
"200": {
"description": "Not used",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/void"},
+ "example": null
+ }}
},
"423": {
"description": "Near-RT RIC is not operational",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
},
"204": {
"description": "Policy deleted",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/void"},
+ "example": null
+ }}
},
"404": {
"description": "Policy is not found",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "policy_id",
"required": true
@@ -460,10 +605,19 @@
"operationId": "metrics-requiredMetricName",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "requiredMetricName",
"required": true
@@ -477,11 +631,20 @@
"responses": {
"200": {
"description": "Configuration",
- "content": {"application/json": {"schema": {"type": "object"}}}
+ "content": {"application/json": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
},
"404": {
"description": "File is not found or readable",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"tags": ["Management of configuration"]
@@ -489,22 +652,37 @@
"put": {
"summary": "Replace the current configuration file with the given configuration",
"requestBody": {
- "content": {"application/json": {"schema": {"type": "object"}}},
+ "content": {"application/json": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }},
"required": true
},
"operationId": "putConfiguration",
"responses": {
"200": {
"description": "Configuration updated",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/void"},
+ "example": null
+ }}
},
"400": {
"description": "Invalid configuration provided",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
},
"500": {
"description": "Something went wrong when replacing the configuration. Try again.",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"tags": ["Management of configuration"]
@@ -515,13 +693,18 @@
"operationId": "links",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {
- "additionalProperties": {
- "additionalProperties": {"$ref": "#/components/schemas/Link"},
- "type": "object"
+ "content": {"*/*": {
+ "schema": {
+ "additionalProperties": {
+ "additionalProperties": {"$ref": "#/components/schemas/Link"},
+ "type": "object",
+ "example": null
+ },
+ "type": "object",
+ "example": null
},
- "type": "object"
- }}}
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -531,10 +714,19 @@
"operationId": "loggers-name",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "name",
"required": true
@@ -546,10 +738,19 @@
"operationId": "loggers-name_2",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "name",
"required": true
@@ -564,15 +765,27 @@
"responses": {
"200": {
"description": "Service supervision timer refreshed, OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
},
"404": {
"description": "The service is not found, needs re-registration",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "service_id",
"required": true
@@ -584,7 +797,13 @@
"operationId": "metrics",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -595,15 +814,24 @@
"responses": {
"200": {
"description": "OK",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ric_info_list_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/ric_info_list_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Policy type is not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "policytype_id",
"description": "The identity of a policy type. If given, all Near-RT RICs supporting the policy type are returned",
@@ -619,15 +847,24 @@
"responses": {
"200": {
"description": "OK",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_list_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/service_list_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Service is not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "service_id",
"description": "The identity of the service",
@@ -638,7 +875,10 @@
"put": {
"summary": "Register a service",
"requestBody": {
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_registration_info_v2"}}},
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/service_registration_info_v2"},
+ "example": null
+ }},
"required": true
},
"description": "Registering a service is needed to:<ul><li>Get callbacks.<\/li><li>Activate supervision of the service. If a service is inactive, its policies will be deleted.<\/li><\/ul>",
@@ -646,15 +886,30 @@
"responses": {
"200": {
"description": "Service updated",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
},
"201": {
"description": "Service created",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
},
"400": {
"description": "The ServiceRegistrationInfo is not accepted",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"tags": ["Service Registry and Supervision"]
@@ -665,7 +920,13 @@
"operationId": "info",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -674,7 +935,13 @@
"operationId": "getStatusV1",
"responses": {"200": {
"description": "Service is living",
- "content": {"*/*": {"schema": {"type": "string"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "string",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Health Check"]
}},
@@ -684,15 +951,24 @@
"responses": {
"200": {
"description": "Policy type",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/policytype_v2"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/policytype_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Policy type is not found",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "policytype_id",
"required": true
@@ -704,7 +980,13 @@
"operationId": "logfile",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -713,7 +995,13 @@
"operationId": "health",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -725,37 +1013,55 @@
"responses": {
"200": {
"description": "Policy identities",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_id_list_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/policy_id_list_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Near-RT RIC or type not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "policytype_id",
"description": "Select policies of a given policy type identity.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "ric_id",
"description": "Select policies of a given Near-RT RIC identity.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "service_id",
"description": "Select policies owned by a given service.",
"required": false
},
{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "query",
"name": "type_name",
"description": "Select policies of types with the given type name (type identity has the format <typename_version>)",
@@ -767,26 +1073,41 @@
"put": {
"summary": "Create or update a policy",
"requestBody": {
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_info_v2"}}},
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/policy_info_v2"},
+ "example": null
+ }},
"required": true
},
"operationId": "putPolicy",
"responses": {
"200": {
"description": "Policy updated",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/void"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/void"},
+ "example": null
+ }}
},
"201": {
"description": "Policy created",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/void"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/void"},
+ "example": null
+ }}
},
"423": {
"description": "Near-RT RIC is not operational",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
},
"404": {
"description": "Near-RT RIC or policy type is not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"tags": ["A1 Policy Management"]
@@ -795,14 +1116,20 @@
"/r-app/near-rt-ric-status": {"post": {
"summary": "Callback for Near-RT RIC status",
"requestBody": {
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_callback_info_v2"}}},
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/service_callback_info_v2"},
+ "example": null
+ }},
"required": true
},
"description": "The URL to this call is registered at Service registration.",
"operationId": "serviceCallback",
"responses": {"200": {
"description": "OK",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/void"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/void"},
+ "example": null
+ }}
}},
"tags": ["Callbacks"]
}},
@@ -812,19 +1139,34 @@
"responses": {
"200": {
"description": "Not used",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/void"},
+ "example": null
+ }}
},
"204": {
"description": "Service unregistered",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
},
"404": {
"description": "Service not found",
- "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"*/*": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "service_id",
"required": true
@@ -836,7 +1178,13 @@
"operationId": "heapdump",
"responses": {"200": {
"description": "OK",
- "content": {"*/*": {"schema": {"type": "object"}}}
+ "content": {"*/*": {
+ "schema": {
+ "type": "object",
+ "example": null
+ },
+ "example": null
+ }}
}},
"tags": ["Actuator"]
}},
@@ -846,15 +1194,24 @@
"responses": {
"200": {
"description": "Policy status",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_status_info_v2"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/policy_status_info_v2"},
+ "example": null
+ }}
},
"404": {
"description": "Policy is not found",
- "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
+ "content": {"application/json": {
+ "schema": {"$ref": "#/components/schemas/error_information"},
+ "example": null
+ }}
}
},
"parameters": [{
- "schema": {"type": "string"},
+ "schema": {
+ "type": "string",
+ "example": null
+ },
"in": "path",
"name": "policy_id",
"required": true
diff --git a/a1-policy-management/pom.xml b/a1-policy-management/pom.xml
index bd343e9a..6bb438a5 100644
--- a/a1-policy-management/pom.xml
+++ b/a1-policy-management/pom.xml
@@ -41,8 +41,10 @@
<formatter-maven-plugin.version>2.13.0</formatter-maven-plugin.version>
<spotless-maven-plugin.version>2.5.0</spotless-maven-plugin.version>
<commons-io.version>2.11.0</commons-io.version>
+ <guava.version>31.0.1-jre</guava.version>
<docker-maven-plugin>0.30.0</docker-maven-plugin>
<surefire-maven-plugin.version>3.0.0-M5</surefire-maven-plugin.version>
+ <snakeyaml.version>1.32</snakeyaml.version><!-- overrides version included via spring-boot-starter:jar:2.6.11 to address CVE-2022-38752. Remove later if possible -->
<!-- Version must be higher than version 2.19.1 that is defined in the parent pom for JUnit 5 tests to be run. Do not remove! -->
<jacoco-maven-plugin.version>0.8.6</jacoco-maven-plugin.version>
<swagger-codegen-maven-plugin.version>3.0.11</swagger-codegen-maven-plugin.version>
@@ -116,6 +118,7 @@
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
+ <version>${guava.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
@@ -224,7 +227,6 @@
<version>${commons-io.version}</version>
<scope>test</scope>
</dependency>
- <!-- https://mvnrepository.com/artifact/com.github.erosb/everit-json-schema -->
<dependency>
<groupId>com.github.erosb</groupId>
<artifactId>everit-json-schema</artifactId>
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTask.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTask.java
index 8eb8fbcb..95999a04 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTask.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTask.java
@@ -22,37 +22,37 @@ package org.onap.ccsdk.oran.a1policymanagementservice.tasks;
import io.micrometer.core.instrument.MeterRegistry;
import java.lang.invoke.MethodHandles;
-import java.util.concurrent.atomic.AtomicLong;
+import lombok.AccessLevel;
+import lombok.Getter;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policies;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyTypes;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* The aim is to collect statistical values from the A1 Policy Management Service.
- * The counters are being updated every minute.
*/
-@EnableScheduling
@Component
public class RefreshCounterTask {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+ @Autowired
private final Rics rics;
+
+ @Autowired
private final PolicyTypes policyTypes;
+
+ @Autowired
private final Policies policies;
+ @Autowired
+ @Getter(AccessLevel.PUBLIC)
private final MeterRegistry meterRegistry;
- private final AtomicLong ricCount;
- private final AtomicLong policyTypeCount;
- private final AtomicLong policyCount;
-
@Autowired
public RefreshCounterTask(Rics rics, PolicyTypes policyTypes, Policies policies, MeterRegistry meterRegistry) {
this.rics = rics;
@@ -60,19 +60,10 @@ public class RefreshCounterTask {
this.policies = policies;
this.meterRegistry = meterRegistry;
- ricCount = meterRegistry.gauge("total_ric_count", new AtomicLong(0));
- policyTypeCount = meterRegistry.gauge("total_policy_type_count", new AtomicLong(0));
- policyCount = meterRegistry.gauge("total_policy_count", new AtomicLong(0));
+ logger.trace("Counters have been initialized.");
+ meterRegistry.gauge("total_ric_count", rics, Rics::size);
+ meterRegistry.gauge("total_policy_type_count", policyTypes, PolicyTypes::size);
+ meterRegistry.gauge("total_policy_count", policies, Policies::size);
}
- /**
- * Every minute, updates counters for statistical purposes.
- */
- @Scheduled(fixedRate = 1000 * 60)
- public void checkAllCounters() {
- logger.trace("Checking counters starting...");
- ricCount.set(rics.size());
- policyCount.set(policies.size());
- policyTypeCount.set(policyTypes.size());
- }
}
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTaskTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTaskTest.java
index 3adfb316..bd315c26 100644
--- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTaskTest.java
+++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshCounterTaskTest.java
@@ -23,6 +23,7 @@ package org.onap.ccsdk.oran.a1policymanagementservice.tasks;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.spy;
+import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import java.time.Instant;
@@ -42,7 +43,7 @@ import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics;
@ExtendWith(MockitoExtension.class)
-public class RefreshCounterTaskTest {
+class RefreshCounterTaskTest {
private static final String POLICY_TYPE_1_NAME = "type1";
private static final PolicyType POLICY_TYPE_1 = PolicyType.builder().id(POLICY_TYPE_1_NAME).schema("").build();
@@ -56,16 +57,16 @@ public class RefreshCounterTaskTest {
.ric(RIC_1).type(POLICY_TYPE_1).lastModified(Instant.now()).isTransient(false)
.statusNotificationUri("statusNotificationUri").build();
- private PrometheusMeterRegistry prometheusMeterRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
+ private final PrometheusMeterRegistry prometheusMeterRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
private final ApplicationConfig appConfig = new ApplicationConfig();
- private PolicyTypes types;
+ private PolicyTypes policyTypes;
private Policies policies;
private Rics rics = new Rics();
@BeforeEach
void init() {
- types = new PolicyTypes(appConfig);
+ policyTypes = new PolicyTypes(appConfig);
policies = new Policies(appConfig);
rics.clear();
@@ -79,16 +80,16 @@ public class RefreshCounterTaskTest {
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
rics.put(RIC_1);
- types.put(POLICY_TYPE_1);
+ policyTypes.put(POLICY_TYPE_1);
policies.put(POLICY_1);
- RefreshCounterTask refreshCounterTaskUnderTest = spy(createRefreshCounterTask());
- refreshCounterTaskUnderTest.checkAllCounters();
+ RefreshCounterTask spy = spy(createRefreshCounterTask()); // instantiate RefreshCounterTask
+ MeterRegistry meterRegistry = spy.getMeterRegistry();
- assertThat(prometheusMeterRegistry.get("total_ric_count").gauge().value()).isEqualTo(1);
- assertThat(prometheusMeterRegistry.get("total_policy_type_count").gauge().value()).isEqualTo(1);
- assertThat(prometheusMeterRegistry.get("total_policy_count").gauge().value()).isEqualTo(1);
+ assertThat(meterRegistry.get("total_ric_count").gauge().value()).isEqualTo(1);
+ assertThat(meterRegistry.get("total_policy_type_count").gauge().value()).isEqualTo(1);
+ assertThat(meterRegistry.get("total_policy_count").gauge().value()).isEqualTo(1);
}
@Test
@@ -97,30 +98,30 @@ public class RefreshCounterTaskTest {
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
rics.put(RIC_1);
- types.put(POLICY_TYPE_1);
+ policyTypes.put(POLICY_TYPE_1);
policies.put(POLICY_1);
String POLICY_2_ID = "policyId2";
- Policy POLICY_2 = Policy.builder() //
- .id(POLICY_2_ID) //
- .json("") //
- .ownerServiceId("service") //
- .ric(RIC_1) //
- .type(POLICY_TYPE_1) //
- .lastModified(Instant.now()) //
+ Policy POLICY_2 = Policy.builder()
+ .id(POLICY_2_ID)
+ .json("")
+ .ownerServiceId("service")
+ .ric(RIC_1)
+ .type(POLICY_TYPE_1)
+ .lastModified(Instant.now())
.isTransient(false) //
- .statusNotificationUri("statusNotificationUri") //
+ .statusNotificationUri("statusNotificationUri")
.build();
policies.put(POLICY_2);
- RefreshCounterTask refreshCounterTaskUnderTest = spy(createRefreshCounterTask());
- refreshCounterTaskUnderTest.checkAllCounters();
+ RefreshCounterTask spy = spy(createRefreshCounterTask()); // instantiate RefreshCounterTask
+ MeterRegistry meterRegistry = spy.getMeterRegistry();
- assertThat(prometheusMeterRegistry.get("total_ric_count").gauge().value()).isEqualTo(1);
- assertThat(prometheusMeterRegistry.get("total_policy_type_count").gauge().value()).isEqualTo(1);
- assertThat(prometheusMeterRegistry.get("total_policy_count").gauge().value()).isEqualTo(2);
+ assertThat(meterRegistry.get("total_ric_count").gauge().value()).isEqualTo(1);
+ assertThat(meterRegistry.get("total_policy_type_count").gauge().value()).isEqualTo(1);
+ assertThat(meterRegistry.get("total_policy_count").gauge().value()).isEqualTo(2);
}
@Test
@@ -128,29 +129,29 @@ public class RefreshCounterTaskTest {
RIC_1.setState(Ric.RicState.AVAILABLE);
String POLICY_TYPE_2_NAME = "type2";
- PolicyType POLICY_TYPE_2 = PolicyType.builder() //
- .id(POLICY_TYPE_2_NAME) //
- .schema("") //
+ PolicyType POLICY_TYPE_2 = PolicyType.builder()
+ .id(POLICY_TYPE_2_NAME)
+ .schema("")
.build();
RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
RIC_1.addSupportedPolicyType(POLICY_TYPE_2);
rics.put(RIC_1);
- types.put(POLICY_TYPE_1);
- types.put(POLICY_TYPE_2);
+ policyTypes.put(POLICY_TYPE_1);
+ policyTypes.put(POLICY_TYPE_2);
policies.put(POLICY_1);
- RefreshCounterTask refreshCounterTaskUnderTest = spy(createRefreshCounterTask());
- refreshCounterTaskUnderTest.checkAllCounters();
+ RefreshCounterTask spy = spy(createRefreshCounterTask()); // instantiate RefreshCounterTask
+ MeterRegistry meterRegistry = spy.getMeterRegistry();
- assertThat(prometheusMeterRegistry.get("total_ric_count").gauge().value()).isEqualTo(1);
- assertThat(prometheusMeterRegistry.get("total_policy_type_count").gauge().value()).isEqualTo(2);
- assertThat(prometheusMeterRegistry.get("total_policy_count").gauge().value()).isEqualTo(1);
+ assertThat(meterRegistry.get("total_ric_count").gauge().value()).isEqualTo(1);
+ assertThat(meterRegistry.get("total_policy_type_count").gauge().value()).isEqualTo(2);
+ assertThat(meterRegistry.get("total_policy_count").gauge().value()).isEqualTo(1);
}
private RefreshCounterTask createRefreshCounterTask() {
- return new RefreshCounterTask(rics, types, policies, prometheusMeterRegistry);
+ return new RefreshCounterTask(rics, policyTypes, policies, prometheusMeterRegistry);
}
}