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")}}
+{{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}}
+
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")}}
+{{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}}
+
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")}}
+{{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}}
+