Merge pull request #337 from spametki/master

Adapted admin cache action for gae
This commit is contained in:
mdipierro
2013-12-28 21:17:15 -08:00
8 changed files with 358 additions and 271 deletions
+24 -4
View File
@@ -16,6 +16,8 @@ try:
except ImportError: except ImportError:
pgv = None pgv = None
is_gae = request.env.web2py_runtime_gae or False
# ## critical --- make a copy of the environment # ## critical --- make a copy of the environment
global_env = copy.copy(globals()) global_env = copy.copy(globals())
@@ -359,6 +361,10 @@ def state():
def ccache(): def ccache():
if is_gae:
form = FORM(
P(TAG.BUTTON(T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")))
else:
cache.ram.initialize() cache.ram.initialize()
cache.disk.initialize() cache.disk.initialize()
@@ -372,23 +378,26 @@ def ccache():
) )
if form.accepts(request.vars, session): if form.accepts(request.vars, session):
session.flash = ""
if is_gae:
if request.vars.yes:
cache.ram.clear()
session.flash += T("Cache Cleared")
else:
clear_ram = False clear_ram = False
clear_disk = False clear_disk = False
session.flash = ""
if request.vars.yes: if request.vars.yes:
clear_ram = clear_disk = True clear_ram = clear_disk = True
if request.vars.ram: if request.vars.ram:
clear_ram = True clear_ram = True
if request.vars.disk: if request.vars.disk:
clear_disk = True clear_disk = True
if clear_ram: if clear_ram:
cache.ram.clear() cache.ram.clear()
session.flash += T("Ram Cleared") session.flash += T("Ram Cleared")
if clear_disk: if clear_disk:
cache.disk.clear() cache.disk.clear()
session.flash += T("Disk Cleared") session.flash += T("Disk Cleared")
redirect(URL(r=request)) redirect(URL(r=request))
try: try:
@@ -414,6 +423,7 @@ def ccache():
'oldest': time.time(), 'oldest': time.time(),
'keys': [] 'keys': []
} }
disk = copy.copy(ram) disk = copy.copy(ram)
total = copy.copy(ram) total = copy.copy(ram)
disk['keys'] = [] disk['keys'] = []
@@ -428,6 +438,16 @@ def ccache():
return (hours, minutes, seconds) return (hours, minutes, seconds)
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(): for key, value in cache.ram.storage.iteritems():
if isinstance(value, dict): if isinstance(value, dict):
ram['hits'] = value['hit_total'] - value['misses'] ram['hits'] = value['hit_total'] - value['misses']
@@ -468,7 +488,6 @@ def ccache():
if value[0] < disk['oldest']: if value[0] < disk['oldest']:
disk['oldest'] = value[0] disk['oldest'] = value[0]
disk['keys'].append((key, GetInHMS(time.time() - value[0]))) disk['keys'].append((key, GetInHMS(time.time() - value[0])))
finally: finally:
portalocker.unlock(locker) portalocker.unlock(locker)
locker.close() locker.close()
@@ -502,6 +521,7 @@ def ccache():
**dict(_class='cache-keys', **dict(_class='cache-keys',
_style="border-collapse: separate; border-spacing: .5em;")) _style="border-collapse: separate; border-spacing: .5em;"))
if not is_gae:
ram['keys'] = key_table(ram['keys']) ram['keys'] = key_table(ram['keys'])
disk['keys'] = key_table(disk['keys']) disk['keys'] = key_table(disk['keys'])
total['keys'] = key_table(total['keys']) total['keys'] = key_table(total['keys'])
+13
View File
@@ -12,6 +12,7 @@
'(version %s)': '(version %s)', '(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\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\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', '@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': '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', 'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s',
@@ -57,11 +58,13 @@
'Autocomplete': 'Autocomplete', 'Autocomplete': 'Autocomplete',
'Autocomplete Python Code': 'Autocompletar código Python', 'Autocomplete Python Code': 'Autocompletar código Python',
'Available databases and tables': 'Bases de datos y tablas disponibles', 'Available databases and tables': 'Bases de datos y tablas disponibles',
'Available Databases and Tables': 'Available Databases and Tables',
'back': 'atrás', 'back': 'atrás',
'Back to the plugins list': 'Back to the plugins list', 'Back to the plugins list': 'Back to the plugins list',
'breakpoint': 'breakpoint', 'breakpoint': 'breakpoint',
'breakpoints': 'breakpoints', 'breakpoints': 'breakpoints',
'browse': 'buscar', 'browse': 'buscar',
'Cache': 'Cache',
'cache': 'cache', 'cache': 'cache',
'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados', 'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados',
'can be a git repo': 'puede ser un repositorio git', 'can be a git repo': 'puede ser un repositorio git',
@@ -79,6 +82,9 @@
'Check to delete': 'Marque para eliminar', 'Check to delete': 'Marque para eliminar',
'Checking for upgrades...': 'Buscando actulizaciones...', 'Checking for upgrades...': 'Buscando actulizaciones...',
'Clean': 'limpiar', '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 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 here for the administrative interface': 'haga clic aquí para usar la interfaz administrativa',
'Click row to expand traceback': 'Click row to expand traceback', 'Click row to expand traceback': 'Click row to expand traceback',
@@ -113,6 +119,7 @@
'database': 'base de datos', 'database': 'base de datos',
'database %s select': 'selección en base de datos %s', 'database %s select': 'selección en base de datos %s',
'database administration': 'administración base de datos', 'database administration': 'administración base de datos',
'Database Administration (appadmin)': 'Database Administration (appadmin)',
'Date and Time': 'Fecha y Hora', 'Date and Time': 'Fecha y Hora',
'db': 'db', 'db': 'db',
'Debug': 'Debug', 'Debug': 'Debug',
@@ -135,6 +142,7 @@
'details': 'detalles', 'details': 'detalles',
'direction: ltr': 'direction: ltr', 'direction: ltr': 'direction: ltr',
'Disable': 'Deshabilitar', 'Disable': 'Deshabilitar',
'DISK': 'DISK',
'docs': 'docs', 'docs': 'docs',
'Docs': 'Docs', 'Docs': 'Docs',
'Done!': 'Done!', 'Done!': 'Done!',
@@ -249,6 +257,7 @@
'Lost Password': 'Contraseña perdida', 'Lost Password': 'Contraseña perdida',
'manage': 'gestionar', 'manage': 'gestionar',
'Manage': 'Gestionar', 'Manage': 'Gestionar',
'Manage Cache': 'Manage Cache',
'merge': 'combinar', 'merge': 'combinar',
'Models': 'Modelos', 'Models': 'Modelos',
'models': 'modelos', 'models': 'modelos',
@@ -282,6 +291,7 @@
'or provide application url:': 'o provea URL de la aplicación:', 'or provide application url:': 'o provea URL de la aplicación:',
'Origin': 'Origen', 'Origin': 'Origen',
'Original/Translation': 'Original/Traducción', 'Original/Translation': 'Original/Traducción',
'Overview': 'Overview',
'Overwrite installed app': 'sobreescriba la aplicación instalada', 'Overwrite installed app': 'sobreescriba la aplicación instalada',
'Pack all': 'empaquetar todo', 'Pack all': 'empaquetar todo',
'Pack compiled': 'empaquete compiladas', 'Pack compiled': 'empaquete compiladas',
@@ -305,6 +315,7 @@
'private files': 'archivos privados', 'private files': 'archivos privados',
'Project Progress': 'Project Progress', 'Project Progress': 'Project Progress',
'Query:': 'Consulta:', 'Query:': 'Consulta:',
'RAM': 'RAM',
'Rapid Search': 'Rapid Search', 'Rapid Search': 'Rapid Search',
'record': 'registro', 'record': 'registro',
'record does not exist': 'el registro no existe', 'record does not exist': 'el registro no existe',
@@ -356,6 +367,7 @@
'Static': 'Static', 'Static': 'Static',
'static': 'estáticos', 'static': 'estáticos',
'Static files': 'Archivos estáticos', 'Static files': 'Archivos estáticos',
'Statistics': 'Statistics',
'step': 'step', 'step': 'step',
'stop': 'stop', 'stop': 'stop',
'submit': 'enviar', 'submit': 'enviar',
@@ -397,6 +409,7 @@
'To emulate a breakpoint programatically, write:': 'To emulate a breakpoint programatically, write:', 'To emulate a breakpoint programatically, write:': 'To emulate a breakpoint programatically, write:',
'to use the debugger!': 'to use the debugger!', 'to use the debugger!': 'to use the debugger!',
'toggle breakpoint': 'alternar punto de ruptura', 'toggle breakpoint': 'alternar punto de ruptura',
'Toggle comment': 'Toggle comment',
'Toggle Fullscreen': 'Alternar pantalla completa', 'Toggle Fullscreen': 'Alternar pantalla completa',
'Traceback': 'Traceback', 'Traceback': 'Traceback',
'translation strings for the application': 'cadenas de caracteres de traducción para la aplicación', 'translation strings for the application': 'cadenas de caracteres de traducción para la aplicación',
+8 -4
View File
@@ -116,13 +116,15 @@
{{elif request.function == 'ccache':}} {{elif request.function == 'ccache':}}
<h2>{{T("Cache")}}</h2> <h2>{{=T("Cache")}}</h2>
<div class="list">
<div class="list-header"> <div class="list-header">
<h3>{{T("Statistics")}}</h3> <h3>{{=T("Statistics")}}</h3>
</div> </div>
{{if request.env.web2py_runtime_gae:}}
{{=BEAUTIFY(total)}}
{{else:}}
<div class="list">
<div class="content"> <div class="content">
<h4>{{=T("Overview")}}</h4> <h4>{{=T("Overview")}}</h4>
<p>{{=T.M("Number of entries: **%s**", total['entries'])}}</p> <p>{{=T.M("Number of entries: **%s**", total['entries'])}}</p>
@@ -210,6 +212,8 @@
{{pass}} {{pass}}
</div> </div>
{{pass}}
<div class="list-header"> <div class="list-header">
<h3>{{=T("Manage Cache")}}</h3> <h3>{{=T("Manage Cache")}}</h3>
</div> </div>
+24 -4
View File
@@ -16,6 +16,8 @@ try:
except ImportError: except ImportError:
pgv = None pgv = None
is_gae = request.env.web2py_runtime_gae or False
# ## critical --- make a copy of the environment # ## critical --- make a copy of the environment
global_env = copy.copy(globals()) global_env = copy.copy(globals())
@@ -359,6 +361,10 @@ def state():
def ccache(): def ccache():
if is_gae:
form = FORM(
P(TAG.BUTTON(T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")))
else:
cache.ram.initialize() cache.ram.initialize()
cache.disk.initialize() cache.disk.initialize()
@@ -372,23 +378,26 @@ def ccache():
) )
if form.accepts(request.vars, session): if form.accepts(request.vars, session):
session.flash = ""
if is_gae:
if request.vars.yes:
cache.ram.clear()
session.flash += T("Cache Cleared")
else:
clear_ram = False clear_ram = False
clear_disk = False clear_disk = False
session.flash = ""
if request.vars.yes: if request.vars.yes:
clear_ram = clear_disk = True clear_ram = clear_disk = True
if request.vars.ram: if request.vars.ram:
clear_ram = True clear_ram = True
if request.vars.disk: if request.vars.disk:
clear_disk = True clear_disk = True
if clear_ram: if clear_ram:
cache.ram.clear() cache.ram.clear()
session.flash += T("Ram Cleared") session.flash += T("Ram Cleared")
if clear_disk: if clear_disk:
cache.disk.clear() cache.disk.clear()
session.flash += T("Disk Cleared") session.flash += T("Disk Cleared")
redirect(URL(r=request)) redirect(URL(r=request))
try: try:
@@ -414,6 +423,7 @@ def ccache():
'oldest': time.time(), 'oldest': time.time(),
'keys': [] 'keys': []
} }
disk = copy.copy(ram) disk = copy.copy(ram)
total = copy.copy(ram) total = copy.copy(ram)
disk['keys'] = [] disk['keys'] = []
@@ -428,6 +438,16 @@ def ccache():
return (hours, minutes, seconds) return (hours, minutes, seconds)
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(): for key, value in cache.ram.storage.iteritems():
if isinstance(value, dict): if isinstance(value, dict):
ram['hits'] = value['hit_total'] - value['misses'] ram['hits'] = value['hit_total'] - value['misses']
@@ -468,7 +488,6 @@ def ccache():
if value[0] < disk['oldest']: if value[0] < disk['oldest']:
disk['oldest'] = value[0] disk['oldest'] = value[0]
disk['keys'].append((key, GetInHMS(time.time() - value[0]))) disk['keys'].append((key, GetInHMS(time.time() - value[0])))
finally: finally:
portalocker.unlock(locker) portalocker.unlock(locker)
locker.close() locker.close()
@@ -502,6 +521,7 @@ def ccache():
**dict(_class='cache-keys', **dict(_class='cache-keys',
_style="border-collapse: separate; border-spacing: .5em;")) _style="border-collapse: separate; border-spacing: .5em;"))
if not is_gae:
ram['keys'] = key_table(ram['keys']) ram['keys'] = key_table(ram['keys'])
disk['keys'] = key_table(disk['keys']) disk['keys'] = key_table(disk['keys'])
total['keys'] = key_table(total['keys']) total['keys'] = key_table(total['keys'])
+8 -4
View File
@@ -116,13 +116,15 @@
{{elif request.function == 'ccache':}} {{elif request.function == 'ccache':}}
<h2>{{T("Cache")}}</h2> <h2>{{=T("Cache")}}</h2>
<div class="list">
<div class="list-header"> <div class="list-header">
<h3>{{T("Statistics")}}</h3> <h3>{{=T("Statistics")}}</h3>
</div> </div>
{{if request.env.web2py_runtime_gae:}}
{{=BEAUTIFY(total)}}
{{else:}}
<div class="list">
<div class="content"> <div class="content">
<h4>{{=T("Overview")}}</h4> <h4>{{=T("Overview")}}</h4>
<p>{{=T.M("Number of entries: **%s**", total['entries'])}}</p> <p>{{=T.M("Number of entries: **%s**", total['entries'])}}</p>
@@ -210,6 +212,8 @@
{{pass}} {{pass}}
</div> </div>
{{pass}}
<div class="list-header"> <div class="list-header">
<h3>{{=T("Manage Cache")}}</h3> <h3>{{=T("Manage Cache")}}</h3>
</div> </div>
+24 -4
View File
@@ -16,6 +16,8 @@ try:
except ImportError: except ImportError:
pgv = None pgv = None
is_gae = request.env.web2py_runtime_gae or False
# ## critical --- make a copy of the environment # ## critical --- make a copy of the environment
global_env = copy.copy(globals()) global_env = copy.copy(globals())
@@ -359,6 +361,10 @@ def state():
def ccache(): def ccache():
if is_gae:
form = FORM(
P(TAG.BUTTON(T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")))
else:
cache.ram.initialize() cache.ram.initialize()
cache.disk.initialize() cache.disk.initialize()
@@ -372,23 +378,26 @@ def ccache():
) )
if form.accepts(request.vars, session): if form.accepts(request.vars, session):
session.flash = ""
if is_gae:
if request.vars.yes:
cache.ram.clear()
session.flash += T("Cache Cleared")
else:
clear_ram = False clear_ram = False
clear_disk = False clear_disk = False
session.flash = ""
if request.vars.yes: if request.vars.yes:
clear_ram = clear_disk = True clear_ram = clear_disk = True
if request.vars.ram: if request.vars.ram:
clear_ram = True clear_ram = True
if request.vars.disk: if request.vars.disk:
clear_disk = True clear_disk = True
if clear_ram: if clear_ram:
cache.ram.clear() cache.ram.clear()
session.flash += T("Ram Cleared") session.flash += T("Ram Cleared")
if clear_disk: if clear_disk:
cache.disk.clear() cache.disk.clear()
session.flash += T("Disk Cleared") session.flash += T("Disk Cleared")
redirect(URL(r=request)) redirect(URL(r=request))
try: try:
@@ -414,6 +423,7 @@ def ccache():
'oldest': time.time(), 'oldest': time.time(),
'keys': [] 'keys': []
} }
disk = copy.copy(ram) disk = copy.copy(ram)
total = copy.copy(ram) total = copy.copy(ram)
disk['keys'] = [] disk['keys'] = []
@@ -428,6 +438,16 @@ def ccache():
return (hours, minutes, seconds) return (hours, minutes, seconds)
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(): for key, value in cache.ram.storage.iteritems():
if isinstance(value, dict): if isinstance(value, dict):
ram['hits'] = value['hit_total'] - value['misses'] ram['hits'] = value['hit_total'] - value['misses']
@@ -468,7 +488,6 @@ def ccache():
if value[0] < disk['oldest']: if value[0] < disk['oldest']:
disk['oldest'] = value[0] disk['oldest'] = value[0]
disk['keys'].append((key, GetInHMS(time.time() - value[0]))) disk['keys'].append((key, GetInHMS(time.time() - value[0])))
finally: finally:
portalocker.unlock(locker) portalocker.unlock(locker)
locker.close() locker.close()
@@ -502,6 +521,7 @@ def ccache():
**dict(_class='cache-keys', **dict(_class='cache-keys',
_style="border-collapse: separate; border-spacing: .5em;")) _style="border-collapse: separate; border-spacing: .5em;"))
if not is_gae:
ram['keys'] = key_table(ram['keys']) ram['keys'] = key_table(ram['keys'])
disk['keys'] = key_table(disk['keys']) disk['keys'] = key_table(disk['keys'])
total['keys'] = key_table(total['keys']) total['keys'] = key_table(total['keys'])
+3 -1
View File
@@ -1,4 +1,4 @@
# coding: utf-8 # -*- coding: utf-8 -*-
{ {
'!langcode!': 'es', '!langcode!': 'es',
'!langname!': 'Español', '!langname!': 'Español',
@@ -10,6 +10,7 @@
'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S', '%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
'(something like "it-it")': '(algo como "eso-eso")', '(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\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': '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', 'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s',
'About': 'Acerca de', 'About': 'Acerca de',
@@ -91,6 +92,7 @@
'Database': 'Base de datos', 'Database': 'Base de datos',
'Database %s select': 'selección en base de datos %s', 'Database %s select': 'selección en base de datos %s',
'database administration': 'administración base de datos', 'database administration': 'administración base de datos',
'Database Administration (appadmin)': 'Database Administration (appadmin)',
'Date and Time': 'Fecha y Hora', 'Date and Time': 'Fecha y Hora',
'db': 'bdd', 'db': 'bdd',
'DB Model': 'Modelo BDD', 'DB Model': 'Modelo BDD',
+8 -4
View File
@@ -116,13 +116,15 @@
{{elif request.function == 'ccache':}} {{elif request.function == 'ccache':}}
<h2>{{T("Cache")}}</h2> <h2>{{=T("Cache")}}</h2>
<div class="list">
<div class="list-header"> <div class="list-header">
<h3>{{T("Statistics")}}</h3> <h3>{{=T("Statistics")}}</h3>
</div> </div>
{{if request.env.web2py_runtime_gae:}}
{{=BEAUTIFY(total)}}
{{else:}}
<div class="list">
<div class="content"> <div class="content">
<h4>{{=T("Overview")}}</h4> <h4>{{=T("Overview")}}</h4>
<p>{{=T.M("Number of entries: **%s**", total['entries'])}}</p> <p>{{=T.M("Number of entries: **%s**", total['entries'])}}</p>
@@ -210,6 +212,8 @@
{{pass}} {{pass}}
</div> </div>
{{pass}}
<div class="list-header"> <div class="list-header">
<h3>{{=T("Manage Cache")}}</h3> <h3>{{=T("Manage Cache")}}</h3>
</div> </div>