Skip to content

Instantly share code, notes, and snippets.

@fschulze
Last active July 31, 2018 06:45
Show Gist options
  • Save fschulze/ccc54548a7e730be5e5cd4dac23d8324 to your computer and use it in GitHub Desktop.
Save fschulze/ccc54548a7e730be5e5cd4dac23d8324 to your computer and use it in GitHub Desktop.
from devpi_server.main import get_pluginmanager
from devpi_server.main import _main
import sys
def main():
pm = get_pluginmanager()
pm.register(Plugin())
_main(pm, sys.argv)
class Plugin:
def devpiserver_cmdline_run(self, xom):
from devpi_server.fileutil import dumps, loads
from pprint import pprint
keyfs = xom.keyfs
devpi_serial = keyfs.get_current_serial()
state = {}
for keyname in keyfs._keys:
state[keyname] = {}
raw_size = 0
deleted = 0
for serial in range(devpi_serial + 1):
raw_entry = keyfs.tx.conn.get_raw_changelog_entry(serial)
raw_size += len(raw_entry)
(changes, rel_renames) = loads(raw_entry)
for key, (keyname, backserial, value) in changes.items():
if value is None:
deleted += 1
del state[keyname][key]
else:
state[keyname][key] = value
raw_state = dumps(state)
print("Serials : %16d" % serial)
print("Raw size: %16d" % raw_size)
print("New size: %16d (%.2f%%) with %s keys (%s deleted)" % (
len(raw_state),
100.0 / raw_size * len(raw_state),
len(state),
deleted))
infos = dict((k, len(state[k])) for k in state)
pprint(infos)
return 0
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment