# ==================================================================================
#  Copyright (c) 2020 HCL Technologies Limited.
#
#  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.
# ==================================================================================

Usage of all the programs and files have been mentioned below for the reference.
For AD xapp we require UEReport (UE related dataset)

AD xApp expect UE data from influxDB database in following structure:
	* There exists database with name "RIC-Test"
	* Inside "RIC-Test" database we have measurments namely "UEReports"
	
Note: *We need to update ad_config.ini with influxdb configuration. 
Update host as one of the following:
	1. influxdb service ruuning in RIC platform (host = <service name>.<namespace>) 
	   OR IP of influxdb pod
	2. Update user and password for influxDB instance

To polpulate influxdb with static data provided in .csv (ue.csv). 
	1. Run "python3 insert.py"
	2. Wait for few minutes before deploying AD xApp
	Note: This will be depreciated in next release when there will be data coming from KPIMON
	

AD xApp performs following:

* Initiates xapp api, make connection with influxDB and runs the entry() using xapp.run()
* If Model is not present in the current path, 
   a) Read history data from InfluxDB
   b) apply pre-processing steps
   c) trigger Training of ML model.
   d) after model validation, save transformation, model artifacts
* Detect anomalous user in real-time. 
   a) Read live data from influxDB every 0.5 second
   b) Detect anomalous records on given input
   c) Investigate degradation type for anomalous users
* send the ue-id, DU-ID, Degradation type and timestamp for the anomalous records to the Traffic Steering (via rmr with the message type as 30003)
* Get the acknowledgement message from the traffic steering 
* store xApp result in "AD" measurement of influxDB

Note: Need to implement the logic if we do not get the acknowledgment from the TS. (How xapp api handle this?)
