From eb94780cd46d1bf46ba0a0f365156dad4b27763c Mon Sep 17 00:00:00 2001 From: Alan Etkin Date: Sat, 28 Dec 2013 07:53:29 -0300 Subject: [PATCH] Adapted admin cache action for gae --- applications/admin/controllers/appadmin.py | 192 ++++++++++-------- applications/admin/languages/es.py | 13 ++ applications/admin/views/appadmin.html | 12 +- applications/examples/controllers/appadmin.py | 192 ++++++++++-------- applications/examples/views/appadmin.html | 12 +- applications/welcome/controllers/appadmin.py | 192 ++++++++++-------- applications/welcome/languages/es.py | 4 +- applications/welcome/views/appadmin.html | 12 +- 8 files changed, 358 insertions(+), 271 deletions(-) diff --git a/applications/admin/controllers/appadmin.py b/applications/admin/controllers/appadmin.py index 44efa2d5..a74f0569 100644 --- a/applications/admin/controllers/appadmin.py +++ b/applications/admin/controllers/appadmin.py @@ -16,6 +16,8 @@ try: except ImportError: pgv = None +is_gae = request.env.web2py_runtime_gae or False + # ## critical --- make a copy of the environment global_env = copy.copy(globals()) @@ -359,36 +361,43 @@ def state(): def ccache(): - cache.ram.initialize() - cache.disk.initialize() + if is_gae: + form = FORM( + P(TAG.BUTTON(T("Clear CACHE?"), _type="submit", _name="yes", _value="yes"))) + else: + cache.ram.initialize() + cache.disk.initialize() - form = FORM( - P(TAG.BUTTON( - T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")), - P(TAG.BUTTON( - T("Clear RAM"), _type="submit", _name="ram", _value="ram")), - P(TAG.BUTTON( - T("Clear DISK"), _type="submit", _name="disk", _value="disk")), - ) + form = FORM( + P(TAG.BUTTON( + T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")), + P(TAG.BUTTON( + T("Clear RAM"), _type="submit", _name="ram", _value="ram")), + P(TAG.BUTTON( + T("Clear DISK"), _type="submit", _name="disk", _value="disk")), + ) if form.accepts(request.vars, session): - clear_ram = False - clear_disk = False session.flash = "" - if request.vars.yes: - clear_ram = clear_disk = True - if request.vars.ram: - clear_ram = True - if request.vars.disk: - clear_disk = True - - if clear_ram: - cache.ram.clear() - session.flash += T("Ram Cleared") - if clear_disk: - cache.disk.clear() - session.flash += T("Disk Cleared") - + if is_gae: + if request.vars.yes: + cache.ram.clear() + session.flash += T("Cache Cleared") + else: + clear_ram = False + clear_disk = False + if request.vars.yes: + clear_ram = clear_disk = True + if request.vars.ram: + clear_ram = True + if request.vars.disk: + clear_disk = True + if clear_ram: + cache.ram.clear() + session.flash += T("Ram Cleared") + if clear_disk: + cache.disk.clear() + session.flash += T("Disk Cleared") redirect(URL(r=request)) try: @@ -414,6 +423,7 @@ def ccache(): 'oldest': time.time(), 'keys': [] } + disk = copy.copy(ram) total = copy.copy(ram) disk['keys'] = [] @@ -428,72 +438,81 @@ def ccache(): return (hours, minutes, seconds) - for key, value in cache.ram.storage.iteritems(): - if isinstance(value, dict): - ram['hits'] = value['hit_total'] - value['misses'] - ram['misses'] = value['misses'] - try: - ram['ratio'] = ram['hits'] * 100 / value['hit_total'] - except (KeyError, ZeroDivisionError): - ram['ratio'] = 0 - else: - if hp: - ram['bytes'] += hp.iso(value[1]).size - ram['objects'] += hp.iso(value[1]).count - ram['entries'] += 1 - if value[0] < ram['oldest']: - ram['oldest'] = value[0] - ram['keys'].append((key, GetInHMS(time.time() - value[0]))) - folder = os.path.join(request.folder,'cache') - if not os.path.exists(folder): - os.mkdir(folder) - locker = open(os.path.join(folder, 'cache.lock'), 'a') - portalocker.lock(locker, portalocker.LOCK_EX) - disk_storage = shelve.open( - os.path.join(folder, 'cache.shelve')) - try: - for key, value in disk_storage.items(): + if is_gae: + gae_stats = cache.ram.client.get_stats() + try: + gae_stats['ratio'] = ((gae_stats['hits'] * 100) / + (gae_stats['hits'] + gae_stats['misses'])) + except ZeroDivisionError: + gae_stats['ratio'] = T("?") + gae_stats['oldest'] = GetInHMS(time.time() - gae_stats['oldest_item_age']) + total.update(gae_stats) + else: + for key, value in cache.ram.storage.iteritems(): if isinstance(value, dict): - disk['hits'] = value['hit_total'] - value['misses'] - disk['misses'] = value['misses'] + ram['hits'] = value['hit_total'] - value['misses'] + ram['misses'] = value['misses'] try: - disk['ratio'] = disk['hits'] * 100 / value['hit_total'] + ram['ratio'] = ram['hits'] * 100 / value['hit_total'] except (KeyError, ZeroDivisionError): - disk['ratio'] = 0 + ram['ratio'] = 0 else: if hp: - disk['bytes'] += hp.iso(value[1]).size - disk['objects'] += hp.iso(value[1]).count - disk['entries'] += 1 - if value[0] < disk['oldest']: - disk['oldest'] = value[0] - disk['keys'].append((key, GetInHMS(time.time() - value[0]))) + ram['bytes'] += hp.iso(value[1]).size + ram['objects'] += hp.iso(value[1]).count + ram['entries'] += 1 + if value[0] < ram['oldest']: + ram['oldest'] = value[0] + ram['keys'].append((key, GetInHMS(time.time() - value[0]))) + folder = os.path.join(request.folder,'cache') + if not os.path.exists(folder): + os.mkdir(folder) + locker = open(os.path.join(folder, 'cache.lock'), 'a') + portalocker.lock(locker, portalocker.LOCK_EX) + disk_storage = shelve.open( + os.path.join(folder, 'cache.shelve')) + try: + for key, value in disk_storage.items(): + if isinstance(value, dict): + disk['hits'] = value['hit_total'] - value['misses'] + disk['misses'] = value['misses'] + try: + disk['ratio'] = disk['hits'] * 100 / value['hit_total'] + except (KeyError, ZeroDivisionError): + disk['ratio'] = 0 + else: + if hp: + disk['bytes'] += hp.iso(value[1]).size + disk['objects'] += hp.iso(value[1]).count + disk['entries'] += 1 + if value[0] < disk['oldest']: + disk['oldest'] = value[0] + disk['keys'].append((key, GetInHMS(time.time() - value[0]))) + finally: + portalocker.unlock(locker) + locker.close() + disk_storage.close() - finally: - portalocker.unlock(locker) - locker.close() - disk_storage.close() - - total['entries'] = ram['entries'] + disk['entries'] - total['bytes'] = ram['bytes'] + disk['bytes'] - total['objects'] = ram['objects'] + disk['objects'] - total['hits'] = ram['hits'] + disk['hits'] - total['misses'] = ram['misses'] + disk['misses'] - total['keys'] = ram['keys'] + disk['keys'] - try: - total['ratio'] = total['hits'] * 100 / (total['hits'] + + total['entries'] = ram['entries'] + disk['entries'] + total['bytes'] = ram['bytes'] + disk['bytes'] + total['objects'] = ram['objects'] + disk['objects'] + total['hits'] = ram['hits'] + disk['hits'] + total['misses'] = ram['misses'] + disk['misses'] + total['keys'] = ram['keys'] + disk['keys'] + try: + total['ratio'] = total['hits'] * 100 / (total['hits'] + total['misses']) - except (KeyError, ZeroDivisionError): - total['ratio'] = 0 + except (KeyError, ZeroDivisionError): + total['ratio'] = 0 - if disk['oldest'] < ram['oldest']: - total['oldest'] = disk['oldest'] - else: - total['oldest'] = ram['oldest'] + if disk['oldest'] < ram['oldest']: + total['oldest'] = disk['oldest'] + else: + total['oldest'] = ram['oldest'] - ram['oldest'] = GetInHMS(time.time() - ram['oldest']) - disk['oldest'] = GetInHMS(time.time() - disk['oldest']) - total['oldest'] = GetInHMS(time.time() - total['oldest']) + ram['oldest'] = GetInHMS(time.time() - ram['oldest']) + disk['oldest'] = GetInHMS(time.time() - disk['oldest']) + total['oldest'] = GetInHMS(time.time() - total['oldest']) def key_table(keys): return TABLE( @@ -502,9 +521,10 @@ def ccache(): **dict(_class='cache-keys', _style="border-collapse: separate; border-spacing: .5em;")) - ram['keys'] = key_table(ram['keys']) - disk['keys'] = key_table(disk['keys']) - total['keys'] = key_table(total['keys']) + if not is_gae: + ram['keys'] = key_table(ram['keys']) + disk['keys'] = key_table(disk['keys']) + total['keys'] = key_table(total['keys']) return dict(form=form, total=total, ram=ram, disk=disk, object_stats=hp != False) diff --git a/applications/admin/languages/es.py b/applications/admin/languages/es.py index d8c4c4ef..61cc8fa0 100644 --- a/applications/admin/languages/es.py +++ b/applications/admin/languages/es.py @@ -12,6 +12,7 @@ '(version %s)': '(version %s)', '@markmin\x01(file **gluon/contrib/plural_rules/%s.py** is not found)': '(file **gluon/contrib/plural_rules/%s.py** is not found)', '@markmin\x01An error occured, please [[reload %s]] the page': 'An error occured, please [[reload %s]] the page', +'@markmin\x01Number of entries: **%s**': 'Number of entries: **%s**', '@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files', 'A new version of web2py is available': 'Hay una nueva versión de web2py disponible', 'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s', @@ -57,11 +58,13 @@ 'Autocomplete': 'Autocomplete', 'Autocomplete Python Code': 'Autocompletar código Python', 'Available databases and tables': 'Bases de datos y tablas disponibles', +'Available Databases and Tables': 'Available Databases and Tables', 'back': 'atrás', 'Back to the plugins list': 'Back to the plugins list', 'breakpoint': 'breakpoint', 'breakpoints': 'breakpoints', 'browse': 'buscar', +'Cache': 'Cache', 'cache': 'cache', 'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados', 'can be a git repo': 'puede ser un repositorio git', @@ -79,6 +82,9 @@ 'Check to delete': 'Marque para eliminar', 'Checking for upgrades...': 'Buscando actulizaciones...', 'Clean': 'limpiar', +'Clear CACHE?': 'Clear CACHE?', +'Clear DISK': 'Clear DISK', +'Clear RAM': 'Clear RAM', 'click here for online examples': 'haga clic aquí para ver ejemplos en línea', 'click here for the administrative interface': 'haga clic aquí para usar la interfaz administrativa', 'Click row to expand traceback': 'Click row to expand traceback', @@ -113,6 +119,7 @@ 'database': 'base de datos', 'database %s select': 'selección en base de datos %s', 'database administration': 'administración base de datos', +'Database Administration (appadmin)': 'Database Administration (appadmin)', 'Date and Time': 'Fecha y Hora', 'db': 'db', 'Debug': 'Debug', @@ -135,6 +142,7 @@ 'details': 'detalles', 'direction: ltr': 'direction: ltr', 'Disable': 'Deshabilitar', +'DISK': 'DISK', 'docs': 'docs', 'Docs': 'Docs', 'Done!': 'Done!', @@ -249,6 +257,7 @@ 'Lost Password': 'Contraseña perdida', 'manage': 'gestionar', 'Manage': 'Gestionar', +'Manage Cache': 'Manage Cache', 'merge': 'combinar', 'Models': 'Modelos', 'models': 'modelos', @@ -282,6 +291,7 @@ 'or provide application url:': 'o provea URL de la aplicación:', 'Origin': 'Origen', 'Original/Translation': 'Original/Traducción', +'Overview': 'Overview', 'Overwrite installed app': 'sobreescriba la aplicación instalada', 'Pack all': 'empaquetar todo', 'Pack compiled': 'empaquete compiladas', @@ -305,6 +315,7 @@ 'private files': 'archivos privados', 'Project Progress': 'Project Progress', 'Query:': 'Consulta:', +'RAM': 'RAM', 'Rapid Search': 'Rapid Search', 'record': 'registro', 'record does not exist': 'el registro no existe', @@ -356,6 +367,7 @@ 'Static': 'Static', 'static': 'estáticos', 'Static files': 'Archivos estáticos', +'Statistics': 'Statistics', 'step': 'step', 'stop': 'stop', 'submit': 'enviar', @@ -397,6 +409,7 @@ 'To emulate a breakpoint programatically, write:': 'To emulate a breakpoint programatically, write:', 'to use the debugger!': 'to use the debugger!', 'toggle breakpoint': 'alternar punto de ruptura', +'Toggle comment': 'Toggle comment', 'Toggle Fullscreen': 'Alternar pantalla completa', 'Traceback': 'Traceback', 'translation strings for the application': 'cadenas de caracteres de traducción para la aplicación', diff --git a/applications/admin/views/appadmin.html b/applications/admin/views/appadmin.html index 054efd49..7db421ee 100644 --- a/applications/admin/views/appadmin.html +++ b/applications/admin/views/appadmin.html @@ -116,13 +116,15 @@ {{elif request.function == 'ccache':}} -

{{T("Cache")}}

-
- +

{{=T("Cache")}}

-

{{T("Statistics")}}

+

{{=T("Statistics")}}

+{{if request.env.web2py_runtime_gae:}} +{{=BEAUTIFY(total)}} +{{else:}} +

{{=T("Overview")}}

{{=T.M("Number of entries: **%s**", total['entries'])}}

@@ -210,6 +212,8 @@ {{pass}}
+{{pass}} +

{{=T("Manage Cache")}}

diff --git a/applications/examples/controllers/appadmin.py b/applications/examples/controllers/appadmin.py index 44efa2d5..a74f0569 100644 --- a/applications/examples/controllers/appadmin.py +++ b/applications/examples/controllers/appadmin.py @@ -16,6 +16,8 @@ try: except ImportError: pgv = None +is_gae = request.env.web2py_runtime_gae or False + # ## critical --- make a copy of the environment global_env = copy.copy(globals()) @@ -359,36 +361,43 @@ def state(): def ccache(): - cache.ram.initialize() - cache.disk.initialize() + if is_gae: + form = FORM( + P(TAG.BUTTON(T("Clear CACHE?"), _type="submit", _name="yes", _value="yes"))) + else: + cache.ram.initialize() + cache.disk.initialize() - form = FORM( - P(TAG.BUTTON( - T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")), - P(TAG.BUTTON( - T("Clear RAM"), _type="submit", _name="ram", _value="ram")), - P(TAG.BUTTON( - T("Clear DISK"), _type="submit", _name="disk", _value="disk")), - ) + form = FORM( + P(TAG.BUTTON( + T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")), + P(TAG.BUTTON( + T("Clear RAM"), _type="submit", _name="ram", _value="ram")), + P(TAG.BUTTON( + T("Clear DISK"), _type="submit", _name="disk", _value="disk")), + ) if form.accepts(request.vars, session): - clear_ram = False - clear_disk = False session.flash = "" - if request.vars.yes: - clear_ram = clear_disk = True - if request.vars.ram: - clear_ram = True - if request.vars.disk: - clear_disk = True - - if clear_ram: - cache.ram.clear() - session.flash += T("Ram Cleared") - if clear_disk: - cache.disk.clear() - session.flash += T("Disk Cleared") - + if is_gae: + if request.vars.yes: + cache.ram.clear() + session.flash += T("Cache Cleared") + else: + clear_ram = False + clear_disk = False + if request.vars.yes: + clear_ram = clear_disk = True + if request.vars.ram: + clear_ram = True + if request.vars.disk: + clear_disk = True + if clear_ram: + cache.ram.clear() + session.flash += T("Ram Cleared") + if clear_disk: + cache.disk.clear() + session.flash += T("Disk Cleared") redirect(URL(r=request)) try: @@ -414,6 +423,7 @@ def ccache(): 'oldest': time.time(), 'keys': [] } + disk = copy.copy(ram) total = copy.copy(ram) disk['keys'] = [] @@ -428,72 +438,81 @@ def ccache(): return (hours, minutes, seconds) - for key, value in cache.ram.storage.iteritems(): - if isinstance(value, dict): - ram['hits'] = value['hit_total'] - value['misses'] - ram['misses'] = value['misses'] - try: - ram['ratio'] = ram['hits'] * 100 / value['hit_total'] - except (KeyError, ZeroDivisionError): - ram['ratio'] = 0 - else: - if hp: - ram['bytes'] += hp.iso(value[1]).size - ram['objects'] += hp.iso(value[1]).count - ram['entries'] += 1 - if value[0] < ram['oldest']: - ram['oldest'] = value[0] - ram['keys'].append((key, GetInHMS(time.time() - value[0]))) - folder = os.path.join(request.folder,'cache') - if not os.path.exists(folder): - os.mkdir(folder) - locker = open(os.path.join(folder, 'cache.lock'), 'a') - portalocker.lock(locker, portalocker.LOCK_EX) - disk_storage = shelve.open( - os.path.join(folder, 'cache.shelve')) - try: - for key, value in disk_storage.items(): + if is_gae: + gae_stats = cache.ram.client.get_stats() + try: + gae_stats['ratio'] = ((gae_stats['hits'] * 100) / + (gae_stats['hits'] + gae_stats['misses'])) + except ZeroDivisionError: + gae_stats['ratio'] = T("?") + gae_stats['oldest'] = GetInHMS(time.time() - gae_stats['oldest_item_age']) + total.update(gae_stats) + else: + for key, value in cache.ram.storage.iteritems(): if isinstance(value, dict): - disk['hits'] = value['hit_total'] - value['misses'] - disk['misses'] = value['misses'] + ram['hits'] = value['hit_total'] - value['misses'] + ram['misses'] = value['misses'] try: - disk['ratio'] = disk['hits'] * 100 / value['hit_total'] + ram['ratio'] = ram['hits'] * 100 / value['hit_total'] except (KeyError, ZeroDivisionError): - disk['ratio'] = 0 + ram['ratio'] = 0 else: if hp: - disk['bytes'] += hp.iso(value[1]).size - disk['objects'] += hp.iso(value[1]).count - disk['entries'] += 1 - if value[0] < disk['oldest']: - disk['oldest'] = value[0] - disk['keys'].append((key, GetInHMS(time.time() - value[0]))) + ram['bytes'] += hp.iso(value[1]).size + ram['objects'] += hp.iso(value[1]).count + ram['entries'] += 1 + if value[0] < ram['oldest']: + ram['oldest'] = value[0] + ram['keys'].append((key, GetInHMS(time.time() - value[0]))) + folder = os.path.join(request.folder,'cache') + if not os.path.exists(folder): + os.mkdir(folder) + locker = open(os.path.join(folder, 'cache.lock'), 'a') + portalocker.lock(locker, portalocker.LOCK_EX) + disk_storage = shelve.open( + os.path.join(folder, 'cache.shelve')) + try: + for key, value in disk_storage.items(): + if isinstance(value, dict): + disk['hits'] = value['hit_total'] - value['misses'] + disk['misses'] = value['misses'] + try: + disk['ratio'] = disk['hits'] * 100 / value['hit_total'] + except (KeyError, ZeroDivisionError): + disk['ratio'] = 0 + else: + if hp: + disk['bytes'] += hp.iso(value[1]).size + disk['objects'] += hp.iso(value[1]).count + disk['entries'] += 1 + if value[0] < disk['oldest']: + disk['oldest'] = value[0] + disk['keys'].append((key, GetInHMS(time.time() - value[0]))) + finally: + portalocker.unlock(locker) + locker.close() + disk_storage.close() - finally: - portalocker.unlock(locker) - locker.close() - disk_storage.close() - - total['entries'] = ram['entries'] + disk['entries'] - total['bytes'] = ram['bytes'] + disk['bytes'] - total['objects'] = ram['objects'] + disk['objects'] - total['hits'] = ram['hits'] + disk['hits'] - total['misses'] = ram['misses'] + disk['misses'] - total['keys'] = ram['keys'] + disk['keys'] - try: - total['ratio'] = total['hits'] * 100 / (total['hits'] + + total['entries'] = ram['entries'] + disk['entries'] + total['bytes'] = ram['bytes'] + disk['bytes'] + total['objects'] = ram['objects'] + disk['objects'] + total['hits'] = ram['hits'] + disk['hits'] + total['misses'] = ram['misses'] + disk['misses'] + total['keys'] = ram['keys'] + disk['keys'] + try: + total['ratio'] = total['hits'] * 100 / (total['hits'] + total['misses']) - except (KeyError, ZeroDivisionError): - total['ratio'] = 0 + except (KeyError, ZeroDivisionError): + total['ratio'] = 0 - if disk['oldest'] < ram['oldest']: - total['oldest'] = disk['oldest'] - else: - total['oldest'] = ram['oldest'] + if disk['oldest'] < ram['oldest']: + total['oldest'] = disk['oldest'] + else: + total['oldest'] = ram['oldest'] - ram['oldest'] = GetInHMS(time.time() - ram['oldest']) - disk['oldest'] = GetInHMS(time.time() - disk['oldest']) - total['oldest'] = GetInHMS(time.time() - total['oldest']) + ram['oldest'] = GetInHMS(time.time() - ram['oldest']) + disk['oldest'] = GetInHMS(time.time() - disk['oldest']) + total['oldest'] = GetInHMS(time.time() - total['oldest']) def key_table(keys): return TABLE( @@ -502,9 +521,10 @@ def ccache(): **dict(_class='cache-keys', _style="border-collapse: separate; border-spacing: .5em;")) - ram['keys'] = key_table(ram['keys']) - disk['keys'] = key_table(disk['keys']) - total['keys'] = key_table(total['keys']) + if not is_gae: + ram['keys'] = key_table(ram['keys']) + disk['keys'] = key_table(disk['keys']) + total['keys'] = key_table(total['keys']) return dict(form=form, total=total, ram=ram, disk=disk, object_stats=hp != False) diff --git a/applications/examples/views/appadmin.html b/applications/examples/views/appadmin.html index 054efd49..7db421ee 100644 --- a/applications/examples/views/appadmin.html +++ b/applications/examples/views/appadmin.html @@ -116,13 +116,15 @@ {{elif request.function == 'ccache':}} -

{{T("Cache")}}

-
- +

{{=T("Cache")}}

-

{{T("Statistics")}}

+

{{=T("Statistics")}}

+{{if request.env.web2py_runtime_gae:}} +{{=BEAUTIFY(total)}} +{{else:}} +

{{=T("Overview")}}

{{=T.M("Number of entries: **%s**", total['entries'])}}

@@ -210,6 +212,8 @@ {{pass}}
+{{pass}} +

{{=T("Manage Cache")}}

diff --git a/applications/welcome/controllers/appadmin.py b/applications/welcome/controllers/appadmin.py index 44efa2d5..a74f0569 100644 --- a/applications/welcome/controllers/appadmin.py +++ b/applications/welcome/controllers/appadmin.py @@ -16,6 +16,8 @@ try: except ImportError: pgv = None +is_gae = request.env.web2py_runtime_gae or False + # ## critical --- make a copy of the environment global_env = copy.copy(globals()) @@ -359,36 +361,43 @@ def state(): def ccache(): - cache.ram.initialize() - cache.disk.initialize() + if is_gae: + form = FORM( + P(TAG.BUTTON(T("Clear CACHE?"), _type="submit", _name="yes", _value="yes"))) + else: + cache.ram.initialize() + cache.disk.initialize() - form = FORM( - P(TAG.BUTTON( - T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")), - P(TAG.BUTTON( - T("Clear RAM"), _type="submit", _name="ram", _value="ram")), - P(TAG.BUTTON( - T("Clear DISK"), _type="submit", _name="disk", _value="disk")), - ) + form = FORM( + P(TAG.BUTTON( + T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")), + P(TAG.BUTTON( + T("Clear RAM"), _type="submit", _name="ram", _value="ram")), + P(TAG.BUTTON( + T("Clear DISK"), _type="submit", _name="disk", _value="disk")), + ) if form.accepts(request.vars, session): - clear_ram = False - clear_disk = False session.flash = "" - if request.vars.yes: - clear_ram = clear_disk = True - if request.vars.ram: - clear_ram = True - if request.vars.disk: - clear_disk = True - - if clear_ram: - cache.ram.clear() - session.flash += T("Ram Cleared") - if clear_disk: - cache.disk.clear() - session.flash += T("Disk Cleared") - + if is_gae: + if request.vars.yes: + cache.ram.clear() + session.flash += T("Cache Cleared") + else: + clear_ram = False + clear_disk = False + if request.vars.yes: + clear_ram = clear_disk = True + if request.vars.ram: + clear_ram = True + if request.vars.disk: + clear_disk = True + if clear_ram: + cache.ram.clear() + session.flash += T("Ram Cleared") + if clear_disk: + cache.disk.clear() + session.flash += T("Disk Cleared") redirect(URL(r=request)) try: @@ -414,6 +423,7 @@ def ccache(): 'oldest': time.time(), 'keys': [] } + disk = copy.copy(ram) total = copy.copy(ram) disk['keys'] = [] @@ -428,72 +438,81 @@ def ccache(): return (hours, minutes, seconds) - for key, value in cache.ram.storage.iteritems(): - if isinstance(value, dict): - ram['hits'] = value['hit_total'] - value['misses'] - ram['misses'] = value['misses'] - try: - ram['ratio'] = ram['hits'] * 100 / value['hit_total'] - except (KeyError, ZeroDivisionError): - ram['ratio'] = 0 - else: - if hp: - ram['bytes'] += hp.iso(value[1]).size - ram['objects'] += hp.iso(value[1]).count - ram['entries'] += 1 - if value[0] < ram['oldest']: - ram['oldest'] = value[0] - ram['keys'].append((key, GetInHMS(time.time() - value[0]))) - folder = os.path.join(request.folder,'cache') - if not os.path.exists(folder): - os.mkdir(folder) - locker = open(os.path.join(folder, 'cache.lock'), 'a') - portalocker.lock(locker, portalocker.LOCK_EX) - disk_storage = shelve.open( - os.path.join(folder, 'cache.shelve')) - try: - for key, value in disk_storage.items(): + if is_gae: + gae_stats = cache.ram.client.get_stats() + try: + gae_stats['ratio'] = ((gae_stats['hits'] * 100) / + (gae_stats['hits'] + gae_stats['misses'])) + except ZeroDivisionError: + gae_stats['ratio'] = T("?") + gae_stats['oldest'] = GetInHMS(time.time() - gae_stats['oldest_item_age']) + total.update(gae_stats) + else: + for key, value in cache.ram.storage.iteritems(): if isinstance(value, dict): - disk['hits'] = value['hit_total'] - value['misses'] - disk['misses'] = value['misses'] + ram['hits'] = value['hit_total'] - value['misses'] + ram['misses'] = value['misses'] try: - disk['ratio'] = disk['hits'] * 100 / value['hit_total'] + ram['ratio'] = ram['hits'] * 100 / value['hit_total'] except (KeyError, ZeroDivisionError): - disk['ratio'] = 0 + ram['ratio'] = 0 else: if hp: - disk['bytes'] += hp.iso(value[1]).size - disk['objects'] += hp.iso(value[1]).count - disk['entries'] += 1 - if value[0] < disk['oldest']: - disk['oldest'] = value[0] - disk['keys'].append((key, GetInHMS(time.time() - value[0]))) + ram['bytes'] += hp.iso(value[1]).size + ram['objects'] += hp.iso(value[1]).count + ram['entries'] += 1 + if value[0] < ram['oldest']: + ram['oldest'] = value[0] + ram['keys'].append((key, GetInHMS(time.time() - value[0]))) + folder = os.path.join(request.folder,'cache') + if not os.path.exists(folder): + os.mkdir(folder) + locker = open(os.path.join(folder, 'cache.lock'), 'a') + portalocker.lock(locker, portalocker.LOCK_EX) + disk_storage = shelve.open( + os.path.join(folder, 'cache.shelve')) + try: + for key, value in disk_storage.items(): + if isinstance(value, dict): + disk['hits'] = value['hit_total'] - value['misses'] + disk['misses'] = value['misses'] + try: + disk['ratio'] = disk['hits'] * 100 / value['hit_total'] + except (KeyError, ZeroDivisionError): + disk['ratio'] = 0 + else: + if hp: + disk['bytes'] += hp.iso(value[1]).size + disk['objects'] += hp.iso(value[1]).count + disk['entries'] += 1 + if value[0] < disk['oldest']: + disk['oldest'] = value[0] + disk['keys'].append((key, GetInHMS(time.time() - value[0]))) + finally: + portalocker.unlock(locker) + locker.close() + disk_storage.close() - finally: - portalocker.unlock(locker) - locker.close() - disk_storage.close() - - total['entries'] = ram['entries'] + disk['entries'] - total['bytes'] = ram['bytes'] + disk['bytes'] - total['objects'] = ram['objects'] + disk['objects'] - total['hits'] = ram['hits'] + disk['hits'] - total['misses'] = ram['misses'] + disk['misses'] - total['keys'] = ram['keys'] + disk['keys'] - try: - total['ratio'] = total['hits'] * 100 / (total['hits'] + + total['entries'] = ram['entries'] + disk['entries'] + total['bytes'] = ram['bytes'] + disk['bytes'] + total['objects'] = ram['objects'] + disk['objects'] + total['hits'] = ram['hits'] + disk['hits'] + total['misses'] = ram['misses'] + disk['misses'] + total['keys'] = ram['keys'] + disk['keys'] + try: + total['ratio'] = total['hits'] * 100 / (total['hits'] + total['misses']) - except (KeyError, ZeroDivisionError): - total['ratio'] = 0 + except (KeyError, ZeroDivisionError): + total['ratio'] = 0 - if disk['oldest'] < ram['oldest']: - total['oldest'] = disk['oldest'] - else: - total['oldest'] = ram['oldest'] + if disk['oldest'] < ram['oldest']: + total['oldest'] = disk['oldest'] + else: + total['oldest'] = ram['oldest'] - ram['oldest'] = GetInHMS(time.time() - ram['oldest']) - disk['oldest'] = GetInHMS(time.time() - disk['oldest']) - total['oldest'] = GetInHMS(time.time() - total['oldest']) + ram['oldest'] = GetInHMS(time.time() - ram['oldest']) + disk['oldest'] = GetInHMS(time.time() - disk['oldest']) + total['oldest'] = GetInHMS(time.time() - total['oldest']) def key_table(keys): return TABLE( @@ -502,9 +521,10 @@ def ccache(): **dict(_class='cache-keys', _style="border-collapse: separate; border-spacing: .5em;")) - ram['keys'] = key_table(ram['keys']) - disk['keys'] = key_table(disk['keys']) - total['keys'] = key_table(total['keys']) + if not is_gae: + ram['keys'] = key_table(ram['keys']) + disk['keys'] = key_table(disk['keys']) + total['keys'] = key_table(total['keys']) return dict(form=form, total=total, ram=ram, disk=disk, object_stats=hp != False) diff --git a/applications/welcome/languages/es.py b/applications/welcome/languages/es.py index 1e757cc9..c63ac9a2 100644 --- a/applications/welcome/languages/es.py +++ b/applications/welcome/languages/es.py @@ -1,4 +1,4 @@ -# coding: utf-8 +# -*- coding: utf-8 -*- { '!langcode!': 'es', '!langname!': 'Español', @@ -10,6 +10,7 @@ '%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S', '(something like "it-it")': '(algo como "eso-eso")', '@markmin\x01An error occured, please [[reload %s]] the page': 'Ha ocurrido un error, por favor [[recargar %s]] la página', +'@markmin\x01Number of entries: **%s**': 'Number of entries: **%s**', 'A new version of web2py is available': 'Hay una nueva versión de web2py disponible', 'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s', 'About': 'Acerca de', @@ -91,6 +92,7 @@ 'Database': 'Base de datos', 'Database %s select': 'selección en base de datos %s', 'database administration': 'administración base de datos', +'Database Administration (appadmin)': 'Database Administration (appadmin)', 'Date and Time': 'Fecha y Hora', 'db': 'bdd', 'DB Model': 'Modelo BDD', diff --git a/applications/welcome/views/appadmin.html b/applications/welcome/views/appadmin.html index 054efd49..7db421ee 100644 --- a/applications/welcome/views/appadmin.html +++ b/applications/welcome/views/appadmin.html @@ -116,13 +116,15 @@ {{elif request.function == 'ccache':}} -

{{T("Cache")}}

-
- +

{{=T("Cache")}}

-

{{T("Statistics")}}

+

{{=T("Statistics")}}

+{{if request.env.web2py_runtime_gae:}} +{{=BEAUTIFY(total)}} +{{else:}} +

{{=T("Overview")}}

{{=T.M("Number of entries: **%s**", total['entries'])}}

@@ -210,6 +212,8 @@ {{pass}}
+{{pass}} +

{{=T("Manage Cache")}}