import pickle
import json
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

def main():

    table = {}
    with open("duration300.txt",'r') as f:
        pos = f.tell()
        while True:
            line = f.readline()
            new_pos = f.tell()
            if pos ==new_pos:
                break
            else:
                pos = new_pos
                lines = line.strip().split(' ')
                time = float(lines[0])
                id_ = lines[1]
                action = lines[2]

                try :
                    table[id_]
                except :
                    table[id_] = {}
                if action == "retrieved":
                    try : 
                        table[id_]["retrieved"]
                    except:
                        table[id_]["retrieved"] = []
                    table[id_]["retrieved"].append(time)
                elif action == "failed":
                    try : 
                        table[id_]["failed"]
                    except:
                        table[id_]["failed"] = []
                    table[id_]["failed"].append(time)
                else:
                    table[id_][action]=time
                if action == "stored":
                    table[id_]["key"] = lines[3]
    # failed/retrieved
    failed = []
    for key in table.keys():
        try :
            f = len(table[key]["failed"])
            r = len(table[key]["retrieved"])
            t = f/(f+r) * 100 
            t = t//1
            failed.append(t)
        except:
            continue

  
    plt.hist(failed,bins=100,range=(0,100))
    # plt.plot(x,y)
    plt.xlabel("percent %")
    plt.ylabel("num")
    plt.title("Failed rate")
    plt.savefig("png/failed_rate.png",dpi=300)
    plt.close()
    
    
    # avg failed
    failed = []
    for key in table.keys():
        try :
            num = len(table[key]["failed"])
            t = table[key]["failed"][-1]//60 - table[key]["stored"]//60
            failed.append(t/num)
        except:
            continue

  
    plt.hist(failed,bins=100,range=(0,400))
    # plt.plot(x,y)
    plt.xlabel("minute")
    plt.ylabel("num")
    plt.title("Average failed time")
    plt.savefig("png/avg_failed.png",dpi=300)
    plt.close()

    # live time
    failed = []

    for key in table.keys():
        try :
            t = table[key]["retrieved"][-1]//60 - table[key]["retrieved"][0]//60
            failed.append(t)
        except:
            continue

    plt.hist(failed,bins=100,range=(0,1600))
    plt.xlabel("minute")
    plt.ylabel("num")
    plt.title("Live time")
    plt.savefig("png/live_time.png",dpi=300)
    plt.close()

    # First retrieved time
    retrieved = []
    count = 0
    for key in table.keys():
        try :
            t = table[key]["retrieved"][0]//60 - table[key]["stored"]//60
            retrieved.append(t)
        except:
            continue

    plt.hist(retrieved,bins=100,range=(0,70))
    plt.xlabel("minute")
    plt.ylabel("num")
    plt.title("First retrieved time")
    plt.savefig("png/retrieved_time.png",dpi=300)
    plt.close()


    # stored time
    retrieved = []
    count = 0
    for key in table.keys():
        try :
            t = table[key]["stored"]//60 - table[key]["start"]//60
            retrieved.append(t)
        except:
            continue


    plt.hist(retrieved,bins=100,range=(0,250))
    plt.xlabel("minute")
    plt.ylabel("num")
    plt.title("Stored time")
    plt.savefig("png/stored_time.png",dpi=300)
    plt.close()



if __name__ == "__main__":
    main()