TNSM_Latency_Prediction / code / control / test_scripts / stats_predict.py
stats_predict.py
Raw
import statistics
import sys
import os
from glob import glob

#ALLDIR="/home/ederi2t/Tofino_P4rformance/UDPServer/Golang/results/test4_95G"
#DIR = "/home/ederi2t/Tofino_P4rformance/UDPServer/Golang/results/test4_95G/20Bytes_new"

writeALL=True
writeAvgs=True


def process_stats(main_dir, dir):
    # All
    resultAcc = [y for x in os.walk(dir) for y in glob(os.path.join(x[0], 'ingress_latency.txt'))]
    resultConv = [y for x in os.walk(dir) for y in glob(os.path.join(x[0], '*conv_ingress_latency.txt'))]

    meanResults = {}
    for file in resultAcc:
        n = file.split("/")[2]

        #print(name)
        #print(file_name)
        #print(packet_size)
        #print(byte_extract)
        #print(header_amount)

        lines = []
        with open(file, 'r') as reader:
            lines = reader.readlines()

        if not lines:
            continue

        accumulator = 0
        samples = 0   
        for line in lines[1:]:
            ingress_latency = line.split(",")[0]
            count = line.split(",")[1]
            accumulator += (int(ingress_latency) * int(count))
            samples += int(count)    
        
        mean = format(accumulator / samples, ".3f")

        print(n+" : "+str(mean))
        
    for name, values in meanResults.items():
        with open(main_dir+"/all.txt", 'a') as all_data:
            with open(dir+"/"+name+"_averages.txt", 'a') as the_file:

                speed=name.split("_")[0][:-1]
                port_config=0
                if speed == "95":
                    port_config = "100"
                elif speed == "9.5":
                    port_config = "10"

                packet_size =  int(name.split("_")[3].split("B")[0])-4
                byte_extract = name.split("-")[-1].split("x")[0][:-1]
                
                print(name+" :")
                print("  "+name.split("_")[3].split("y")[0]+" :")
                for index, latency in enumerate(values["means"]):
                    if latency == 0:
                        continue
                    
                    case = ""
                    if index == 0:
                        case = "ET"
                    else:
                        case = str(index)+"H"
                    print("        ^ %s: %s" % (case, latency,))


        #print("%s -> Mean: %f , Media: %f" % (name, statistics.mean(latencies), statistics.median(latencies),))
        #print("Mean: ", statistics.mean(latencies))
        #print("Median: ", statistics.median(latencies))
        #print("Median Low: ", statistics.median_low(latencies))
        #print("Median High: ", statistics.median_high(latencies))
        #print("Multimode: ", statistics.multimode(latencies))
        #print("Std. Deviation: ", statistics.stdev(latencies))
        #print("Variance: ", statistics.variance(latencies))


        """print("  "+name.split("_")[3].split("y")[0]+" :")
        for index, latency in enumerate(values["mean_lib"]):
            case = ""
            if index == 0:
                case = "ET"
            else:
                case = str(index)+"H"
            print("        ^ %s: %s" % (case, latency,))"""

if __name__ == "__main__":
    main_dir = sys.argv[1]
    for dir in os.scandir(main_dir):
        if not dir.is_dir():
            continue
        p=dir.path
        
        process_stats(main_dir, dir.path)