Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7437706
stats.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
stats.py
View Options
# Copyright (C) 2022 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
import
logging
import
os
import
time
logger
=
logging
.
getLogger
(
__name__
)
class
Stats
:
def
__init__
(
self
,
d
):
if
d
is
None
:
self
.
_stats_active
=
False
return
self
.
_stats_active
=
True
if
not
os
.
path
.
exists
(
d
):
os
.
makedirs
(
d
)
self
.
_stats_filename
=
f
"{d}/{os.getpid()}.csv"
self
.
_stats_fd
=
open
(
self
.
stats_filename
,
"w"
)
self
.
_stats_fd
.
write
(
# time in seconds since epoch
"time,"
# total number of objects written at this point in time
"object_write_count,"
# total number of bytes written at this point in time
"bytes_write,"
# total number of objects read at this point in time
"object_read_count,"
# total number of bytes read at this point in time
"bytes_read"
"
\n
"
)
self
.
_stats_fd
.
flush
()
self
.
_stats_last_write
=
time
.
monotonic
()
self
.
_stats_flush_interval
=
5
self
.
_stats
=
{
"object_write_count"
:
0
,
"bytes_write"
:
0
,
"object_read_count"
:
0
,
"bytes_read"
:
0
,
}
@property
def
stats_active
(
self
):
return
self
.
_stats_active
@property
def
stats_filename
(
self
):
return
self
.
_stats_filename
def
__del__
(
self
):
if
self
.
stats_active
and
not
self
.
_stats_fd
.
closed
:
self
.
_stats_print
()
self
.
_stats_fd
.
close
()
def
_stats_print
(
self
):
ll
=
","
.
join
(
str
(
self
.
_stats
[
x
])
for
x
in
[
"object_write_count"
,
"bytes_write"
,
"object_read_count"
,
"bytes_read"
,
]
)
self
.
_stats_fd
.
write
(
f
"{int(time.monotonic())},{ll}
\n
"
)
self
.
_stats_fd
.
flush
()
def
_stats_maybe_print
(
self
):
now
=
time
.
monotonic
()
if
now
-
self
.
_stats_last_write
>
self
.
_stats_flush_interval
:
self
.
_stats_print
()
self
.
_stats_last_write
=
now
def
stats_read
(
self
,
key
,
content
):
self
.
_stats
[
"object_read_count"
]
+=
1
self
.
_stats
[
"bytes_read"
]
+=
len
(
key
)
+
len
(
content
)
self
.
_stats_maybe_print
()
def
stats_write
(
self
,
key
,
content
):
self
.
_stats
[
"object_write_count"
]
+=
1
self
.
_stats
[
"bytes_write"
]
+=
len
(
key
)
+
len
(
content
)
self
.
_stats_maybe_print
()
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Tue, Apr 15, 2:21 AM (7 h, 13 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3242237
Attached To
rDOBJS Object storage
Event Timeline
Log In to Comment