Fix local server for multiple applications
[anna.git] / INSTALL_ADML_HTTP.md
index 785c4dd..e3aa9ae 100644 (file)
@@ -2,20 +2,88 @@
 
 ## Deployment
 
-Execute 'example/diameter/launcher/deploy-adml-http.sh' and follow instructions.
+Execute this [script](./example/diameter/launcher/deploy-adml-http.sh [Variant: Release by default]) and follow instructions.
 
-## Enabling HTTP2 Service
+## Building docker image
 
-This is done through nginx proxy configured as reverse proxy to translate `HTTP2` traffic coming to port *8074* towards *localhost* port *8000* where `ADML HTTP` is going to serve the *HTTP1.1* Rest Service.
+In our image, we enable the `HTTP2 Service` to attack the `HTTP1.1 ADML interface`. This is done through nginx proxy configured as reverse proxy to translate `HTTP2` traffic coming to port *8074* towards *localhost* port *8000* where `ADML HTTP` is going to serve the *HTTP1.1* Rest Service.
 
 To build the docker image, execute this script:
 
-> tools/build-adml-http [variant: [Release]|Debug]
+> tools/build-anna-adml-http [variant: [Release]|Debug]
 
 ## Running docker image
 
-> docker run --rm -d --network host --name adml-http anna-adml-http:<version>
+> docker run --rm -d -p 8074:8074 --name anna-adml-http anna-adml-http:<version> [entrypoint arguments: <[ft]|st>]
 
-## Monitoring ADML traces
+Entrypoint arguments are passed to ADML start script (`/opt/adml/start.sh` inside the container), and are mainly preconfigured variants for `ADML` command-line arguments. So, `ft` stands for `function test` (debug traces, traffic logs in real time, etc.) and `st` is `system test` (warning level for traces, no traffic logs dumped, etc.).
+
+Service port is **8074**.
+
+## Basic operations
+
+### Monitoring ADML traces
+
+> docker exec -it anna-adml-http tail -F /opt/adml/launcher.trace
+
+### Checking available diameter dictionaries
+
+> docker exec -it anna-adml-http ls -1 /opt/adml/stacks
+>
+> DictionaryGx.16777238.xml
+> DictionaryRx.16777236.xml
+> DictionarySy.16777302.xml
+> diameter_base.0.xml
+
+### Configure diameter nodes
+
+You may use the *REST API* to load diameter services into *ADML*. This is the way to load stacks and nodes (origin hosts) in order to be up and running.
+
+For example, consider an Origin-Host acting as diameter client with the name: **afHost.afRealm.com** and also a node named **ownHostId.operatorRealm.com** acting as diameter server, both using the *Rx interface* ( **/stacks/DictionaryRx.16777236.xml)**. You could configure any number of stacks/nodes to setup different diameter interfaces even having proxy/relay/translation capabilities.
+
+You could load any number of services given by this [file specification](./example/diameter/launcher/resources/services_examples/services.dtd). Also, you could configure a single file and load together all the needed elements, for example:
+
+`<services>`
+  `<stack id="16777236" dictionary="stacks/DictionaryRx.16777236.xml" fixMode="Always" ignoreFlagsOnValidation="yes"/>`
+  `<node originHost="afHost.afRealm.com" applicationId="16777236" entity="localhost:3868"/>`
+  `<node originHost="ownHostId.operatorRealm.com" applicationId="16777236" diameterServer="localhost:3868" diameterServerSessions="1"/>`
+`</services>`
+
+The REST API works with json format, then we shall use the [xml2json.py](./example/diameter/launcher/resources/rest_api/helpers/diameterJsonHelper/xml2json.py) tool to convert the previous one and insert on a node called "**servicesJson**":
+
+> {
+>    **"servicesJson": {**
+>       "services": {
+>          "node": [
+>             {
+>                "@applicationId": "16777236",
+>                "@entity": "localhost:3868",
+>                "@originHost": "afHost.afRealm.com"
+>             },
+>             {
+>                "@applicationId": "16777236",
+>                "@diameterServer": "localhost:3868",
+>                "@diameterServerSessions": "1",
+>                "@originHost": "ownHostId.operatorRealm.com"
+>             }
+>          ],
+>          "stack": {
+>             "@dictionary": "stacks/DictionaryRx.16777236.xml",
+>             "@fixMode": "Always",
+>             "@id": "16777236",
+>             "@ignoreFlagsOnValidation": "yes"
+>          }
+>       }
+>    **}**
+> }
+
+Then, you could load the former *services.json* file:
+
+> nghttp -v -H ":method: POST" -d services.json http://localhost:8074/services
+
+
+
+## Component Test
+
+Read [this](./example/diameter/launcher/resources/rest_api/README.md).
 
-> docker exec -it adml-http tail -F /opt/adml/launcher.trace
\ No newline at end of file