]> git.llucax.com Git - software/sercom-old.git/commitdiff
Modularización.
authorLeandro Lucarella <llucax@gmail.com>
Mon, 21 Feb 2005 23:54:47 +0000 (23:54 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 21 Feb 2005 23:54:47 +0000 (23:54 +0000)
src/sc_dbq
src/sc_test
src/sercom/__init__.py
src/sercom/util.py [new file with mode: 0644]

index 34b0e7bda12f35d486fa515ac9d93dee14918cb4..5d016de2a7568ad669db92f70668520bac63c187 100755 (executable)
@@ -5,11 +5,10 @@
 # Módulos estándar
 import os
 import sys
-import locale
-import ConfigParser
 # Módulos externos
 import sqlobject
 # Módulos locales
+import sercom
 from sercom.dbo import *
 
 def ayuda():
@@ -24,23 +23,14 @@ def args2dict(l, conn):
         d[key] = val
     return d
 
-if len(sys.argv) < 3:
-    print >>sys.stderr, 'Faltan argumentos!'
-    print >>sys.stderr, ayuda()
-    sys.exit(1)
-
-# Seteo locale
-locale.setlocale(locale.LC_ALL, '')
+# Inicializo
+conf, conn, log = sercom.init('dbq')
 
-# Obtengo configuración
-conf = ConfigParser.SafeConfigParser()
-if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom.ini'), 'sercom.ini')):
-    sys.stderr.write('No se pudo obtener configuración!\n')
+if len(sys.argv) < 3:
+    log.error('Faltan argumentos!')
+    log.error(ayuda())
     sys.exit(1)
 
-# Conexión a la DB
-conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
-
 # Argumentos interesantes
 obj = sys.argv[1]
 try:
@@ -99,14 +89,14 @@ try:
         o = eval(obj)(**args2dict(args, conn))
         print 'Agregado:', o
     else:
-        print >>sys.stderr, 'Comando incorrecto (%s)!' % cmd
-        print >>sys.stderr, ayuda()
+        log.error('Comando incorrecto (%s)!', cmd)
+        log.error(ayuda())
         sys.exit(2)
 except ValueError:
-    print >>sys.stderr, 'Argumento inválido!'
-    print >>sys.stderr, ayuda()
+    log.error('Argumento inválido!')
+    log.error(ayuda())
     sys.exit(3)
 except Exception, msg:
-    print >>sys.stderr, 'ERROR:', msg
+    log.exception(msg)
     sys.exit(100)
 
index c06f4e9cd0c4ceffdab8c8734f8ca085935e6702..a7fe80745bcae7f7fe43566491815c8a823b68f6 100755 (executable)
@@ -4,36 +4,29 @@
 
 # Módulos estándar
 import os
-import sys
 import pwd
 import time
 import signal
-import locale
 import shutil
 import datetime
-import logging
-import logging.config
 import subprocess
-import ConfigParser
-# Módulos externos
-import sqlobject
 # Módulos locales
+import sercom
 from sercom.dbo import *
 
-class secure:
+class secure_process:
     def __init__(self, chroot, uid, gid, cpu):
         self.chroot = chroot
         self.uid = uid
         self.gid = gid
         self.cpu = cpu
     def __call__(self):
-        def x2(val):
-            return (val, val)
         from os import chroot, setuid, setgid
         import resource
         chroot(self.chroot)
         setgid(self.gid)
         setuid(self.uid)
+        x2 = lambda val: (val, val) # Devuelve una tupla con val 2 veces
         resource.setrlimit(resource.RLIMIT_AS, x2(20*1024*1024))
         resource.setrlimit(resource.RLIMIT_CORE, x2(0))
         resource.setrlimit(resource.RLIMIT_CPU, x2(self.cpu))
@@ -44,14 +37,6 @@ class secure:
         resource.setrlimit(resource.RLIMIT_NOFILE, x2(100))
         resource.setrlimit(resource.RLIMIT_NPROC, x2(0))
 
-def logger():
-    log = None
-    for log_conf in ('log.ini', os.path.expanduser('~/.sercom/log.ini'), '/etc/sercom/log.ini'):
-        if (os.access(log_conf, os.R_OK)):
-            logging.config.fileConfig(log_conf)
-            log = logging.getLogger('test')
-    return log
-
 def sigchld(signum, frame):
     """Signal handler para SIGCHILD."""
     #global hijo_muerto
@@ -64,15 +49,14 @@ def sigterm(signum, frame):
     continuar = False
     log.debug('Señal %d recibida', signum)
 
+# Conecto señales
+signal.signal(signal.SIGCHLD, sigchld)
+signal.signal(signal.SIGTERM, sigterm)
+signal.signal(signal.SIGINT, sigterm)
 
-# Seteo locale
-locale.setlocale(locale.LC_ALL, '')
-
-# Obtengo configuración
-conf = ConfigParser.SafeConfigParser()
-if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom.ini'), 'sercom.ini')):
-    sys.stderr.write('No se pudo obtener configuración!\n')
-    sys.exit(1)
+# Inicializo
+conf, conn, log =  sercom.init('test')
+log.info('Iniciado')
 
 # Obtengo id de usuario con el cual ejecutar las pruebas
 (uid, gid) = pwd.getpwnam(conf.get('general', 'user'))[2:4]
@@ -80,24 +64,6 @@ if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom
 # Cambio UID efectivo
 os.seteuid(uid)
 
-# Seteo umask para que el grupo pueda leer
-os.umask(00027)
-
-# Conecto señales
-signal.signal(signal.SIGCHLD, sigchld)
-signal.signal(signal.SIGTERM, sigterm)
-signal.signal(signal.SIGINT, sigterm)
-
-# Conexión a la DB
-conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
-
-# Cargo config del logger
-log = logger()
-if not log:
-    print >>sys.stderr, 'No se pudo cargar archivo de configuración de log.'
-    sys.exit(1)
-log.info('Iniciado')
-
 # Algunas variables de configuración útiles
 data_dir = conf.get('general', 'data_dir')
 intervalo = float(conf.get('general', 'intervalo'))
@@ -174,7 +140,7 @@ while continuar:
         # FIXME caso_de_prueba.parametros
         try:
             proc = subprocess.Popen('/tp', stdout=stdout, stderr=stderr, #stdin=stdin,
-                preexec_fn=secure(chroot_dir, uid, gid, tiempo_cpu))
+                preexec_fn=secure_process(chroot_dir, uid, gid, tiempo_cpu))
         except Exception, e: # FIXME poner en el manejo de exceptiones estandar
             try:
                 print e, e.child_traceback
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e71f633793a7520320103957022ecd19fa698250 100644 (file)
@@ -0,0 +1 @@
+from util import init
diff --git a/src/sercom/util.py b/src/sercom/util.py
new file mode 100644 (file)
index 0000000..9736d6f
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- encoding: iso-8859-1 -*-
+# vim: set et sw=4 sts=4 :
+
+# Módulos estándar
+import os
+import sys
+import locale
+import logging
+import logging.config
+import ConfigParser
+# Módulos externos
+import sqlobject
+
+def get_logger(tipo):
+    log = None
+    for log_conf in ('log.ini', os.path.expanduser('~/.sercom/log.ini'), '/etc/sercom/log.ini'):
+        if (os.access(log_conf, os.R_OK)):
+            logging.config.fileConfig(log_conf)
+            log = logging.getLogger(tipo)
+    return log
+
+def init(tipo):
+    # Seteo locale
+    locale.setlocale(locale.LC_ALL, '')
+    # Obtengo configuración
+    conf = ConfigParser.SafeConfigParser()
+    if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom.ini'), 'sercom.ini')):
+        sys.stderr.write('No se pudo obtener configuración!\n')
+        sys.exit(1)
+    # Seteo umask para que el grupo pueda leer
+    os.umask(00027)
+    # Conexión a la DB
+    conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
+    # Cargo config del logger
+    log = get_logger(tipo)
+    if not log:
+        print >>sys.stderr, 'No se pudo cargar archivo de configuración de log.'
+        sys.exit(1)
+    # Devuelvo cosas interesantes
+    return (conf, conn, log)
+