From b7128b31e2818b591ede570f187a3ecc38b06e3a Mon Sep 17 00:00:00 2001 From: Brian Freeman Date: Thu, 28 Sep 2017 20:31:06 +0000 Subject: SLI-API northbound add to docs Issue-ID: CCSDK-107 Change-Id: Ic4a41466288229140ae3cad79e650d14c7877cc9 Signed-off-by: Brian Freeman --- sliapi/model/src/main/resources/sli-api.20161110.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 sliapi/model/src/main/resources/sli-api.20161110.json (limited to 'sliapi/model/src/main/resources') diff --git a/sliapi/model/src/main/resources/sli-api.20161110.json b/sliapi/model/src/main/resources/sli-api.20161110.json new file mode 100644 index 000000000..0cc53fe92 --- /dev/null +++ b/sliapi/model/src/main/resources/sli-api.20161110.json @@ -0,0 +1 @@ +{"apiVersion":"1.0.0","swaggerVersion":"1.2","basePath":"restconf","resourcePath":null,"produces":["application/json","application/xml"],"apis":[{"path":"/config","operations":[{"method":"POST","summary":null,"notes":"Defines API to service logic interpreter","type":"(config)SLI-API_modulePOST","nickname":"POST-SLI-API_module","consumes":["application/json","application/xml"],"parameters":[{"name":"**(config)test-results","description":null,"required":false,"type":"SLI-API(config)test-results-TOP","paramType":"body"}],"responseMessages":null}]},{"path":"/config/SLI-API:test-results","operations":[{"method":"GET","summary":null,"notes":"Test results","type":"(config)test-results","nickname":"GET-test-results","consumes":null,"parameters":[],"responseMessages":null},{"method":"PUT","summary":null,"notes":"Test results","type":"SLI-API(config)test-results-TOP","nickname":"PUT-test-results","consumes":["application/json","application/xml"],"parameters":[{"name":"(config)test-results","description":null,"required":false,"type":"SLI-API(config)test-results-TOP","paramType":"body"}],"responseMessages":null},{"method":"DELETE","summary":null,"notes":"Test results","type":null,"nickname":"DELETE-test-results","consumes":null,"parameters":[],"responseMessages":null},{"method":"POST","summary":null,"notes":"Test results","type":"(config)test-resultsPOST","nickname":"POST-test-results","consumes":["application/json","application/xml"],"parameters":[{"name":"**(config)test-result","description":null,"required":false,"type":"SLI-API/test-results(config)test-result-TOP","paramType":"body"}],"responseMessages":null}]},{"path":"/config/SLI-API:test-results/test-result/{test-identifier}","operations":[{"method":"GET","summary":null,"notes":null,"type":"(config)test-result","nickname":"GET-test-result","consumes":null,"parameters":[{"name":"test-identifier","description":null,"required":false,"type":"string","paramType":"path"}],"responseMessages":null},{"method":"PUT","summary":null,"notes":null,"type":"SLI-API/test-results(config)test-result-TOP","nickname":"PUT-test-result","consumes":["application/json","application/xml"],"parameters":[{"name":"test-identifier","description":null,"required":false,"type":"string","paramType":"path"},{"name":"(config)test-result","description":null,"required":false,"type":"SLI-API/test-results(config)test-result-TOP","paramType":"body"}],"responseMessages":null},{"method":"DELETE","summary":null,"notes":null,"type":null,"nickname":"DELETE-test-result","consumes":null,"parameters":[{"name":"test-identifier","description":null,"required":false,"type":"string","paramType":"path"}],"responseMessages":null}]},{"path":"/operational/SLI-API:test-results","operations":[{"method":"GET","summary":null,"notes":"Test results","type":"(operational)test-results","nickname":"GET-test-results","consumes":null,"parameters":[],"responseMessages":null}]},{"path":"/operations/SLI-API:healthcheck","operations":[{"method":"POST","summary":null,"notes":null,"type":"(healthcheck)output-TOP","nickname":"healthcheck","consumes":["application/json","application/xml"],"parameters":[{"name":null,"description":null,"required":false,"type":"(healthcheck)input-TOP","paramType":"body"}],"responseMessages":null}]},{"path":"/operations/SLI-API:execute-graph","operations":[{"method":"POST","summary":null,"notes":" Method to add a new parameter.","type":"(execute-graph)output-TOP","nickname":"execute-graph","consumes":["application/json","application/xml"],"parameters":[{"name":null,"description":null,"required":false,"type":"(execute-graph)input-TOP","paramType":"body"}],"responseMessages":null}]}],"models":{"(execute-graph)output":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)output","type":"object","properties":{"SLI-API:response-code":{"type":"Some response-code","required":false},"SLI-API:ack-final-indicator":{"type":"Some ack-final-indicator","required":false},"SLI-API:context-memory-json":{"type":"Some context-memory-json","required":false},"SLI-API:response-message":{"type":"Some response-message","required":false}}},"SLI-API(config)sli-parameter":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)sli-parameter","type":"object","properties":{"SLI-API:boolean-value":{"type":"true","required":false},"SLI-API:parameter-name":{"description":"Parameter name","type":"Some parameter-name","required":false},"SLI-API:int-value":{"type":"-2147483648","required":false},"SLI-API:string-value":{"type":"Some string-value","required":false}}},"SLI-API/test-results(config)test-result":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API/test-results(config)test-result","type":"object","properties":{"SLI-API:results":{"type":"array","items":{"type":"Some results"},"required":false},"SLI-API:test-identifier":{"type":"Some test-identifier","required":false}}},"(config)sli-parameterPOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)sli-parameterPOST","type":"object","properties":{"parameter-name":{"description":"Parameter name","type":"Some parameter-name","required":false},"boolean-value":{"type":"true","required":false},"string-value":{"type":"Some string-value","required":false},"int-value":{"type":"-2147483648","required":false}}},"SLI-API(config)test-results":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)test-results","type":"object","properties":{"SLI-API:test-result":{"type":"array","items":{"$ref":"SLI-API/test-results(config)test-result"}}}},"(healthcheck)input":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)input","type":"object","properties":{"SLI-API:dummy-leaf":{"type":"Some dummy-leaf","required":false}}},"(execute-graph)input":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)input","type":"object","properties":{"SLI-API:rpc-name":{"type":"Some rpc-name","required":false},"SLI-API:sli-parameter":{"type":"array","items":{"$ref":"SLI-API(config)sli-parameter"}},"SLI-API:module-name":{"type":"Some module-name","required":false},"SLI-API:mode":{"type":"sync","required":false,"enum":["sync","async"]}}},"(execute-graph)input-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)input-TOP","type":"object","properties":{"SLI-API:input":{"type":"object","items":{"$ref":"(execute-graph)input"}}}},"unique_empty_identifier":{},"SLI-API/test-results(config)test-result-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API/test-results(config)test-result-TOP","type":"object","properties":{"SLI-API:test-result":{"type":"array","items":{"$ref":"SLI-API/test-results(config)test-result"}}}},"SLI-API(config)sli-parameter-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)sli-parameter-TOP","type":"object","properties":{"SLI-API:sli-parameter":{"type":"array","items":{"$ref":"SLI-API(config)sli-parameter"}}}},"SLI-API(operational)test-results":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(operational)test-results","type":"object","properties":{}},"(execute-graph)output-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)output-TOP","type":"object","properties":{"SLI-API:output":{"type":"object","items":{"$ref":"(execute-graph)output"}}}},"(healthcheck)output":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)output","type":"object","properties":{"SLI-API:response-code":{"type":"Some response-code","required":false},"SLI-API:ack-final-indicator":{"type":"Some ack-final-indicator","required":false},"SLI-API:context-memory-json":{"type":"Some context-memory-json","required":false},"SLI-API:response-message":{"type":"Some response-message","required":false}}},"(config)SLI-API_modulePOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)SLI-API_modulePOST","type":"object","properties":{"test-results":{"type":"object","items":{"$ref":"SLI-API(config)test-results"}}}},"(config)test-resultsPOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)test-resultsPOST","type":"object","properties":{"test-result":{"type":"array","items":{"$ref":"SLI-API/test-results(config)test-result"}}}},"SLI-API(operational)test-results-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(operational)test-results-TOP","type":"object","properties":{"SLI-API:test-results":{"description":"Test results","type":"object","items":{"$ref":"SLI-API(operational)test-results"}}}},"SLI-API(config)test-results-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)test-results-TOP","type":"object","properties":{"SLI-API:test-results":{"description":"Test results","type":"object","items":{"$ref":"SLI-API(config)test-results"}}}},"(healthcheck)input-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)input-TOP","type":"object","properties":{"SLI-API:input":{"type":"object","items":{"$ref":"(healthcheck)input"}}}},"(healthcheck)output-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)output-TOP","type":"object","properties":{"SLI-API:output":{"type":"object","items":{"$ref":"(healthcheck)output"}}}},"(config)test-resultPOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)test-resultPOST","type":"object","properties":{"test-identifier":{"type":"Some test-identifier","required":false}}}}} \ No newline at end of file -- cgit 1.2.3-korg From 312f6a301ae62f121482df6cbf969d41a76ca131 Mon Sep 17 00:00:00 2001 From: Dan Timoney Date: Wed, 11 Oct 2017 11:01:38 -0400 Subject: Add readthedocs info to sli/core Add additional information to sli/core readthedocs documentation. Change-Id: I9fe5e6185061ed6a05f373b6667f686e11d5f0aa Issue-ID: CCSDK-107 Signed-off-by: Dan Timoney --- docs/apis/sliapi.rst | 15 + docs/architecture.rst | 19 +- docs/build.rst | 17 +- docs/logging.rst | 16 +- docs/nodes.rst | 1031 ++++++++++++++++++++ docs/offeredapis.rst | 6 +- sliapi/model/pom.xml | 13 +- .../model/src/main/resources/sli-api.20161110.json | 514 +++++++++- 8 files changed, 1586 insertions(+), 45 deletions(-) create mode 100644 docs/apis/sliapi.rst create mode 100644 docs/nodes.rst (limited to 'sliapi/model/src/main/resources') diff --git a/docs/apis/sliapi.rst b/docs/apis/sliapi.rst new file mode 100644 index 000000000..13cdcbd54 --- /dev/null +++ b/docs/apis/sliapi.rst @@ -0,0 +1,15 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +SLI-API(2016-11-11) +=================== + +.. toctree:: + :maxdepth: 1 + :titlesonly: + + + +.. swaggerv2doc:: https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/core.git;a=blob_plain;f=sliapi/model/src/main/resources/sli-api.20161110.json + + diff --git a/docs/architecture.rst b/docs/architecture.rst index a1956d59f..f6101a116 100644 --- a/docs/architecture.rst +++ b/docs/architecture.rst @@ -4,24 +4,17 @@ Architecture ============ -.. note:: - * This section is used to describe a software component from a high level - view of capability, common usage scenarios, and interactions with other - components required in the usage scenarios. - - * The architecture section is typically: provided in a platform-component - and sdk collections; and referenced from developer and user guides. - - * This note must be removed after content has been added. Capabilities ------------ +Provides the core Service Logic Interpreter (SLI) functionality, used to execute directed graphs (DGs). Directed graphs allow service designers to define the +logic to be executed within the SDN controller in a graphical format which can be +updated in real time, without a need to restart the controller. +.. toctree:: + :maxdepth: 1 -Usage Scenarios ---------------- + nodes.rst -Interactions ------------- diff --git a/docs/build.rst b/docs/build.rst index 99a061c24..0a4c308e6 100644 --- a/docs/build.rst +++ b/docs/build.rst @@ -4,20 +4,15 @@ Build ===== -.. note:: - * This section is used to describe how a software component is built from source - into something ready for use either in a run-time environment or to build other - components. - - * This section is typically provided for a platform-component, application, and sdk; and - referenced in developer guides. - - * This note must be removed after content has been added. - Environment ----------- - +Requires maven release 3.3 or greater Steps ----- +To compile this code: + +1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains references to the ONAP repositories and OpenDaylight repositories. + +2. To compile, run "mvn clean install". \ No newline at end of file diff --git a/docs/logging.rst b/docs/logging.rst index 5662acb1f..187eb03b7 100644 --- a/docs/logging.rst +++ b/docs/logging.rst @@ -3,20 +3,12 @@ Logging ======= - -.. note:: - * This section is used to describe the informational or diagnostic messages emitted from - a software component and the methods or collecting them. - - * This section is typically: provided for a platform-component and sdk; and - referenced in developer and user guides - - * This note must be removed after content has been added. - +CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log +log file. Where to Access Information --------------------------- +Logs are found within the SDNC docker container, in the directory +/opt/opendaylight/current/data/logs. -Error / Warning Messages ------------------------- diff --git a/docs/nodes.rst b/docs/nodes.rst new file mode 100644 index 000000000..3bdeabcfa --- /dev/null +++ b/docs/nodes.rst @@ -0,0 +1,1031 @@ +--- Service Logic Interpreter --- Dan Timoney --- 2014-11-12 --- + +Supported node types +==================== + +The following built-in node types are currently supported: + +- Flow Control + + - `**block** <#Block_node>`__ + + - `**call** <#Call_node>`__ + + - `**for** <#For_node>`__ + + - `**return** <#Return_node>`__ + + - `**set** <#Set_node>`__ + + - `**switch** <#Switch_node>`__ + +- Device Management + + - `**configure** <#Configure_node>`__ + +- Java Plugin Support + + - `**execute** <#Execute_node>`__ + +- Recording + + - `**record** <#Record_node>`__ + +- Resource Management + + - `**delete** <#Delete_node>`__ + + - `**exists** <#Exists_node>`__ + + - `**get-resource** <#Get-resource_node>`__ + + - `**is-available** <#Is-available_node>`__ + + - `**notify** <#Notify_node>`__ + + - `**release** <#Release_node>`__ + + - `**reserve** <#Reserve_node>`__ + + - `**save** <#Save_node>`__ + + - `**update** <#Update_node>`__ + +Flow Control +------------ + +Block node +~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **block** node is used to executes a set of nodes. + +Attributes +^^^^^^^^^^ + ++--------------+-----------------------------------------------------------------------------------------------------------------------------------+ +| **atomic** | if *true*, then if a node returns failure, subsequent nodes will not be executed and nodes already executed will be backed out. | ++--------------+-----------------------------------------------------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + +None + +Example +^^^^^^^ + +:: + + + + + + + + + + + + + +Call node +~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **call** node is used to call another graph + +Attributes +^^^^^^^^^^ + ++---------------+------------------------------------------------------------------------------------+ +| **module** | Module of directed graph to call. If unset, defaults to that of calling graph | ++---------------+------------------------------------------------------------------------------------+ +| **rpc** | rpc of directed graph to call. | ++---------------+------------------------------------------------------------------------------------+ +| **version** | version of graph to call, If unset, uses active version. | ++---------------+------------------------------------------------------------------------------------+ +| **mode** | mode (sync/async) of graph to call. If unset, defaults to that of calling graph. | ++---------------+------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +Not applicable + +Outcomes +^^^^^^^^ + ++-----------------+------------------------------+ +| **success** | Sub graph returned success | ++-----------------+------------------------------+ +| **not-found** | Graph not found | ++-----------------+------------------------------+ +| **failure** | Subgraph returned success | ++-----------------+------------------------------+ + +Table: . + +Example +^^^^^^^ + +:: + + + +For node +~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **for** node provides a fixed iteration looping mechanism, similar to +the Java for loop + +Attributes +^^^^^^^^^^ + ++-------------+------------------+ +| **index** | index variable | ++-------------+------------------+ +| **start** | initial value | ++-------------+------------------+ +| **end** | maximum value | ++-------------+------------------+ + +Parameters +^^^^^^^^^^ + +Not applicable. + +Outcomes +^^^^^^^^ + +Not applicable. The **status** node has no outcomes. + +Example +^^^^^^^ + +:: + + + + + + + + + +Return node +~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **return** node is used to return a status to the invoking MD-SAL +application + +Attributes +^^^^^^^^^^ + ++--------------+---------------------------------------------------+ +| **status** | Status value to return (*success* or *failure*) | ++--------------+---------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +The following optional parameters may be passed to convey more detailed +status information. + ++---------------------+-----------------------------------------------------------------+ +| **error-code** | A brief, usually numeric, code indicating the error condition | ++---------------------+-----------------------------------------------------------------+ +| **error-message** | A more detailed error message | ++---------------------+-----------------------------------------------------------------+ + +Outcomes +^^^^^^^^ + +Not applicable. The **status** node has no outcomes. + +Example +^^^^^^^ + +:: + + + + + + +Set node +~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **set** node is used to set one or more values in the execution +context + +Attributes +^^^^^^^^^^ + ++---------------------+-------------------------------------------------------------------------------------+ +| **only-if-unset** | If true the set node will only execute if the current value of the target is null | ++---------------------+-------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +Values to be set are passed as parameters + +Outcomes +^^^^^^^^ + +Not applicable. The **set** node has no outcomes. + +Example +^^^^^^^ + +:: + + + + + +Switch node +~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **switch** node is used to make a decision based on its **test** +attribute. + +Attributes +^^^^^^^^^^ + ++------------+---------------------+ +| **test** | Condition to test | ++------------+---------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + +Depends on the **test** condition + +Example +^^^^^^^ + +:: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Device Management +----------------- + +Configure node +~~~~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **configure** node is used to configure a device. + +Attributes +^^^^^^^^^^ + ++----------------+-----------------------------------------------------------------------------------+ +| **adaptor** | Fully qualified Java class of resource adaptor to be used | ++----------------+-----------------------------------------------------------------------------------+ +| **activate** | Activate device/interface, for devices that support a separate activation step. | ++----------------+-----------------------------------------------------------------------------------+ +| **key** | SQL-like string specifying criteria for item to configure | ++----------------+-----------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +Specific to device adaptor. + +Outcomes +^^^^^^^^ + ++----------------------+------------------------------------------------------------------+ +| **success** | Device successfully configured | ++----------------------+------------------------------------------------------------------+ +| **not-found** | Element to be configured does not exist. | ++----------------------+------------------------------------------------------------------+ +| **not-ready** | Element is not in a state where it can be configured/activated | ++----------------------+------------------------------------------------------------------+ +| **already-active** | Attempt to activate element that is already active | ++----------------------+------------------------------------------------------------------+ +| **failure** | Configure failed for some other reason | ++----------------------+------------------------------------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Java Plugin Support +------------------- + +Execute node +~~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +An **execute** node is used to execute Java code supplied as a plugin + +Attributes +^^^^^^^^^^ + ++--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of plugin to be used | ++--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **method** | Name of method in the plugin class to execute. Method must return void, and take 2 arguments: a Map (for parameters) and a SvcLogicContext (to allow plugin read/write access to context memory) | ++--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +Specific to plugin / method + +Outcomes +^^^^^^^^ + ++--------------------------+-----------------------------------------------------------------+ +| **success** | Device successfully configured | ++--------------------------+-----------------------------------------------------------------+ +| **not-found** | Plugin class could not be loaded | ++--------------------------+-----------------------------------------------------------------+ +| **unsupported-method** | Named method taking (Map, SvcLogicContext) could not be found | ++--------------------------+-----------------------------------------------------------------+ +| **failure** | Configure failed for some other reason | ++--------------------------+-----------------------------------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + + + + + + + + + + + +Recording +--------- + +Record node +~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **record** node is used to record an event. For example, this might be +used to log provisioning events. + +Attributes +^^^^^^^^^^ + ++--------------+---------------------------------------------------+ +| **plugin** | Fully qualified Java class to handle recording. | ++--------------+---------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +Parameters will depend on the plugin being used. For the FileRecorder +class, the parameters are as follows + ++--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **file** | The file to which the record should be written | ++--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **field1** | First field to write. There will be **field** parameters for each field to write, from **field1** through **fieldN**. A special value \_\_TIMESTAMP\_\_ may be assigned to a field to insert the current timestamp | ++--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Outcomes +^^^^^^^^ + ++---------------+--------------------------------------------+ +| **success** | Record successfully written | ++---------------+--------------------------------------------+ +| **failure** | Record could not be successfully written | ++---------------+--------------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + +Resource Management +------------------- + +Delete node +~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **delete** node is used to delete a resource from the local resource +inventory. + +Attributes +^^^^^^^^^^ + ++----------------+-------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+-------------------------------------------------------------+ +| **resource** | Type of resource to delete | ++----------------+-------------------------------------------------------------+ +| **key** | SQL-like string specifying key to delete | ++----------------+-------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + ++---------------+--------------------------------------------+ +| **success** | Resource specified deleted successfully. | ++---------------+--------------------------------------------+ +| *failure*> | Resource specified was not deleted | ++---------------+--------------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + +Exists node +~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +An **exists** node is used to determine whether a particular instance of +a resource exists. For example, this might be used to test whether a +particular switch CLLI is provisioned. + +Attributes +^^^^^^^^^^ + ++----------------+-------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+-------------------------------------------------------------+ +| **resource** | Type of resource to check | ++----------------+-------------------------------------------------------------+ +| **key** | SQL-like string specifying key to check for | ++----------------+-------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + ++-------------+---------------------------------+ +| **true** | Resource specified exists. | ++-------------+---------------------------------+ +| **false** | Resource specified is unknown | ++-------------+---------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + +Get-resource node +~~~~~~~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **get-resource** node is used to retrieve information about a +particular resource and make it available to other nodes in the service +logic tree. For example, this might be used to retrieve information +about a particular uni-port. + +Attributes +^^^^^^^^^^ + ++----------------+------------------------------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+------------------------------------------------------------------------------------------+ +| **resource** | Type of resource to retrieve | ++----------------+------------------------------------------------------------------------------------------+ +| **key** | SQL-like string specifying criteria for retrieval | ++----------------+------------------------------------------------------------------------------------------+ +| **pfx** | Prefix to add to context variable names set for data retrieved | ++----------------+------------------------------------------------------------------------------------------+ +| **select** | String to specify, if key matches multiple entries, which entry should take precedence | ++----------------+------------------------------------------------------------------------------------------+ +| **order-by** | Prefix to add to context variable names set for data retrieved | ++----------------+------------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + ++-----------------+--------------------------------------------------+ +| **success** | Resource successfully retrieved | ++-----------------+--------------------------------------------------+ +| **not-found** | Resource referenced does not exist | ++-----------------+--------------------------------------------------+ +| **failure** | Resource retrieve failed for some other reason | ++-----------------+--------------------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + + + + +Is-available node +~~~~~~~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +An **is-available** node is used to determine whether a particular type +of resource is available. For example, this might be used to test +whether any ports are available for assignment on a particular switch. + +Attributes +^^^^^^^^^^ + ++----------------+------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+------------------------------------------------------------------+ +| **resource** | Type of resource to check | ++----------------+------------------------------------------------------------------+ +| **key** | SQL-like string specifying key to check for | ++----------------+------------------------------------------------------------------+ +| **pfx** | Prefix to add to context variable names set for data retrieved | ++----------------+------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + ++-------------+---------------------------------------+ +| **true** | Resource requested is available | ++-------------+---------------------------------------+ +| **false** | Resource requested is not available | ++-------------+---------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + +Notify node +~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **notify** node is used to inform an external application (e.g. A&AI) +that a resource was updated. + +Attributes +^^^^^^^^^^ + ++----------------+---------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+---------------------------------------------------------------------+ +| **resource** | Identifies resource that was updated | ++----------------+---------------------------------------------------------------------+ +| **action** | Action that triggered notification to be sent (ADD/UPDATE/DELETE) | ++----------------+---------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + ++---------------+----------------------------------------+ +| **success** | Notification was successful | ++---------------+----------------------------------------+ +| **failure** | Notification failed is not available | ++---------------+----------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + +Release node +~~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **release** node is used to mark a resource as no longer in use, and +thus available for assignment. + +Attributes +^^^^^^^^^^ + ++----------------+------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+------------------------------------------------------------------+ +| **resource** | Type of resource to release | ++----------------+------------------------------------------------------------------+ +| **key** | SQL-like string specifying key to check of resource to release | ++----------------+------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + ++-----------------+-------------------------------------------------+ +| **success** | Resource successfully released | ++-----------------+-------------------------------------------------+ +| **not-found** | Resource referenced does not exist | ++-----------------+-------------------------------------------------+ +| **failure** | Resource release failed for some other reason | ++-----------------+-------------------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + + + + +Reserve node +~~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **reserve** node is used to reserve a particular type of resource.. +For example, this might be used to reserve a port on a particular +switch. + +Attributes +^^^^^^^^^^ + ++----------------+----------------------------------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+----------------------------------------------------------------------------------------------+ +| **resource** | Type of resource to reserve | ++----------------+----------------------------------------------------------------------------------------------+ +| **key** | SQL-like string specifying criteria for reservation | ++----------------+----------------------------------------------------------------------------------------------+ +| **select** | String to specify, if **key** matches multiple entries, which entry should take precedence | ++----------------+----------------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +None + +Outcomes +^^^^^^^^ + ++---------------+----------------------------------------------------+ +| **success** | Resource requested was successfully reserved | ++---------------+----------------------------------------------------+ +| **failure** | Resource requested was not successfully reserved | ++---------------+----------------------------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + +Save node +~~~~~~~~~ + +Description +^^^^^^^^^^^ + +A **save** node is used to save information about a particular resource +to persistent storage. For example, this might be used to save +information about a particular uni-port. + +Attributes +^^^^^^^^^^ + ++----------------+------------------------------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+------------------------------------------------------------------------------------------+ +| **resource** | Type of resource to save | ++----------------+------------------------------------------------------------------------------------------+ +| **key** | SQL-like string specifying criteria for retrieval | ++----------------+------------------------------------------------------------------------------------------+ +| **force** | If "true", save resource even if this resource is already stored in persistent storage | ++----------------+------------------------------------------------------------------------------------------+ +| **pfx** | Prefix to be prepended to variable names, when attributes are set in SvcLogicContext | ++----------------+------------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +Values to save (columns) are specified as parameters, with each name +corresponding to a column name and each value corresponding to the value +to set. + +Outcomes +^^^^^^^^ + ++---------------+-------------------------------+ +| **success** | Resource successfully saved | ++---------------+-------------------------------+ +| **failure** | Resource save failed | ++---------------+-------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + + +Update node +~~~~~~~~~~~ + +Description +^^^^^^^^^^^ + +An **update** node is used to update information about a particular +resource to persistent storage. + +Attributes +^^^^^^^^^^ + ++----------------+----------------------------------------------------------------------------------------+ +| **plugin** | Fully qualified Java class of resource adaptor to be used | ++----------------+----------------------------------------------------------------------------------------+ +| **resource** | Type of resource to update | ++----------------+----------------------------------------------------------------------------------------+ +| **key** | SQL-like string specifying criteria for retrieval | ++----------------+----------------------------------------------------------------------------------------+ +| **pfx** | Prefix to be prepended to variable names, when attributes are set in SvcLogicContext | ++----------------+----------------------------------------------------------------------------------------+ + +Parameters +^^^^^^^^^^ + +Values to save (columns) are specified as parameters, with each name +corresponding to a column name and each value corresponding to the value +to set. + +Outcomes +^^^^^^^^ + ++---------------+-------------------------------+ +| **success** | Resource successfully saved | ++---------------+-------------------------------+ +| **failure** | Resource save failed | ++---------------+-------------------------------+ + +Example +^^^^^^^ + +:: + + + + + + + + + diff --git a/docs/offeredapis.rst b/docs/offeredapis.rst index de686ad36..42eafdd41 100644 --- a/docs/offeredapis.rst +++ b/docs/offeredapis.rst @@ -8,9 +8,5 @@ Offered APIs :maxdepth: 1 :titlesonly: -SLI-API(2016-11-11) -=================== - -.. swaggerv2doc:: https://gerrit.onap.org/r/gitweb?p=ccsdk/sli/core.git;a=blob_plain;f=sliapi/model/src/main/resources/sli-api.20161110.json - + apis/sliapi.rst diff --git a/sliapi/model/pom.xml b/sliapi/model/pom.xml index fc9b76377..d36aaa131 100755 --- a/sliapi/model/pom.xml +++ b/sliapi/model/pom.xml @@ -33,6 +33,12 @@ ${odl.sal.api.gen.plugin.version} jar + + org.opendaylight.netconf + sal-rest-docgen-maven + ${odl.restconf.version} + jar + @@ -43,12 +49,13 @@ ${yang.file.directory} - org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl ${salGeneratorPath} + + org.opendaylight.netconf.sal.rest.doc.maven.StaticDocGenerator + target/swagger + true diff --git a/sliapi/model/src/main/resources/sli-api.20161110.json b/sliapi/model/src/main/resources/sli-api.20161110.json index 0cc53fe92..da966e1e7 100644 --- a/sliapi/model/src/main/resources/sli-api.20161110.json +++ b/sliapi/model/src/main/resources/sli-api.20161110.json @@ -1 +1,513 @@ -{"apiVersion":"1.0.0","swaggerVersion":"1.2","basePath":"restconf","resourcePath":null,"produces":["application/json","application/xml"],"apis":[{"path":"/config","operations":[{"method":"POST","summary":null,"notes":"Defines API to service logic interpreter","type":"(config)SLI-API_modulePOST","nickname":"POST-SLI-API_module","consumes":["application/json","application/xml"],"parameters":[{"name":"**(config)test-results","description":null,"required":false,"type":"SLI-API(config)test-results-TOP","paramType":"body"}],"responseMessages":null}]},{"path":"/config/SLI-API:test-results","operations":[{"method":"GET","summary":null,"notes":"Test results","type":"(config)test-results","nickname":"GET-test-results","consumes":null,"parameters":[],"responseMessages":null},{"method":"PUT","summary":null,"notes":"Test results","type":"SLI-API(config)test-results-TOP","nickname":"PUT-test-results","consumes":["application/json","application/xml"],"parameters":[{"name":"(config)test-results","description":null,"required":false,"type":"SLI-API(config)test-results-TOP","paramType":"body"}],"responseMessages":null},{"method":"DELETE","summary":null,"notes":"Test results","type":null,"nickname":"DELETE-test-results","consumes":null,"parameters":[],"responseMessages":null},{"method":"POST","summary":null,"notes":"Test results","type":"(config)test-resultsPOST","nickname":"POST-test-results","consumes":["application/json","application/xml"],"parameters":[{"name":"**(config)test-result","description":null,"required":false,"type":"SLI-API/test-results(config)test-result-TOP","paramType":"body"}],"responseMessages":null}]},{"path":"/config/SLI-API:test-results/test-result/{test-identifier}","operations":[{"method":"GET","summary":null,"notes":null,"type":"(config)test-result","nickname":"GET-test-result","consumes":null,"parameters":[{"name":"test-identifier","description":null,"required":false,"type":"string","paramType":"path"}],"responseMessages":null},{"method":"PUT","summary":null,"notes":null,"type":"SLI-API/test-results(config)test-result-TOP","nickname":"PUT-test-result","consumes":["application/json","application/xml"],"parameters":[{"name":"test-identifier","description":null,"required":false,"type":"string","paramType":"path"},{"name":"(config)test-result","description":null,"required":false,"type":"SLI-API/test-results(config)test-result-TOP","paramType":"body"}],"responseMessages":null},{"method":"DELETE","summary":null,"notes":null,"type":null,"nickname":"DELETE-test-result","consumes":null,"parameters":[{"name":"test-identifier","description":null,"required":false,"type":"string","paramType":"path"}],"responseMessages":null}]},{"path":"/operational/SLI-API:test-results","operations":[{"method":"GET","summary":null,"notes":"Test results","type":"(operational)test-results","nickname":"GET-test-results","consumes":null,"parameters":[],"responseMessages":null}]},{"path":"/operations/SLI-API:healthcheck","operations":[{"method":"POST","summary":null,"notes":null,"type":"(healthcheck)output-TOP","nickname":"healthcheck","consumes":["application/json","application/xml"],"parameters":[{"name":null,"description":null,"required":false,"type":"(healthcheck)input-TOP","paramType":"body"}],"responseMessages":null}]},{"path":"/operations/SLI-API:execute-graph","operations":[{"method":"POST","summary":null,"notes":" Method to add a new parameter.","type":"(execute-graph)output-TOP","nickname":"execute-graph","consumes":["application/json","application/xml"],"parameters":[{"name":null,"description":null,"required":false,"type":"(execute-graph)input-TOP","paramType":"body"}],"responseMessages":null}]}],"models":{"(execute-graph)output":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)output","type":"object","properties":{"SLI-API:response-code":{"type":"Some response-code","required":false},"SLI-API:ack-final-indicator":{"type":"Some ack-final-indicator","required":false},"SLI-API:context-memory-json":{"type":"Some context-memory-json","required":false},"SLI-API:response-message":{"type":"Some response-message","required":false}}},"SLI-API(config)sli-parameter":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)sli-parameter","type":"object","properties":{"SLI-API:boolean-value":{"type":"true","required":false},"SLI-API:parameter-name":{"description":"Parameter name","type":"Some parameter-name","required":false},"SLI-API:int-value":{"type":"-2147483648","required":false},"SLI-API:string-value":{"type":"Some string-value","required":false}}},"SLI-API/test-results(config)test-result":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API/test-results(config)test-result","type":"object","properties":{"SLI-API:results":{"type":"array","items":{"type":"Some results"},"required":false},"SLI-API:test-identifier":{"type":"Some test-identifier","required":false}}},"(config)sli-parameterPOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)sli-parameterPOST","type":"object","properties":{"parameter-name":{"description":"Parameter name","type":"Some parameter-name","required":false},"boolean-value":{"type":"true","required":false},"string-value":{"type":"Some string-value","required":false},"int-value":{"type":"-2147483648","required":false}}},"SLI-API(config)test-results":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)test-results","type":"object","properties":{"SLI-API:test-result":{"type":"array","items":{"$ref":"SLI-API/test-results(config)test-result"}}}},"(healthcheck)input":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)input","type":"object","properties":{"SLI-API:dummy-leaf":{"type":"Some dummy-leaf","required":false}}},"(execute-graph)input":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)input","type":"object","properties":{"SLI-API:rpc-name":{"type":"Some rpc-name","required":false},"SLI-API:sli-parameter":{"type":"array","items":{"$ref":"SLI-API(config)sli-parameter"}},"SLI-API:module-name":{"type":"Some module-name","required":false},"SLI-API:mode":{"type":"sync","required":false,"enum":["sync","async"]}}},"(execute-graph)input-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)input-TOP","type":"object","properties":{"SLI-API:input":{"type":"object","items":{"$ref":"(execute-graph)input"}}}},"unique_empty_identifier":{},"SLI-API/test-results(config)test-result-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API/test-results(config)test-result-TOP","type":"object","properties":{"SLI-API:test-result":{"type":"array","items":{"$ref":"SLI-API/test-results(config)test-result"}}}},"SLI-API(config)sli-parameter-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)sli-parameter-TOP","type":"object","properties":{"SLI-API:sli-parameter":{"type":"array","items":{"$ref":"SLI-API(config)sli-parameter"}}}},"SLI-API(operational)test-results":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(operational)test-results","type":"object","properties":{}},"(execute-graph)output-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(execute-graph)output-TOP","type":"object","properties":{"SLI-API:output":{"type":"object","items":{"$ref":"(execute-graph)output"}}}},"(healthcheck)output":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)output","type":"object","properties":{"SLI-API:response-code":{"type":"Some response-code","required":false},"SLI-API:ack-final-indicator":{"type":"Some ack-final-indicator","required":false},"SLI-API:context-memory-json":{"type":"Some context-memory-json","required":false},"SLI-API:response-message":{"type":"Some response-message","required":false}}},"(config)SLI-API_modulePOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)SLI-API_modulePOST","type":"object","properties":{"test-results":{"type":"object","items":{"$ref":"SLI-API(config)test-results"}}}},"(config)test-resultsPOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)test-resultsPOST","type":"object","properties":{"test-result":{"type":"array","items":{"$ref":"SLI-API/test-results(config)test-result"}}}},"SLI-API(operational)test-results-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(operational)test-results-TOP","type":"object","properties":{"SLI-API:test-results":{"description":"Test results","type":"object","items":{"$ref":"SLI-API(operational)test-results"}}}},"SLI-API(config)test-results-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"SLI-API(config)test-results-TOP","type":"object","properties":{"SLI-API:test-results":{"description":"Test results","type":"object","items":{"$ref":"SLI-API(config)test-results"}}}},"(healthcheck)input-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)input-TOP","type":"object","properties":{"SLI-API:input":{"type":"object","items":{"$ref":"(healthcheck)input"}}}},"(healthcheck)output-TOP":{"$schema":"http://json-schema.org/draft-04/schema","id":"(healthcheck)output-TOP","type":"object","properties":{"SLI-API:output":{"type":"object","items":{"$ref":"(healthcheck)output"}}}},"(config)test-resultPOST":{"$schema":"http://json-schema.org/draft-04/schema","id":"(config)test-resultPOST","type":"object","properties":{"test-identifier":{"type":"Some test-identifier","required":false}}}}} \ No newline at end of file +{ + "swagger": "2.0", + "info": { + "version": "1.0.0" + }, + "basePath": "/restconf", + "paths": { + "/config": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "**(config)test-results", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API(config)test-results-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)SLI-API_modulePOST" + } + } + }, + "description": "Defines API to service logic interpreter", + "operationId": "POST-SLI-API_module" + } + }, + "/config/SLI-API:test-results": { + "delete": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified" + } + }, + "description": "Test results", + "operationId": "DELETE-test-results" + }, + "get": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)test-results" + } + } + }, + "description": "Test results", + "operationId": "GET-test-results" + }, + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "**(config)test-result", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)test-resultsPOST" + } + } + }, + "description": "Test results", + "operationId": "POST-test-results" + }, + "put": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "(config)test-results", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API(config)test-results-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/SLI-API(config)test-results-TOP" + } + } + }, + "description": "Test results", + "operationId": "PUT-test-results" + } + }, + "/config/SLI-API:test-results/test-result/{test-identifier}": { + "delete": { + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "path", + "name": "test-identifier", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "No response was specified" + } + }, + "operationId": "DELETE-test-result" + }, + "get": { + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "path", + "name": "test-identifier", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)test-result" + } + } + }, + "operationId": "GET-test-result" + }, + "put": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "path", + "name": "test-identifier", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "(config)test-result", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" + } + } + }, + "operationId": "PUT-test-result" + } + }, + "/operational/SLI-API:test-results": { + "get": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(operational)test-results" + } + } + }, + "description": "Test results", + "operationId": "GET-test-results" + } + }, + "/operations/SLI-API:execute-graph": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "$ref": "#/definitions/(execute-graph)input-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(execute-graph)output-TOP" + } + } + }, + "description": " Method to add a new parameter.", + "operationId": "execute-graph" + } + }, + "/operations/SLI-API:healthcheck": { + "post": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(healthcheck)output-TOP" + } + } + }, + "operationId": "healthcheck" + } + } + }, + "definitions": { + "(config)SLI-API_modulePOST": { + "properties": { + "test-results": { + "items": { + "$ref": "#/definitions/SLI-API(config)test-results" + }, + "type": "object" + } + }, + "type": "object" + }, + "(config)sli-parameterPOST": { + "properties": { + "boolean-value": { + "$ref": "#/definitions/true" + }, + "int-value": { + "$ref": "#/definitions/-2147483648" + }, + "parameter-name": { + "$ref": "#/definitions/Some parameter-name", + "description": "Parameter name" + }, + "string-value": { + "$ref": "#/definitions/Some string-value" + } + }, + "type": "object" + }, + "(config)test-resultPOST": { + "properties": { + "test-identifier": { + "$ref": "#/definitions/Some test-identifier" + } + }, + "type": "object" + }, + "(config)test-resultsPOST": { + "properties": { + "test-result": { + "items": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result" + }, + "type": "array" + } + }, + "type": "object" + }, + "(execute-graph)input": { + "properties": { + "SLI-API:mode": { + "$ref": "#/definitions/sync", + "enum": [ + "sync", + "async" + ] + }, + "SLI-API:module-name": { + "$ref": "#/definitions/Some module-name" + }, + "SLI-API:rpc-name": { + "$ref": "#/definitions/Some rpc-name" + }, + "SLI-API:sli-parameter": { + "items": { + "$ref": "#/definitions/SLI-API(config)sli-parameter" + }, + "type": "array" + } + }, + "type": "object" + }, + "(execute-graph)input-TOP": { + "properties": { + "SLI-API:input": { + "items": { + "$ref": "#/definitions/(execute-graph)input" + }, + "type": "object" + } + }, + "type": "object" + }, + "(execute-graph)output": { + "properties": { + "SLI-API:ack-final-indicator": { + "$ref": "#/definitions/Some ack-final-indicator" + }, + "SLI-API:context-memory-json": { + "$ref": "#/definitions/Some context-memory-json" + }, + "SLI-API:response-code": { + "$ref": "#/definitions/Some response-code" + }, + "SLI-API:response-message": { + "$ref": "#/definitions/Some response-message" + } + }, + "type": "object" + }, + "(execute-graph)output-TOP": { + "properties": { + "SLI-API:output": { + "items": { + "$ref": "#/definitions/(execute-graph)output" + }, + "type": "object" + } + }, + "type": "object" + }, + "(healthcheck)output": { + "properties": { + "SLI-API:ack-final-indicator": { + "$ref": "#/definitions/Some ack-final-indicator" + }, + "SLI-API:context-memory-json": { + "$ref": "#/definitions/Some context-memory-json" + }, + "SLI-API:response-code": { + "$ref": "#/definitions/Some response-code" + }, + "SLI-API:response-message": { + "$ref": "#/definitions/Some response-message" + } + }, + "type": "object" + }, + "(healthcheck)output-TOP": { + "properties": { + "SLI-API:output": { + "items": { + "$ref": "#/definitions/(healthcheck)output" + }, + "type": "object" + } + }, + "type": "object" + }, + "SLI-API(config)sli-parameter": { + "properties": { + "SLI-API:boolean-value": { + "$ref": "#/definitions/true" + }, + "SLI-API:int-value": { + "$ref": "#/definitions/-2147483648" + }, + "SLI-API:parameter-name": { + "$ref": "#/definitions/Some parameter-name", + "description": "Parameter name" + }, + "SLI-API:string-value": { + "$ref": "#/definitions/Some string-value" + } + }, + "type": "object" + }, + "SLI-API(config)sli-parameter-TOP": { + "properties": { + "SLI-API:sli-parameter": { + "items": { + "$ref": "#/definitions/SLI-API(config)sli-parameter" + }, + "type": "array" + } + }, + "type": "object" + }, + "SLI-API(config)test-results": { + "properties": { + "SLI-API:test-result": { + "items": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result" + }, + "type": "array" + } + }, + "type": "object" + }, + "SLI-API(config)test-results-TOP": { + "properties": { + "SLI-API:test-results": { + "description": "Test results", + "items": { + "$ref": "#/definitions/SLI-API(config)test-results" + }, + "type": "object" + } + }, + "type": "object" + }, + "SLI-API(operational)test-results": { + "type": "object" + }, + "SLI-API(operational)test-results-TOP": { + "properties": { + "SLI-API:test-results": { + "description": "Test results", + "items": { + "$ref": "#/definitions/SLI-API(operational)test-results" + }, + "type": "object" + } + }, + "type": "object" + }, + "SLI-API/test-results(config)test-result": { + "properties": { + "SLI-API:results": { + "items": { + "$ref": "#/definitions/Some results" + }, + "type": "array" + }, + "SLI-API:test-identifier": { + "$ref": "#/definitions/Some test-identifier" + } + }, + "type": "object" + }, + "SLI-API/test-results(config)test-result-TOP": { + "properties": { + "SLI-API:test-result": { + "items": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result" + }, + "type": "array" + } + }, + "type": "object" + }, + "unique_empty_identifier": {} + } +} -- cgit 1.2.3-korg From 5a0f5957372e75b1bf5835738a23906f1bf4d8ba Mon Sep 17 00:00:00 2001 From: "Timoney, Dan (dt5972)" Date: Mon, 20 Aug 2018 13:00:07 -0400 Subject: Update swagger documentation Re-generated converted swagger doc. Note: ideally, it would be good to generate this on the fly based on Yang model. However, ODL yangtools generates swagger 1.2, and readthedocs needs version 2. Currently we convert this using api-spec-converter tool and store converted version. Tried automating this conversion, which works fine in local compiles but does not work on ONAP Jenkins (tool is node.js based). Change-Id: Ic607bcdcc218489a45d616bb1d280675511a760d Issue-ID: CCSDK-476 Signed-off-by: Timoney, Dan (dt5972) --- .../model/src/main/resources/sli-api.20161110.json | 93 ++++++++++++++++------ 1 file changed, 67 insertions(+), 26 deletions(-) (limited to 'sliapi/model/src/main/resources') diff --git a/sliapi/model/src/main/resources/sli-api.20161110.json b/sliapi/model/src/main/resources/sli-api.20161110.json index da966e1e7..1c6cdabfe 100644 --- a/sliapi/model/src/main/resources/sli-api.20161110.json +++ b/sliapi/model/src/main/resources/sli-api.20161110.json @@ -274,6 +274,23 @@ }, "operationId": "healthcheck" } + }, + "/operations/SLI-API:vlbcheck": { + "post": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(vlbcheck)output-TOP" + } + } + }, + "operationId": "vlbcheck" + } } }, "definitions": { @@ -291,17 +308,17 @@ "(config)sli-parameterPOST": { "properties": { "boolean-value": { - "$ref": "#/definitions/true" + "$ref": "#/definitions/Optional.empty" }, "int-value": { - "$ref": "#/definitions/-2147483648" + "$ref": "#/definitions/Optional.empty" }, "parameter-name": { - "$ref": "#/definitions/Some parameter-name", + "$ref": "#/definitions/Optional.empty", "description": "Parameter name" }, "string-value": { - "$ref": "#/definitions/Some string-value" + "$ref": "#/definitions/Optional.empty" } }, "type": "object" @@ -309,7 +326,7 @@ "(config)test-resultPOST": { "properties": { "test-identifier": { - "$ref": "#/definitions/Some test-identifier" + "$ref": "#/definitions/Optional.empty" } }, "type": "object" @@ -328,17 +345,13 @@ "(execute-graph)input": { "properties": { "SLI-API:mode": { - "$ref": "#/definitions/sync", - "enum": [ - "sync", - "async" - ] + "$ref": "#/definitions/Optional.empty" }, "SLI-API:module-name": { - "$ref": "#/definitions/Some module-name" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:rpc-name": { - "$ref": "#/definitions/Some rpc-name" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:sli-parameter": { "items": { @@ -363,16 +376,16 @@ "(execute-graph)output": { "properties": { "SLI-API:ack-final-indicator": { - "$ref": "#/definitions/Some ack-final-indicator" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:context-memory-json": { - "$ref": "#/definitions/Some context-memory-json" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:response-code": { - "$ref": "#/definitions/Some response-code" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:response-message": { - "$ref": "#/definitions/Some response-message" + "$ref": "#/definitions/Optional.empty" } }, "type": "object" @@ -391,16 +404,16 @@ "(healthcheck)output": { "properties": { "SLI-API:ack-final-indicator": { - "$ref": "#/definitions/Some ack-final-indicator" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:context-memory-json": { - "$ref": "#/definitions/Some context-memory-json" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:response-code": { - "$ref": "#/definitions/Some response-code" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:response-message": { - "$ref": "#/definitions/Some response-message" + "$ref": "#/definitions/Optional.empty" } }, "type": "object" @@ -416,20 +429,48 @@ }, "type": "object" }, + "(vlbcheck)output": { + "properties": { + "SLI-API:ack-final-indicator": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:context-memory-json": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-code": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-message": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "(vlbcheck)output-TOP": { + "properties": { + "SLI-API:output": { + "items": { + "$ref": "#/definitions/(vlbcheck)output" + }, + "type": "object" + } + }, + "type": "object" + }, "SLI-API(config)sli-parameter": { "properties": { "SLI-API:boolean-value": { - "$ref": "#/definitions/true" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:int-value": { - "$ref": "#/definitions/-2147483648" + "$ref": "#/definitions/Optional.empty" }, "SLI-API:parameter-name": { - "$ref": "#/definitions/Some parameter-name", + "$ref": "#/definitions/Optional.empty", "description": "Parameter name" }, "SLI-API:string-value": { - "$ref": "#/definitions/Some string-value" + "$ref": "#/definitions/Optional.empty" } }, "type": "object" @@ -487,12 +528,12 @@ "properties": { "SLI-API:results": { "items": { - "$ref": "#/definitions/Some results" + "$ref": "#/definitions/Optional.empty" }, "type": "array" }, "SLI-API:test-identifier": { - "$ref": "#/definitions/Some test-identifier" + "$ref": "#/definitions/Optional.empty" } }, "type": "object" -- cgit 1.2.3-korg From 28d8801959ffa9b12a00114c3d389a58a0359c40 Mon Sep 17 00:00:00 2001 From: "Smokowski, Kevin (ks6305)" Date: Mon, 3 Feb 2020 16:02:18 +0000 Subject: Springboot-based SLI-API Implement SLI-API RESTCONF in springboot Change-Id: I8b9b07e3b1aeb4a5adac977307c6f95c905ea038 Issue-ID: CCSDK-2096 Signed-off-by: Dan Timoney --- .gitignore | 1 + features/ccsdk-sli/pom.xml | 6 - sli/pom.xml | 1 - .../ccsdk/sli/core/sli/recording/FileRecorder.java | 108 ++++++++ .../sli/core/sli/recording/Slf4jRecorder.java | 130 ++++++++++ .../sli/core/sli/recording/TestFileRecorder.java | 49 ++++ .../sli/core/sli/recording/TestSlf4jRecorder.java | 33 +++ .../resources/OSGI-INF/blueprint/sli-blueprint.xml | 14 ++ .../org/opendaylight/blueprint/sli-blueprint.xml | 14 ++ sli/recording/pom.xml | 48 ---- .../ccsdk/sli/core/sli/recording/FileRecorder.java | 108 -------- .../sli/core/sli/recording/Slf4jRecorder.java | 130 ---------- .../OSGI-INF/blueprint/recording-blueprint.xml | 20 -- .../opendaylight/blueprint/recording-blueprint.xml | 20 -- .../src/main/resources/svclogic.properties | 26 -- .../sli/core/sli/recording/TestFileRecorder.java | 49 ---- .../sli/core/sli/recording/TestSlf4jRecorder.java | 33 --- sliapi/.gitignore | 4 + .../model/src/main/resources/sli-api.20161110.yaml | 271 +++++++++++++++++++++ sliapi/pom.xml | 1 + sliapi/springboot/.swagger-codegen-ignore | 1 + sliapi/springboot/README.md | 10 + sliapi/springboot/pom.xml | 100 ++++++++ .../sliapi/springboot/ExecuteGraphController.java | 110 +++++++++ .../sliapi/springboot/RestconfApiController.java | 126 ++++++++++ .../src/main/resources/application.properties | 8 + .../springboot/src/main/resources/graph.versions | 1 + .../src/main/resources/sli_healthcheck.xml | 27 ++ .../src/main/resources/svclogic.properties | 27 ++ .../onap/ccsdk/sli/core/utils/JREFileResolver.java | 15 +- 30 files changed, 1048 insertions(+), 443 deletions(-) create mode 100644 sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java create mode 100644 sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java create mode 100644 sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java create mode 100644 sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java delete mode 100755 sli/recording/pom.xml delete mode 100644 sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java delete mode 100644 sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java delete mode 100644 sli/recording/src/main/resources/OSGI-INF/blueprint/recording-blueprint.xml delete mode 100644 sli/recording/src/main/resources/org/opendaylight/blueprint/recording-blueprint.xml delete mode 100644 sli/recording/src/main/resources/svclogic.properties delete mode 100644 sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java delete mode 100644 sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java create mode 100644 sliapi/model/src/main/resources/sli-api.20161110.yaml create mode 100644 sliapi/springboot/.swagger-codegen-ignore create mode 100644 sliapi/springboot/README.md create mode 100644 sliapi/springboot/pom.xml create mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/ExecuteGraphController.java create mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java create mode 100644 sliapi/springboot/src/main/resources/application.properties create mode 100644 sliapi/springboot/src/main/resources/graph.versions create mode 100644 sliapi/springboot/src/main/resources/sli_healthcheck.xml create mode 100644 sliapi/springboot/src/main/resources/svclogic.properties (limited to 'sliapi/model/src/main/resources') diff --git a/.gitignore b/.gitignore index 92a91c226..610f89024 100755 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ target target-ide MANIFEST.MF **/yang-gen-sal +*.interp sli/model/src/main/java ## Misc Ignores (OS specific etc) ## diff --git a/features/ccsdk-sli/pom.xml b/features/ccsdk-sli/pom.xml index 87fa657b0..14c823128 100644 --- a/features/ccsdk-sli/pom.xml +++ b/features/ccsdk-sli/pom.xml @@ -30,12 +30,6 @@ ${project.version} - - org.onap.ccsdk.sli.core - sli-recording - ${project.version} - - org.onap.ccsdk.sli.core dblib-provider diff --git a/sli/pom.xml b/sli/pom.xml index 4f758a24d..7363f5b7c 100755 --- a/sli/pom.xml +++ b/sli/pom.xml @@ -25,7 +25,6 @@ model common provider - recording installer diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java new file mode 100644 index 000000000..37e4fe877 --- /dev/null +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java @@ -0,0 +1,108 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Modifications Copyright (C) 2018 IBM. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.sli.core.sli.recording; + +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.TimeZone; + +import org.onap.ccsdk.sli.core.sli.ConfigurationException; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; + + +public class FileRecorder implements SvcLogicRecorder { + + @Override + public void record(Map parmMap) throws SvcLogicException { + + String fileName = parmMap.get("file"); + if (fileName == null) + { + throw new ConfigurationException("No file parameter specified"); + } + + String record = parmMap.get("record"); + if (record == null) + { + String delimiter = parmMap.get("delimiter"); + if (delimiter == null) + { + delimiter = "|"; + } + + int idx = 1; + boolean moreFields = true; + while (moreFields) + { + String curField = parmMap.get("field"+idx++); + if (curField == null) + { + moreFields = false; + } + else + { + if (record == null) + { + record = delimiter; + } + record = record + curField + delimiter; + } + } + } + + if (record == null) + { + throw new ConfigurationException("No record/fields passed in record node"); + } + + File recordFile = new File(fileName); + Date now = new Date(); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat dateFmt = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss:SS'+00:00'"); + dateFmt.setTimeZone(tz); + if (record.indexOf("__TIMESTAMP__") != -1) + { + record = record.replaceFirst("__TIMESTAMP__", dateFmt.format(now)); + } + + try ( FileWriter fileWriter = new FileWriter(recordFile, true); + PrintWriter recPrinter = new PrintWriter(fileWriter)) + { + recPrinter.println(record); + } + catch (Exception e) + { + throw new SvcLogicException("Cannot write record to file", e); + } + } + +} + diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java new file mode 100644 index 000000000..e3f4f1b7e --- /dev/null +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java @@ -0,0 +1,130 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.sli.core.sli.recording; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.TimeZone; + +import org.onap.ccsdk.sli.core.sli.ConfigurationException; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Slf4jRecorder implements SvcLogicRecorder { + + + public enum Level { + ERROR, + WARN, + INFO, + DEBUG, + TRACE + } + + @Override + public void record(Map parmMap) throws SvcLogicException { + String loggerName = parmMap.get("logger"); + if (loggerName == null) { + loggerName = "Log4jRecorder"; + } + + String lvl = parmMap.get("level"); + if (lvl == null) { + lvl = "INFO"; + } + + Level level = Level.INFO; + + try { + level = Level.valueOf(lvl.toUpperCase()); + } catch (Exception e) {} + + + + String record = parmMap.get("record"); + if (record == null) + { + String delimiter = parmMap.get("delimiter"); + if (delimiter == null) + { + delimiter = "|"; + } + + int idx = 1; + boolean moreFields = true; + while (moreFields) + { + String curField = parmMap.get("field"+idx++); + if (curField == null) + { + moreFields = false; + } + else + { + if (record == null) + { + record = delimiter; + } + record = record + curField + delimiter; + } + } + } + + if (record == null) + { + throw new ConfigurationException("No record/fields passed in record node"); + } + + Logger logger = LoggerFactory.getLogger(loggerName); + + Date now = new Date(); + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat dateFmt = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss:SS'+00:00'"); + dateFmt.setTimeZone(tz); + if (record.indexOf("__TIMESTAMP__") != -1) + { + record = record.replaceFirst("__TIMESTAMP__", dateFmt.format(now)); + } + + switch (level) { + case ERROR: + logger.error(record); + break; + case WARN: + logger.warn(record); + break; + case INFO: + logger.info(record); + break; + case DEBUG: + logger.debug(record); + break; + case TRACE: + logger.trace(record); + } + } + +} diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java new file mode 100644 index 000000000..d0cc83182 --- /dev/null +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java @@ -0,0 +1,49 @@ +/** + * + */ +package org.onap.ccsdk.sli.core.sli.recording; + +import static org.junit.Assert.fail; + +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; + +/** + * @author dt5972 + * + */ +public class TestFileRecorder { + private FileRecorder recorder; + + @Before + public void setUp() { + recorder = new FileRecorder(); + } + + /** + * Test method for + * {@link org.onap.ccsdk.sli.core.sli.recording.FileRecorder#record(java.util.Map)}. + */ + @Test + public void testRecord() { + HashMap parms = new HashMap<>(); + parms.put("file", "/dev/null"); + parms.put("field1", "hi"); + try { + recorder.record(parms); + } catch (SvcLogicException e) { + fail("Caught SvcLogicException : " + e.getMessage()); + } + } + + @Test(expected = Exception.class) + public void testRecordForEmptyFileName() throws Exception { + HashMap parms = new HashMap<>(); + parms.put("field1", "hi"); + recorder.record(parms); + } + +} diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java new file mode 100644 index 000000000..c696f25b5 --- /dev/null +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java @@ -0,0 +1,33 @@ +/** + * + */ +package org.onap.ccsdk.sli.core.sli.recording; + +import static org.junit.Assert.*; +import java.util.HashMap; +import org.junit.Test; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; + +/** + * @author dt5972 + * + */ +public class TestSlf4jRecorder { + + /** + * Test method for {@link org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder#record(java.util.Map)}. + */ + @Test + public void testRecord() { + Slf4jRecorder recorder = new Slf4jRecorder(); + + HashMap parms = new HashMap<>(); + parms.put("field1","hi"); + try { + recorder.record(parms); + } catch (SvcLogicException e) { + fail("Caught SvcLogicException : "+e.getMessage()); + } + } + +} diff --git a/sli/provider/src/main/resources/OSGI-INF/blueprint/sli-blueprint.xml b/sli/provider/src/main/resources/OSGI-INF/blueprint/sli-blueprint.xml index d88cf3312..fb3ab9a03 100644 --- a/sli/provider/src/main/resources/OSGI-INF/blueprint/sli-blueprint.xml +++ b/sli/provider/src/main/resources/OSGI-INF/blueprint/sli-blueprint.xml @@ -19,4 +19,18 @@ + + + + + + + + diff --git a/sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml b/sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml index d88cf3312..fb3ab9a03 100644 --- a/sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml +++ b/sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml @@ -19,4 +19,18 @@ + + + + + + + + diff --git a/sli/recording/pom.xml b/sli/recording/pom.xml deleted file mode 100755 index 3a5afd974..000000000 --- a/sli/recording/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - - org.onap.ccsdk.parent - binding-parent - 1.5.2-SNAPSHOT - - - - org.onap.ccsdk.sli.core - sli-recording - 0.7.1-SNAPSHOT - bundle - - ccsdk-sli-core :: sli :: ${project.artifactId} - SLI Recording is an OSGi bundle that implements recording service for the service logic record node. - - - - org.onap.ccsdk.sli.core - sli-common - ${project.version} - compile - - - org.slf4j - slf4j-api - - - commons-lang - commons-lang - compile - - - - junit - junit - test - - - org.mockito - mockito-core - test - - - diff --git a/sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java b/sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java deleted file mode 100644 index 37e4fe877..000000000 --- a/sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/FileRecorder.java +++ /dev/null @@ -1,108 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : CCSDK - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Modifications Copyright (C) 2018 IBM. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sli.recording; - -import java.io.File; -import java.io.FileWriter; -import java.io.PrintWriter; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map; -import java.util.TimeZone; - -import org.onap.ccsdk.sli.core.sli.ConfigurationException; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; - - -public class FileRecorder implements SvcLogicRecorder { - - @Override - public void record(Map parmMap) throws SvcLogicException { - - String fileName = parmMap.get("file"); - if (fileName == null) - { - throw new ConfigurationException("No file parameter specified"); - } - - String record = parmMap.get("record"); - if (record == null) - { - String delimiter = parmMap.get("delimiter"); - if (delimiter == null) - { - delimiter = "|"; - } - - int idx = 1; - boolean moreFields = true; - while (moreFields) - { - String curField = parmMap.get("field"+idx++); - if (curField == null) - { - moreFields = false; - } - else - { - if (record == null) - { - record = delimiter; - } - record = record + curField + delimiter; - } - } - } - - if (record == null) - { - throw new ConfigurationException("No record/fields passed in record node"); - } - - File recordFile = new File(fileName); - Date now = new Date(); - - TimeZone tz = TimeZone.getTimeZone("UTC"); - DateFormat dateFmt = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss:SS'+00:00'"); - dateFmt.setTimeZone(tz); - if (record.indexOf("__TIMESTAMP__") != -1) - { - record = record.replaceFirst("__TIMESTAMP__", dateFmt.format(now)); - } - - try ( FileWriter fileWriter = new FileWriter(recordFile, true); - PrintWriter recPrinter = new PrintWriter(fileWriter)) - { - recPrinter.println(record); - } - catch (Exception e) - { - throw new SvcLogicException("Cannot write record to file", e); - } - } - -} - diff --git a/sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java b/sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java deleted file mode 100644 index e3f4f1b7e..000000000 --- a/sli/recording/src/main/java/org/onap/ccsdk/sli/core/sli/recording/Slf4jRecorder.java +++ /dev/null @@ -1,130 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : CCSDK - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sli.recording; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map; -import java.util.TimeZone; - -import org.onap.ccsdk.sli.core.sli.ConfigurationException; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Slf4jRecorder implements SvcLogicRecorder { - - - public enum Level { - ERROR, - WARN, - INFO, - DEBUG, - TRACE - } - - @Override - public void record(Map parmMap) throws SvcLogicException { - String loggerName = parmMap.get("logger"); - if (loggerName == null) { - loggerName = "Log4jRecorder"; - } - - String lvl = parmMap.get("level"); - if (lvl == null) { - lvl = "INFO"; - } - - Level level = Level.INFO; - - try { - level = Level.valueOf(lvl.toUpperCase()); - } catch (Exception e) {} - - - - String record = parmMap.get("record"); - if (record == null) - { - String delimiter = parmMap.get("delimiter"); - if (delimiter == null) - { - delimiter = "|"; - } - - int idx = 1; - boolean moreFields = true; - while (moreFields) - { - String curField = parmMap.get("field"+idx++); - if (curField == null) - { - moreFields = false; - } - else - { - if (record == null) - { - record = delimiter; - } - record = record + curField + delimiter; - } - } - } - - if (record == null) - { - throw new ConfigurationException("No record/fields passed in record node"); - } - - Logger logger = LoggerFactory.getLogger(loggerName); - - Date now = new Date(); - TimeZone tz = TimeZone.getTimeZone("UTC"); - DateFormat dateFmt = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss:SS'+00:00'"); - dateFmt.setTimeZone(tz); - if (record.indexOf("__TIMESTAMP__") != -1) - { - record = record.replaceFirst("__TIMESTAMP__", dateFmt.format(now)); - } - - switch (level) { - case ERROR: - logger.error(record); - break; - case WARN: - logger.warn(record); - break; - case INFO: - logger.info(record); - break; - case DEBUG: - logger.debug(record); - break; - case TRACE: - logger.trace(record); - } - } - -} diff --git a/sli/recording/src/main/resources/OSGI-INF/blueprint/recording-blueprint.xml b/sli/recording/src/main/resources/OSGI-INF/blueprint/recording-blueprint.xml deleted file mode 100644 index 6786b955b..000000000 --- a/sli/recording/src/main/resources/OSGI-INF/blueprint/recording-blueprint.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/sli/recording/src/main/resources/org/opendaylight/blueprint/recording-blueprint.xml b/sli/recording/src/main/resources/org/opendaylight/blueprint/recording-blueprint.xml deleted file mode 100644 index 6786b955b..000000000 --- a/sli/recording/src/main/resources/org/opendaylight/blueprint/recording-blueprint.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/sli/recording/src/main/resources/svclogic.properties b/sli/recording/src/main/resources/svclogic.properties deleted file mode 100644 index 0ae6be71c..000000000 --- a/sli/recording/src/main/resources/svclogic.properties +++ /dev/null @@ -1,26 +0,0 @@ -### -# ============LICENSE_START======================================================= -# ONAP : CCSDK -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. All rights -# reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -### - -org.onap.ccsdk.sli.dbtype = jdbc -org.onap.ccsdk.sli.jdbc.url = jdbc:mysql://dbhost:3306/sdnctl -org.onap.ccsdk.sli.jdbc.database = sdnctl -org.onap.ccsdk.sli.jdbc.user = sdnctl -org.onap.ccsdk.sli.jdbc.password = gamma diff --git a/sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java b/sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java deleted file mode 100644 index d0cc83182..000000000 --- a/sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestFileRecorder.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * - */ -package org.onap.ccsdk.sli.core.sli.recording; - -import static org.junit.Assert.fail; - -import java.util.HashMap; - -import org.junit.Before; -import org.junit.Test; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; - -/** - * @author dt5972 - * - */ -public class TestFileRecorder { - private FileRecorder recorder; - - @Before - public void setUp() { - recorder = new FileRecorder(); - } - - /** - * Test method for - * {@link org.onap.ccsdk.sli.core.sli.recording.FileRecorder#record(java.util.Map)}. - */ - @Test - public void testRecord() { - HashMap parms = new HashMap<>(); - parms.put("file", "/dev/null"); - parms.put("field1", "hi"); - try { - recorder.record(parms); - } catch (SvcLogicException e) { - fail("Caught SvcLogicException : " + e.getMessage()); - } - } - - @Test(expected = Exception.class) - public void testRecordForEmptyFileName() throws Exception { - HashMap parms = new HashMap<>(); - parms.put("field1", "hi"); - recorder.record(parms); - } - -} diff --git a/sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java b/sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java deleted file mode 100644 index c696f25b5..000000000 --- a/sli/recording/src/test/java/org/onap/ccsdk/sli/core/sli/recording/TestSlf4jRecorder.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * - */ -package org.onap.ccsdk.sli.core.sli.recording; - -import static org.junit.Assert.*; -import java.util.HashMap; -import org.junit.Test; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; - -/** - * @author dt5972 - * - */ -public class TestSlf4jRecorder { - - /** - * Test method for {@link org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder#record(java.util.Map)}. - */ - @Test - public void testRecord() { - Slf4jRecorder recorder = new Slf4jRecorder(); - - HashMap parms = new HashMap<>(); - parms.put("field1","hi"); - try { - recorder.record(parms); - } catch (SvcLogicException e) { - fail("Caught SvcLogicException : "+e.getMessage()); - } - } - -} diff --git a/sliapi/.gitignore b/sliapi/.gitignore index b73caf31e..1558a77c4 100755 --- a/sliapi/.gitignore +++ b/sliapi/.gitignore @@ -29,6 +29,10 @@ out/ .DS_STORE .metadata +## Derby files +sdnctl +derby.log + ## Folders which contain auto generated source code ## yang-gen-config yang-gen-sal diff --git a/sliapi/model/src/main/resources/sli-api.20161110.yaml b/sliapi/model/src/main/resources/sli-api.20161110.yaml new file mode 100644 index 000000000..db60aa1e4 --- /dev/null +++ b/sliapi/model/src/main/resources/sli-api.20161110.yaml @@ -0,0 +1,271 @@ +--- +swagger: '2.0' +info: + version: 1.0.0 + title: "SLI API" +basePath: '/restconf' +schemes: + - http + - https +paths: + '/restconf/config/SLI-API:test-results': + delete: + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + description: Test results + operationId: delete-test-results + get: + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: get-test-results + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: body + name: testResults + required: false + schema: + $ref: '#/definitions/test-results' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: post-test-results + put: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: body + name: testResults + required: false + schema: + $ref: '#/definitions/test-results' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: put-test-results + + '/restconf/config/SLI-API:test-results/test-result/{test-identifier}': + delete: + produces: + - application/json + - application/xml + parameters: + - in: path + name: test-identifier + required: true + type: string + responses: + '200': + description: No response was specified + operationId: delete-test-result + get: + produces: + - application/json + - application/xml + parameters: + - in: path + name: test-identifier + required: true + type: string + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-result' + operationId: get-test-result + put: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: path + name: test-identifier + required: true + type: string + - in: body + name: testResult + required: false + schema: + $ref: '#/definitions/test-result' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-result' + operationId: PUT-test-result + + '/restconf/operational/SLI-API:test-results': + get: + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: GET-test-results + '/restconf/operations/SLI-API:execute-graph': + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: body + name: executeGraphInput + required: false + schema: + $ref: '#/definitions/execute-graph-input' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/response-fields' + description: ' Method to add a new parameter.' + operationId: execute-graph + '/restconf/operations/SLI-API:healthcheck': + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml +# parameters: +# - in: body +# name: healthcheckInput +# required: false +# schema: +# $ref: '#/definitions/healthcheck-input' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/response-fields' + operationId: healthcheck + '/restconf/operations/SLI-API:vlbcheck': + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: body + name: vlbcheckInput + required: false + schema: + $ref: '#/definitions/vlbcheck-input' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/response-fields' + operationId: vlbcheck + +definitions: + parameter-setting: + type: object + properties: + parameter-name: + type: string + int-value: + type: integer + string-value: + type: string + boolean-value: + type: boolean + + response-fields: + type: object + properties: + response-code: + type: string + ack-final-indicator: + type: string + response-message: + type: string + context-memory-json: + type: string + + test-results: + type: object + properties: + test-results: + type: array + items: + $ref: '#/definitions/test-result' + + test-result: + type: object + properties: + test-identifier: + type: string + results: + type: array + items: + type: string + + execute-graph-input: + properties: + 'mode': + type: string + 'module-name': + type: string + 'rpc-name': + type: string + 'sli-parameter': + items: + $ref: '#/definitions/parameter-setting' + type: array + type: object + + healthcheck-input: + properties: + 'dummy': + type: string + + + vlbcheck-input: + properties: + 'dummy': + type: string + + + + unique_empty_identifier: {} + diff --git a/sliapi/pom.xml b/sliapi/pom.xml index 1d568a429..c8bc164c7 100755 --- a/sliapi/pom.xml +++ b/sliapi/pom.xml @@ -19,6 +19,7 @@ model provider + springboot installer diff --git a/sliapi/springboot/.swagger-codegen-ignore b/sliapi/springboot/.swagger-codegen-ignore new file mode 100644 index 000000000..d14d7b944 --- /dev/null +++ b/sliapi/springboot/.swagger-codegen-ignore @@ -0,0 +1 @@ +**/RestconfApiController.java diff --git a/sliapi/springboot/README.md b/sliapi/springboot/README.md new file mode 100644 index 000000000..5737072ef --- /dev/null +++ b/sliapi/springboot/README.md @@ -0,0 +1,10 @@ +This directory contains a demo springboot implementation of the SLI-API healthcheck method. + +To start this server, run: + +java -jar -DserviceLogicDirectory=src/main/resources target/sliapi-springboot-{version}.jar + +This will start a servlet on port 8080. To test to that servlet, post a blank +message to that port: + +curl http://127.0.0.1:8080/SLI-API:healthcheck -X POST -H "Content-Type: application/json" \ No newline at end of file diff --git a/sliapi/springboot/pom.xml b/sliapi/springboot/pom.xml new file mode 100644 index 000000000..be6bb629e --- /dev/null +++ b/sliapi/springboot/pom.xml @@ -0,0 +1,100 @@ + + + 4.0.0 + + + org.onap.ccsdk.parent + spring-boot-starter-parent + 1.5.2-SNAPSHOT + + + org.onap.ccsdk.sli.core + sliapi-springboot + 0.7.1-SNAPSHOT + jar + + sliapi-springboot + + + + io.swagger + swagger-annotations + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + io.springfox + springfox-swagger2 + 2.9.2 + + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + ${project.groupId} + sli-provider + ${project.version} + + + com.google.code.gson + gson + + + org.apache.derby + derby + runtime + + + + + + + io.swagger + swagger-codegen-maven-plugin + 2.3.1 + + + + generate + + + ${project.basedir}/../model/src/main/resources/sli-api.20161110.yaml + spring + org.onap.ccsdk.sli.core.sliapi.springboot + org.onap.ccsdk.sli.core.sliapi.model + org.onap.ccsdk.sli.core.sliapi.springboot + true + true + ${project.basedir}/.swagger-codegen-ignore + true + + true + 2.2.4-RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/ExecuteGraphController.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/ExecuteGraphController.java new file mode 100644 index 000000000..6c024108b --- /dev/null +++ b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/ExecuteGraphController.java @@ -0,0 +1,110 @@ +package org.onap.ccsdk.sli.core.sliapi.springboot; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; + +import com.google.gson.*; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicLoader; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl; +import org.onap.ccsdk.sli.core.sli.provider.base.InMemorySvcLogicStore; +import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Controller +@EnableAutoConfiguration +public class ExecuteGraphController { + static SvcLogicService svc; + private static final Logger LOGGER = LoggerFactory.getLogger(ExecuteGraphController.class); + + @RequestMapping(value = "/executeGraph", method = RequestMethod.POST) + @ResponseBody + public HashMap executeGraph(@RequestBody String input) { + LOGGER.error("In request"); + LOGGER.error(input); + + HashMap hash = new HashMap(); + Properties parms = new Properties(); + + hash.put("status", "success"); + JsonObject jsonInput = new Gson().fromJson(input, JsonObject.class); + JsonObject passthroughObj = jsonInput.get("input").getAsJsonObject(); + + writeResponseToCtx(passthroughObj.toString(), parms, "input"); + + JsonObject inputObject = jsonInput.get("graphDetails").getAsJsonObject(); + try { + // Any of these can throw a nullpointer exception + String calledModule = inputObject.get("module").getAsString(); + String calledRpc = inputObject.get("rpc").getAsString(); + String modeStr = inputObject.get("mode").getAsString(); + // execute should only throw a SvcLogicException + Properties respProps = svc.execute(calledModule, calledRpc, null, modeStr, parms); + for (Entry prop : respProps.entrySet()) { + hash.put((String) prop.getKey(), (String) prop.getValue()); + } + } catch (NullPointerException npe) { + HashMap errorHash = new HashMap(); + errorHash.put("error-message", "check that you populated module, rpc and or mode correctly."); + return errorHash; + } catch (SvcLogicException e) { + HashMap errorHash = new HashMap(); + errorHash.put("status", "failure"); + errorHash.put("message", e.getMessage()); + return errorHash; + } + return hash; + } + + public static void writeResponseToCtx(String resp, Properties ctx, String prefix) { + JsonParser jp = new JsonParser(); + JsonElement element = jp.parse(resp); + writeJsonObject(element.getAsJsonObject(), ctx, prefix + "."); + } + + public static void writeJsonObject(JsonObject obj, Properties ctx, String root) { + for (Entry entry : obj.entrySet()) { + if (entry.getValue().isJsonObject()) { + writeJsonObject(entry.getValue().getAsJsonObject(), ctx, root + entry.getKey() + "."); + } else if (entry.getValue().isJsonArray()) { + JsonArray array = entry.getValue().getAsJsonArray(); + ctx.put(root + entry.getKey() + "_length", String.valueOf(array.size())); + Integer arrayIdx = 0; + for (JsonElement element : array) { + if (element.isJsonObject()) { + writeJsonObject(element.getAsJsonObject(), ctx, root + entry.getKey() + "[" + arrayIdx + "]."); + } + arrayIdx++; + } + } else { + ctx.put(root + entry.getKey(), entry.getValue().getAsString()); + } + } + } + + public static void main(String[] args) throws Exception { + InMemorySvcLogicStore store = new InMemorySvcLogicStore(); + SvcLogicLoader loader = new SvcLogicLoader(System.getProperty("serviceLogicDirectory"), store); + + loader.loadAndActivate(); + SvcLogicResolver resolver = new SvcLogicClassResolver(); + + + svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl(), resolver); + SpringApplication.run(ExecuteGraphController.class, args); + } +} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java new file mode 100644 index 000000000..1c22da476 --- /dev/null +++ b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java @@ -0,0 +1,126 @@ +package org.onap.ccsdk.sli.core.sliapi.springboot; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.*; +import org.onap.ccsdk.sli.core.sli.*; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService; +import org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl; +import org.onap.ccsdk.sli.core.sli.provider.base.InMemorySvcLogicStore; +import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider; +import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver; +import org.onap.ccsdk.sli.core.sliapi.model.ExecuteGraphInput; +import org.onap.ccsdk.sli.core.sliapi.model.HealthcheckInput; +import org.onap.ccsdk.sli.core.sliapi.model.ResponseFields; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.Properties; + +@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2020-02-20T12:50:11.207-05:00") + +@Controller +public class RestconfApiController implements RestconfApi { + + private final ObjectMapper objectMapper; + + private final HttpServletRequest request; + + private static SvcLogicService svc; + Logger log = LoggerFactory.getLogger(RestconfApiController.class); + + @org.springframework.beans.factory.annotation.Autowired + public RestconfApiController(ObjectMapper objectMapper, HttpServletRequest request) { + this.objectMapper = objectMapper; + this.request = request; + + SvcLogicPropertiesProvider propProvider = new SvcLogicPropertiesProviderImpl(); + SvcLogicStore store = null; + try { + store = SvcLogicStoreFactory.getSvcLogicStore(propProvider.getProperties()); + } catch (SvcLogicException e) { + log.error("Cannot create SvcLogicStore", e); + return; + } + + String serviceLogicDirectory = System.getProperty("serviceLogicDirectory"); + System.out.println("serviceLogicDirectory is "+serviceLogicDirectory); + SvcLogicLoader loader = new SvcLogicLoader(serviceLogicDirectory, store); + + try { + loader.loadAndActivate(); + } catch (IOException e) { + log.error("Cannot load directed graphs", e); + } + SvcLogicResolver resolver = new SvcLogicClassResolver(); + + + try { + svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl(), resolver); + } catch (SvcLogicException e) { + log.error("Cannot execute directed graph", e); + } + } + + @Override + public ResponseEntity healthcheck() { + SvcLogicContext ctx = new SvcLogicContext(); + ResponseFields resp = new ResponseFields(); + + + try { + + log.info("Calling SLI-API:healthcheck DG"); + Properties inputProps = new Properties(); + Properties respProps = svc.execute("sli", "healthcheck" , null, "sync", inputProps); + if (respProps == null) { + log.info("DG execution returned no properties!"); + } else { + log.info("DG execution returned properties"); + for (String key: respProps.stringPropertyNames()) { + log.info("DG returned property "+key+" = "+respProps.getProperty(key)); + } + } + resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y")); + resp.setResponseCode(respProps.getProperty("error-code", "200")); + resp.setResponseMessage(respProps.getProperty("error-message", "Success")); + + return(new ResponseEntity<>(resp, HttpStatus.OK)); + } + catch (Exception e) { + resp.setAckFinalIndicator("true"); + resp.setResponseCode("500"); + resp.setResponseMessage(e.getMessage()); + log.error("Error calling healthcheck directed graph", e); + + } + + return(new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); + + } + + @Override + public Optional getObjectMapper() { + return Optional.ofNullable(objectMapper); + } + + @Override + public Optional getRequest() { + return Optional.ofNullable(request); + } + + + + + +} diff --git a/sliapi/springboot/src/main/resources/application.properties b/sliapi/springboot/src/main/resources/application.properties new file mode 100644 index 000000000..6218d11f6 --- /dev/null +++ b/sliapi/springboot/src/main/resources/application.properties @@ -0,0 +1,8 @@ +springfox.documentation.swagger.v2.path=/api-docs +server.contextPath=/restconf +server.port=8080 +spring.jackson.date-format=org.onap.ccsdk.sli.core.sliapi.springboot.RFC3339DateFormat +spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false +spring.datasource.url=jdbc:derby:sdnctl;create=true +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DerbyTenSevenDialect +spring.jpa.hibernate.ddl-auto=update \ No newline at end of file diff --git a/sliapi/springboot/src/main/resources/graph.versions b/sliapi/springboot/src/main/resources/graph.versions new file mode 100644 index 000000000..9c53eb2c1 --- /dev/null +++ b/sliapi/springboot/src/main/resources/graph.versions @@ -0,0 +1 @@ +sli healthcheck 0.7.0 sync diff --git a/sliapi/springboot/src/main/resources/sli_healthcheck.xml b/sliapi/springboot/src/main/resources/sli_healthcheck.xml new file mode 100644 index 000000000..bc8e2f700 --- /dev/null +++ b/sliapi/springboot/src/main/resources/sli_healthcheck.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/sliapi/springboot/src/main/resources/svclogic.properties b/sliapi/springboot/src/main/resources/svclogic.properties new file mode 100644 index 000000000..426960f76 --- /dev/null +++ b/sliapi/springboot/src/main/resources/svclogic.properties @@ -0,0 +1,27 @@ +### +# ============LICENSE_START======================================================= +# ONAP : CCSDK +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +### + +org.onap.ccsdk.sli.dbtype = jdbc +org.onap.ccsdk.sli.jdbc.url=jdbc:derby:memory:sdnctl;create=true +org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver +org.onap.ccsdk.sli.jdbc.database = sdnctl +org.onap.ccsdk.sli.jdbc.user = test +org.onap.ccsdk.sli.jdbc.password = test diff --git a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java index cc164d042..9ae094f1a 100755 --- a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java +++ b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java @@ -55,7 +55,14 @@ public class JREFileResolver implements PropertiesFileResolver { @Override public Optional resolveFile(final String filename) { - final Bundle bundle = FrameworkUtil.getBundle(this.clazz); + final Bundle bundle; + + try { + bundle = FrameworkUtil.getBundle(this.clazz); + } catch (NoClassDefFoundError e) { + return Optional.empty(); + } + final File dataFile; @@ -82,9 +89,13 @@ public class JREFileResolver implements PropertiesFileResolver { } return Optional.of(dataFile); - } catch(final Exception e) { + } catch (NoClassDefFoundError e) { + return Optional.empty(); + } + catch(final Exception e) { return Optional.empty(); } + } @Override -- cgit 1.2.3-korg From ec7aa8b8c9fbe23f7628eb61bea93c0136cff6c5 Mon Sep 17 00:00:00 2001 From: Dan Timoney Date: Wed, 26 Feb 2020 16:07:53 -0500 Subject: Add execute-graph and vlbcheck to swagger-codegen code Add implementation for execute-graph and vlbcheck RPCs. Also, added junit tests. Change-Id: Id2a31c033d25ef12c455bfee98c5aea8439fc2f9 Issue-ID: CCSDK-2096 Signed-off-by: Dan Timoney --- .../onap/ccsdk/sli/core/sli/SvcLogicContext.java | 2 +- .../model/src/main/resources/sli-api.20161110.yaml | 43 ++--- sliapi/springboot/pom.xml | 196 +++++++++++---------- .../sliapi/springboot/RestconfApiController.java | 147 +++++++++++++++- .../src/main/resources/application.properties | 2 +- .../springboot/src/main/resources/graph.versions | 1 + .../springboot/src/main/resources/sli_vlbcheck.xml | 27 +++ .../src/main/resources/svclogic.properties | 2 + .../springboot/RestconfApiControllerTest.java | 99 +++++++++++ 9 files changed, 387 insertions(+), 132 deletions(-) create mode 100644 sliapi/springboot/src/main/resources/sli_vlbcheck.xml create mode 100644 sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java (limited to 'sliapi/model/src/main/resources') diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java index 549e6364f..3681e1e11 100644 --- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java +++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java @@ -91,7 +91,7 @@ public class SvcLogicContext { { return attributes.keySet(); } - public Boolean isSuccess() { + public Boolean isSuccess() { return status.equals(SvcLogicConstants.SUCCESS); } diff --git a/sliapi/model/src/main/resources/sli-api.20161110.yaml b/sliapi/model/src/main/resources/sli-api.20161110.yaml index db60aa1e4..3420c66b5 100644 --- a/sliapi/model/src/main/resources/sli-api.20161110.yaml +++ b/sliapi/model/src/main/resources/sli-api.20161110.yaml @@ -164,12 +164,6 @@ paths: produces: - application/json - application/xml -# parameters: -# - in: body -# name: healthcheckInput -# required: false -# schema: -# $ref: '#/definitions/healthcheck-input' responses: '200': description: No response was specified @@ -184,12 +178,6 @@ paths: produces: - application/json - application/xml - parameters: - - in: body - name: vlbcheckInput - required: false - schema: - $ref: '#/definitions/vlbcheck-input' responses: '200': description: No response was specified @@ -242,28 +230,23 @@ definitions: execute-graph-input: properties: - 'mode': - type: string - 'module-name': - type: string - 'rpc-name': - type: string - 'sli-parameter': - items: - $ref: '#/definitions/parameter-setting' - type: array + 'input': + type: object + properties: + 'mode': + type: string + 'module-name': + type: string + 'rpc-name': + type: string + 'sli-parameter': + items: + $ref: '#/definitions/parameter-setting' + type: array type: object - healthcheck-input: - properties: - 'dummy': - type: string - vlbcheck-input: - properties: - 'dummy': - type: string diff --git a/sliapi/springboot/pom.xml b/sliapi/springboot/pom.xml index e9d5a9d8b..d7962c572 100644 --- a/sliapi/springboot/pom.xml +++ b/sliapi/springboot/pom.xml @@ -1,100 +1,112 @@ - 4.0.0 + 4.0.0 - - org.onap.ccsdk.parent - spring-boot-starter-parent - 1.5.2-SNAPSHOT - + + org.onap.ccsdk.parent + spring-boot-starter-parent + 1.5.2-SNAPSHOT + - org.onap.ccsdk.sli.core - sliapi-springboot - 0.7.1-SNAPSHOT - jar + org.onap.ccsdk.sli.core + sliapi-springboot + 0.7.1-SNAPSHOT + jar - sliapi-springboot + sliapi-springboot - - - io.swagger - swagger-annotations - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - - io.springfox - springfox-swagger2 - 2.9.2 - - - io.springfox - springfox-swagger-ui - 2.9.2 - - - ${project.groupId} - sli-provider-base - ${project.version} - - - com.google.code.gson - gson - - - org.apache.derby - derby - runtime - - + + + io.swagger + swagger-annotations + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-data-jpa + + + io.springfox + springfox-swagger2 + 2.9.2 + - - - - io.swagger - swagger-codegen-maven-plugin - 2.3.1 - - - - generate - - - target/generated-sources - ${project.basedir}/../model/src/main/resources/sli-api.20161110.yaml - spring - org.onap.ccsdk.sli.core.sliapi.springboot - org.onap.ccsdk.sli.core.sliapi.model - org.onap.ccsdk.sli.core.sliapi.springboot - true - true - ${project.basedir}/.swagger-codegen-ignore - true - - true - 2.2.4-RELEASE - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - - + + io.springfox + springfox-swagger-ui + 2.9.2 + + + ${project.groupId} + sli-provider-base + ${project.version} + + + com.google.code.gson + gson + + + org.apache.derby + derby + runtime + + + junit + junit + test + + + + + + + io.swagger + swagger-codegen-maven-plugin + 2.3.1 + + + + generate + + + target/generated-sources + ${project.basedir}/../model/src/main/resources/sli-api.20161110.yaml + spring + org.onap.ccsdk.sli.core.sliapi.springboot + org.onap.ccsdk.sli.core.sliapi.model + org.onap.ccsdk.sli.core.sliapi.springboot + true + true + ${project.basedir}/.swagger-codegen-ignore + true + + true + 2.2.4-RELEASE + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java index 8d2553a9e..e2cd864d7 100644 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java +++ b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java @@ -2,11 +2,16 @@ package org.onap.ccsdk.sli.core.sliapi.springboot; import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; import java.util.Properties; import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.gson.*; import org.onap.ccsdk.sli.core.sli.ConfigurationException; import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicLoader; @@ -17,6 +22,7 @@ import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase; +import org.onap.ccsdk.sli.core.sliapi.model.ExecuteGraphInput; import org.onap.ccsdk.sli.core.sliapi.model.ResponseFields; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,6 +39,8 @@ public class RestconfApiController implements RestconfApi { private final ObjectMapper objectMapper; private final HttpServletRequest request; + + private static SvcLogicServiceBase svc; private static final Logger log = LoggerFactory.getLogger(RestconfApiController.class); @@ -90,17 +98,11 @@ public class RestconfApiController implements RestconfApi { log.info("Calling SLI-API:healthcheck DG"); Properties inputProps = new Properties(); Properties respProps = svc.execute("sli", "healthcheck", null, "sync", inputProps); - if (respProps == null) { - log.info("DG execution returned no properties!"); - } else { - log.info("DG execution returned properties"); - for (String key : respProps.stringPropertyNames()) { - log.info("DG returned property " + key + " = " + respProps.getProperty(key)); - } - } + resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y")); resp.setResponseCode(respProps.getProperty("error-code", "200")); resp.setResponseMessage(respProps.getProperty("error-message", "Success")); + resp.setContextMemoryJson(propsToJson(respProps, "context-memory")); return (new ResponseEntity<>(resp, HttpStatus.OK)); } catch (Exception e) { @@ -113,6 +115,32 @@ public class RestconfApiController implements RestconfApi { return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); } + @Override + public ResponseEntity vlbcheck() { + ResponseFields resp = new ResponseFields(); + + try { + log.info("Calling SLI-API:vlbcheck DG"); + Properties inputProps = new Properties(); + Properties respProps = svc.execute("sli", "vlbcheck", null, "sync", inputProps); + + resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y")); + resp.setResponseCode(respProps.getProperty("error-code", "200")); + resp.setResponseMessage(respProps.getProperty("error-message", "Success")); + resp.setContextMemoryJson(propsToJson(respProps, "context-memory")); + + return (new ResponseEntity<>(resp, HttpStatus.OK)); + } catch (Exception e) { + resp.setAckFinalIndicator("true"); + resp.setResponseCode("500"); + resp.setResponseMessage(e.getMessage()); + log.error("Error calling vlbcheck directed graph", e); + + } + return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); + } + + @Override public Optional getObjectMapper() { return Optional.ofNullable(objectMapper); @@ -123,4 +151,107 @@ public class RestconfApiController implements RestconfApi { return Optional.ofNullable(request); } + @Override + public ResponseEntity executeGraph(@Valid ExecuteGraphInput executeGraphInput) { + Properties parms = new Properties(); + ResponseFields resp = new ResponseFields(); + String executeGraphInputJson = null; + + try { + executeGraphInputJson = objectMapper.writeValueAsString(executeGraphInput); + log.info("Input as JSON is "+executeGraphInputJson); + } catch (JsonProcessingException e) { + + resp.setAckFinalIndicator("true"); + resp.setResponseCode("500"); + resp.setResponseMessage(e.getMessage()); + log.error("Cannot create JSON from input object", e); + return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); + + } + JsonObject jsonInput = new Gson().fromJson(executeGraphInputJson, JsonObject.class); + JsonObject passthroughObj = jsonInput.get("input").getAsJsonObject(); + + writeResponseToCtx(passthroughObj.toString(), parms, "input"); + + + try { + // Any of these can throw a nullpointer exception + String calledModule = executeGraphInput.getInput().getModuleName(); + String calledRpc = executeGraphInput.getInput().getRpcName(); + String modeStr = executeGraphInput.getInput().getMode(); + // execute should only throw a SvcLogicException + Properties respProps = svc.execute(calledModule, calledRpc, null, modeStr, parms); + + resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y")); + resp.setResponseCode(respProps.getProperty("error-code", "200")); + resp.setResponseMessage(respProps.getProperty("error-message", "SUCCESS")); + resp.setContextMemoryJson(propsToJson(respProps, "context-memory")); + return (new ResponseEntity<>(resp, HttpStatus.valueOf(Integer.parseInt(resp.getResponseCode())))); + + } catch (NullPointerException npe) { + resp.setAckFinalIndicator("true"); + resp.setResponseCode("500"); + resp.setResponseMessage("Check that you populated module, rpc and or mode correctly."); + + return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); + } catch (SvcLogicException e) { + resp.setAckFinalIndicator("true"); + resp.setResponseCode("500"); + resp.setResponseMessage(e.getMessage()); + + return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); + } + } + + public static void writeResponseToCtx(String resp, Properties ctx, String prefix) { + JsonParser jp = new JsonParser(); + JsonElement element = jp.parse(resp); + writeJsonObject(element.getAsJsonObject(), ctx, prefix + "."); + } + + public static void writeJsonObject(JsonObject obj, Properties ctx, String root) { + for (Map.Entry entry : obj.entrySet()) { + if (entry.getValue().isJsonObject()) { + writeJsonObject(entry.getValue().getAsJsonObject(), ctx, root + entry.getKey() + "."); + } else if (entry.getValue().isJsonArray()) { + JsonArray array = entry.getValue().getAsJsonArray(); + ctx.put(root + entry.getKey() + "_length", String.valueOf(array.size())); + Integer arrayIdx = 0; + for (JsonElement element : array) { + if (element.isJsonObject()) { + writeJsonObject(element.getAsJsonObject(), ctx, root + entry.getKey() + "[" + arrayIdx + "]."); + } + arrayIdx++; + } + } else { + if (entry.getValue() instanceof JsonNull) { + log.info("Skipping parameter "+entry.getKey()+" with null value"); + + } else { + ctx.put(root + entry.getKey(), entry.getValue().getAsString()); + } + } + } + } + + public static String propsToJson(Properties props, String root) + { + StringBuffer sbuff = new StringBuffer(); + + sbuff.append("{ \""+root+"\" : { "); + boolean needComma = false; + for (Map.Entry prop : props.entrySet()) { + sbuff.append("\""+(String) prop.getKey()+"\" : \""+(String)prop.getValue()+"\""); + if (needComma) { + sbuff.append(" , "); + } else { + needComma = true; + } + } + sbuff.append(" } }"); + + return(sbuff.toString()); + } + } diff --git a/sliapi/springboot/src/main/resources/application.properties b/sliapi/springboot/src/main/resources/application.properties index 6218d11f6..64415bd34 100644 --- a/sliapi/springboot/src/main/resources/application.properties +++ b/sliapi/springboot/src/main/resources/application.properties @@ -5,4 +5,4 @@ spring.jackson.date-format=org.onap.ccsdk.sli.core.sliapi.springboot.RFC3339Date spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false spring.datasource.url=jdbc:derby:sdnctl;create=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DerbyTenSevenDialect -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +spring.jpa.hibernate.ddl-auto=update diff --git a/sliapi/springboot/src/main/resources/graph.versions b/sliapi/springboot/src/main/resources/graph.versions index 9c53eb2c1..7f75be4c8 100644 --- a/sliapi/springboot/src/main/resources/graph.versions +++ b/sliapi/springboot/src/main/resources/graph.versions @@ -1 +1,2 @@ sli healthcheck 0.7.0 sync +sli vlbcheck 0.7.0 sync diff --git a/sliapi/springboot/src/main/resources/sli_vlbcheck.xml b/sliapi/springboot/src/main/resources/sli_vlbcheck.xml new file mode 100644 index 000000000..820a85c10 --- /dev/null +++ b/sliapi/springboot/src/main/resources/sli_vlbcheck.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/sliapi/springboot/src/main/resources/svclogic.properties b/sliapi/springboot/src/main/resources/svclogic.properties index 426960f76..1d90ab9b4 100644 --- a/sliapi/springboot/src/main/resources/svclogic.properties +++ b/sliapi/springboot/src/main/resources/svclogic.properties @@ -25,3 +25,5 @@ org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver org.onap.ccsdk.sli.jdbc.database = sdnctl org.onap.ccsdk.sli.jdbc.user = test org.onap.ccsdk.sli.jdbc.password = test + +sliapi.serviceLogicDirectory=/opt/onap/sdnc/svclogic/graphs diff --git a/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java b/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java new file mode 100644 index 000000000..af55a5181 --- /dev/null +++ b/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java @@ -0,0 +1,99 @@ +package org.onap.ccsdk.sli.core.sliapi.springboot; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.ccsdk.sli.core.sliapi.model.ExecuteGraphInput; +import org.onap.ccsdk.sli.core.sliapi.model.ExecutegraphinputInput; +import org.onap.ccsdk.sli.core.sliapi.model.ResponseFields; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.junit.Assert.assertEquals; + +@RunWith(SpringRunner.class) +@WebMvcTest(RestconfApiController.class) +public class RestconfApiControllerTest { + + @Autowired + private MockMvc mvc; + + @MockBean + private RestconfApiController restconfApiController; + + @Test + public void testHealthcheck() throws Exception { + String url = "/restconf/operations/SLI-API:healthcheck"; + + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content("")).andReturn(); + + assertEquals(200, mvcResult.getResponse().getStatus()); + } + + @Test + public void testVlbcheck() throws Exception { + String url = "/restconf/operations/SLI-API:vlbcheck"; + + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content("")).andReturn(); + + assertEquals(200, mvcResult.getResponse().getStatus()); + } + + @Test + public void testExecuteHealthcheck() throws Exception { + String url = "/restconf/operations/SLI-API:execute-graph"; + + ExecuteGraphInput executeGraphInput = new ExecuteGraphInput(); + ExecutegraphinputInput executeGraphData = new ExecutegraphinputInput(); + + executeGraphData.setModuleName("sli"); + executeGraphData.setRpcName("healthcheck"); + executeGraphData.setMode("sync"); + executeGraphInput.setInput(executeGraphData); + + String jsonString = mapToJson(executeGraphInput); + + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content(jsonString)).andReturn(); + + assertEquals(200, mvcResult.getResponse().getStatus()); + + } + + @Test + public void testExecuteMissingDg() throws Exception { + String url = "/restconf/operations/SLI-API:execute-graph"; + + ExecuteGraphInput executeGraphInput = new ExecuteGraphInput(); + ExecutegraphinputInput executeGraphData = new ExecutegraphinputInput(); + + executeGraphData.setModuleName("sli"); + executeGraphData.setRpcName("noSuchRPC"); + executeGraphData.setMode("sync"); + executeGraphInput.setInput(executeGraphData); + + String jsonString = mapToJson(executeGraphInput); + + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content(jsonString)).andReturn(); + + // Note: this really should return 401 (and truly does), but mockito always returns a 200. + assertEquals(200, mvcResult.getResponse().getStatus()); + + } + + private String mapToJson(Object obj) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.writeValueAsString(obj); + } + + private ResponseFields respFromJson(String jsonString) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + return(objectMapper.readValue(jsonString, ResponseFields.class)); + } +} -- cgit 1.2.3-korg From 4ddd6ac987341285d5f10636018e84afb9751b27 Mon Sep 17 00:00:00 2001 From: Dan Timoney Date: Thu, 4 Jun 2020 15:10:06 -0400 Subject: Refactor sliapi springboot Move springboot implementation of sliapi from sli/core to apps repository. Change-Id: I6e1dfdc39704935ba7e46d047149071defc101a6 Issue-ID: CCSDK-2096 Signed-off-by: Dan Timoney --- sliapi/model/pom.xml | 17 +- .../model/src/main/resources/sli-api.20161110.json | 554 --------------------- sliapi/model/src/main/yang/sliapi.yang | 130 ----- sliapi/model/swagger/pom.xml | 222 +++++++++ sliapi/model/swagger/src/main/json/sliapi.json | 1 + sliapi/model/swagger/src/main/yaml/sliapi.yaml | 378 ++++++++++++++ sliapi/model/yang/pom.xml | 27 + .../yang/src/main/resources/sli-api.20161110.json | 554 +++++++++++++++++++++ .../yang/src/main/resources/sli-api.20161110.yaml | 254 ++++++++++ sliapi/model/yang/src/main/yang/sliapi.yang | 117 +++++ sliapi/pom.xml | 1 - sliapi/provider/pom.xml | 2 +- sliapi/springboot/.swagger-codegen-ignore | 1 - sliapi/springboot/README.md | 33 -- sliapi/springboot/pom.xml | 179 ------- .../onap/ccsdk/sli/core/sliapi/springboot/App.java | 80 --- .../controllers/ExecuteGraphController.java | 112 ----- .../controllers/data/TestResultConfig.java | 50 -- .../controllers/data/TestResultOperational.java | 51 -- .../data/TestResultsConfigRepository.java | 12 - .../data/TestResultsOperationalRepository.java | 12 - .../controllers/swagger/RestconfApiController.java | 364 -------------- .../sliapi/springboot/core/SvcLogicFactory.java | 150 ------ .../sli/core/sliapi/springboot/core/WebConfig.java | 55 -- sliapi/springboot/src/main/resources/DEMO_DEMO.xml | 35 -- .../src/main/resources/application.properties | 18 - .../springboot/src/main/resources/graph.versions | 3 - .../src/main/resources/log4j2.properties | 160 ------ .../src/main/resources/shiro-users.properties | 3 - .../src/main/resources/sli_healthcheck.xml | 27 - .../springboot/src/main/resources/sli_vlbcheck.xml | 27 - .../src/main/resources/svclogic.properties | 29 -- .../ccsdk/sli/core/sliapi/springboot/AppTest.java | 40 -- .../springboot/RestconfApiControllerTest.java | 162 ------ sliapi/springboot/src/test/resources/DEMO_DEMO.xml | 35 -- .../src/test/resources/application.properties | 18 - .../springboot/src/test/resources/graph.versions | 3 - .../src/test/resources/log4j2.properties | 160 ------ .../src/test/resources/shiro-users.properties | 3 - .../src/test/resources/sli_healthcheck.xml | 27 - .../springboot/src/test/resources/sli_vlbcheck.xml | 27 - .../src/test/resources/svclogic.properties | 29 -- 42 files changed, 1561 insertions(+), 2601 deletions(-) delete mode 100644 sliapi/model/src/main/resources/sli-api.20161110.json delete mode 100755 sliapi/model/src/main/yang/sliapi.yang create mode 100644 sliapi/model/swagger/pom.xml create mode 100644 sliapi/model/swagger/src/main/json/sliapi.json create mode 100644 sliapi/model/swagger/src/main/yaml/sliapi.yaml create mode 100755 sliapi/model/yang/pom.xml create mode 100644 sliapi/model/yang/src/main/resources/sli-api.20161110.json create mode 100644 sliapi/model/yang/src/main/resources/sli-api.20161110.yaml create mode 100755 sliapi/model/yang/src/main/yang/sliapi.yang delete mode 100644 sliapi/springboot/.swagger-codegen-ignore delete mode 100644 sliapi/springboot/README.md delete mode 100644 sliapi/springboot/pom.xml delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/App.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/ExecuteGraphController.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultConfig.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultOperational.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsConfigRepository.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsOperationalRepository.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/swagger/RestconfApiController.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/SvcLogicFactory.java delete mode 100644 sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/WebConfig.java delete mode 100755 sliapi/springboot/src/main/resources/DEMO_DEMO.xml delete mode 100644 sliapi/springboot/src/main/resources/application.properties delete mode 100644 sliapi/springboot/src/main/resources/graph.versions delete mode 100644 sliapi/springboot/src/main/resources/log4j2.properties delete mode 100644 sliapi/springboot/src/main/resources/shiro-users.properties delete mode 100644 sliapi/springboot/src/main/resources/sli_healthcheck.xml delete mode 100644 sliapi/springboot/src/main/resources/sli_vlbcheck.xml delete mode 100644 sliapi/springboot/src/main/resources/svclogic.properties delete mode 100644 sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/AppTest.java delete mode 100644 sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java delete mode 100755 sliapi/springboot/src/test/resources/DEMO_DEMO.xml delete mode 100644 sliapi/springboot/src/test/resources/application.properties delete mode 100644 sliapi/springboot/src/test/resources/graph.versions delete mode 100644 sliapi/springboot/src/test/resources/log4j2.properties delete mode 100644 sliapi/springboot/src/test/resources/shiro-users.properties delete mode 100644 sliapi/springboot/src/test/resources/sli_healthcheck.xml delete mode 100644 sliapi/springboot/src/test/resources/sli_vlbcheck.xml delete mode 100644 sliapi/springboot/src/test/resources/svclogic.properties (limited to 'sliapi/model/src/main/resources') diff --git a/sliapi/model/pom.xml b/sliapi/model/pom.xml index dfe7753a6..4ac5a8510 100755 --- a/sliapi/model/pom.xml +++ b/sliapi/model/pom.xml @@ -4,7 +4,7 @@ org.onap.ccsdk.parent - binding-parent + odlparent-lite 2.0.0-SNAPSHOT @@ -12,16 +12,13 @@ org.onap.ccsdk.sli.core sliapi-model 1.0.0-SNAPSHOT - bundle + pom - ccsdk-sli-core :: sliapi :: ${project.artifactId} + ccsdk-sli-core :: sliapi - - - org.opendaylight.mdsal.binding.model.ietf - rfc6991 - + + yang + swagger + - - diff --git a/sliapi/model/src/main/resources/sli-api.20161110.json b/sliapi/model/src/main/resources/sli-api.20161110.json deleted file mode 100644 index 1c6cdabfe..000000000 --- a/sliapi/model/src/main/resources/sli-api.20161110.json +++ /dev/null @@ -1,554 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "version": "1.0.0" - }, - "basePath": "/restconf", - "paths": { - "/config": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "body", - "name": "**(config)test-results", - "required": false, - "schema": { - "$ref": "#/definitions/SLI-API(config)test-results-TOP" - } - } - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(config)SLI-API_modulePOST" - } - } - }, - "description": "Defines API to service logic interpreter", - "operationId": "POST-SLI-API_module" - } - }, - "/config/SLI-API:test-results": { - "delete": { - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "No response was specified" - } - }, - "description": "Test results", - "operationId": "DELETE-test-results" - }, - "get": { - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(config)test-results" - } - } - }, - "description": "Test results", - "operationId": "GET-test-results" - }, - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "body", - "name": "**(config)test-result", - "required": false, - "schema": { - "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" - } - } - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(config)test-resultsPOST" - } - } - }, - "description": "Test results", - "operationId": "POST-test-results" - }, - "put": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "body", - "name": "(config)test-results", - "required": false, - "schema": { - "$ref": "#/definitions/SLI-API(config)test-results-TOP" - } - } - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/SLI-API(config)test-results-TOP" - } - } - }, - "description": "Test results", - "operationId": "PUT-test-results" - } - }, - "/config/SLI-API:test-results/test-result/{test-identifier}": { - "delete": { - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "path", - "name": "test-identifier", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "No response was specified" - } - }, - "operationId": "DELETE-test-result" - }, - "get": { - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "path", - "name": "test-identifier", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(config)test-result" - } - } - }, - "operationId": "GET-test-result" - }, - "put": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "path", - "name": "test-identifier", - "required": true, - "type": "string" - }, - { - "in": "body", - "name": "(config)test-result", - "required": false, - "schema": { - "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" - } - } - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" - } - } - }, - "operationId": "PUT-test-result" - } - }, - "/operational/SLI-API:test-results": { - "get": { - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(operational)test-results" - } - } - }, - "description": "Test results", - "operationId": "GET-test-results" - } - }, - "/operations/SLI-API:execute-graph": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "required": false, - "schema": { - "$ref": "#/definitions/(execute-graph)input-TOP" - } - } - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(execute-graph)output-TOP" - } - } - }, - "description": " Method to add a new parameter.", - "operationId": "execute-graph" - } - }, - "/operations/SLI-API:healthcheck": { - "post": { - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(healthcheck)output-TOP" - } - } - }, - "operationId": "healthcheck" - } - }, - "/operations/SLI-API:vlbcheck": { - "post": { - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "No response was specified", - "schema": { - "$ref": "#/definitions/(vlbcheck)output-TOP" - } - } - }, - "operationId": "vlbcheck" - } - } - }, - "definitions": { - "(config)SLI-API_modulePOST": { - "properties": { - "test-results": { - "items": { - "$ref": "#/definitions/SLI-API(config)test-results" - }, - "type": "object" - } - }, - "type": "object" - }, - "(config)sli-parameterPOST": { - "properties": { - "boolean-value": { - "$ref": "#/definitions/Optional.empty" - }, - "int-value": { - "$ref": "#/definitions/Optional.empty" - }, - "parameter-name": { - "$ref": "#/definitions/Optional.empty", - "description": "Parameter name" - }, - "string-value": { - "$ref": "#/definitions/Optional.empty" - } - }, - "type": "object" - }, - "(config)test-resultPOST": { - "properties": { - "test-identifier": { - "$ref": "#/definitions/Optional.empty" - } - }, - "type": "object" - }, - "(config)test-resultsPOST": { - "properties": { - "test-result": { - "items": { - "$ref": "#/definitions/SLI-API/test-results(config)test-result" - }, - "type": "array" - } - }, - "type": "object" - }, - "(execute-graph)input": { - "properties": { - "SLI-API:mode": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:module-name": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:rpc-name": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:sli-parameter": { - "items": { - "$ref": "#/definitions/SLI-API(config)sli-parameter" - }, - "type": "array" - } - }, - "type": "object" - }, - "(execute-graph)input-TOP": { - "properties": { - "SLI-API:input": { - "items": { - "$ref": "#/definitions/(execute-graph)input" - }, - "type": "object" - } - }, - "type": "object" - }, - "(execute-graph)output": { - "properties": { - "SLI-API:ack-final-indicator": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:context-memory-json": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:response-code": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:response-message": { - "$ref": "#/definitions/Optional.empty" - } - }, - "type": "object" - }, - "(execute-graph)output-TOP": { - "properties": { - "SLI-API:output": { - "items": { - "$ref": "#/definitions/(execute-graph)output" - }, - "type": "object" - } - }, - "type": "object" - }, - "(healthcheck)output": { - "properties": { - "SLI-API:ack-final-indicator": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:context-memory-json": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:response-code": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:response-message": { - "$ref": "#/definitions/Optional.empty" - } - }, - "type": "object" - }, - "(healthcheck)output-TOP": { - "properties": { - "SLI-API:output": { - "items": { - "$ref": "#/definitions/(healthcheck)output" - }, - "type": "object" - } - }, - "type": "object" - }, - "(vlbcheck)output": { - "properties": { - "SLI-API:ack-final-indicator": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:context-memory-json": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:response-code": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:response-message": { - "$ref": "#/definitions/Optional.empty" - } - }, - "type": "object" - }, - "(vlbcheck)output-TOP": { - "properties": { - "SLI-API:output": { - "items": { - "$ref": "#/definitions/(vlbcheck)output" - }, - "type": "object" - } - }, - "type": "object" - }, - "SLI-API(config)sli-parameter": { - "properties": { - "SLI-API:boolean-value": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:int-value": { - "$ref": "#/definitions/Optional.empty" - }, - "SLI-API:parameter-name": { - "$ref": "#/definitions/Optional.empty", - "description": "Parameter name" - }, - "SLI-API:string-value": { - "$ref": "#/definitions/Optional.empty" - } - }, - "type": "object" - }, - "SLI-API(config)sli-parameter-TOP": { - "properties": { - "SLI-API:sli-parameter": { - "items": { - "$ref": "#/definitions/SLI-API(config)sli-parameter" - }, - "type": "array" - } - }, - "type": "object" - }, - "SLI-API(config)test-results": { - "properties": { - "SLI-API:test-result": { - "items": { - "$ref": "#/definitions/SLI-API/test-results(config)test-result" - }, - "type": "array" - } - }, - "type": "object" - }, - "SLI-API(config)test-results-TOP": { - "properties": { - "SLI-API:test-results": { - "description": "Test results", - "items": { - "$ref": "#/definitions/SLI-API(config)test-results" - }, - "type": "object" - } - }, - "type": "object" - }, - "SLI-API(operational)test-results": { - "type": "object" - }, - "SLI-API(operational)test-results-TOP": { - "properties": { - "SLI-API:test-results": { - "description": "Test results", - "items": { - "$ref": "#/definitions/SLI-API(operational)test-results" - }, - "type": "object" - } - }, - "type": "object" - }, - "SLI-API/test-results(config)test-result": { - "properties": { - "SLI-API:results": { - "items": { - "$ref": "#/definitions/Optional.empty" - }, - "type": "array" - }, - "SLI-API:test-identifier": { - "$ref": "#/definitions/Optional.empty" - } - }, - "type": "object" - }, - "SLI-API/test-results(config)test-result-TOP": { - "properties": { - "SLI-API:test-result": { - "items": { - "$ref": "#/definitions/SLI-API/test-results(config)test-result" - }, - "type": "array" - } - }, - "type": "object" - }, - "unique_empty_identifier": {} - } -} diff --git a/sliapi/model/src/main/yang/sliapi.yang b/sliapi/model/src/main/yang/sliapi.yang deleted file mode 100755 index b3272be80..000000000 --- a/sliapi/model/src/main/yang/sliapi.yang +++ /dev/null @@ -1,130 +0,0 @@ -module SLI-API { - - yang-version 1; - - namespace "org:onap:ccsdk:sli:core:sliapi"; - - prefix sample; - - import ietf-inet-types { prefix "inet"; revision-date 2013-07-15; } - - organization "ONAP"; - - contact - "Dan Timoney"; - - description - "Defines API to service logic interpreter"; - - revision "2016-11-10" { - description - "REST API to Service Logic Interpreter"; - } - - grouping parameter-setting { - description - "Parameter setting"; - - leaf parameter-name { - type string; - description "Parameter name"; - } - - leaf int-value { - type int32; - } - leaf string-value { - type string; - } - leaf boolean-value { - type boolean; - } - } - - grouping response-fields { - leaf response-code { - type string; - } - leaf ack-final-indicator { - type string; - } - leaf response-message { - type string; - } - leaf context-memory-json { - type string; - } - } - - container test-results { - description "Test results"; - - list test-result { - key "test-identifier"; - - leaf test-identifier { - type string; - } - - leaf-list results { - type string; - } - } - } - - rpc execute-graph { - description " Method to add a new parameter."; - input { - - leaf module-name { - type string; - } - - leaf rpc-name { - type string; - } - - leaf mode { - type enumeration { - enum sync; - enum async; - } - } - - list sli-parameter { - key "parameter-name"; - uses parameter-setting; - } - } - - output { - uses response-fields; - } - } - - rpc healthcheck { - // OpenDaylight Fluorine version of restconf cannot handle RPCs with no input - input { - leaf dummy { - type string; - } - } - output { - uses response-fields; - } - } - - rpc vlbcheck { - // OpenDaylight Fluorine version of restconf cannot handle RPCs with no input - input { - leaf dummy - { - type string; - } - } - output { - uses response-fields; - } - } - -} diff --git a/sliapi/model/swagger/pom.xml b/sliapi/model/swagger/pom.xml new file mode 100644 index 000000000..544f4f9e5 --- /dev/null +++ b/sliapi/model/swagger/pom.xml @@ -0,0 +1,222 @@ + + + 4.0.0 + + + org.onap.ccsdk.parent + oparent + 2.0.0-SNAPSHOT + + + org.onap.ccsdk.sli.core + sliapi-model-swagger + 1.0.0-SNAPSHOT + jar + + ccsdk-sli-core :: sliapi :: ${project.artifactId} + Generates swagger model from yang model + http://wiki.onap.org + + + sliapi + 2.9.5 + + + + + + ${project.groupId} + sliapi-model-yang + ${project.version} + + + + + + + >bintray-yang2swagger-yang2swagge + bintray + https://dl.bintray.com/yang2swagger/yang2swagger + + false + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.10 + + ${project.build.directory}/dependency + **\/*.yang + org.opendaylight.mdsal.model,org.opendaylight.mdsal.binding.model.ietf,org.onap.ccsdk.sli.core + + + + unpack-shared-resources + + unpack-dependencies + + initialize + + + + + maven-antrun-plugin + 1.8 + + + initialize + + run + + + + + + + + + + + + + + + + + + + + org.opendaylight.yangtools + yang-maven-plugin + 1.2.3 + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + ${jackson.version} + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-base + ${jackson.version} + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + ${jackson.version} + + + com.mrv.yangtools + swagger-maven-plugin + 1.1.12 + + + com.github.romix + java-concurrent-hash-trie-map + 0.2.23 + + + + + yang2swagger-json + + generate-sources + + + + + com.mrv.yangtools.maven.gen.swagger.MavenSwaggerGenerator + ${project.basedir}/src/main/json + ${project.build.directory}/yang + + ${project.version} + ${api.name} + json + odl + true + + + + false + ${project.build.directory}/yang + + + + yang2swagger-yaml + + generate-sources + + + + + com.mrv.yangtools.maven.gen.swagger.MavenSwaggerGenerator + ${project.basedir}/src/main/yaml + ${project.build.directory}/yang + + ${project.version} + ${api.name} + yaml + odl + true + + + + false + ${project.build.directory}/yang + + + + + + org.apache.maven.plugins + maven-source-plugin + + + org.codehaus.mojo + build-helper-maven-plugin + 1.10 + + + attach-artifacts + package + + attach-artifact + + + + + src/main/json/${api.name}.json + json + + + src/main/yaml/${api.name}.yaml + yaml + + + + + + + + + diff --git a/sliapi/model/swagger/src/main/json/sliapi.json b/sliapi/model/swagger/src/main/json/sliapi.json new file mode 100644 index 000000000..99a69861e --- /dev/null +++ b/sliapi/model/swagger/src/main/json/sliapi.json @@ -0,0 +1 @@ +{"swagger":"2.0","info":{"description":"Defines API to service logic interpreter,This module contains a collection of generally useful derived\nYANG data types.\n\nCopyright (c) 2013 IETF Trust and the persons identified as\nauthors of the code. All rights reserved.\n\nRedistribution and use in source and binary forms, with or\nwithout modification, is permitted pursuant to, and subject\nto the license terms contained in, the Simplified BSD License\nset forth in Section 4.c of the IETF Trust's Legal Provisions\nRelating to IETF Documents\n(http://trustee.ietf.org/license-info).\n\nThis version of this YANG module is part of RFC 6991; see\nthe RFC itself for full legal notices.,This module contains a collection of generally useful derived\nYANG data types for Internet addresses and related things.\n\nCopyright (c) 2013 IETF Trust and the persons identified as\nauthors of the code. All rights reserved.\n\nRedistribution and use in source and binary forms, with or\nwithout modification, is permitted pursuant to, and subject\nto the license terms contained in, the Simplified BSD License\nset forth in Section 4.c of the IETF Trust's Legal Provisions\nRelating to IETF Documents\n(http://trustee.ietf.org/license-info).\n\nThis version of this YANG module is part of RFC 6991; see\nthe RFC itself for full legal notices.","version":"1.0.0-SNAPSHOT","title":"SLI-API,ietf-yang-types,ietf-inet-types API"},"consumes":["application/json","application/xml"],"produces":["application/json","application/xml"],"paths":{"/config/SLI-API:test-results/":{"get":{"tags":["SLI-API"],"description":"returns sli.api.TestResults","parameters":[],"responses":{"400":{"description":"Internal error"},"200":{"description":"sli.api.TestResults","schema":{"$ref":"#/definitions/sli.api.TestResults","originalRef":"#/definitions/sli.api.TestResults"},"responseSchema":{"$ref":"#/definitions/sli.api.TestResults","originalRef":"#/definitions/sli.api.TestResults"}}}},"post":{"tags":["SLI-API"],"description":"creates sli.api.TestResults","parameters":[{"in":"body","name":"sli.api.TestResults.body-param","description":"sli.api.TestResults to be added to list","required":false,"schema":{"$ref":"#/definitions/sli.api.TestResults","originalRef":"#/definitions/sli.api.TestResults"}}],"responses":{"400":{"description":"Internal error"},"201":{"description":"Object created"},"409":{"description":"Object already exists"}}},"put":{"tags":["SLI-API"],"description":"creates or updates sli.api.TestResults","parameters":[{"in":"body","name":"sli.api.TestResults.body-param","description":"sli.api.TestResults to be added or updated","required":false,"schema":{"$ref":"#/definitions/sli.api.TestResults","originalRef":"#/definitions/sli.api.TestResults"}}],"responses":{"400":{"description":"Internal error"},"201":{"description":"Object created"},"204":{"description":"Object modified"}}},"delete":{"tags":["SLI-API"],"description":"removes sli.api.TestResults","parameters":[],"responses":{"400":{"description":"Internal error"},"204":{"description":"Object deleted"}}}},"/config/SLI-API:test-results/SLI-API:test-result/":{"post":{"description":"creates sli.api.testresults.TestResult","parameters":[{"in":"body","name":"sli.api.testresults.TestResult.body-param","description":"sli.api.testresults.TestResult to be added to list","required":false,"schema":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"}}],"responses":{"400":{"description":"Internal error"},"201":{"description":"Object created"},"409":{"description":"Object already exists"}}}},"/config/SLI-API:test-results/SLI-API:test-result/{test-identifier}/":{"get":{"tags":["SLI-API"],"description":"returns sli.api.testresults.TestResult","parameters":[{"name":"test-identifier","in":"path","description":"Id of test-result","required":true,"type":"string"}],"responses":{"400":{"description":"Internal error"},"200":{"description":"sli.api.testresults.TestResult","schema":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"},"responseSchema":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"}}}},"post":{"tags":["SLI-API"],"description":"creates sli.api.testresults.TestResult","parameters":[{"name":"test-identifier","in":"path","description":"Id of test-result","required":true,"type":"string"},{"in":"body","name":"sli.api.testresults.TestResult.body-param","description":"sli.api.testresults.TestResult to be added to list","required":false,"schema":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"}}],"responses":{"400":{"description":"Internal error"},"201":{"description":"Object created"},"409":{"description":"Object already exists"}}},"put":{"tags":["SLI-API"],"description":"creates or updates sli.api.testresults.TestResult","parameters":[{"name":"test-identifier","in":"path","description":"Id of test-result","required":true,"type":"string"},{"in":"body","name":"sli.api.testresults.TestResult.body-param","description":"sli.api.testresults.TestResult to be added or updated","required":false,"schema":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"}}],"responses":{"400":{"description":"Internal error"},"201":{"description":"Object created"},"204":{"description":"Object modified"}}},"delete":{"tags":["SLI-API"],"description":"removes sli.api.testresults.TestResult","parameters":[{"name":"test-identifier","in":"path","description":"Id of test-result","required":true,"type":"string"}],"responses":{"400":{"description":"Internal error"},"204":{"description":"Object deleted"}}}},"/operational/SLI-API:test-results/":{"get":{"tags":["SLI-API"],"description":"returns sli.api.TestResults","parameters":[],"responses":{"400":{"description":"Internal error"},"200":{"description":"sli.api.TestResults","schema":{"$ref":"#/definitions/sli.api.TestResults","originalRef":"#/definitions/sli.api.TestResults"},"responseSchema":{"$ref":"#/definitions/sli.api.TestResults","originalRef":"#/definitions/sli.api.TestResults"}}}}},"/operational/SLI-API:test-results/SLI-API:test-result/{test-identifier}/":{"get":{"tags":["SLI-API"],"description":"returns sli.api.testresults.TestResult","parameters":[{"name":"test-identifier","in":"path","description":"Id of test-result","required":true,"type":"string"}],"responses":{"400":{"description":"Internal error"},"200":{"description":"sli.api.testresults.TestResult","schema":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"},"responseSchema":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"}}}}},"/operations/SLI-API:execute-graph/":{"post":{"tags":["SLI-API"],"parameters":[{"in":"body","name":"sli.api.executegraph.Input.body-param","required":false,"schema":{"properties":{"input":{"$ref":"#/definitions/sli.api.executegraph.Input","originalRef":"#/definitions/sli.api.executegraph.Input"}}}}],"responses":{"400":{"description":"Internal error"},"200":{"description":"Correct response","schema":{"$ref":"#/definitions/sli.api.ExecuteGraph","originalRef":"#/definitions/sli.api.ExecuteGraph"},"responseSchema":{"$ref":"#/definitions/sli.api.ExecuteGraph","originalRef":"#/definitions/sli.api.ExecuteGraph"}},"201":{"description":"No response"}}}},"/operations/SLI-API:healthcheck/":{"post":{"tags":["SLI-API"],"parameters":[],"responses":{"400":{"description":"Internal error"},"200":{"description":"Correct response","schema":{"$ref":"#/definitions/sli.api.Healthcheck","originalRef":"#/definitions/sli.api.Healthcheck"},"responseSchema":{"$ref":"#/definitions/sli.api.Healthcheck","originalRef":"#/definitions/sli.api.Healthcheck"}},"201":{"description":"No response"}}}},"/operations/SLI-API:vlbcheck/":{"post":{"tags":["SLI-API"],"parameters":[],"responses":{"400":{"description":"Internal error"},"200":{"description":"Correct response","schema":{"$ref":"#/definitions/sli.api.Vlbcheck","originalRef":"#/definitions/sli.api.Vlbcheck"},"responseSchema":{"$ref":"#/definitions/sli.api.Vlbcheck","originalRef":"#/definitions/sli.api.Vlbcheck"}},"201":{"description":"No response"}}}}},"definitions":{"sli.api.ExecuteGraph":{"type":"object","properties":{"output":{"$ref":"#/definitions/sli.api.ResponseFields","originalRef":"#/definitions/sli.api.ResponseFields"}}},"sli.api.Healthcheck":{"type":"object","properties":{"output":{"$ref":"#/definitions/sli.api.ResponseFields","originalRef":"#/definitions/sli.api.ResponseFields"}}},"sli.api.ModeEnumeration":{"type":"string","enum":["sync","async"]},"sli.api.ParameterSetting":{"type":"object","properties":{"string-value":{"type":"string"},"boolean-value":{"type":"boolean"},"parameter-name":{"type":"string","description":"Parameter name"},"int-value":{"type":"integer","format":"int32"}}},"sli.api.ResponseFields":{"type":"object","properties":{"response-code":{"type":"string"},"response-message":{"type":"string"},"context-memory-json":{"type":"string"},"ack-final-indicator":{"type":"string"}}},"sli.api.TestResults":{"type":"object","properties":{"test-result":{"type":"array","items":{"$ref":"#/definitions/sli.api.testresults.TestResult","originalRef":"#/definitions/sli.api.testresults.TestResult"}}}},"sli.api.Vlbcheck":{"type":"object","properties":{"output":{"$ref":"#/definitions/sli.api.ResponseFields","originalRef":"#/definitions/sli.api.ResponseFields"}}},"sli.api.executegraph.Input":{"type":"object","properties":{"mode":{"$ref":"#/definitions/sli.api.ModeEnumeration","originalRef":"#/definitions/sli.api.ModeEnumeration"},"module-name":{"type":"string"},"sli-parameter":{"type":"array","items":{"$ref":"#/definitions/sli.api.ParameterSetting","originalRef":"#/definitions/sli.api.ParameterSetting"}},"rpc-name":{"type":"string"}}},"sli.api.testresults.TestResult":{"type":"object","properties":{"results":{"type":"array","items":{"type":"string"}},"test-identifier":{"type":"string"}}}}} \ No newline at end of file diff --git a/sliapi/model/swagger/src/main/yaml/sliapi.yaml b/sliapi/model/swagger/src/main/yaml/sliapi.yaml new file mode 100644 index 000000000..c8f2997eb --- /dev/null +++ b/sliapi/model/swagger/src/main/yaml/sliapi.yaml @@ -0,0 +1,378 @@ +--- +swagger: "2.0" +info: + description: "Defines API to service logic interpreter,This module contains a collection\ + \ of generally useful derived\nYANG data types.\n\nCopyright (c) 2013 IETF Trust\ + \ and the persons identified as\nauthors of the code. All rights reserved.\n\n\ + Redistribution and use in source and binary forms, with or\nwithout modification,\ + \ is permitted pursuant to, and subject\nto the license terms contained in, the\ + \ Simplified BSD License\nset forth in Section 4.c of the IETF Trust's Legal Provisions\n\ + Relating to IETF Documents\n(http://trustee.ietf.org/license-info).\n\nThis version\ + \ of this YANG module is part of RFC 6991; see\nthe RFC itself for full legal\ + \ notices.,This module contains a collection of generally useful derived\nYANG\ + \ data types for Internet addresses and related things.\n\nCopyright (c) 2013\ + \ IETF Trust and the persons identified as\nauthors of the code. All rights reserved.\n\ + \nRedistribution and use in source and binary forms, with or\nwithout modification,\ + \ is permitted pursuant to, and subject\nto the license terms contained in, the\ + \ Simplified BSD License\nset forth in Section 4.c of the IETF Trust's Legal Provisions\n\ + Relating to IETF Documents\n(http://trustee.ietf.org/license-info).\n\nThis version\ + \ of this YANG module is part of RFC 6991; see\nthe RFC itself for full legal\ + \ notices." + version: "1.0.0-SNAPSHOT" + title: "SLI-API,ietf-yang-types,ietf-inet-types API" +consumes: +- "application/json" +- "application/xml" +produces: +- "application/json" +- "application/xml" +paths: + /config/SLI-API:test-results/: + get: + tags: + - "SLI-API" + description: "returns sli.api.TestResults" + parameters: [] + responses: + 400: + description: "Internal error" + 200: + description: "sli.api.TestResults" + schema: + $ref: "#/definitions/sli.api.TestResults" + originalRef: "#/definitions/sli.api.TestResults" + responseSchema: + $ref: "#/definitions/sli.api.TestResults" + originalRef: "#/definitions/sli.api.TestResults" + post: + tags: + - "SLI-API" + description: "creates sli.api.TestResults" + parameters: + - in: "body" + name: "sli.api.TestResults.body-param" + description: "sli.api.TestResults to be added to list" + required: false + schema: + $ref: "#/definitions/sli.api.TestResults" + originalRef: "#/definitions/sli.api.TestResults" + responses: + 400: + description: "Internal error" + 201: + description: "Object created" + 409: + description: "Object already exists" + put: + tags: + - "SLI-API" + description: "creates or updates sli.api.TestResults" + parameters: + - in: "body" + name: "sli.api.TestResults.body-param" + description: "sli.api.TestResults to be added or updated" + required: false + schema: + $ref: "#/definitions/sli.api.TestResults" + originalRef: "#/definitions/sli.api.TestResults" + responses: + 400: + description: "Internal error" + 201: + description: "Object created" + 204: + description: "Object modified" + delete: + tags: + - "SLI-API" + description: "removes sli.api.TestResults" + parameters: [] + responses: + 400: + description: "Internal error" + 204: + description: "Object deleted" + /config/SLI-API:test-results/SLI-API:test-result/: + post: + description: "creates sli.api.testresults.TestResult" + parameters: + - in: "body" + name: "sli.api.testresults.TestResult.body-param" + description: "sli.api.testresults.TestResult to be added to list" + required: false + schema: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + responses: + 400: + description: "Internal error" + 201: + description: "Object created" + 409: + description: "Object already exists" + /config/SLI-API:test-results/SLI-API:test-result/{test-identifier}/: + get: + tags: + - "SLI-API" + description: "returns sli.api.testresults.TestResult" + parameters: + - name: "test-identifier" + in: "path" + description: "Id of test-result" + required: true + type: "string" + responses: + 400: + description: "Internal error" + 200: + description: "sli.api.testresults.TestResult" + schema: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + responseSchema: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + post: + tags: + - "SLI-API" + description: "creates sli.api.testresults.TestResult" + parameters: + - name: "test-identifier" + in: "path" + description: "Id of test-result" + required: true + type: "string" + - in: "body" + name: "sli.api.testresults.TestResult.body-param" + description: "sli.api.testresults.TestResult to be added to list" + required: false + schema: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + responses: + 400: + description: "Internal error" + 201: + description: "Object created" + 409: + description: "Object already exists" + put: + tags: + - "SLI-API" + description: "creates or updates sli.api.testresults.TestResult" + parameters: + - name: "test-identifier" + in: "path" + description: "Id of test-result" + required: true + type: "string" + - in: "body" + name: "sli.api.testresults.TestResult.body-param" + description: "sli.api.testresults.TestResult to be added or updated" + required: false + schema: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + responses: + 400: + description: "Internal error" + 201: + description: "Object created" + 204: + description: "Object modified" + delete: + tags: + - "SLI-API" + description: "removes sli.api.testresults.TestResult" + parameters: + - name: "test-identifier" + in: "path" + description: "Id of test-result" + required: true + type: "string" + responses: + 400: + description: "Internal error" + 204: + description: "Object deleted" + /operational/SLI-API:test-results/: + get: + tags: + - "SLI-API" + description: "returns sli.api.TestResults" + parameters: [] + responses: + 400: + description: "Internal error" + 200: + description: "sli.api.TestResults" + schema: + $ref: "#/definitions/sli.api.TestResults" + originalRef: "#/definitions/sli.api.TestResults" + responseSchema: + $ref: "#/definitions/sli.api.TestResults" + originalRef: "#/definitions/sli.api.TestResults" + /operational/SLI-API:test-results/SLI-API:test-result/{test-identifier}/: + get: + tags: + - "SLI-API" + description: "returns sli.api.testresults.TestResult" + parameters: + - name: "test-identifier" + in: "path" + description: "Id of test-result" + required: true + type: "string" + responses: + 400: + description: "Internal error" + 200: + description: "sli.api.testresults.TestResult" + schema: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + responseSchema: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + /operations/SLI-API:execute-graph/: + post: + tags: + - "SLI-API" + parameters: + - in: "body" + name: "sli.api.executegraph.Input.body-param" + required: false + schema: + properties: + input: + $ref: "#/definitions/sli.api.executegraph.Input" + originalRef: "#/definitions/sli.api.executegraph.Input" + responses: + 400: + description: "Internal error" + 200: + description: "Correct response" + schema: + $ref: "#/definitions/sli.api.ExecuteGraph" + originalRef: "#/definitions/sli.api.ExecuteGraph" + responseSchema: + $ref: "#/definitions/sli.api.ExecuteGraph" + originalRef: "#/definitions/sli.api.ExecuteGraph" + 201: + description: "No response" + /operations/SLI-API:healthcheck/: + post: + tags: + - "SLI-API" + parameters: [] + responses: + 400: + description: "Internal error" + 200: + description: "Correct response" + schema: + $ref: "#/definitions/sli.api.Healthcheck" + originalRef: "#/definitions/sli.api.Healthcheck" + responseSchema: + $ref: "#/definitions/sli.api.Healthcheck" + originalRef: "#/definitions/sli.api.Healthcheck" + 201: + description: "No response" + /operations/SLI-API:vlbcheck/: + post: + tags: + - "SLI-API" + parameters: [] + responses: + 400: + description: "Internal error" + 200: + description: "Correct response" + schema: + $ref: "#/definitions/sli.api.Vlbcheck" + originalRef: "#/definitions/sli.api.Vlbcheck" + responseSchema: + $ref: "#/definitions/sli.api.Vlbcheck" + originalRef: "#/definitions/sli.api.Vlbcheck" + 201: + description: "No response" +definitions: + sli.api.ExecuteGraph: + type: "object" + properties: + output: + $ref: "#/definitions/sli.api.ResponseFields" + originalRef: "#/definitions/sli.api.ResponseFields" + sli.api.Healthcheck: + type: "object" + properties: + output: + $ref: "#/definitions/sli.api.ResponseFields" + originalRef: "#/definitions/sli.api.ResponseFields" + sli.api.ModeEnumeration: + type: "string" + enum: + - "sync" + - "async" + sli.api.ParameterSetting: + type: "object" + properties: + string-value: + type: "string" + boolean-value: + type: "boolean" + parameter-name: + type: "string" + description: "Parameter name" + int-value: + type: "integer" + format: "int32" + sli.api.ResponseFields: + type: "object" + properties: + response-code: + type: "string" + response-message: + type: "string" + context-memory-json: + type: "string" + ack-final-indicator: + type: "string" + sli.api.TestResults: + type: "object" + properties: + test-result: + type: "array" + items: + $ref: "#/definitions/sli.api.testresults.TestResult" + originalRef: "#/definitions/sli.api.testresults.TestResult" + sli.api.Vlbcheck: + type: "object" + properties: + output: + $ref: "#/definitions/sli.api.ResponseFields" + originalRef: "#/definitions/sli.api.ResponseFields" + sli.api.executegraph.Input: + type: "object" + properties: + mode: + $ref: "#/definitions/sli.api.ModeEnumeration" + originalRef: "#/definitions/sli.api.ModeEnumeration" + module-name: + type: "string" + sli-parameter: + type: "array" + items: + $ref: "#/definitions/sli.api.ParameterSetting" + originalRef: "#/definitions/sli.api.ParameterSetting" + rpc-name: + type: "string" + sli.api.testresults.TestResult: + type: "object" + properties: + results: + type: "array" + items: + type: "string" + test-identifier: + type: "string" diff --git a/sliapi/model/yang/pom.xml b/sliapi/model/yang/pom.xml new file mode 100755 index 000000000..420d2ee0d --- /dev/null +++ b/sliapi/model/yang/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + + org.onap.ccsdk.parent + binding-parent + 2.0.0-SNAPSHOT + + + + org.onap.ccsdk.sli.core + sliapi-model-yang + 1.0.0-SNAPSHOT + bundle + + ccsdk-sli-core :: sliapi :: ${project.artifactId} + + + + org.opendaylight.mdsal.binding.model.ietf + rfc6991 + + + + + diff --git a/sliapi/model/yang/src/main/resources/sli-api.20161110.json b/sliapi/model/yang/src/main/resources/sli-api.20161110.json new file mode 100644 index 000000000..1c6cdabfe --- /dev/null +++ b/sliapi/model/yang/src/main/resources/sli-api.20161110.json @@ -0,0 +1,554 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0" + }, + "basePath": "/restconf", + "paths": { + "/config": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "**(config)test-results", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API(config)test-results-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)SLI-API_modulePOST" + } + } + }, + "description": "Defines API to service logic interpreter", + "operationId": "POST-SLI-API_module" + } + }, + "/config/SLI-API:test-results": { + "delete": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified" + } + }, + "description": "Test results", + "operationId": "DELETE-test-results" + }, + "get": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)test-results" + } + } + }, + "description": "Test results", + "operationId": "GET-test-results" + }, + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "**(config)test-result", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)test-resultsPOST" + } + } + }, + "description": "Test results", + "operationId": "POST-test-results" + }, + "put": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "(config)test-results", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API(config)test-results-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/SLI-API(config)test-results-TOP" + } + } + }, + "description": "Test results", + "operationId": "PUT-test-results" + } + }, + "/config/SLI-API:test-results/test-result/{test-identifier}": { + "delete": { + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "path", + "name": "test-identifier", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "No response was specified" + } + }, + "operationId": "DELETE-test-result" + }, + "get": { + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "path", + "name": "test-identifier", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(config)test-result" + } + } + }, + "operationId": "GET-test-result" + }, + "put": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "path", + "name": "test-identifier", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "(config)test-result", + "required": false, + "schema": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result-TOP" + } + } + }, + "operationId": "PUT-test-result" + } + }, + "/operational/SLI-API:test-results": { + "get": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(operational)test-results" + } + } + }, + "description": "Test results", + "operationId": "GET-test-results" + } + }, + "/operations/SLI-API:execute-graph": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "$ref": "#/definitions/(execute-graph)input-TOP" + } + } + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(execute-graph)output-TOP" + } + } + }, + "description": " Method to add a new parameter.", + "operationId": "execute-graph" + } + }, + "/operations/SLI-API:healthcheck": { + "post": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(healthcheck)output-TOP" + } + } + }, + "operationId": "healthcheck" + } + }, + "/operations/SLI-API:vlbcheck": { + "post": { + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "No response was specified", + "schema": { + "$ref": "#/definitions/(vlbcheck)output-TOP" + } + } + }, + "operationId": "vlbcheck" + } + } + }, + "definitions": { + "(config)SLI-API_modulePOST": { + "properties": { + "test-results": { + "items": { + "$ref": "#/definitions/SLI-API(config)test-results" + }, + "type": "object" + } + }, + "type": "object" + }, + "(config)sli-parameterPOST": { + "properties": { + "boolean-value": { + "$ref": "#/definitions/Optional.empty" + }, + "int-value": { + "$ref": "#/definitions/Optional.empty" + }, + "parameter-name": { + "$ref": "#/definitions/Optional.empty", + "description": "Parameter name" + }, + "string-value": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "(config)test-resultPOST": { + "properties": { + "test-identifier": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "(config)test-resultsPOST": { + "properties": { + "test-result": { + "items": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result" + }, + "type": "array" + } + }, + "type": "object" + }, + "(execute-graph)input": { + "properties": { + "SLI-API:mode": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:module-name": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:rpc-name": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:sli-parameter": { + "items": { + "$ref": "#/definitions/SLI-API(config)sli-parameter" + }, + "type": "array" + } + }, + "type": "object" + }, + "(execute-graph)input-TOP": { + "properties": { + "SLI-API:input": { + "items": { + "$ref": "#/definitions/(execute-graph)input" + }, + "type": "object" + } + }, + "type": "object" + }, + "(execute-graph)output": { + "properties": { + "SLI-API:ack-final-indicator": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:context-memory-json": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-code": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-message": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "(execute-graph)output-TOP": { + "properties": { + "SLI-API:output": { + "items": { + "$ref": "#/definitions/(execute-graph)output" + }, + "type": "object" + } + }, + "type": "object" + }, + "(healthcheck)output": { + "properties": { + "SLI-API:ack-final-indicator": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:context-memory-json": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-code": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-message": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "(healthcheck)output-TOP": { + "properties": { + "SLI-API:output": { + "items": { + "$ref": "#/definitions/(healthcheck)output" + }, + "type": "object" + } + }, + "type": "object" + }, + "(vlbcheck)output": { + "properties": { + "SLI-API:ack-final-indicator": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:context-memory-json": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-code": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:response-message": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "(vlbcheck)output-TOP": { + "properties": { + "SLI-API:output": { + "items": { + "$ref": "#/definitions/(vlbcheck)output" + }, + "type": "object" + } + }, + "type": "object" + }, + "SLI-API(config)sli-parameter": { + "properties": { + "SLI-API:boolean-value": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:int-value": { + "$ref": "#/definitions/Optional.empty" + }, + "SLI-API:parameter-name": { + "$ref": "#/definitions/Optional.empty", + "description": "Parameter name" + }, + "SLI-API:string-value": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "SLI-API(config)sli-parameter-TOP": { + "properties": { + "SLI-API:sli-parameter": { + "items": { + "$ref": "#/definitions/SLI-API(config)sli-parameter" + }, + "type": "array" + } + }, + "type": "object" + }, + "SLI-API(config)test-results": { + "properties": { + "SLI-API:test-result": { + "items": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result" + }, + "type": "array" + } + }, + "type": "object" + }, + "SLI-API(config)test-results-TOP": { + "properties": { + "SLI-API:test-results": { + "description": "Test results", + "items": { + "$ref": "#/definitions/SLI-API(config)test-results" + }, + "type": "object" + } + }, + "type": "object" + }, + "SLI-API(operational)test-results": { + "type": "object" + }, + "SLI-API(operational)test-results-TOP": { + "properties": { + "SLI-API:test-results": { + "description": "Test results", + "items": { + "$ref": "#/definitions/SLI-API(operational)test-results" + }, + "type": "object" + } + }, + "type": "object" + }, + "SLI-API/test-results(config)test-result": { + "properties": { + "SLI-API:results": { + "items": { + "$ref": "#/definitions/Optional.empty" + }, + "type": "array" + }, + "SLI-API:test-identifier": { + "$ref": "#/definitions/Optional.empty" + } + }, + "type": "object" + }, + "SLI-API/test-results(config)test-result-TOP": { + "properties": { + "SLI-API:test-result": { + "items": { + "$ref": "#/definitions/SLI-API/test-results(config)test-result" + }, + "type": "array" + } + }, + "type": "object" + }, + "unique_empty_identifier": {} + } +} diff --git a/sliapi/model/yang/src/main/resources/sli-api.20161110.yaml b/sliapi/model/yang/src/main/resources/sli-api.20161110.yaml new file mode 100644 index 000000000..3420c66b5 --- /dev/null +++ b/sliapi/model/yang/src/main/resources/sli-api.20161110.yaml @@ -0,0 +1,254 @@ +--- +swagger: '2.0' +info: + version: 1.0.0 + title: "SLI API" +basePath: '/restconf' +schemes: + - http + - https +paths: + '/restconf/config/SLI-API:test-results': + delete: + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + description: Test results + operationId: delete-test-results + get: + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: get-test-results + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: body + name: testResults + required: false + schema: + $ref: '#/definitions/test-results' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: post-test-results + put: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: body + name: testResults + required: false + schema: + $ref: '#/definitions/test-results' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: put-test-results + + '/restconf/config/SLI-API:test-results/test-result/{test-identifier}': + delete: + produces: + - application/json + - application/xml + parameters: + - in: path + name: test-identifier + required: true + type: string + responses: + '200': + description: No response was specified + operationId: delete-test-result + get: + produces: + - application/json + - application/xml + parameters: + - in: path + name: test-identifier + required: true + type: string + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-result' + operationId: get-test-result + put: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: path + name: test-identifier + required: true + type: string + - in: body + name: testResult + required: false + schema: + $ref: '#/definitions/test-result' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-result' + operationId: PUT-test-result + + '/restconf/operational/SLI-API:test-results': + get: + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/test-results' + description: Test results + operationId: GET-test-results + '/restconf/operations/SLI-API:execute-graph': + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + parameters: + - in: body + name: executeGraphInput + required: false + schema: + $ref: '#/definitions/execute-graph-input' + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/response-fields' + description: ' Method to add a new parameter.' + operationId: execute-graph + '/restconf/operations/SLI-API:healthcheck': + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/response-fields' + operationId: healthcheck + '/restconf/operations/SLI-API:vlbcheck': + post: + consumes: + - application/json + - application/xml + produces: + - application/json + - application/xml + responses: + '200': + description: No response was specified + schema: + $ref: '#/definitions/response-fields' + operationId: vlbcheck + +definitions: + parameter-setting: + type: object + properties: + parameter-name: + type: string + int-value: + type: integer + string-value: + type: string + boolean-value: + type: boolean + + response-fields: + type: object + properties: + response-code: + type: string + ack-final-indicator: + type: string + response-message: + type: string + context-memory-json: + type: string + + test-results: + type: object + properties: + test-results: + type: array + items: + $ref: '#/definitions/test-result' + + test-result: + type: object + properties: + test-identifier: + type: string + results: + type: array + items: + type: string + + execute-graph-input: + properties: + 'input': + type: object + properties: + 'mode': + type: string + 'module-name': + type: string + 'rpc-name': + type: string + 'sli-parameter': + items: + $ref: '#/definitions/parameter-setting' + type: array + type: object + + + + + + + unique_empty_identifier: {} + diff --git a/sliapi/model/yang/src/main/yang/sliapi.yang b/sliapi/model/yang/src/main/yang/sliapi.yang new file mode 100755 index 000000000..98cbb2aa7 --- /dev/null +++ b/sliapi/model/yang/src/main/yang/sliapi.yang @@ -0,0 +1,117 @@ +module SLI-API { + + yang-version 1; + + namespace "org:onap:ccsdk:sli:core:sliapi"; + + prefix sample; + + import ietf-inet-types { prefix "inet"; revision-date 2013-07-15; } + + organization "ONAP"; + + contact + "Dan Timoney"; + + description + "Defines API to service logic interpreter"; + + revision "2016-11-10" { + description + "REST API to Service Logic Interpreter"; + } + + grouping parameter-setting { + description + "Parameter setting"; + + leaf parameter-name { + type string; + description "Parameter name"; + } + + leaf int-value { + type int32; + } + leaf string-value { + type string; + } + leaf boolean-value { + type boolean; + } + } + + grouping response-fields { + leaf response-code { + type string; + } + leaf ack-final-indicator { + type string; + } + leaf response-message { + type string; + } + leaf context-memory-json { + type string; + } + } + + container test-results { + description "Test results"; + + list test-result { + key "test-identifier"; + + leaf test-identifier { + type string; + } + + leaf-list results { + type string; + } + } + } + + rpc execute-graph { + description " Method to add a new parameter."; + input { + + leaf module-name { + type string; + } + + leaf rpc-name { + type string; + } + + leaf mode { + type enumeration { + enum sync; + enum async; + } + } + + list sli-parameter { + key "parameter-name"; + uses parameter-setting; + } + } + + output { + uses response-fields; + } + } + + rpc healthcheck { + output { + uses response-fields; + } + } + + rpc vlbcheck { + output { + uses response-fields; + } + } + +} diff --git a/sliapi/pom.xml b/sliapi/pom.xml index e2c910801..367d82cf2 100755 --- a/sliapi/pom.xml +++ b/sliapi/pom.xml @@ -19,7 +19,6 @@ model provider - springboot installer diff --git a/sliapi/provider/pom.xml b/sliapi/provider/pom.xml index e726b24f2..f80003766 100755 --- a/sliapi/provider/pom.xml +++ b/sliapi/provider/pom.xml @@ -28,7 +28,7 @@ org.onap.ccsdk.sli.core - sliapi-model + sliapi-model-yang ${project.version} diff --git a/sliapi/springboot/.swagger-codegen-ignore b/sliapi/springboot/.swagger-codegen-ignore deleted file mode 100644 index d14d7b944..000000000 --- a/sliapi/springboot/.swagger-codegen-ignore +++ /dev/null @@ -1 +0,0 @@ -**/RestconfApiController.java diff --git a/sliapi/springboot/README.md b/sliapi/springboot/README.md deleted file mode 100644 index 38be1c2f9..000000000 --- a/sliapi/springboot/README.md +++ /dev/null @@ -1,33 +0,0 @@ -This directory contains a demo springboot implementation of the SLI-API healthcheck method. - -To start this server with out AAF authentication, run: -mvn -DserviceLogicDirectory=src/main/resources spring-boot:run - -To start this server with AAF authentication, run: -mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dcadi_prop_files=/opt/onap/sdnc/data/properties/org.onap.sdnc.props -DserviceLogicDirectory=src/main/resources" - - -This will start a servlet on port 8080. To test to that servlet, post a blank -message to that port: - -curl http://127.0.0.1:8080/restconf/operations/SLI-API:healthcheck -X POST -H "Content-Type: application/json" - -Requests can also be sent to `http://localhost:8080/executeGraph` - -The graph details need to match a graph which has been loaded and activated - -An example request -``` -{ - "graphDetails": { - "module": "prov", - "rpc": "test", - "mode": "sync" - }, - "input": { - "name": "Hello World", - "test": "one", - "mixed": "cAsE" - } -} -``` diff --git a/sliapi/springboot/pom.xml b/sliapi/springboot/pom.xml deleted file mode 100644 index 269caa47f..000000000 --- a/sliapi/springboot/pom.xml +++ /dev/null @@ -1,179 +0,0 @@ - - - 4.0.0 - - - org.onap.ccsdk.parent - spring-boot-starter-parent - 2.0.0-SNAPSHOT - - - - org.onap.ccsdk.sli.core - sliapi-springboot - 1.0.0-SNAPSHOT - jar - - ccsdk-sli-core :: sliapi :: ${project.artifactId} - - - org.onap.ccsdk.sli.core.sliapi.springboot.App - 1.5.0 - 2.1.13 - - - - - io.swagger - swagger-annotations - - - org.apache.shiro - shiro-spring-boot-web-starter - ${shiro.version} - - - org.springframework.boot - spring-boot-starter-logging - - - - - org.springframework.boot - spring-boot-starter-log4j2 - - - org.onap.aaf.cadi - aaf-cadi-shiro - ${aaf-shiro-bundle.version} - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-starter-data-jpa - - - io.springfox - springfox-swagger2 - 2.9.2 - - - io.springfox - springfox-swagger-ui - 2.9.2 - - - - - ${project.groupId} - dblib-provider - ${project.version} - - - ${project.groupId} - sli-common - ${project.version} - - - ${project.groupId} - sli-provider-base - ${project.version} - - - com.google.code.gson - gson - - - org.apache.derby - derby - test - - - org.mariadb.jdbc - mariadb-java-client - - - junit - junit - test - - - org.onap.logging-analytics - logging-filter-spring - 1.6.6 - - - javax.ws.rs - javax.ws.rs-api - - - org.onap.ccsdk.sli.core - sliPluginUtils-provider - ${project.version} - - - org.onap.ccsdk.sli.plugins - restapi-call-node-provider - ${project.version} - - - org.onap.ccsdk.sli.plugins - properties-node-provider - ${project.version} - - - - org.glassfish.jersey.inject - jersey-hk2 - - - - - - - io.swagger - swagger-codegen-maven-plugin - 2.3.1 - - - - generate - - - target/generated-sources - ${project.basedir}/../model/src/main/resources/sli-api.20161110.yaml - spring - org.onap.ccsdk.sli.core.sliapi.springboot.controllers.swagger - org.onap.ccsdk.sli.core.sliapi.model - org.onap.ccsdk.sli.core.sliapi.springboot.controllers.swagger - true - true - ${project.basedir}/.swagger-codegen-ignore - true - - true - 2.2.4-RELEASE - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - - - diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/App.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/App.java deleted file mode 100644 index f4e78bebe..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/App.java +++ /dev/null @@ -1,80 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - CCSDK - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sliapi.springboot; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.ComponentScan; -import springfox.documentation.swagger2.annotations.EnableSwagger2; -import org.apache.shiro.realm.Realm; -import org.apache.shiro.realm.text.PropertiesRealm; -import org.apache.shiro.realm.text.TextConfigurationRealm; -import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition; -import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition; -import org.springframework.context.annotation.Bean; -import org.onap.aaf.cadi.shiro.AAFRealm; - -@SpringBootApplication -@EnableSwagger2 -@ComponentScan(basePackages = { "org.onap.ccsdk.sli.core.sliapi.springboot.*" }) - -public class App { - - private static final Logger log = LoggerFactory.getLogger(App.class); - - public static void main(String[] args) throws Exception { - SpringApplication.run(App.class, args); - } - - @Bean - public Realm realm() { - - // If cadi prop files is not defined use local properties realm - // src/main/resources/shiro-users.properties - if ("none".equals(System.getProperty("cadi_prop_files", "none"))) { - log.info("cadi_prop_files undefined, AAF Realm will not be set"); - PropertiesRealm realm = new PropertiesRealm(); - return realm; - } else { - AAFRealm realm = new AAFRealm(); - return realm; - } - - } - - @Bean - public ShiroFilterChainDefinition shiroFilterChainDefinition() { - DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition(); - - // if cadi prop files is not set disable authentication - if ("none".equals(System.getProperty("cadi_prop_files", "none"))) { - chainDefinition.addPathDefinition("/**", "anon"); - } else { - log.info("Loaded property cadi_prop_files, AAF REALM set"); - chainDefinition.addPathDefinition("/**", "authcBasic, rest[org.onap.sdnc.odl:odl-api]"); - } - - return chainDefinition; - } - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/ExecuteGraphController.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/ExecuteGraphController.java deleted file mode 100644 index 809cfe59c..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/ExecuteGraphController.java +++ /dev/null @@ -1,112 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - CCSDK - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sliapi.springboot.controllers; - -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.Properties; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -@Controller -@EnableAutoConfiguration -public class ExecuteGraphController { - @Autowired - protected SvcLogicServiceBase svc; - - @RequestMapping(value = "/executeGraph", method = RequestMethod.POST) - @ResponseBody - public HashMap executeGraph(@RequestBody String input) { - HashMap hash = new HashMap(); - Properties parms = new Properties(); - - hash.put("status", "success"); - JsonObject jsonInput = new Gson().fromJson(input, JsonObject.class); - JsonObject passthroughObj = jsonInput.get("input").getAsJsonObject(); - - writeResponseToCtx(passthroughObj.toString(), parms, "input"); - - JsonObject inputObject = jsonInput.get("graphDetails").getAsJsonObject(); - try { - // Any of these can throw a nullpointer exception - String calledModule = inputObject.get("module").getAsString(); - String calledRpc = inputObject.get("rpc").getAsString(); - String modeStr = inputObject.get("mode").getAsString(); - // execute should only throw a SvcLogicException - Properties respProps = svc.execute(calledModule, calledRpc, null, modeStr, parms); - for (Entry prop : respProps.entrySet()) { - hash.put((String) prop.getKey(), (String) prop.getValue()); - } - } catch (NullPointerException npe) { - HashMap errorHash = new HashMap(); - errorHash.put("error-message", "check that you populated module, rpc and or mode correctly."); - return errorHash; - } catch (SvcLogicException e) { - HashMap errorHash = new HashMap(); - errorHash.put("status", "failure"); - errorHash.put("message", e.getMessage()); - return errorHash; - } - return hash; - } - - public static void writeResponseToCtx(String resp, Properties ctx, String prefix) { - JsonParser jp = new JsonParser(); - JsonElement element = jp.parse(resp); - writeJsonObject(element.getAsJsonObject(), ctx, prefix + "."); - } - - public static void writeJsonObject(JsonObject obj, Properties ctx, String root) { - for (Entry entry : obj.entrySet()) { - if (entry.getValue().isJsonObject()) { - writeJsonObject(entry.getValue().getAsJsonObject(), ctx, root + entry.getKey() + "."); - } else if (entry.getValue().isJsonArray()) { - JsonArray array = entry.getValue().getAsJsonArray(); - ctx.put(root + entry.getKey() + "_length", String.valueOf(array.size())); - Integer arrayIdx = 0; - for (JsonElement element : array) { - if (element.isJsonObject()) { - writeJsonObject(element.getAsJsonObject(), ctx, root + entry.getKey() + "[" + arrayIdx + "]."); - } - arrayIdx++; - } - } else { - ctx.put(root + entry.getKey(), entry.getValue().getAsString()); - } - } - } - - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultConfig.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultConfig.java deleted file mode 100644 index f8ed1b4ce..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.onap.ccsdk.sli.core.sliapi.springboot.controllers.data; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -@Entity -public class TestResultConfig { - - - @Id - @GeneratedValue(strategy= GenerationType.AUTO) - private Long id; - - private String testIdentifier; - private String results; - - public TestResultConfig() - { - - } - public TestResultConfig(String testIdentifier, String results) { - this.testIdentifier = testIdentifier; - this.results = results; - } - - public String getTestIdentifier() { - return testIdentifier; - } - - public void setTestIdentifier(String testIdentifier) { - this.testIdentifier = testIdentifier; - } - - public String getResults() { - return results; - } - - public void setResults(String results) { - this.results = results; - } - - - - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultOperational.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultOperational.java deleted file mode 100644 index 4c3709e6e..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultOperational.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.onap.ccsdk.sli.core.sliapi.springboot.controllers.data; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -@Entity -public class TestResultOperational { - - - @Id - @GeneratedValue(strategy= GenerationType.AUTO) - private Long id; - - private String testIdentifier; - private String results; - - public TestResultOperational() - { - - } - - public TestResultOperational(String testIdentifier, String results) { - this.testIdentifier = testIdentifier; - this.results = results; - } - - public String getTestIdentifier() { - return testIdentifier; - } - - public void setTestIdentifier(String testIdentifier) { - this.testIdentifier = testIdentifier; - } - - public String getResults() { - return results; - } - - public void setResults(String results) { - this.results = results; - } - - - - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsConfigRepository.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsConfigRepository.java deleted file mode 100644 index 1a73b3f50..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsConfigRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.onap.ccsdk.sli.core.sliapi.springboot.controllers.data; - -import org.springframework.data.repository.CrudRepository; - -import java.util.List; - -public interface TestResultsConfigRepository extends CrudRepository { - - List findByTestIdentifier(String testIdentifier); - - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsOperationalRepository.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsOperationalRepository.java deleted file mode 100644 index d81c02b23..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/data/TestResultsOperationalRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.onap.ccsdk.sli.core.sliapi.springboot.controllers.data; - -import org.springframework.data.repository.CrudRepository; - -import java.util.List; - -public interface TestResultsOperationalRepository extends CrudRepository { - - List findByTestIdentifier(String testIdentifier); - - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/swagger/RestconfApiController.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/swagger/RestconfApiController.java deleted file mode 100644 index aa9a9d7e8..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/controllers/swagger/RestconfApiController.java +++ /dev/null @@ -1,364 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - CCSDK - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sliapi.springboot.controllers.swagger; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase; -import org.onap.ccsdk.sli.core.sliapi.model.ExecuteGraphInput; -import org.onap.ccsdk.sli.core.sliapi.model.ResponseFields; -import org.onap.ccsdk.sli.core.sliapi.model.TestResult; -import org.onap.ccsdk.sli.core.sliapi.model.TestResults; -import org.onap.ccsdk.sli.core.sliapi.springboot.controllers.data.TestResultConfig; -import org.onap.ccsdk.sli.core.sliapi.springboot.controllers.data.TestResultsConfigRepository; -import org.onap.ccsdk.sli.core.sliapi.springboot.controllers.data.TestResultsOperationalRepository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; -import java.util.*; - -@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2020-02-20T12:50:11.207-05:00") - -@Controller -@ComponentScan(basePackages = {"org.onap.ccsdk.sli.core.sliapi.springboot.*"}) -@EntityScan("org.onap.ccsdk.sli.core.sliapi.springboot.*") -public class RestconfApiController implements RestconfApi { - - private final ObjectMapper objectMapper; - private final HttpServletRequest request; - - @Autowired - protected SvcLogicServiceBase svc; - - @Autowired - private TestResultsConfigRepository testResultsConfigRepository; - - @Autowired - private TestResultsOperationalRepository testResultsOperationalRepository; - - private static final Logger log = LoggerFactory.getLogger(RestconfApiController.class); - - @org.springframework.beans.factory.annotation.Autowired - public RestconfApiController(ObjectMapper objectMapper, HttpServletRequest request) { - this.objectMapper = objectMapper; - this.request = request; - } - - @Override - public ResponseEntity healthcheck() { - ResponseFields resp = new ResponseFields(); - - try { - log.info("Calling SLI-API:healthcheck DG"); - SvcLogicContext ctxIn = new SvcLogicContext(); - SvcLogicContext ctxOut = svc.execute("sli", "healthcheck", null, "sync", ctxIn); - Properties respProps = ctxOut.toProperties(); - - resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y")); - resp.setResponseCode(respProps.getProperty("error-code", "200")); - resp.setResponseMessage(respProps.getProperty("error-message", "Success")); - resp.setContextMemoryJson(propsToJson(respProps, "context-memory")); - - return (new ResponseEntity<>(resp, HttpStatus.OK)); - } catch (Exception e) { - resp.setAckFinalIndicator("true"); - resp.setResponseCode("500"); - resp.setResponseMessage(e.getMessage()); - log.error("Error calling healthcheck directed graph", e); - - } - return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); - } - - @Override - public ResponseEntity vlbcheck() { - ResponseFields resp = new ResponseFields(); - - try { - log.info("Calling SLI-API:vlbcheck DG"); - SvcLogicContext ctxIn = new SvcLogicContext(); - SvcLogicContext ctxOut = svc.execute("sli", "vlbcheck", null, "sync", ctxIn); - Properties respProps = ctxOut.toProperties(); - resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y")); - resp.setResponseCode(respProps.getProperty("error-code", "200")); - resp.setResponseMessage(respProps.getProperty("error-message", "Success")); - resp.setContextMemoryJson(propsToJson(respProps, "context-memory")); - - return (new ResponseEntity<>(resp, HttpStatus.OK)); - } catch (Exception e) { - resp.setAckFinalIndicator("true"); - resp.setResponseCode("500"); - resp.setResponseMessage(e.getMessage()); - log.error("Error calling vlbcheck directed graph", e); - - } - return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); - } - - - @Override - public Optional getObjectMapper() { - return Optional.ofNullable(objectMapper); - } - - @Override - public Optional getRequest() { - return Optional.ofNullable(request); - } - - @Override - public ResponseEntity executeGraph(@Valid ExecuteGraphInput executeGraphInput) { - SvcLogicContext ctxIn = new SvcLogicContext(); - ResponseFields resp = new ResponseFields(); - String executeGraphInputJson = null; - - try { - executeGraphInputJson = objectMapper.writeValueAsString(executeGraphInput); - log.info("Input as JSON is "+executeGraphInputJson); - } catch (JsonProcessingException e) { - - resp.setAckFinalIndicator("true"); - resp.setResponseCode("500"); - resp.setResponseMessage(e.getMessage()); - log.error("Cannot create JSON from input object", e); - return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); - - } - JsonObject jsonInput = new Gson().fromJson(executeGraphInputJson, JsonObject.class); - JsonObject passthroughObj = jsonInput.get("input").getAsJsonObject(); - - ctxIn.mergeJson("input", passthroughObj.toString()); - - try { - // Any of these can throw a nullpointer exception - String calledModule = executeGraphInput.getInput().getModuleName(); - String calledRpc = executeGraphInput.getInput().getRpcName(); - String modeStr = executeGraphInput.getInput().getMode(); - // execute should only throw a SvcLogicException - SvcLogicContext ctxOut = svc.execute(calledModule, calledRpc, null, modeStr, ctxIn); - Properties respProps = ctxOut.toProperties(); - - resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y")); - resp.setResponseCode(respProps.getProperty("error-code", "200")); - resp.setResponseMessage(respProps.getProperty("error-message", "SUCCESS")); - resp.setContextMemoryJson(propsToJson(respProps, "context-memory")); - return (new ResponseEntity<>(resp, HttpStatus.valueOf(Integer.parseInt(resp.getResponseCode())))); - - } catch (NullPointerException npe) { - resp.setAckFinalIndicator("true"); - resp.setResponseCode("500"); - resp.setResponseMessage("Check that you populated module, rpc and or mode correctly."); - - return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); - } catch (SvcLogicException e) { - resp.setAckFinalIndicator("true"); - resp.setResponseCode("500"); - resp.setResponseMessage(e.getMessage()); - - return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR)); - } - } - - @Override - public ResponseEntity deleteTestResult(String testIdentifier) { - - List testResultConfigs = testResultsConfigRepository.findByTestIdentifier(testIdentifier); - - if (testResultConfigs != null) { - Iterator testResultConfigIterator = testResultConfigs.iterator(); - while (testResultConfigIterator.hasNext()) { - testResultsConfigRepository.delete(testResultConfigIterator.next()); - } - } - - return (new ResponseEntity<>(HttpStatus.OK)); - } - - @Override - public ResponseEntity deleteTestResults() { - - testResultsConfigRepository.deleteAll(); - - return (new ResponseEntity<>(HttpStatus.OK)); - } - - @Override - public ResponseEntity gETTestResults() { - - TestResults results = new TestResults(); - - testResultsOperationalRepository.findAll().forEach(testResult -> { - TestResult item = null; - try { - item = objectMapper.readValue(testResult.getResults(), TestResult.class); - results.addTestResultsItem(item); - } catch (JsonProcessingException e) { - log.error("Could not convert testResult", e); - } - }); - - - return new ResponseEntity<>(results, HttpStatus.OK); - } - - @Override - public ResponseEntity getTestResult(String testIdentifier) { - List testResultConfigs = testResultsConfigRepository.findByTestIdentifier(testIdentifier); - - if ((testResultConfigs == null) || (testResultConfigs.size() == 0)) { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } else { - TestResultConfig testResultConfig = testResultConfigs.get(0); - TestResult testResult = null; - try { - testResult = objectMapper.readValue(testResultConfig.getResults(), TestResult.class); - } catch (JsonProcessingException e) { - log.error("Cannot convert test result", e); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); - } - - - return new ResponseEntity<>(testResult, HttpStatus.OK); - } - } - - @Override - public ResponseEntity getTestResults() { - if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) { - } else { - log.warn("ObjectMapper or HttpServletRequest not configured in default RestconfApi interface so no example is generated"); - } - - TestResults results = new TestResults(); - - testResultsConfigRepository.findAll().forEach(testResult -> { - TestResult item = null; - try { - item = objectMapper.readValue(testResult.getResults(), TestResult.class); - results.addTestResultsItem(item); - } catch (JsonProcessingException e) { - log.error("Could not convert testResult", e); - } - }); - - - return new ResponseEntity<>(results, HttpStatus.OK); - } - - @Override - public ResponseEntity pUTTestResult(String testIdentifier, @Valid TestResult testResult) { - if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) { - } else { - log.warn("ObjectMapper or HttpServletRequest not configured in default RestconfApi interface so no example is generated"); - } - - List testResultConfigs = testResultsConfigRepository.findByTestIdentifier(testIdentifier); - Iterator testResultIter = testResultConfigs.iterator(); - while (testResultIter.hasNext()) { - testResultsConfigRepository.delete(testResultIter.next()); - } - - TestResultConfig testResultConfig = null; - try { - testResultConfig = new TestResultConfig(testResult.getTestIdentifier(), objectMapper.writeValueAsString(testResult)); - testResultsConfigRepository.save(testResultConfig); - } catch (JsonProcessingException e) { - log.error("Could not save test result", e); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); - } - - return new ResponseEntity<>(testResult, HttpStatus.OK); - } - - @Override - public ResponseEntity postTestResults(@Valid TestResults testResults) { - List resultList = testResults.getTestResults(); - - Iterator resultIterator = resultList.iterator(); - - while (resultIterator.hasNext()) { - TestResult curResult = resultIterator.next(); - try { - testResultsConfigRepository.save(new TestResultConfig(curResult.getTestIdentifier(), objectMapper.writeValueAsString(curResult))); - } catch (JsonProcessingException e) { - log.error("Could not save test result", e); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); - } - } - - return new ResponseEntity<>(testResults, HttpStatus.OK); - } - - @Override - public ResponseEntity putTestResults(@Valid TestResults testResults) { - testResultsConfigRepository.deleteAll(); - - List resultList = testResults.getTestResults(); - - Iterator resultIterator = resultList.iterator(); - - - while (resultIterator.hasNext()) { - TestResult curResult = resultIterator.next(); - try { - testResultsConfigRepository.save(new TestResultConfig(curResult.getTestIdentifier(), objectMapper.writeValueAsString(curResult))); - } catch (JsonProcessingException e) { - log.error("Could not save test result", e); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); - } - } - - return new ResponseEntity<>(testResults, HttpStatus.OK); - } - - public static String propsToJson(Properties props, String root) - { - StringBuffer sbuff = new StringBuffer(); - - sbuff.append("{ \""+root+"\" : { "); - boolean needComma = false; - for (Map.Entry prop : props.entrySet()) { - sbuff.append("\""+(String) prop.getKey()+"\" : \""+(String)prop.getValue()+"\""); - if (needComma) { - sbuff.append(" , "); - } else { - needComma = true; - } - } - sbuff.append(" } }"); - - return(sbuff.toString()); - } - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/SvcLogicFactory.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/SvcLogicFactory.java deleted file mode 100644 index 0c8480e11..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/SvcLogicFactory.java +++ /dev/null @@ -1,150 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - CCSDK - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sliapi.springboot.core; - -import java.io.FileInputStream; -import java.io.IOException; -import java.util.List; -import java.util.Properties; -import org.onap.ccsdk.sli.core.sli.ConfigurationException; -import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; -import org.onap.ccsdk.sli.core.sli.SvcLogicLoader; -import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; -import org.onap.ccsdk.sli.core.sli.SvcLogicStore; -import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory; -import org.onap.ccsdk.sli.core.sli.provider.base.HashMapResolver; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase; -import org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder; -import org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils; -import org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils; -import org.onap.ccsdk.sli.plugins.prop.PropertiesNode; -import org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class SvcLogicFactory { - private static final Logger log = LoggerFactory.getLogger(SvcLogicFactory.class); - - @Autowired - List recorders; - - @Autowired - List plugins; - - @Bean - public SvcLogicStore getStore() throws Exception { - SvcLogicPropertiesProvider propProvider = new SvcLogicPropertiesProvider() { - - @Override - public Properties getProperties() { - Properties props = new Properties(); - - - String propPath = System.getProperty("serviceLogicProperties", ""); - - if ("".equals(propPath)) { - propPath = System.getenv("SVCLOGIC_PROPERTIES"); - } - - - if ((propPath == null) || propPath.length() == 0) { - propPath = "src/main/resources/svclogic.properties"; - } - System.out.println(propPath); - try (FileInputStream fileInputStream = new FileInputStream(propPath)) { - props = new Properties(); - props.load(fileInputStream); - } catch (final IOException e) { - log.error("Failed to load properties for file: {}", propPath, - new ConfigurationException("Failed to load properties for file: " + propPath, e)); - } - return props; - } - }; - SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(propProvider.getProperties()); - return store; - } - - @Bean - public SvcLogicLoader createLoader() throws Exception { - String serviceLogicDirectory = System.getProperty("serviceLogicDirectory"); - if (serviceLogicDirectory == null) { - serviceLogicDirectory = "src/main/resources"; - } - - System.out.println("serviceLogicDirectory is " + serviceLogicDirectory); - SvcLogicLoader loader = new SvcLogicLoader(serviceLogicDirectory, getStore()); - - try { - loader.loadAndActivate(); - } catch (IOException e) { - log.error("Cannot load directed graphs", e); - } - return loader; - } - - @Bean - public SvcLogicServiceBase createService() throws Exception { - HashMapResolver resolver = new HashMapResolver(); - for (SvcLogicRecorder recorder : recorders) { - resolver.addSvcLogicRecorder(recorder.getClass().getName(), recorder); - - } - for (SvcLogicJavaPlugin plugin : plugins) { - resolver.addSvcLogicSvcLogicJavaPlugin(plugin.getClass().getName(), plugin); - - } - return new SvcLogicServiceImplBase(getStore(), resolver); - } - - @Bean - public Slf4jRecorder slf4jRecorderNode() { - return new Slf4jRecorder(); - } - - @Bean - public SliPluginUtils sliPluginUtil() { - return new SliPluginUtils(); - } - - @Bean - public SliStringUtils sliStringUtils() { - return new SliStringUtils(); - } - - @Bean - public RestapiCallNode restapiCallNode() { - return new RestapiCallNode(); - } - - @Bean - public PropertiesNode propertiesNode() { - return new PropertiesNode(); - } - -} diff --git a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/WebConfig.java b/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/WebConfig.java deleted file mode 100644 index 558a82a11..000000000 --- a/sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/core/WebConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - CCSDK - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sliapi.springboot.core; - -import org.onap.logging.filter.spring.LoggingInterceptor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.annotation.EnableTransactionManagement; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import javax.persistence.EntityManagerFactory; -import javax.sql.DataSource; - -@EnableWebMvc -@Configuration -@EnableJpaRepositories("org.onap.ccsdk.sli.core.sliapi.springboot.*") -@ComponentScan(basePackages = {"org.onap.ccsdk.sli.core.sliapi.springboot.*"}) -@EntityScan("org.onap.ccsdk.sli.core.sliapi.springboot.*") -@EnableTransactionManagement -public class WebConfig implements WebMvcConfigurer { - - -} \ No newline at end of file diff --git a/sliapi/springboot/src/main/resources/DEMO_DEMO.xml b/sliapi/springboot/src/main/resources/DEMO_DEMO.xml deleted file mode 100755 index 1b304f18a..000000000 --- a/sliapi/springboot/src/main/resources/DEMO_DEMO.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sliapi/springboot/src/main/resources/application.properties b/sliapi/springboot/src/main/resources/application.properties deleted file mode 100644 index f083ed5e9..000000000 --- a/sliapi/springboot/src/main/resources/application.properties +++ /dev/null @@ -1,18 +0,0 @@ -springfox.documentation.swagger.v2.path=/api-docs -server.contextPath=/restconf -server.port=8080 -spring.jackson.date-format=org.onap.ccsdk.sli.core.sliapi.springboot.controllers.swagger.RFC3339DateFormat -spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false -logging.level.com.att=TRACE -logging.level.org.onap=TRACE -spring.datasource.url=jdbc:mariadb://localhost:3306/sdnctl -spring.datasource.username=sli -spring.datasource.password=abc123 -spring.datasource.driver-class-name=org.mariadb.jdbc.Driver -spring.datasource.testWhileIdle=true -spring.datasource.validationQuery=SELECT 1 -spring.jpa.show-sql=true -spring.jpa.hibernate.ddl-auto=update -spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl -spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy -spring.jpa.database=mysql \ No newline at end of file diff --git a/sliapi/springboot/src/main/resources/graph.versions b/sliapi/springboot/src/main/resources/graph.versions deleted file mode 100644 index d21278aa4..000000000 --- a/sliapi/springboot/src/main/resources/graph.versions +++ /dev/null @@ -1,3 +0,0 @@ -sli healthcheck 0.7.0 sync -sli vlbcheck 0.7.0 sync -DEMO DEMO 1 sync diff --git a/sliapi/springboot/src/main/resources/log4j2.properties b/sliapi/springboot/src/main/resources/log4j2.properties deleted file mode 100644 index 40d18d157..000000000 --- a/sliapi/springboot/src/main/resources/log4j2.properties +++ /dev/null @@ -1,160 +0,0 @@ - #- - # ============LICENSE_START======================================================= - # ONAP - CCSDK - # ================================================================================ - # Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - # ================================================================================ - # Licensed under the Apache License, Version 2.0 (the "License"); - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - # ============LICENSE_END========================================================= - # - -property.logDir = ${sys:LOG_PATH:-./target} - -property.pattern = %d{ISO8601} | %-5p | %-16t | %-32c{1} | %X{currentGraph} - %X{nodeId} | %m%n - -#default mdc values -property.ServiceName = INTERNAL -property.ErrorCode = 900 -property.ErrorDesc = UnknownError - -rootLogger.level = INFO -rootLogger.appenderRef.AppFile.ref = AppFile -rootLogger.appenderRef.Console.ref = Console -rootLogger.appenderRef.DebugFile.ref = DebugFile -rootLogger.appenderRef.ErrorFile.ref = ErrorFile -rootLogger.appenderRef.Console.filter.threshold.type = ThresholdFilter -rootLogger.appenderRef.Console.filter.threshold.level = DEBUG - -appender.console.type = Console -appender.console.name = Console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = ${pattern} - -appender.app.type = RollingRandomAccessFile -appender.app.name = AppFile -appender.app.fileName = ${logDir}/app.log -appender.app.filePattern = ${logDir}/app.log.%i -appender.app.immediateFlush = true -appender.app.append = true -appender.app.layout.type = PatternLayout -appender.app.layout.pattern = ${pattern} -appender.app.policies.type = Policies -appender.app.policies.size.type = SizeBasedTriggeringPolicy -appender.app.policies.size.size = 10MB -appender.app.strategy.type = DefaultRolloverStrategy -appender.app.strategy.max = 100 -appender.app.strategy.fileIndex = min - -appender.debug.type = RollingRandomAccessFile -appender.debug.name = DebugFile -appender.debug.fileName = ${logDir}/debug.log -appender.debug.filePattern = ${logDir}/debug.log.%i -appender.debug.immediateFlush = true -appender.debug.append = true -appender.debug.layout.type = PatternLayout -appender.debug.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|%-5.5p|%-32.32c{1}|%X{currentGraph} - %X{nodeId}|%m%n -appender.debug.policies.type = Policies -appender.debug.policies.size.type = SizeBasedTriggeringPolicy -appender.debug.policies.size.size = 10MB -appender.debug.strategy.type = DefaultRolloverStrategy -appender.debug.strategy.max = 200 -appender.debug.strategy.fileIndex = min - -appender.error.type = RollingRandomAccessFile -appender.error.name = ErrorFile -appender.error.fileName = ${logDir}/error.log -appender.error.filePattern = ${logDir}/error.log.%i -appender.error.immediateFlush = true -appender.error.append = true -appender.error.layout.type = PatternLayout -appender.error.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|$${ctx:ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%p|$${ctx:ErrorCode}|$${ctx:ErrorDesc}|%m%n - -appender.error.policies.type = Policies -appender.error.policies.size.type = SizeBasedTriggeringPolicy -appender.error.policies.size.size = 10MB -appender.error.strategy.type = DefaultRolloverStrategy -appender.error.strategy.max = 100 -appender.error.strategy.fileIndex = min -appender.error.filter.threshold.type = ThresholdFilter -appender.error.filter.threshold.level = WARN - -appender.metric.type = RollingRandomAccessFile -appender.metric.name = MetricFile -appender.metric.fileName = ${logDir}/metric.log -appender.metric.filePattern = ${logDir}/metric.log.%i -appender.metric.immediateFlush = true -appender.metric.append = true -appender.metric.layout.type = PatternLayout -appender.metric.layout.pattern=%X{InvokeTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|%p|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|||%X{TargetElement}|%markerSimpleName|%X|%X{currentGraph} - %X{nodeId}||%m%n -appender.metric.policies.type = Policies -appender.metric.policies.size.type = SizeBasedTriggeringPolicy -appender.metric.policies.size.size = 10MB -appender.metric.strategy.type = DefaultRolloverStrategy -appender.metric.strategy.max = 100 -appender.metric.strategy.fileIndex = min - -appender.audit.type = RollingRandomAccessFile -appender.audit.name = AuditFile -appender.audit.fileName = ${logDir}/audit.log -appender.audit.filePattern = ${logDir}/audit.log.%i -appender.audit.immediateFlush = true -appender.audit.append = true -appender.audit.layout.type = PatternLayout -appender.audit.layout.pattern=%X{EntryTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|INFO|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|%X{AUDIT-Unused}|%X{AUDIT-ProcessKey}|%markerSimpleName|%X|||%m%n -appender.audit.policies.type = Policies -appender.audit.policies.size.type = SizeBasedTriggeringPolicy -appender.audit.policies.size.size = 10MB -appender.audit.strategy.type = DefaultRolloverStrategy -appender.audit.strategy.max = 200 -appender.audit.strategy.fileIndex = min - -appender.rr.name = RequestResponseFile -appender.rr.type = RollingRandomAccessFile -appender.rr.fileName = ${logDir}/request-response.log -appender.rr.filePattern = ${logDir}/request-response.log.%i -appender.rr.immediateFlush = true -appender.rr.append = true -appender.rr.layout.type = PatternLayout -appender.rr.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%X{PartnerName}|%m%n -appender.rr.policies.type = Policies -appender.rr.policies.size.type = SizeBasedTriggeringPolicy -appender.rr.policies.size.size = 10MB -appender.rr.strategy.type = DefaultRolloverStrategy -appender.rr.strategy.max = 100 -appender.rr.strategy.fileIndex = min - -logger.metric.name = org.onap.ccsdk.sli.core.filters.metric -logger.metric.level = INFO -logger.metric.additivity = false -logger.metric.appenderRef.MetricFile.ref = MetricFile - -logger.metric2.name = org.onap.logging.filter.base.AbstractMetricLogFilter -logger.metric2.level = INFO -logger.metric2.additivity = false -logger.metric2.appenderRef.MetricFile.ref = MetricFile - -logger.audit.name = org.onap.logging.filter.base.AbstractAuditLogFilter -logger.audit.level = INFO -logger.audit.additivity = false -logger.audit.appenderRef.AuditFile.ref = AuditFile - -logger.rr.name = org.onap.logging.filter.base.PayloadLoggingServletFilter -logger.rr.level = INFO -logger.rr.additivity = false -logger.rr.appenderRef.RequestResponseFile.ref = RequestResponseFile - -logger.ccsdk.name = org.onap.ccsdk -logger.ccsdk.level = DEBUG - -logger.onaplogging.name = org.onap.logging -logger.onaplogging.level = DEBUG \ No newline at end of file diff --git a/sliapi/springboot/src/main/resources/shiro-users.properties b/sliapi/springboot/src/main/resources/shiro-users.properties deleted file mode 100644 index df4b1ae7a..000000000 --- a/sliapi/springboot/src/main/resources/shiro-users.properties +++ /dev/null @@ -1,3 +0,0 @@ -user.admin = Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U,service -role.service = odl-api:* - diff --git a/sliapi/springboot/src/main/resources/sli_healthcheck.xml b/sliapi/springboot/src/main/resources/sli_healthcheck.xml deleted file mode 100644 index bc8e2f700..000000000 --- a/sliapi/springboot/src/main/resources/sli_healthcheck.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - diff --git a/sliapi/springboot/src/main/resources/sli_vlbcheck.xml b/sliapi/springboot/src/main/resources/sli_vlbcheck.xml deleted file mode 100644 index 820a85c10..000000000 --- a/sliapi/springboot/src/main/resources/sli_vlbcheck.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - diff --git a/sliapi/springboot/src/main/resources/svclogic.properties b/sliapi/springboot/src/main/resources/svclogic.properties deleted file mode 100644 index ae396adde..000000000 --- a/sliapi/springboot/src/main/resources/svclogic.properties +++ /dev/null @@ -1,29 +0,0 @@ -### -# ============LICENSE_START======================================================= -# ONAP : CCSDK -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. All rights -# reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -### - -org.onap.ccsdk.sli.dbtype = jdbc -org.onap.ccsdk.sli.jdbc.url=jdbc:mariadb://localhost:3306/sdnctl -org.onap.ccsdk.sli.jdbc.driver=org.mariadb.jdbc.Driver -org.onap.ccsdk.sli.jdbc.database = sdnctl -org.onap.ccsdk.sli.jdbc.user = sli -org.onap.ccsdk.sli.jdbc.password = abc123 - -sliapi.serviceLogicDirectory=/opt/onap/sdnc/svclogic/graphs diff --git a/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/AppTest.java b/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/AppTest.java deleted file mode 100644 index 5ad6da9fd..000000000 --- a/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/AppTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.onap.ccsdk.sli.core.sliapi.springboot; - -import org.apache.shiro.realm.Realm; -import org.apache.shiro.realm.text.PropertiesRealm; -import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition; -import org.junit.Before; -import org.junit.Test; -import org.onap.aaf.cadi.shiro.AAFRealm; - -import java.util.Map; - -import static org.junit.Assert.*; - -public class AppTest { - - App app; - - @Before - public void setUp() throws Exception { - app = new App(); - System.setProperty("serviceLogicProperties", "src/test/resources/svclogic.properties"); - } - - @Test - public void realm() { - Realm realm = app.realm(); - assertTrue(realm instanceof PropertiesRealm); - - - } - - @Test - public void shiroFilterChainDefinition() { - ShiroFilterChainDefinition chainDefinition = app.shiroFilterChainDefinition(); - Map chainMap = chainDefinition.getFilterChainMap(); - assertEquals("anon", chainMap.get("/**")); - - - } -} \ No newline at end of file diff --git a/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java b/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java deleted file mode 100644 index ae21cef5f..000000000 --- a/sliapi/springboot/src/test/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiControllerTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - CCSDK - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.ccsdk.sli.core.sliapi.springboot; - -import static org.junit.Assert.assertEquals; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.ccsdk.sli.core.sliapi.model.ExecuteGraphInput; -import org.onap.ccsdk.sli.core.sliapi.model.ExecutegraphinputInput; -import org.onap.ccsdk.sli.core.sliapi.model.ResponseFields; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -@RunWith(SpringRunner.class) -@SpringBootTest -@AutoConfigureMockMvc -public class RestconfApiControllerTest { - - private static final Logger log = LoggerFactory.getLogger(RestconfApiControllerTest.class); - - @Autowired - private MockMvc mvc; - - @Test - public void testHealthcheck() throws Exception { - String url = "/restconf/operations/SLI-API:healthcheck"; - - MvcResult mvcResult = - mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content("")) - .andReturn(); - - assertEquals(200, mvcResult.getResponse().getStatus()); - } - - @Test - public void testVlbcheck() throws Exception { - String url = "/restconf/operations/SLI-API:vlbcheck"; - - MvcResult mvcResult = - mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content("")) - .andReturn(); - - assertEquals(200, mvcResult.getResponse().getStatus()); - } - - @Test - public void testExecuteHealthcheck() throws Exception { - String url = "/restconf/operations/SLI-API:execute-graph"; - - ExecuteGraphInput executeGraphInput = new ExecuteGraphInput(); - ExecutegraphinputInput executeGraphData = new ExecutegraphinputInput(); - - executeGraphData.setModuleName("sli"); - executeGraphData.setRpcName("healthcheck"); - executeGraphData.setMode("sync"); - executeGraphInput.setInput(executeGraphData); - - String jsonString = mapToJson(executeGraphInput); - log.error("jsonString is {}", jsonString); - - MvcResult mvcResult = - mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content(jsonString)) - .andReturn(); - - assertEquals(200, mvcResult.getResponse().getStatus()); - - } - - @Test - public void testExecuteMissingDg() throws Exception { - String url = "/restconf/operations/SLI-API:execute-graph"; - - ExecuteGraphInput executeGraphInput = new ExecuteGraphInput(); - ExecutegraphinputInput executeGraphData = new ExecutegraphinputInput(); - - executeGraphData.setModuleName("sli"); - executeGraphData.setRpcName("noSuchRPC"); - executeGraphData.setMode("sync"); - executeGraphInput.setInput(executeGraphData); - - String jsonString = mapToJson(executeGraphInput); - - log.error("jsonString is {}", jsonString); - - MvcResult mvcResult = - mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content(jsonString)) - .andReturn(); - - assertEquals(401, mvcResult.getResponse().getStatus()); - - } - - @Test - public void testTestResultAdd() throws Exception { - String url = "/restconf/config/SLI-API:test-results"; - - MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(url)).andReturn(); - - assertEquals(200, mvcResult.getResponse().getStatus()); - - // Delete any existing content before testing insert - mvcResult = mvc.perform(MockMvcRequestBuilders.delete(url)).andReturn(); - assertEquals(200, mvcResult.getResponse().getStatus()); - - String jsonString = "{\n" + - " \"test-results\" : [\n" + - " {\n" + - " \"test-identifier\" : \"test-1\",\n" + - " \"results\" : [\"test result 1\"]\n" + - " }\n" + - " ]\n" + - "}"; - - mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content(jsonString)) - .andReturn(); - - assertEquals(200, mvcResult.getResponse().getStatus()); - - mvcResult = mvc.perform(MockMvcRequestBuilders.get(url)).andReturn(); - - assertEquals(200, mvcResult.getResponse().getStatus()); - assertEquals(jsonString.replaceAll("\\s+",""), mvcResult.getResponse().getContentAsString().replaceAll("\\s+","")); - } - - private String mapToJson(Object obj) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - return objectMapper.writeValueAsString(obj); - } - - private ResponseFields respFromJson(String jsonString) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - return (objectMapper.readValue(jsonString, ResponseFields.class)); - } -} diff --git a/sliapi/springboot/src/test/resources/DEMO_DEMO.xml b/sliapi/springboot/src/test/resources/DEMO_DEMO.xml deleted file mode 100755 index 1b304f18a..000000000 --- a/sliapi/springboot/src/test/resources/DEMO_DEMO.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sliapi/springboot/src/test/resources/application.properties b/sliapi/springboot/src/test/resources/application.properties deleted file mode 100644 index dbe2633d4..000000000 --- a/sliapi/springboot/src/test/resources/application.properties +++ /dev/null @@ -1,18 +0,0 @@ -springfox.documentation.swagger.v2.path=/api-docs -server.contextPath=/restconf -server.port=8080 -spring.jackson.date-format=org.onap.ccsdk.sli.core.sliapi.springboot.controllers.swagger.RFC3339DateFormat -spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false -logging.level.com.att=TRACE -logging.level.org.onap=TRACE -spring.datasource.url=jdbc:derby:sdnctl;create=true -spring.datasource.username=sli -spring.datasource.password=abc123 -spring.datasource.driver-class-name=org.apache.derby.jdbc.EmbeddedDriver -spring.datasource.testWhileIdle=true -spring.datasource.validationQuery=SELECT 1 -spring.jpa.show-sql=true -spring.jpa.hibernate.ddl-auto=update -spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl -spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy -spring.jpa.database=derby \ No newline at end of file diff --git a/sliapi/springboot/src/test/resources/graph.versions b/sliapi/springboot/src/test/resources/graph.versions deleted file mode 100644 index d21278aa4..000000000 --- a/sliapi/springboot/src/test/resources/graph.versions +++ /dev/null @@ -1,3 +0,0 @@ -sli healthcheck 0.7.0 sync -sli vlbcheck 0.7.0 sync -DEMO DEMO 1 sync diff --git a/sliapi/springboot/src/test/resources/log4j2.properties b/sliapi/springboot/src/test/resources/log4j2.properties deleted file mode 100644 index 40d18d157..000000000 --- a/sliapi/springboot/src/test/resources/log4j2.properties +++ /dev/null @@ -1,160 +0,0 @@ - #- - # ============LICENSE_START======================================================= - # ONAP - CCSDK - # ================================================================================ - # Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - # ================================================================================ - # Licensed under the Apache License, Version 2.0 (the "License"); - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - # ============LICENSE_END========================================================= - # - -property.logDir = ${sys:LOG_PATH:-./target} - -property.pattern = %d{ISO8601} | %-5p | %-16t | %-32c{1} | %X{currentGraph} - %X{nodeId} | %m%n - -#default mdc values -property.ServiceName = INTERNAL -property.ErrorCode = 900 -property.ErrorDesc = UnknownError - -rootLogger.level = INFO -rootLogger.appenderRef.AppFile.ref = AppFile -rootLogger.appenderRef.Console.ref = Console -rootLogger.appenderRef.DebugFile.ref = DebugFile -rootLogger.appenderRef.ErrorFile.ref = ErrorFile -rootLogger.appenderRef.Console.filter.threshold.type = ThresholdFilter -rootLogger.appenderRef.Console.filter.threshold.level = DEBUG - -appender.console.type = Console -appender.console.name = Console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = ${pattern} - -appender.app.type = RollingRandomAccessFile -appender.app.name = AppFile -appender.app.fileName = ${logDir}/app.log -appender.app.filePattern = ${logDir}/app.log.%i -appender.app.immediateFlush = true -appender.app.append = true -appender.app.layout.type = PatternLayout -appender.app.layout.pattern = ${pattern} -appender.app.policies.type = Policies -appender.app.policies.size.type = SizeBasedTriggeringPolicy -appender.app.policies.size.size = 10MB -appender.app.strategy.type = DefaultRolloverStrategy -appender.app.strategy.max = 100 -appender.app.strategy.fileIndex = min - -appender.debug.type = RollingRandomAccessFile -appender.debug.name = DebugFile -appender.debug.fileName = ${logDir}/debug.log -appender.debug.filePattern = ${logDir}/debug.log.%i -appender.debug.immediateFlush = true -appender.debug.append = true -appender.debug.layout.type = PatternLayout -appender.debug.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|%-5.5p|%-32.32c{1}|%X{currentGraph} - %X{nodeId}|%m%n -appender.debug.policies.type = Policies -appender.debug.policies.size.type = SizeBasedTriggeringPolicy -appender.debug.policies.size.size = 10MB -appender.debug.strategy.type = DefaultRolloverStrategy -appender.debug.strategy.max = 200 -appender.debug.strategy.fileIndex = min - -appender.error.type = RollingRandomAccessFile -appender.error.name = ErrorFile -appender.error.fileName = ${logDir}/error.log -appender.error.filePattern = ${logDir}/error.log.%i -appender.error.immediateFlush = true -appender.error.append = true -appender.error.layout.type = PatternLayout -appender.error.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|$${ctx:ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%p|$${ctx:ErrorCode}|$${ctx:ErrorDesc}|%m%n - -appender.error.policies.type = Policies -appender.error.policies.size.type = SizeBasedTriggeringPolicy -appender.error.policies.size.size = 10MB -appender.error.strategy.type = DefaultRolloverStrategy -appender.error.strategy.max = 100 -appender.error.strategy.fileIndex = min -appender.error.filter.threshold.type = ThresholdFilter -appender.error.filter.threshold.level = WARN - -appender.metric.type = RollingRandomAccessFile -appender.metric.name = MetricFile -appender.metric.fileName = ${logDir}/metric.log -appender.metric.filePattern = ${logDir}/metric.log.%i -appender.metric.immediateFlush = true -appender.metric.append = true -appender.metric.layout.type = PatternLayout -appender.metric.layout.pattern=%X{InvokeTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|%p|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|||%X{TargetElement}|%markerSimpleName|%X|%X{currentGraph} - %X{nodeId}||%m%n -appender.metric.policies.type = Policies -appender.metric.policies.size.type = SizeBasedTriggeringPolicy -appender.metric.policies.size.size = 10MB -appender.metric.strategy.type = DefaultRolloverStrategy -appender.metric.strategy.max = 100 -appender.metric.strategy.fileIndex = min - -appender.audit.type = RollingRandomAccessFile -appender.audit.name = AuditFile -appender.audit.fileName = ${logDir}/audit.log -appender.audit.filePattern = ${logDir}/audit.log.%i -appender.audit.immediateFlush = true -appender.audit.append = true -appender.audit.layout.type = PatternLayout -appender.audit.layout.pattern=%X{EntryTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|INFO|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|%X{AUDIT-Unused}|%X{AUDIT-ProcessKey}|%markerSimpleName|%X|||%m%n -appender.audit.policies.type = Policies -appender.audit.policies.size.type = SizeBasedTriggeringPolicy -appender.audit.policies.size.size = 10MB -appender.audit.strategy.type = DefaultRolloverStrategy -appender.audit.strategy.max = 200 -appender.audit.strategy.fileIndex = min - -appender.rr.name = RequestResponseFile -appender.rr.type = RollingRandomAccessFile -appender.rr.fileName = ${logDir}/request-response.log -appender.rr.filePattern = ${logDir}/request-response.log.%i -appender.rr.immediateFlush = true -appender.rr.append = true -appender.rr.layout.type = PatternLayout -appender.rr.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%X{PartnerName}|%m%n -appender.rr.policies.type = Policies -appender.rr.policies.size.type = SizeBasedTriggeringPolicy -appender.rr.policies.size.size = 10MB -appender.rr.strategy.type = DefaultRolloverStrategy -appender.rr.strategy.max = 100 -appender.rr.strategy.fileIndex = min - -logger.metric.name = org.onap.ccsdk.sli.core.filters.metric -logger.metric.level = INFO -logger.metric.additivity = false -logger.metric.appenderRef.MetricFile.ref = MetricFile - -logger.metric2.name = org.onap.logging.filter.base.AbstractMetricLogFilter -logger.metric2.level = INFO -logger.metric2.additivity = false -logger.metric2.appenderRef.MetricFile.ref = MetricFile - -logger.audit.name = org.onap.logging.filter.base.AbstractAuditLogFilter -logger.audit.level = INFO -logger.audit.additivity = false -logger.audit.appenderRef.AuditFile.ref = AuditFile - -logger.rr.name = org.onap.logging.filter.base.PayloadLoggingServletFilter -logger.rr.level = INFO -logger.rr.additivity = false -logger.rr.appenderRef.RequestResponseFile.ref = RequestResponseFile - -logger.ccsdk.name = org.onap.ccsdk -logger.ccsdk.level = DEBUG - -logger.onaplogging.name = org.onap.logging -logger.onaplogging.level = DEBUG \ No newline at end of file diff --git a/sliapi/springboot/src/test/resources/shiro-users.properties b/sliapi/springboot/src/test/resources/shiro-users.properties deleted file mode 100644 index df4b1ae7a..000000000 --- a/sliapi/springboot/src/test/resources/shiro-users.properties +++ /dev/null @@ -1,3 +0,0 @@ -user.admin = Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U,service -role.service = odl-api:* - diff --git a/sliapi/springboot/src/test/resources/sli_healthcheck.xml b/sliapi/springboot/src/test/resources/sli_healthcheck.xml deleted file mode 100644 index bc8e2f700..000000000 --- a/sliapi/springboot/src/test/resources/sli_healthcheck.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - diff --git a/sliapi/springboot/src/test/resources/sli_vlbcheck.xml b/sliapi/springboot/src/test/resources/sli_vlbcheck.xml deleted file mode 100644 index 820a85c10..000000000 --- a/sliapi/springboot/src/test/resources/sli_vlbcheck.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - diff --git a/sliapi/springboot/src/test/resources/svclogic.properties b/sliapi/springboot/src/test/resources/svclogic.properties deleted file mode 100644 index 1d90ab9b4..000000000 --- a/sliapi/springboot/src/test/resources/svclogic.properties +++ /dev/null @@ -1,29 +0,0 @@ -### -# ============LICENSE_START======================================================= -# ONAP : CCSDK -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. All rights -# reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -### - -org.onap.ccsdk.sli.dbtype = jdbc -org.onap.ccsdk.sli.jdbc.url=jdbc:derby:memory:sdnctl;create=true -org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver -org.onap.ccsdk.sli.jdbc.database = sdnctl -org.onap.ccsdk.sli.jdbc.user = test -org.onap.ccsdk.sli.jdbc.password = test - -sliapi.serviceLogicDirectory=/opt/onap/sdnc/svclogic/graphs -- cgit 1.2.3-korg