Professional Documents
Culture Documents
and other aticara trademarks are trademarks of Aticara Technologies PVT LTD
All other trademarks and trade names mentioned in this document are the property of their respective
holders.
Notice
The purchased products, services and features are stipulated by the contract made between Aticara and
the customer. All or part of the products, services and features described in this document may not be
within the purchase scope or the usage scope. Unless otherwise specified in the contract, all statements,
information, and recommendations in this document are provided "AS IS" without warranties, guarantees
or representations of any kind, either express or implied.
The information in this document is subject to change without notice. Every effort has been made in the
preparation of this document to ensure accuracy of the contents, but all statements, information, and
recommendations in this document do not constitute a warranty of any kind, express or implied.
Representational State Transfer (REST) is a software architectural style that defines a set of
constraints to be used for creating Web services. Web services that conform to the REST architectural style,
called RESTful Web services (RWS), provide interoperability between computer systems on the Internet.
Web service APIs that adhere to the REST architectural constraints are called RESTful APIs. HTTP-based
RESTful APIs are defined with the following aspects:
With REST, networked components are a resource you request access to -- a black box whose
implementation details are unclear. The presumption is that all calls are stateless; nothing can be retained
by the RESTful service between executions.
Because the calls are stateless, REST is useful in cloud applications. Stateless components can be freely
redeployed if something fails, and they can scale to accommodate load changes. This is because any
request can be directed to any instance of a component; there can be nothing saved that has to be
remembered by the next transaction.
About Django:
Django is a Python-based free and open-source web framework, which follows the model-
template-view (MTV) architectural pattern.
It is a lightweight and standalone web server for development and testing ,support for middleware classes
that can intervene at various stages of request processing and carry out custom functions ,an interface to
Python's built-in unit test framework.
Some well-known sites that use Django include the Public Broadcasting Service,Instagram,Mozilla, The
Washington Times,Disqus,Bitbucket,and Nextdoor.
Django can be run in conjunction with Apache, Nginx using WSGI, Gunicorn, or Cherokee using flup (a
Python module).Django also includes the ability to launch a FastCGI server, enabling use behind any web
server which supports FastCGI, such as Lighttpd or Hiawatha. It is also possible to use other WSGI-
compliant web servers.Django officially supports four database backends: PostgreSQL, MySQL, SQLite, and
Oracle. Microsoft SQL Server can be used with django-mssql on Microsoft operating systems,while similarly
external backends exist for IBM Db2,SQL Anywhere and Firebird.
Page 2
Aticara AppStorm API Reference
Aticara Django REST APIs:
Aticara provides software based 1/10/25/40/50/100 Gbps traffic emulator which can match/beat any
expensive FPGA based traffic emulator in the market in terms of throughput, performance and cost per
port.It basically has features like Bytestorm,PcapStorm ,Webstorm,Quickstorm,DDOS etc which performs
various functionalities.
Aticara needs REST APIs to compute operations that are performed by these features without the aid of
User Interface. Hence Django REST APIs became an integral part of Aticara middleware.
One of the main differences between DRF and other frameworks is that it allows developer to define URL
structure and not rely on an auto-generated one, while others automate much of the conversion from
Django models to REST endpoints, thus are less flexible. Moreover, Django REST Framework includes built-
in API browser for testing out newly developed API.
Mechanism is very simple and just like any other REST API , REST Automation User on REST Client Side will
be sending request as per his need with the help of specific URL and request pattern .Server running on the
other Side will receive this request and process it with the help of Django server which is nothing but
Aticara REST Automation Server which inturn will be connected to Aticara Backend [Aticara Dashboard
and MYSQL Database], Performs Required operation and responds back to the Client.
Django's configuration system allows third party code to be plugged into a regular project, provided that it
follows the reusable app conventions. More than 2500 packages are available to extend the framework's
original behavior, providing solutions to issues the original tool didn't tackle: registration, search, API
provision and consumption, CMS, etc.
Port ID Description
Page 3
Aticara AppStorm API Reference
1.2 Coding Format
Request and response packets use the JSON format (RFC4627).
Request packets received by APIs and response packets returned by APIs must be in the JSON format.
(The format of APIs for upload and download depends on the API definitions.)
The MIME type is application/json.
All APIs use the UTF-8 encoding format.
1.3 URL
CloudOpera APIs are designed based on the concepts of RESTful APIs.
REST, a network consists of resources. Resources are identified by Uniform Resource Identifiers (URIs)
across the network. Applications from a client obtains resources through Uniform Resource Locators
(URLs).
https://ip:port/{api-root}/{external-service-name}/{version}/{rest-path}
Element Description
For example, the API for obtaining basic information about all rules is:
http://localhost:8086/rest/uam/v1/roles.
Page 4
Aticara AppStorm API Reference
Table 1-2 describes the elements of the URL.
Page 5
Aticara AppStorm API Reference
1.4 API Authentication
The following describes the process of API authentication:
There are two authentication modes for invoking APIs. Choose any one of them to perform authentication.
Token authentication: Invokes requests through token authentication. For details about
the toke authentication, see section "Obtaining the User Token."
AK/SK authentication: Invokes requests through Access Key ID (AK)/Secret Access Key
(SK) encryption. AK/SK authentication is more secure. For details, see section
"Obtaining a User Token Using an AK."
Step 2 A token value is returned after each successful login.
Step 3 Each request must use this token value for authentication.
1.5 Request
Request Methods
According to the REST specifications, all operations performed on resources must comply with the HTTP
specifications.
The key operations include the following: GET, PUT, POST, and DELETE. The operation performed on
resources can be classified into: create, retrieve, update, and delete (CRUD).
If the requested URL does not support this operation, status code 405 (Method Not Allowed) is
returned.
The PATCH request method is not supported.
For details about restrictions of each operation, see the following.
Page 6
Aticara AppStorm API Reference
GET
[Use scenario] This method is used to obtain resources.
[Status code] If the request is successful, the status code 200 (OK) is returned.
The security requirement means that the operation does not change the server status. The
idempotence requirement means that relative status change is not allowed for the resource.
POST
[Use scenario] This method is used to create resources in the scenario where operations cannot be
expressed by CRUD (non-CRUD).
[Status code] If the resource is created successfully, the status code 200 (OK) or 201 (Created) is returned.
In the non-CRUD scenario, the status code 200 (OK) is returned.
[Restrictions] The request method does not meet security and idempotence requirements.
PUT
[Use scenario] This method is used to fully update resources. If the object to be updated does not exist, the
object will be created.
For example, PUT /users/admin means to create one user whose id is admin and set the user attribute
information if user admin does not exist. If user admin already exists, then all of its information is
replaced.
[Status code] If the resource is created successfully, the status code 201 (Created) is returned. If the
resource is updated successfully, the status code 200 (OK) is returned.
DELETE
[Use scenario] This method is used to delete resources.
[Status code] If the resource is deleted successfully, the status code 200 (OK) is returned. If the resource to
be deleted does not exist, the status code 204 (No Content) is returned. If a service receives the request
but the resource is not deleted immediately, the status code 202 (Accepted) is returned.
Page 7
Aticara AppStorm API Reference
Operation severity
Table 1-4 lists the operation severity in this document.
Severity Description
1.6 Response
Response Type
Unless otherwise specified, the returned result for each request is identified with a status code. For details,
see the description of status codes.
The APIs of Aticara CloudOpera Orchestrator can be classified into synchronous APIs and asynchronous
APIs.
Synchronous APIs
For synchronous APIs, a response is returned within 30 s, and the returned result is mainly identified by
HTTP status code. For details, see the description of the related APIs.
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache
Content-Length: 298
{"operations" : [ {
"operation_id" : "31af59f1dc72437cb1c8f71e6e1b84a8",
"operation" : "Create",a
"result" : {
"result" : "success ",
"reason" : ""},
"user_id" : "89af59f1dc72437cb1c8f71e6e1b84by ",
Page 8
Aticara AppStorm API Reference
"operation_content": "",
"progress" : "done",
"operate_at" : "1447259909284",
"finished_at" : "1447158572834"
"task_uri":
"/decomposer/v1/tasks/f912a4b3e1954ab5a34d1b544b4b209b"
}]}
Asynchronous APIs
Asynchronous APIs are used for operations that may take a long time, up to date “Asynchronous API” is
listed in Chapter 5.1. When receiving a request, the background service will initiate a task to perform the
expected operation, meanwhile the server end will immediately returns Status Code 202 with
“operation_id” included in the response body. The requester can initiate a GET operation with the specified
“operation _id” to obtain the execution progress of the task, the get API is described in chapter “2.1.6
Querying the operation of a service”.
("https://accessip:port/rest/servicemanager/v1/services/{serviceID}/operations/{operationID}")
2. Using the callback URL to IES, please refer to Section “5 IES Async-Job Callback Service”
Timeout Period
The REST APIs of Aticara CloudOpera have a fixed timeout period of 30s.
Status Code
Status codes
Page 9
Aticara AppStorm API Reference
Status Code Description
304 Not Modified The resource has not been modified since
the version specified by the request
headers If-Modified-Since or If-None-
Match. In such case, there is no need to
retransmit the resource since the client still
has a previously downloaded copy.
400 Bad Request The server cannot or will not process the
request due to an apparent client error
(e.g., malformed request syntax, invalid
request message framing, or deceptive
request routing).
Page 10
Aticara AppStorm API Reference
Status Code Description
returned.
409 Conflict
The request could not be processed
because of conflict in the request, such as
an edit conflict between multiple
simultaneous updates.
414 Request-URI Too Long The URL can contain a maximum of 2083
characters.
429 Too Many Requests The user has sent too many requests in a
given amount of time.
Page 11
Aticara AppStorm API Reference
Status Code Description
Timeout Period
The REST APIs of Aticara CloudOpera Orchestrator have a pre-set timeout period of 30s.
Page 12
Aticara AppStorm API Reference
Parameter Description Mandato Example
Name ry
token, which is used to
authenticate APIs. The API that
obtains the authentication token
does not require this parameter.
Page 13
Aticara AppStorm API Reference
Parameter Name Description Mandato Example
ry
no-store: Important information is
prevented from being published
mistakenly. If this value is sent in
requests, the cache does not store
anything about the requests and
responses.
no-transform: The proxy server is
forbidden from modifying Content-
Encoding, Content-Range, and
Content-Type.
must-revalidate: If the client has
cached data, after the client obtains
the data, the client compares the
obtained data with the cached data
for verification even though the
cached data is still valid.
proxy-revalidation: If the proxy
server has cached data, after the
client obtains the data, the proxy
server compares the obtained data
with the cached data for verification
even though the cached data is still
valid.
max-age: Specifies the maximum
amount of time a resource will be
considered fresh in seconds.
min-fresh: Indicates that the client
wants a response that will still be
fresh for at least the specified
number of seconds.
max-stale: Indicates that the client is
willing to accept a response that has
exceeded its expiration time. If the
value of max-stale is specified, you
specify the time the response must
not be expired by.
Page 14
Aticara AppStorm API Reference
1.GET reserveports
This API returns information about all the Ports that are reserved!
Request URL: Example Request:
https://accessip:port/reserveports/ Reserveports
Example Response
200 - OK
[
{
"port_id": 0,
"port_name": "Port 0",
"port_status": 1,
"port_reserve": 0,
"port_mac": "00:0c:29:fc:48:02",
"port_user": "",
"port_user_id": 1,
"port_host": "localhost",
"port_flows": 100,
"port_streams": 1,
"port_data": 0,
"port_capture": 0,
"port_stats": 0,
"port_pci": "0",
"port_feature": 0,
"port_test_id": 0,
"port_test_name": "",
"port_arp": 0,
"port_icmp": 0,
"port_speed": 10000
},
Page 15
Aticara AppStorm API Reference
2.PUT reserveports
Thi API is to reserve the unreserved Ports.
REQUEST URL:
curl --location --request PUT
https://accessip:port/reserveports/
curl --location --request PUT "
HEADERS
https://accessip:port/reserveports/" \
--header "Content-Type: application/json" \
Content-Type --data "{
\"port_id\": 0,
application/json \"port_name\": \"Port 0\",
BODY raw \"port_status\": 1,
\"port_reserve\": 1,
\"port_user\": \"test\",
{ \"port_user_id\": 99
"port_id": 1, }"
"port_reserve": 1,
"port_user": "test",
"port_user_id": 99 Example Response
}
{
"Error message": "Port is Already reserved"
}
Page 16
Aticara AppStorm API Reference
3.GET createtestbed
This API returns the list of TestBeds that are created.
Example Request
Request URL:
curl --location --request GET
"https://accessip:port/createtestbed/"
https://accessip:port/createtestbed/
Example Response
200 - OK
[
{
"test_id": 6,
"feature_id": 2,
"user_id": 99,
"num_ports": 2,
"port1": 2,
"port2": 3,
"latency": 0,
"test_time": 0,
"test_name": "AppStorm",
"chart_index": 89,
"test_stop_time": null,
"test_start_time": null
}
]
Page 17
Aticara AppStorm API Reference
4.POST createtestbed
This API is to create Testbed with appropriate name .
Example Request
Request URL:
createtestbed_200_ok
https://accessip:port/createtestbed/
curl --location --request POST
"http://192.168.174.20:8080/createtestbed/" \
HEADERS --header "Content-Type: application/json" \
--data "{
\"test_id\": 1,
\"feature_id\": 1,
Content-Type \"user_id\": 99,
\"test_name\": \"AppStorm\"
application/json }"
BODY raw
{
Example Response
"test_id": 1,
"feature_id": 2, 201 - Created
"user_id": 99,
"test_name": "AppStorm"
} {
"Message": "Testbed Created Successfully!",
"Test ID": 2
}
5.GET addportstotestbed
This API returns the list of ports that are added to testbed.
"https://accessip:port/addportstotestbed/"
Example Response
200 - OK
[
{
"port_id": 0,
"port_name": "Port 0",
"port_status": 1,
"port_reserve": 0,
"port_feature": 0,
"port_test_id": 0,
"port_test_name": " "
}
]
Page 18
Aticara AppStorm API Reference
6.PUT addportstotestbed
This API is used to add ports to testbed.
Request URL: Example Request
curl --location --request PUT
https://accessip:port/addportstotestbed/ "http://192.168.174.20:8080/addportstotestbed/" \
--header "Content-Type: application/json" \
HEADERS --data "{
\"port_id\": 3,
\"port_feature\": 2,
Content-Type \"port_test_id\": 6,
\"port_test_name\": \"AppStorm\"
application/json }
"
BODY raw
Example Response
{
"port_id": 2,
200 - OK
"port_feature": 2,
"port_test_id": 6, {
"port_test_name": "AppStorm" "port_id": 2,
} "port_name": "Port 2",
"port_status": 1,
"port_reserve": 1,
"port_feature": 2,
"port_test_id": 6,
"port_test_name": "AppStorm"
}
Example Response:
PARAMS
200 - OK
testId [
{
1
"app_name": "Cab",
"track_id": 11,
"track_app": 1,
"app_id": 11,
"app_in_percentage": 33
}
]
Page 19
Aticara AppStorm API Reference
8.PUT Selectapps:
Request URL: Example Request:
9.GET AppStormupdatetraffic
This API returns port configuration information.
Example Response :
PARAMS: 200 - OK
testId {
"Radio": [
1
{
"iheartradio": 100,
"Radio": 35
}
],
"P2p": [
{
"4shared": 25,
"P2p": 35,
"Bittorrent": 75
}
],
"Ecommerce": [
{
Page 20
Aticara AppStorm API Reference
"Amazon": 35,
"Ecommerce": 30,
"Zomato": 30,
"Ebay": 35
}
]
}
10.PUT Main_updatetraffic
REQUEST URL: Example Request:
{
"Radio":"35%",
"P2p":"35%",
"Ecommerce":"30%"
}
Page 21
Aticara AppStorm API Reference
11.PUT Subappupdate
REQUEST URL: Example Request:
application/json
Example Response:
PARAMS
200 - OK
{
testId "Message": "Successfully Updated Traffic!"
1 }
BODY raw
{
"P2p": "33%",
"4shared": "25%",
"Bittorrent": "75%"
}
Page 22
Aticara AppStorm API Reference
12.GET AppClientConfig
Example Request:
Request URL:
curl --location --request GET
https://accessip:port/clientconfig/?testId=1&portId=1 "https://accessip:port/clientconfig/?testId=1&portId=1"
PARAMS:
testId
1
portId
1
13.PUT AppClientConfig
REQUEST URL: Example Request
Page 23
Aticara AppStorm API Reference
14.GET AppServerConfig
Example Request:
Request URL:
curl --location --request GET
https://accessip:port/appblasterconfigserver/?testId=3&portId "https://accessip:port/appblasterconfigserver/?testId=6&portId
=3 =3"
Page 24
Aticara AppStorm API Reference
15.PUT AppServerConfig
REQUEST URL: Example Request
Page 25
Aticara AppStorm API Reference
16.GET Aditionalconfig
Request URL:
https://accessip:port/appconfigadditional/?testId=5&=
Example Request:
Page 26
Aticara AppStorm API Reference
17.PUT Aditionalconfig
REQUEST URL: Example Request
Page 27
Aticara AppStorm API Reference
18.GET Load Profile
Request URL: Example Request:
https://accessip:port/pcapprofile/
curl --location --request PUT "https://accessip:port/pcaploadprofileinfo/"
HEADERS \
--header "Content-Type: application/json" \
--data "{
Content-Type \"load_profile\" : 1,
\"duration\": 28,
application/json \"iterations\": 9,
\"ramp_down\": 6,
BODY raw
\"ramp_up\": 9,
\"test_id\":6
{ }"
"load_profile" : 1,
"duration": 28, Example Response:
"iterations": 9,
"ramp_down": 6, 200 - OK
"ramp_up": 9, {
"test_id":86 "Message": "Successfully set load profile!"
} }
Page 28
Aticara AppStorm API Reference
20.GET summary of configured Parameters:
Request URL: Example Request:
https://accessip:port/starttraffic/?TestId=2&port_data=
curl --location --request PUT
1 "https://accessip:port/starttraffic/?TestId=2&port_data=1" \
HEADERS --header "Content-Type: application/json"
Content-Type
application/json
Example Response:
PARAMS
304 - Not Modified
{
TestId "Message": "Traffic Started Already"
}
2
port_data
1
Always 1
BODY formdata
Page 29
Aticara AppStorm API Reference
22. PUT StartCapture
This API is to start Capturing the traffic.
23.GET Trafficstatus
This API returns the status of Traffic.
https://accessip:port/trafficstatus/?portId=1&testId=5 trafficstatus_200ok
port_2
Page 30
Aticara AppStorm API Reference
24. PUT StopCapture
This API is to stop Capturing the traffic.
https://accessip:port/stopcapture/?TestId=2&port_capture=0 stopcapture_304
PARAMS
curl --location --request PUT
"https://accessip:port/stopcapture/?TestId=2&port_capture=1"
TestId
2 Example Response:
port_capture 304 - Not Modified
{
0 "Message": "Port_capture cannot be One!!"
Always 0 }
https://accessip:port/stoptraffic/?TestId=1&port_data=0 stoptraffic_304
PARAMS:
curl --location --request PUT "https://accessip:port/stoptraffic/?TestId=1&port_data=0"
TestId
Example Response:
1
304 - Not Modified
port_data {
"Message": "Traffic Stopped Already"
0 }
Always 0
Page 31
Aticara AppStorm API Reference
26.POST displaystats
This API displays Statistics data of the test run..
Example Response:
PARAMS: 200 - OK
[
port_1
{
0 "Type": "Aggregate Statistics"
},
port_2
{
1 "tx_tpkts": 2087168,
"avg_txbits": 11645275,
TestId
"rx_tbits": 2802018853,
2 "tx_tbits": 1246044480,
"avg_txpkts": 19506,
"rx_tpkts": 2617955,
"avg_rxpkts": 24466,
"avg_rxbits": 26187092,
"port_id": 0
},
{
"tx_tpkts": 2617984,
"avg_txbits": 26181792,
"rx_tbits": 1250349904,
"tx_tbits": 2801451808,
"avg_txpkts": 24467,
"rx_tpkts": 2087180,
"avg_rxpkts": 19506,
"avg_rxbits": 11685513,
"port_id": 1
},
{
"Type": "Logs"
},
[
{
"prf_file": "port_3_1_06_37_17_21_10_2019.pcap",
"prf_date": "21/10/2019",
"prf_index": 3,
"prf_test_name": "ByteStorm",
"prf_time": "06:37:17",
"prf_user_id": 99
},
Page 32
Aticara AppStorm API Reference
{
"prf_file": "port_3_0_01_44_02_22_10_2019.pcap",
"prf_date": "22/10/2019",
"prf_index": 3,
"prf_test_name": "ByteStorm",
"prf_time": "01:44:02",
"prf_user_id": 99
},
{
"prf_file": "port_3_1_01_44_02_22_10_2019.pcap",
"prf_date": "22/10/2019",
"prf_index": 3,
"prf_test_name": "ByteStorm",
"prf_time": "01:44:02",
"prf_user_id": 99
},
{
"prf_file": "port_3_0_06_53_54_22_10_2019.pcap",
"prf_date": "22/10/2019",
"prf_index": 3,
"prf_test_name": "check",
"prf_time": "06:53:54",
"prf_user_id": 99
},
{
"prf_file": "port_3_1_06_53_54_22_10_2019.pcap",
"prf_date": "22/10/2019",
"prf_index": 3,
"prf_test_name": "check",
"prf_time": "06:53:54",
"prf_user_id": 99
},
{
"prf_file": "Report_check_2019_10_22_04_25_13.zip",
"prf_date": "22/10/2019",
"prf_index": 3,
"prf_test_name": "check",
"prf_time": "16:25:13",
"prf_user_id": 99
},
{
"prf_file": "Report_sample_2019_10_22_04_30_39.zip",
"prf_date": "22/10/2019",
"prf_index": 4,
"prf_test_name": "sample",
"prf_time": "16:30:39",
"prf_user_id": 99
},
{
"prf_file": "port_4_0_07_00_55_22_10_2019.pcap",
"prf_date": "22/10/2019",
Page 33
Aticara AppStorm API Reference
"prf_index": 4,
"prf_test_name": "sample",
"prf_time": "07:00:55",
"prf_user_id": 99
},
{
"prf_file": "port_4_1_07_00_55_22_10_2019.pcap",
"prf_date": "22/10/2019",
"prf_index": 4,
"prf_test_name": "sample",
"prf_time": "07:00:55",
"prf_user_id": 99
},
{
"prf_file": "Report_sample_2019_10_22_04_32_42.zip",
"prf_date": "22/10/2019",
"prf_index": 4,
"prf_test_name": "sample",
"prf_time": "16:32:42",
"prf_user_id": 99
}
]
]
PARAMS
Example Response:
port_1 200 - OK
0
[
port_2
{
"latency_op": 0,
1
"checkbox": 1,
"rx_pkts": 0,
TestId
"file_name": "Uber",
2 "rx_pkts_op": 0,
"app_id": 1,
"tx_bytes_op": 0,
"err_pkts_op": 0,
"easttowest": 0,
"track_id": 11,
"westtoeast": 0,
Page 34
Aticara AppStorm API Reference
"file_path": "aticarapcaps/Uber",
"err_pkts": 0,
"latency": 0,
"rx_bytes_op": 0,
"file_index": 148,
"tx_bytes": 0,
"retries": 0,
"tx_pkts_op": 0,
"file_title": "Uber",
"rx_bytes": 0,
"pcap_id": 0,
"tx_pkts": 0
}
]
Example Response:
testId
200 - OK
2
[
{
"Number_of_Hosts": 254,
"IP_Address_incrementing_Factor": 1,
"Start_IP_Address": "10.0.0.2",
"IP_Address_Type": 1,
"Mac_Address_incrementing_Factor": 0,
"Mac_Address_Type": 1,
"Start_Mac_Address": "00:0c:29:fc:48:02"
}
]
Page 35
Aticara AppStorm API Reference
29. DEL removeportfromtestbed
THis API is to delete the stream from a particular testbed.
d=2
curl --location --request DELETE
PARAMS "https://accessip:port/removeportfromtestbed/?portId=2&testId=4"
portId
Example Response:
1 200 - OK
{
testId "Message": "Successfully Removed port from testbed"
2 }
=AppStorm
testName
ByteStorm
BODY formdata
Page 36
Aticara AppStorm API Reference
31. DEL Releaseport
This API is to release the reserved ports.
https://accessip:port/releaseport/?portId=1 releaseport_200
curl --location --request DELETE
"https://accessip:port/releaseport/?portId=2"
PARAMS:
Example Response:
portId 200 - OK
1 {
"Message": "Released Port Successfully",
"Port Id": "2",
"Port Status": 1
}
_2019_10_25_12_26_38.zip
Example Response:
PARAMS:
200 - OK
{
filename "Message": "Successfully deleted the prf_file!"
}
Report_AppStorm_2019_10_25_12_26_38.zip
CONTACT US:
demo@aticara.com
sales@aticara.com
www.aticara.com
©2019 Aticara Technologies & systems Pvt Ltd . All rights reserved. Aticara reserves the right to make design changes without notice. As we are
always seeking to improve our products, the information in this document gives only a general indication of the product capacity, performance and
suitability, none of which shall form part of any contract. All trademarks are acknowledged.
Page 37
Aticara AppStorm API Reference
Page 38