diff --git a/Sanjana/assignment.py b/Sanjana/assignment.py new file mode 100644 index 0000000..0e90221 --- /dev/null +++ b/Sanjana/assignment.py @@ -0,0 +1,118 @@ + +import json + +class vSensCalculator: + def __init__(self,filename,time,acc_rate,temp_rate,battery_rate): + self.List = [] + self.count=0 + self.accelerometer_sensor=0 + self.temperature_sensor=0 + self.battery=0 + self.total_disconnections=0 + self.time_diff=0 + self.actual_count=0 + self.rate_seconds=0 + self.filename = filename + self.Accelerometer_rate = acc_rate + self.temp_rate=temp_rate + self.battery_rate=battery_rate + self.total_time = time + + def read_file(self): + with open(self.filename) as file: + for l in file: + self.List.append(json.loads(l.strip())) + return self.List + + def total_packets_time(self): + flag = 0 + index=0 + for element in range(len(self.List)): + if(self.List[element]["PID"] =="998" ): + self.total_disconnections += 1 + if(flag != 1): + flag=1 + index=element + elif(self.List[element]["PID"] =="0"): + self.accelerometer_sensor += 1 + elif(self.List[element]["PID"] =="1"): + self.temperature_sensor += 1 + elif(self.List[element]["PID"] =="2"): + self.battery += 1 + else: + if(flag==1): + self.time_diff = self.time_diff + (self.List[element]["TS"]-self.List[index]["TS"]) + flag = 0 + print("acceleromete count=",self.accelerometer_sensor) + print("temperature count=",self.temperature_sensor) + print("battery count=",self.battery) + print("disconnected time in milisec=",self.time_diff) + return self.total_disconnections,self.accelerometer_sensor, self.temperature_sensor,self.battery + self.accelerometer_sensor, self.temperature_sensor,self.battery + + def get_time_seconds(self,disconnect_time): + self.time_seconds = round(disconnect_time / 1000 ,2) + #print("disconnected time in sec =",self.time_seconds) + return self.time_seconds + + def get_connected_time(self,total_time,connected_time_sec): + self.connected_time = round(total_time - connected_time_sec,2) + #print("connected time=",self.connected_time) + return self.connected_time + + + + def calculate_packetloss(self,expected_packet_count,rate,connect_time): + self.actual_count =float(connect_time* rate) + self.packet_loss = round(((self.actual_count - expected_packet_count)/self.actual_count)*100 ,2) + print("packet loss=",self.packet_loss) + return self.packet_loss + + def get_packetloss(self): + self.List=self.read_file() + self.total_disconnections ,self.accelerometer_sensor, self.temperature_sensor,self.battery=self.total_packets_time() + #print(self.total_disconnections,self.accelerometer_sensor, self.temperature_sensor,self.battery) + self.time_seconds=self.get_time_seconds(self.time_diff) + self.connected_time=self.get_connected_time(self.total_time,self.time_seconds) + self.acc_packet_loss=self.calculate_packetloss(self.accelerometer_sensor,self.Accelerometer_rate,self.connected_time) + self.temp_packet_loss=self.calculate_packetloss(self.temperature_sensor,self.temp_rate,self.connected_time) + self.battery_packet_loss=self.calculate_packetloss(self.battery,self.battery_rate,self.connected_time) + print("\nTotal disconnections :",round(self.total_disconnections,2),"\nActual Connected time =",self.connected_time,"\nAccelerometer packet loss = ",self.acc_packet_loss,"\nTemperature packet loss = ",self.temp_packet_loss,"\nBattery packet loss = ",self.battery_packet_loss) + +def input_testing(total_time,Accelerometer_rate,temp_rate,batterydata_rate): + if(total_time <= 0 ): + raise ValueError("Total time must be graeter than zero!!!!") + if(Accelerometer_rate <= 0): + Exception('lets see if this works') + if(temp_rate <= 0 ): + raise ValueError("temperature packet rate cannot be negative or zero") + if(batterydata_rate <=0): + raise ValueError("battery packet rate cannot be negative or zero") + + + + + + + +total_disconnections=0 +connected_time=0 +acc_packet_loss=0 +temp_packet_loss=0 +battery_packet_loss=0 + +filename = input("enter log file path : ") +total_time = int(input("Enter the total time :")) + + +Accelerometer_rate = int(input("Enter rate at which accelerometr sends data per second : ")) +temp_rate = float(input("temperature data packet rate per minute : ")) +batterydata_rate = float(input("Battery data packet rate per minute : ")) + +input_testing(total_time,Accelerometer_rate,temp_rate,batterydata_rate) +temp_rate = temp_rate / 60 +batterydata_rate = batterydata_rate/60 + +vSens = vSensCalculator(filename,total_time,Accelerometer_rate,temp_rate,batterydata_rate) +vSens.get_packetloss() + diff --git a/Sanjana/test_assignment.py b/Sanjana/test_assignment.py new file mode 100644 index 0000000..4ee920b --- /dev/null +++ b/Sanjana/test_assignment.py @@ -0,0 +1,52 @@ +import assignment +import unittest + + + +class UnitT(unittest.TestCase): + + def setUp(self): + self.obj = assignment.vSensCalculator("data1.txt",58156,5,1,1) + self.test_read_file() + + + def test_read_file(self): + self.assertNotEqual(len(self.obj.read_file()),0) + + def test_get_time_seconds(self): + ans=self.obj.get_time_seconds(1000) + self.assertEqual(ans,1) + ans=self.obj.get_time_seconds(10000) + self.assertEqual(ans,10) + + def test_get_connected_time(self): + ans=self.obj.get_connected_time(1000,100) + self.assertEqual(ans,900) + + def test_calculate_packetloss(self): + x=1/60 + ans=self.obj.calculate_packetloss(882,x,52906.87) + self.assertEqual(ans,-0.02) + + def test_calculate_packetloss(self): + ans=self.obj.calculate_packetloss(260030,5,52906.87) + self.assertEqual(ans,1.7) + + def test_calculate_packetloss(self): + x=1/60 + ans=self.obj.calculate_packetloss(883,x,52906.87) + self.assertEqual(ans,-0.14) + + def test_total_packets_time(self): + disconnections,acc_count,temp_count,battery_count=self.obj.total_packets_time() + print(disconnections,acc_count,temp_count,battery_count) + self.assertEqual(disconnections,16) + self.assertEqual(temp_count,882) + self.assertEqual(battery_count,883) + self.assertEqual(acc_count,260030) + + def test_input(self): + with self.assertRaises(Exception): assignment.input_testing(58156,0,1,1) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/Sanjana/vSens Packet Loss calculator.py b/Sanjana/vSens Packet Loss calculator.py new file mode 100644 index 0000000..17692b6 --- /dev/null +++ b/Sanjana/vSens Packet Loss calculator.py @@ -0,0 +1,85 @@ + +import json + +class vSensCalculator: + def __init__(self,filename,time,acc_rate,temp_rate,battery_rate): + self.List = [] + self.count=0 + self.accelerometer_sensor=0 + self.temperature_sensor=0 + self.battery=0 + self.total_disconnections=0 + self.time_diff=0 + self.actual_count=0 + self.filename = filename + self.Accelerometer_rate = acc_rate + self.temp_rate=temp_rate + self.battery_rate=battery_rate + self.total_time = time + + def read_file(self): + with open(self.filename) as file: + for l in file: + self.List.append(json.loads(l.strip())) + + def total_packets_time(self): + flag = 0 + index=0 + for element in range(len(self.List)): + if(self.List[element]["PID"] =="998" ): + self.total_disconnections += 1 + if(flag != 1): + flag=1 + index=element + elif(self.List[element]["PID"] =="0"): + self.accelerometer_sensor += 1 + elif(self.List[element]["PID"] =="1"): + self.temperature_sensor += 1 + elif(self.List[element]["PID"] =="2"): + self.battery += 1 + else: + if(flag==1): + self.time_diff = self.time_diff + (self.List[element]["TS"]-self.List[index]["TS"]) + flag = 0 + + def get_time_seconds(self): + self.time_seconds = self.time_diff / 1000 + + def get_connected_time(self): + print(self.total_time,self.time_seconds) + self.connected_time = self.total_time - self.time_seconds + + def calculate_packetloss(self,expected_packet_count,rate): + self.actual_count = float(self.connected_time * rate) + self.packet_loss = ((self.actual_count - expected_packet_count)/self.actual_count)*100 + return self.packet_loss + + def get_packetloss(self): + self.read_file() + self.total_packets_time() + self.get_time_seconds() + self.get_connected_time() + self.acc_packet_loss=self.calculate_packetloss(self.accelerometer_sensor,self.Accelerometer_rate) + self.temp_packet_loss=self.calculate_packetloss(self.temperature_sensor,self.temp_rate) + self.battery_packet_loss=self.calculate_packetloss(self.battery,self.battery_rate) + print("\nTotal disconnections :",self.total_disconnections,"\nActual Connected time =",self.connected_time,"\nAccelerometer packet loss = ",self.acc_packet_loss,"\nTemperature packet loss = ",self.temp_packet_loss,"\nBattery packet loss = ",self.battery_packet_loss) + + +total_disconnections=0 +connected_time=0 +acc_packet_loss=0 +temp_packet_loss=0 +battery_packet_loss=0 + +filename = input("enter log file path : ") +total_time = int(input("Enter the total time :")) +Accelerometer_rate = int(input("Enter rate at which accelerometr sends data per second : ")) +temp_rate = float(input("temperature data packet rate per minute : ")) +batterydata_rate = float(input("Battery data packet rate per minute : ")) + +temp_rate = temp_rate / 60 +batterydata_rate = batterydata_rate/60 + +vSens = vSensCalculator(filename,total_time,Accelerometer_rate,temp_rate,batterydata_rate) +vSens.get_packetloss() +