mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-21 18:06:46 +00:00
storage: improve stats, make them accessible via webport /statistics
This commit is contained in:
parent
6b7ff02e36
commit
1ce3b77dde
@ -209,6 +209,7 @@ class BucketWriter(Referenceable):
|
|||||||
return
|
return
|
||||||
self._sharefile.write_share_data(offset, data)
|
self._sharefile.write_share_data(offset, data)
|
||||||
self.ss.add_latency("write", time.time() - start)
|
self.ss.add_latency("write", time.time() - start)
|
||||||
|
self.ss.count("write")
|
||||||
|
|
||||||
def remote_close(self):
|
def remote_close(self):
|
||||||
precondition(not self.closed)
|
precondition(not self.closed)
|
||||||
@ -229,6 +230,7 @@ class BucketWriter(Referenceable):
|
|||||||
filelen = os.stat(self.finalhome)[stat.ST_SIZE]
|
filelen = os.stat(self.finalhome)[stat.ST_SIZE]
|
||||||
self.ss.bucket_writer_closed(self, filelen)
|
self.ss.bucket_writer_closed(self, filelen)
|
||||||
self.ss.add_latency("close", time.time() - start)
|
self.ss.add_latency("close", time.time() - start)
|
||||||
|
self.ss.count("close")
|
||||||
|
|
||||||
def _disconnected(self):
|
def _disconnected(self):
|
||||||
if not self.closed:
|
if not self.closed:
|
||||||
@ -240,6 +242,7 @@ class BucketWriter(Referenceable):
|
|||||||
if not self.closed:
|
if not self.closed:
|
||||||
self._canary.dontNotifyOnDisconnect(self._disconnect_marker)
|
self._canary.dontNotifyOnDisconnect(self._disconnect_marker)
|
||||||
self._abort()
|
self._abort()
|
||||||
|
self.ss.count("abort")
|
||||||
|
|
||||||
def _abort(self):
|
def _abort(self):
|
||||||
if self.closed:
|
if self.closed:
|
||||||
@ -264,6 +267,7 @@ class BucketReader(Referenceable):
|
|||||||
start = time.time()
|
start = time.time()
|
||||||
data = self._share_file.read_share_data(offset, length)
|
data = self._share_file.read_share_data(offset, length)
|
||||||
self.ss.add_latency("read", time.time() - start)
|
self.ss.add_latency("read", time.time() - start)
|
||||||
|
self.ss.count("read")
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
@ -723,6 +727,10 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
"readv": [],
|
"readv": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def count(self, name, delta=1):
|
||||||
|
if self.stats_provider:
|
||||||
|
self.stats_provider.count("storage_server." + name, delta)
|
||||||
|
|
||||||
def add_latency(self, category, latency):
|
def add_latency(self, category, latency):
|
||||||
a = self.latencies[category]
|
a = self.latencies[category]
|
||||||
a.append(latency)
|
a.append(latency)
|
||||||
@ -778,6 +786,7 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
stats = { 'storage_server.allocated': self.allocated_size(), }
|
stats = { 'storage_server.allocated': self.allocated_size(), }
|
||||||
if self.consumed is not None:
|
if self.consumed is not None:
|
||||||
stats['storage_server.consumed'] = self.consumed
|
stats['storage_server.consumed'] = self.consumed
|
||||||
|
stats['storage_server.latencies'] = self.get_latencies()
|
||||||
return stats
|
return stats
|
||||||
|
|
||||||
def allocated_size(self):
|
def allocated_size(self):
|
||||||
@ -797,6 +806,7 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
# curried into the PersonalStorageServer instance that is dedicated
|
# curried into the PersonalStorageServer instance that is dedicated
|
||||||
# to a particular owner.
|
# to a particular owner.
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
self.count("allocate")
|
||||||
alreadygot = set()
|
alreadygot = set()
|
||||||
bucketwriters = {} # k: shnum, v: BucketWriter
|
bucketwriters = {} # k: shnum, v: BucketWriter
|
||||||
si_dir = storage_index_to_dir(storage_index)
|
si_dir = storage_index_to_dir(storage_index)
|
||||||
@ -865,6 +875,7 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
|
|
||||||
def remote_renew_lease(self, storage_index, renew_secret):
|
def remote_renew_lease(self, storage_index, renew_secret):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
self.count("renew")
|
||||||
new_expire_time = time.time() + 31*24*60*60
|
new_expire_time = time.time() + 31*24*60*60
|
||||||
found_buckets = False
|
found_buckets = False
|
||||||
for shnum, filename in self._get_bucket_shares(storage_index):
|
for shnum, filename in self._get_bucket_shares(storage_index):
|
||||||
@ -888,6 +899,7 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
|
|
||||||
def remote_cancel_lease(self, storage_index, cancel_secret):
|
def remote_cancel_lease(self, storage_index, cancel_secret):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
self.count("cancel")
|
||||||
storagedir = os.path.join(self.sharedir, storage_index_to_dir(storage_index))
|
storagedir = os.path.join(self.sharedir, storage_index_to_dir(storage_index))
|
||||||
|
|
||||||
remaining_files = 0
|
remaining_files = 0
|
||||||
@ -965,6 +977,7 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
|
|
||||||
def remote_get_buckets(self, storage_index):
|
def remote_get_buckets(self, storage_index):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
self.count("get")
|
||||||
si_s = si_b2a(storage_index)
|
si_s = si_b2a(storage_index)
|
||||||
log.msg("storage: get_buckets %s" % si_s)
|
log.msg("storage: get_buckets %s" % si_s)
|
||||||
bucketreaders = {} # k: sharenum, v: BucketReader
|
bucketreaders = {} # k: sharenum, v: BucketReader
|
||||||
@ -995,6 +1008,7 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
test_and_write_vectors,
|
test_and_write_vectors,
|
||||||
read_vector):
|
read_vector):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
self.count("writev")
|
||||||
si_s = si_b2a(storage_index)
|
si_s = si_b2a(storage_index)
|
||||||
lp = log.msg("storage: slot_writev %s" % si_s)
|
lp = log.msg("storage: slot_writev %s" % si_s)
|
||||||
si_dir = storage_index_to_dir(storage_index)
|
si_dir = storage_index_to_dir(storage_index)
|
||||||
@ -1076,6 +1090,7 @@ class StorageServer(service.MultiService, Referenceable):
|
|||||||
|
|
||||||
def remote_slot_readv(self, storage_index, shares, readv):
|
def remote_slot_readv(self, storage_index, shares, readv):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
self.count("readv")
|
||||||
si_s = si_b2a(storage_index)
|
si_s = si_b2a(storage_index)
|
||||||
lp = log.msg("storage: slot_readv %s %s" % (si_s, shares),
|
lp = log.msg("storage: slot_readv %s %s" % (si_s, shares),
|
||||||
facility="tahoe.storage", level=log.OPERATIONAL)
|
facility="tahoe.storage", level=log.OPERATIONAL)
|
||||||
|
@ -31,6 +31,8 @@ class Bucket(unittest.TestCase):
|
|||||||
pass
|
pass
|
||||||
def add_latency(self, category, latency):
|
def add_latency(self, category, latency):
|
||||||
pass
|
pass
|
||||||
|
def count(self, name, delta=1):
|
||||||
|
pass
|
||||||
|
|
||||||
def make_lease(self):
|
def make_lease(self):
|
||||||
owner_num = 0
|
owner_num = 0
|
||||||
@ -96,6 +98,8 @@ class BucketProxy(unittest.TestCase):
|
|||||||
pass
|
pass
|
||||||
def add_latency(self, category, latency):
|
def add_latency(self, category, latency):
|
||||||
pass
|
pass
|
||||||
|
def count(self, name, delta=1):
|
||||||
|
pass
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
bw, rb, sharefname = self.make_bucket("test_create", 500)
|
bw, rb, sharefname = self.make_bucket("test_create", 500)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user