java.lang.Object
org.scoja.server.core.LinkableAtPython
org.scoja.server.core.FullLinkAtPython
org.scoja.server.core.Link
org.scoja.server.target.FileTarget
org.scoja.server.target.TemplateFileTarget
- All Implemented Interfaces:
- org.scoja.server.core.DecoratedLink, org.scoja.server.core.Linkable
- public class TemplateFileTarget
- extends FileTarget
Es el destino básico de Scoja; manda a un fichero cuyo nombre puede
depender de la fecha del evento y de muchos otros datos como el
nombre de la máquina origen, etc.
El nombre del fichero se define con un org.scoja.server.template.Template.
Caché de ficheros
Para cada evento a procesar, hay que calcular el nombre del fichero
en donde hay que escribir.
Este cálculo no es muy costoso, pero abrir y cerrar el fichero es
extraordinariamente lento.
Hicimos unas pruebas preliminares, en las que se mandaba 100000
paquetes tan rápido como es posible, por UDP de una máquina a sí
misma.
Si el receptor era syslog-ng, llegaban alrededor de un 30%;
si el receptor era un Scoja primitivo con destino un
FileTarget, llegaban alrededor de un 60%;
pero si el destino era un objeto de esta clase abriendo y cerrando
los ficheros para cada paquete, llegaban a lo más un 3%.
La manera razonable de resolver esto es mediante una caché de
ficheros; que en nuestro caso la implementa FileLRUCache.
Obviamente, todos los objetos que escriban en fichero deben
compartir esta caché para que no habran de forma separada el mismo
fichero y se pisen lo que allí escriban.
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
template
protected org.scoja.server.template.Template template
TemplateFileTarget
public TemplateFileTarget(FileLRUCache fileCache)
setName
public void setName(org.scoja.server.template.Template template)
getFilename
protected java.lang.String getFilename(org.scoja.server.core.EventContext env)
- Specified by:
getFilename in class FileTarget