# ================================================================================== # 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. # ================================================================================== from influxdb import DataFrameClient import pandas as pd class Error(Exception): """Base class for other exceptions""" pass class NoDataError(Error): """Raised when there is no data available in database for a given measurment""" pass class DATABASE(object): r""" DATABASE takes an input as database name. It creates a client connection to influxDB and It reads/ writes UE data for a given dabtabase and a measurement. Parameters ---------- host: str (default='r4-influxdb.ricplt.svc.cluster.local') hostname to connect to InfluxDB port: int (default='8086') port to connect to InfluxDB username: str (default='root') user to connect password: str (default='root') password of the use Attributes ---------- client: influxDB client DataFrameClient api to connect influxDB data: DataFrame fetched data from database """ def __init__(self, dbname, user='root', password='root', host="r4-influxdb.ricplt", port='8086'): self.data = None self.client = DataFrameClient(host, port, user, password, dbname) def read_data(self, meas, limit=100000): """Read data method for a given measurement and limit Parameters ---------- meas: str (default='ueMeasReport') limit:int (defualt=100000) """ result = self.client.query('select * from ' + meas + ' limit ' + str(limit)) print("Querying data : " + meas + " : size - " + str(len(result[meas]))) try: if len(result[meas]) != 0: self.data = result[meas] self.data['measTimeStampRf'] = self.data.index else: raise NoDataError except NoDataError: print('Data not found for ' + meas + ' vnf') def write_anomaly(self, df, meas='AD'): """Write data method for a given measurement Parameters ---------- meas: str (default='AD') """ self.client.write_points(df, meas) class DUMMY: def __init__(self): self.ue = pd.read_csv('ad/valid.csv') self.data = None def read_data(self, meas='ueMeasReport', limit=100000): if meas == 'valid': self.data = self.ue.head(limit) else: self.data = self.ue.head(limit).drop('Anomaly', axis=1) def write_anomaly(self, df, meas_name='QP'): pass