Issues & Decisions
# | Issue | Notes | Decision |
---|---|---|---|
1 | Is the requestId in the southbound request equal to the dataJobId coming in from the northound interfaces? (see writeJob for example) | Can the dataJobId used as the requestId? Csaba Kocsis |
Csaba Kocsis and Toine Siebelink agreed that requestId should be renamed to jobId on all interfaces |
NCMP → DMI
As part of the overall datajob solution there must be an interface for data flow between the NCMP-lib in DCM and the DMI Plugin.
This story involves the design and implementation of that interface for both the DMI request and response.
- Define new REST interface :
- Method: POST
- Path: /dmi/v1/writeJob/{requestId}
Only writeJob required for MVP. Read, Status, Result will be completed in a later iteration.
Acceptance Criteria (pending stakeholder agreement):
- New Interface DMI-I-02 with document and diagram updates. Both Wiki and RTD
- Define swagger for request/response (additional info for forwarding data job request : moduleSetTag, privateProperties, dataProducerId, requestId)
- Agree and implement yaml for this interface
- Stakeholder acceptance of yaml
Data SubJob create (NCMP → DMI)
This is a mirror of the Datajob read/write request with the added details needed for the DMI plugins. Below you can see the changes for the READ but the same changes are applicable for the WRITE too.
Method: POST
Path: /dmi/v1/readJob
DMI Data SubJob READ request
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
destination | The destination of the results. ( e.g. S3 Bucket) | Query | string | N |
dataaccepttype | Define the data response accept type. Passible values: · application/vnd.3gpp.object-tree-hierarchical+json (default) · application/vnd.3gpp.object-tree-flat+json | request body | enum | N |
datacontenttype | Define the data request content type. Passible values: · application/3gpp-json-patch+json (default) | request body | enum | N |
dataProducerId | ID of the producer registered by DMI for the alernateIDs in the operations in this request. | request body | String | Y |
requestId | Identifier for the overall Datajob | request body | String | Y |
data | List of operations to be executed. | request body | List of DMI3gppReadOperation | Y |
DMI3gppReadOperation
Name | Description | Type | Mandatory |
---|---|---|---|
path | It is a unique identifier of a managed object (MO) on a network element. | String | Y |
op | Describes the operation to execute. The value can be: "read" | String | Y |
operationId | Unique identifier of the operation within the request | Integer | N |
attributes | This parameter specifies the attributes of the scoped resources that are returned. | List of String | N |
fields | This parameter specifies the attribute fields of the scoped resources that are returned. This should be used if an attribute is a struct and only a subset of its fields should be returned. | List of String | N |
filter | The parameter is used to filter the scoped Managed Objects. Only Managed Objects passing the filter criteria will be fetched. | List of String | N |
scopeType | ScopeType selects MOs depending on relationships with Base Managed Object. | enum[BASE_ONLY, BASE_ALL, BASE_NTH_LEVEL, BASE_SUBTREE] | N |
scopeLevel | Only used when the scope type is BASE_NTH_LEVEL | Integer | N |
moduleSetTag | Module set identifier | String | Y |
privateProperties | CMHandle private properties for the alternateID in the path. | Map | Y |
Response
Status code: 200 - OK
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
dataProducerJobId | The ID of the created job by the data producer. | response body | String | Y |
dmiPluginName | The target DMI that the job was performed on | response body | String | Y |
dataProducerJobID | ID of the job created by the data producer | response body | String | Y |
DMI Data SubJob WRITE request
Method: POST
Path: /dmi/v1/writeJob
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
destination | The destination of the results. ( e.g. S3 Bucket) | Query | string | N |
dataaccepttype | Define the data response accept type. Passible values: · application/vnd.3gpp.object-tree-hierarchical+json (default) · application/vnd.3gpp.object-tree-flat+json | request body | enum | N |
datacontenttype | Define the data request content type. Passible values: · application/3gpp-json-patch+json (default) | request body | enum | N |
dataProducerId | ID of the producer registered by DMI for the alernateIDs in the operations in this request. | request body | String | Y |
requestId | Identifier for the overall Datajob | request body | String | Y |
data | List of operations to be executed. | request body | List of DMI3gppWriteOperation | Y |
DMI3gppWriteOperation
Name | Description | Type | Mandatory |
---|---|---|---|
path | It is a unique identifier of a managed object (MO) on a network element. | String | Y |
op | Describes the operation to execute. The value can be: "add": creates a new MO with the id and attributes given in the value | String | Y |
operationId | Unique identifier of the operation within the request | Integer | N |
value | NA if op == remove Resource if op == add Object if op == replace ActionParameters if op == action | Object | N |
moduleSetTag | Module set identifier | String | Y |
privateProperties | CMHandle private properties for the alternateID in the path. | Map | Y |
Response
Status code: 200 - OK
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
dataProducerJobId | The ID of the created job by the data producer. | response body | String | Y |
dmiPluginName | The target DMI that the job was performed on | response body | String | Y |
dataProducerJobId | ID of the job created by the data producer | response body | String | Y |
Data subjob status check (NCMP → DMI)
Request:
Method: GET
Path: /dmi/v1/writeJob/dataProducer/{dataProducerd}/dataProducerJob/{dataProducerdJobId}/status
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
dataProducerId | ID of the producer registered by DMI for the alernateIDs in the operations in this request. | Path | String | Y |
dataProducerJobId | Identifier of the job created by the data producer. | Path | String | Y |
Response:
Status code: 200 - OK
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
status | enum that represents the status of the subjob. Possible values: | response body | enum: [ NOT_STARTED, RUNNING, FINSHED, FAILED, PARTIALLY_FAILED, CANCELLING, CANCELLED ] | Y |
Data subjob retrieve result (NCMP → DMI)
Request:
Method: GET
Path: /dmi/v1/writeJob/dataProducer/{dataProducerd}/dataProducerJob/{dataProducerdJobId}/result?destination={destination}
Parameters:
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
dataProducerId | ID of the producer registered by DMI for the alternateIDs in the operations in this request. | Path | String | Y |
dataProducerJobId | Identifier of the job created by the data producer. (not globally unique) | Path | String | Y |
destination | The destination of the results: Kafka topic name or s3 bucket name. This shall be put into the Kafka message headers returned to NCMP | Query | String | Y |
Response:
WRITE
Status Code: 200 - Ok
Data part of the message
READ
Status Code: 200 - Ok
Name | Description | Location | Type | Mandatory |
---|---|---|---|---|
resulturi | internal ncmp topic name | response body | String | Y |