#
# The life of a url in the cache is as follows;
#
#  |------|-------|-------|-------|-------|-------|
#modify serve   fetch   verify  access  expire  release
#                             |---------------------|------|-------
#                           modify                serve  fetch
#
#  |------| age
#  |--------------------------------------| life
#                 |---------------| used
#                 |-------------------------------| held
#                             |---| stale
#
# modify = time of creation at server
# serve  = first time sent from server
# fetch  = time loaded to cache
# verify = last time verified at server
# access = last time accessed from cache
# expire = time of expire at server
# release = time released from cache
#
# url_fetches  = number of fetches on the url           (objects/url)
# obj_accesses = number of accesses on the object       (accesses/object)
# obj_verifies = number of verifys on the object        (verifies/object)
# obj_age      = total age of object when served
# obj_life     = expected life of object when served
# obj_used     = time from first to last access
# obj_held     = time from fetch to release
# obj_stale    = time from modify to last access before updating object
# dur_fetch    = duration of fetch    (cache miss)
# dur_verify   = duration of verify   (cache verify)
# dur_access   = duration of access   (cache hit)
# vol_fetch    = volume of fetches    (cache miss)
# vol_verify   = volume of verifies   (cache verify)
# vol_access   = volume of accesses   (cache hit)
#
# Note:
#	need modify and expire to calc life.
#	need modify and serve to calc age.
#       can approximate serve as fetch (- duration?)
from Stats1 import *
from sys import *
from String import *

url_fetches  =Sample()
obj_accesses =Sample()
obj_verifies =Sample()
obj_age      =Sample()
obj_life     =Sample()
obj_used     =Sample()
obj_held     =Sample()
obj_stale    =Sample()
dur_fetch    =Sample()
dur_verify   =Sample()
dur_access   =Sample()
vol_fetch    =Sample()
vol_verify   =Sample()
vol_access   =Sample()
urls	     ={}

def fetch(url,time,dur,size):
        try:
                urls[url].fetch(time,dur,size)
        except:
                urls[url]=url_rec();
                urls[url].fetch(time,dur,size)
        dur_fetch.Add(dur)
        vol_fetch.Add(size)

def verify(url,time,dur,size):
        try:
                urls[url].verify(time,dur,size)
        except:
                urls[url]=url_rec();
                urls[url].verify(time,dur,size)
        dur_verify.Add(dur)
        vol_verify.Add(size)

def access(url,time,dur,size):
        try:
                urls[url].access(time,dur,size)
        except:
                urls[url]=url_rec();
                urls[url].access(time,dur,size)
        dur_access.Add(dur)
        vol_access.Add(size)

def release(url,time,served,modified,expires,size):
        try:
                urls[url].release(time,served,modified,expires,size)
        except:
                urls[url]=url_rec();
                urls[url].release(time,served,modified,expires,size)

def output():
#	url_fetches.Display ("fetches per url    :")
	obj_accesses.Display("accesses per object:")
	obj_verifies.Display("verifies per object:")
	obj_age.Display     ("object fetched age :")
	obj_life.Display    ("object fetched life:")
	obj_used.Display    ("object used time   :")
	obj_held.Display    ("object held time   :")
	obj_stale.Display   ("object stale time  :")
	dur_fetch.Display   ("fetch request time :")
	dur_verify.Display  ("verify request time:")
	dur_access.Display  ("access request time:")
	vol_fetch.Display   ("fetch request vol  :")
	vol_verify.Display  ("verify request vol :")
	vol_access.Display  ("access request vol :")

class url_rec:
        url_fetches =0
        obj_accesses=0
        obj_verifies=0
	obj_modify  =-2.0
        obj_serve   =-2.0
        obj_fetch   =-2.0
        obj_verify  =-2.0
        obj_access  =-2.0
        obj_expire  =-2.0
        obj_release =-2.0
        obj_last    =-2.0
        def fetch(self,time,dur,size):
#                print time,dur,size
                self.obj_last=self.obj_access
                self.url_fetches=self.url_fetches+1
	        self.obj_accesses=1
        	self.obj_verifies=0
		self.obj_modify  =-2.0
                self.obj_serve   =time-dur
                self.obj_fetch   =time
        	self.obj_verify  =time
        	self.obj_access  =time
        	self.obj_expire  =-2.0
	        self.obj_release =-2.0
        def verify(self,time,dur,size):
                self.obj_verifies=self.obj_verifies+1
        	self.obj_verify  =time
        	self.obj_access  =time
        def access(self,time,dur,size):
#                print time,dur,size
                self.obj_accesses=self.obj_accesses+1
        	self.obj_access  =time
        def release(self,time,served,modified,expired,size):
#                print time,served,modified,expired,size
                if served > 0:
                	self.obj_serve=served
		self.obj_modify  = modified
        	self.obj_expire  = expired
	        self.obj_release = time
                if self.obj_fetch > 0:
	                obj_accesses.Add(self.obj_accesses)
        	        obj_verifies.Add(self.obj_verifies)
                if self.obj_modify > 0:
                	obj_age.Add(self.obj_serve - self.obj_modify)
                	if self.obj_expire > 0:
                        	obj_life.Add(self.obj_expire - self.obj_modify)
                if self.obj_fetch > 0:
                	obj_used.Add(self.obj_access - self.obj_fetch)
	                obj_held.Add(self.obj_release - self.obj_fetch)
                if self.obj_last > 0 and self.obj_modify > 0:
	                obj_stale.Add(self.obj_last - self.obj_modify)
        def display(self,comment):
                print comment,
                print self.url_fetches ,
                print self.obj_accesses,
                print self.obj_verifies,
                print self.obj_modify  ,
                print self.obj_serve   ,
                print self.obj_fetch   ,
                print self.obj_verify  ,
                print self.obj_access  ,
                print self.obj_expire  ,
                print self.obj_release ,
                print self.obj_last

line=stdin.readline()
while line:
        fields=split(line)
        if fields[1]=="RELEASE":
                release(fields[9],atof(fields[0]),atof(fields[3]),atof(fields[4]),atof(fields[5]),0.0)
        elif fields[1]!="SWAPIN" and fields[1]!="SWAPOUT":
                if fields[3]=="TCP_MISS/200":
	                fetch(fields[6],atof(fields[0]),atof(fields[1]),atof(fields[4]))
                else:
                        access(fields[6],atof(fields[0]),atof(fields[1]),atof(fields[4]))
        line=stdin.readline()
#for v in urls.keys():
#        print v,
#        urls[v].display()
output()
