Пример #1
0
def start_mongo(bin, settings):
    """
    Attempts to start a mongod process located at bin (or searches the path).
    Returns True if mongod appears to be working correctly, False if it had a
    problem. Registers an atexit handler which kills mongod.
    """

    log.getChild("start_mongo").info("Starting {0}".format(bin))

    args = []
    for item, value in settings.iteritems():
        if item.startswith("mongo.args."):
            args.extend(["--" + item[len("mongo.args."):], value])

    dbpath = settings.get("mongo.dbpath", None)
    # args.extend(("--dbpath", "\"%s\"" % dbpath))
    if dbpath and not exists(dbpath):
        makedirs(dbpath)

    # TODO: cStringIO this output, send it to a different logger
    mongo_logger = PythonizeMongoOutput(log.manager.getLogger("mongod"))

    try:
        log.info("Mongo args: {0}".format(args))
        mongo_process = spawn(bin, args, logfile=mongo_logger, timeout=None)
    except ExceptionPexpect as e:
        if not e.value.startswith("The command was not found"):
            # Something weird happened that we don't know how to deal with
            raise
        # It doesn't exist
        return False

    @atexit.register
    def kill_mongo():
        log.info("Killing MongoDB")
        mongo_process.kill(SIGKILL)

    log.info("Waiting for mongo startup (can be slow the first time)")

    possibilities = [EOF, "exception", "waiting for connections"]
    GOOD_STATE = len(possibilities) - 1
    index = mongo_process.expect(possibilities)

    if index != GOOD_STATE:
        log.info("Mongod didn't reach '{0}' state".format(
            possibilities[GOOD_STATE]))
        log.info(" -- instead is '{0}'".format(possibilities[index]))
        mongo_process.kill(SIGKILL)
        return False

    return True
Пример #2
0
def start_mongo(bin, settings):
    """
    Attempts to start a mongod process located at bin (or searches the path).
    Returns True if mongod appears to be working correctly, False if it had a
    problem. Registers an atexit handler which kills mongod.
    """

    log.getChild("start_mongo").info("Starting {0}".format(bin))

    args = []
    for item, value in settings.iteritems():
        if item.startswith("mongo.args."):
            args.extend(["--" + item[len("mongo.args."):], value])

    dbpath = settings.get("mongo.dbpath", None)
    # args.extend(("--dbpath", "\"%s\"" % dbpath))
    if dbpath and not exists(dbpath):
        makedirs(dbpath)

    # TODO: cStringIO this output, send it to a different logger
    mongo_logger = PythonizeMongoOutput(log.manager.getLogger("mongod"))

    try:
        log.info("Mongo args: {0}".format(args))
        mongo_process = spawn(bin, args, logfile=mongo_logger, timeout=None)
    except ExceptionPexpect as e:
        if not e.value.startswith("The command was not found"):
            # Something weird happened that we don't know how to deal with
            raise
        # It doesn't exist
        return False

    @atexit.register
    def kill_mongo():
        log.info("Killing MongoDB")
        mongo_process.kill(SIGKILL)

    log.info("Waiting for mongo startup (can be slow the first time)")

    possibilities = [EOF, "exception", "waiting for connections"]
    GOOD_STATE = len(possibilities) - 1
    index = mongo_process.expect(possibilities)

    if index != GOOD_STATE:
        log.info("Mongod didn't reach '{0}' state".format(possibilities[GOOD_STATE]))
        log.info(" -- instead is '{0}'".format(possibilities[index]))
        mongo_process.kill(SIGKILL)
        return False

    return True
Пример #3
0
from weboot import log
log = log.getChild("auto_mongo")

import atexit
import logging
import sys
from os import makedirs
from os.path import exists, join as pjoin
from signal import SIGKILL

from pexpect import spawn, ExceptionPexpect, EOF

import pymongo
from pymongo.errors import ConnectionFailure


class MongoStartFailure(RuntimeError):
    "Raised if we can't start mongo"


class PythonizeMongoOutput(object):
    """
    A logger used to intercept mongodb log messages and send them to python
    """

    def __init__(self, logger, level=logging.DEBUG):
        self.logger, self.level = logger, level

        self.sub_loggers = {}
        self.buffer = []
        self.append = self.buffer.append
Пример #4
0
from weboot import log; log = log.getChild("weboot.resources.root.ttree")

import ROOT as R

from .object import RootObject

def extract_buffer(b, n):
    return [b[i] for i in xrange(n)]

@log.trace()
def draw_ttree(t, params, what):
    
    #test_entries = 1000
    #every_n_events = t.GetEntries() // test_entries
    #selection = "Entry$ % {0} == 0".format(every_n_events)
    
    drawn = t.Draw(what, "1", "goff") #, test_entries)
    
    h = t.GetHistogram()
    
    log.info("Drawn {0} with {1} entries".format(what, drawn))
    
    return h

class DrawTTree(RootObject):
    @property
    def content(self):
        keys = [k.GetName() for k in self.obj.GetListOfLeaves()]
        def link(p):
            url = self.request.resource_url(self, p)
Пример #5
0
from contextlib import contextmanager
from random import randint
from subprocess import Popen, PIPE
from tempfile import NamedTemporaryFile
from thread import get_ident, allocate_lock

from pyramid.response import Response

import ROOT as R

from rootpy import ROOTError

from weboot import log

log = log.getChild("renderable")

from .actions import HasActions, action
from .locationaware import LocationAware


def renderer_view(context, request):
    log.debug("renderer_view {0}".format(context))
    return context.content


def context_renderable_as(context, format):
    """
    Test if `context` can be rendered as `format`.

    Not a method of Renderable so that we can ask it of non-Renderables.
Пример #6
0
from weboot import log; log = log.getChild("auto_mongo")

import atexit
import logging
import sys
from os import makedirs
from os.path import exists, join as pjoin
from signal import SIGKILL

from pexpect import spawn, ExceptionPexpect, EOF

import pymongo
from pymongo.errors import ConnectionFailure


class MongoStartFailure(RuntimeError):
    "Raised if we can't start mongo"


class PythonizeMongoOutput(object):
    """
    A logger used to intercept mongodb log messages and send them to python
    """
    
    def __init__(self, logger, level=logging.DEBUG):
        self.logger, self.level = logger, level
        
        self.sub_loggers = {}
        self.buffer = []
        self.append = self.buffer.append
Пример #7
0
import fnmatch
import re

from contextlib import closing
from cStringIO import StringIO
from itertools import groupby
from tarfile import open as open_tar, TarInfo

from pyramid.httpexceptions import HTTPNotFound
from pyramid.location import lineage
from pyramid.response import Response
from pyramid.traversal import traverse
from pyramid.url import static_url

from weboot import log
log = log.getChild("multitraverser")
from weboot.resources.actions import action
from weboot.resources.combination import Combination

from weboot.utils.plat import TemporaryDirectory

from .locationaware import LocationAware
from .renderable import Renderable, Renderer, context_renderable_as
# from .root.stackplot import StackPlot

# This dictionary is from http://pypi.python.org/pypi/tex
# MIT license (C) 2010 Volker Grabsch
_latex_special_chars = {
    u'$': u'\\$',
    u'%': u'\\%',
    u'&': u'\\&',
Пример #8
0
import fnmatch
import re

from contextlib import closing
from cStringIO import StringIO
from itertools import groupby
from tarfile import open as open_tar, TarInfo

from pyramid.httpexceptions import HTTPNotFound
from pyramid.location import lineage
from pyramid.response import Response
from pyramid.traversal import traverse
from pyramid.url import static_url

from weboot import log; log = log.getChild("multitraverser")
from weboot.resources.actions import action
from weboot.resources.combination import Combination

from weboot.utils.plat import TemporaryDirectory

from .locationaware import LocationAware
from .renderable import Renderable, Renderer, context_renderable_as
#from .root.stackplot import StackPlot

# This dictionary is from http://pypi.python.org/pypi/tex
# MIT license (C) 2010 Volker Grabsch
_latex_special_chars = {
    u'$':  u'\\$',
    u'%':  u'\\%',
    u'&':  u'\\&',
    u'#':  u'\\#',
Пример #9
0
import ROOT as R

from rootpy.memory.keepalive import keepalive

from pyramid.location import lineage

from .actions import action
from .locationaware import LocationAware
from .renderable import Renderable, Renderer, RootRenderer

from weboot import log; log = log.getChild("combination")

etabins = [0, 0.6, 0.8, 1.15, 1.37, 1.52, 1.81, 2.01, 2.37, 2.47]

cuts = {
    "DeltaE" : [92,92,99,111,-9999.,92,110,148,-9999.],
    #"E233" : None,
    #"E237" : None,
    #"E277" : [0.1],
    #"Emax2" : None, # Not used
    #"Emaxs1" : None,# Not used
    #"Emins1" : None,# Not used
    "Eratio" : [0.63,0.84,0.823,0.887,9999.,0.88,0.710,0.780,9999.],
    
    #"Ethad" : None,# Not used
    #"Ethad1" : None,# Not used
    
    "Rhad"  : [0.0089,0.007,0.006,0.008,-9999.,0.019,0.015,0.0137,-9999.],
    "Rhad1" : [0.0089,0.007,0.006,0.008,-9999.,0.019,0.015,0.0137,-9999.],
    
    # Unused in current lowlumi_photons menu
Пример #10
0
from weboot import log
log = log.getChild("weboot.resources.root.ttree")

import ROOT as R

from .object import RootObject


def extract_buffer(b, n):
    return [b[i] for i in xrange(n)]


@log.trace()
def draw_ttree(t, params, what):

    # test_entries = 1000
    # every_n_events = t.GetEntries() // test_entries
    # selection = "Entry$ % {0} == 0".format(every_n_events)

    drawn = t.Draw(what, "1", "goff")  # , test_entries)

    h = t.GetHistogram()

    log.info("Drawn {0} with {1} entries".format(what, drawn))

    return h


class DrawTTree(RootObject):
    @property
    def content(self):
Пример #11
0
"""
Renderable objects 
"""

from contextlib import contextmanager
from random import randint
from subprocess import Popen, PIPE
from tempfile import NamedTemporaryFile
from thread import get_ident, allocate_lock

from pyramid.response import Response

import ROOT as R

from weboot import log; log = log.getChild("renderable")

from .actions import HasActions, action
from .locationaware import LocationAware


def renderer_view(context, request):
    print "Rendering", context
    return context.content

def context_renderable_as(context, format):
    """
    Test if `context` can be rendered as `format`.
    
    Not a method of Renderable so that we can ask it of non-Renderables.
    """
    if not isinstance(context, Renderable):
Пример #12
0
import ROOT as R

from rootpy.memory.keepalive import keepalive

from pyramid.location import lineage

from .actions import action
from .locationaware import LocationAware
from .renderable import Renderable, Renderer, RootRenderer

from weboot import log

log = log.getChild("combination")

etabins = [0, 0.6, 0.8, 1.15, 1.37, 1.52, 1.81, 2.01, 2.37, 2.47]

cuts = {
    "DeltaE": [92, 92, 99, 111, -9999., 92, 110, 148, -9999.],
    #"E233" : None,
    #"E237" : None,
    #"E277" : [0.1],
    #"Emax2" : None, # Not used
    #"Emaxs1" : None,# Not used
    #"Emins1" : None,# Not used
    "Eratio": [0.63, 0.84, 0.823, 0.887, 9999., 0.88, 0.710, 0.780, 9999.],

    #"Ethad" : None,# Not used
    #"Ethad1" : None,# Not used
    "Rhad":
    [0.0089, 0.007, 0.006, 0.008, -9999., 0.019, 0.015, 0.0137, -9999.],
    "Rhad1":
Пример #13
0
from weboot import log
log = log.getChild("auto_mongo")

import atexit
import logging
import sys
from os import makedirs
from os.path import exists, join as pjoin
from signal import SIGKILL

from pexpect import spawn, ExceptionPexpect, EOF

import pymongo
from pymongo.errors import ConnectionFailure


class MongoStartFailure(RuntimeError):
    "Raised if we can't start mongo"


class PythonizeMongoOutput(object):
    """
    A logger used to intercept mongodb log messages and send them to python
    """
    def __init__(self, logger, level=logging.DEBUG):
        self.logger, self.level = logger, level

        self.sub_loggers = {}
        self.buffer = []
        self.append = self.buffer.append
Пример #14
0
from weboot import log
log = log.getChild("weboot.resources.root.ttree")

import ROOT as R

from .object import RootObject


def extract_buffer(b, n):
    return [b[i] for i in xrange(n)]


@log.trace()
def draw_ttree(t, params, what):

    # test_entries = 1000
    # every_n_events = t.GetEntries() // test_entries
    # selection = "Entry$ % {0} == 0".format(every_n_events)

    drawn = t.Draw(what, "1", "goff")  # , test_entries)

    h = t.GetHistogram()

    log.info("Drawn {0} with {1} entries".format(what, drawn))

    return h


class DrawTTree(RootObject):
    @property
    def content(self):
Пример #15
0
import ROOT as R

from rootpy.memory.keepalive import keepalive

from pyramid.location import lineage

from .actions import action
from .locationaware import LocationAware
from .renderable import Renderable, Renderer, RootRenderer

from weboot import log
log = log.getChild("combination")

etabins = [0, 0.6, 0.8, 1.15, 1.37, 1.52, 1.81, 2.01, 2.37, 2.47]

cuts = {
    "DeltaE": [92, 92, 99, 111, -9999., 92, 110, 148, -9999.],
    #"E233" : None,
    #"E237" : None,
    #"E277" : [0.1],
    #"Emax2" : None, # Not used
    #"Emaxs1" : None,# Not used
    #"Emins1" : None,# Not used
    "Eratio": [0.63, 0.84, 0.823, 0.887, 9999., 0.88, 0.710, 0.780, 9999.],

    #"Ethad" : None,# Not used
    #"Ethad1" : None,# Not used

    "Rhad": [0.0089, 0.007, 0.006, 0.008, -9999., 0.019, 0.015, 0.0137, -9999.],
    "Rhad1": [0.0089, 0.007, 0.006, 0.008, -9999., 0.019, 0.015, 0.0137, -9999.],
Пример #16
0
from weboot import log; log = log.getChild("vfs")

from os import listdir
from os.path import basename, exists, isfile, isdir, join as pjoin

import fnmatch
import re

from pyramid.traversal import traverse
from pyramid.url import static_url
from pyramid.httpexceptions import HTTPNotFound

import ROOT as R

from .locationaware import LocationAware
from .multitraverser import MultipleTraverser
from ._markdown import MarkdownResource
from ..utils.root_vfs import RootVFS
from .root.builder import build_root_object

class VFSTraverser(LocationAware):
    section = "directory"

    def __init__(self, request, path=None, vfs=None):
        self.request = request
        self.path = path or request.registry.settings["results_path"]
        self.vfs = vfs or RootVFS(self.path)
    
    @property
    def name(self):
Пример #17
0
"""

from contextlib import contextmanager
from random import randint
from subprocess import Popen, PIPE
from tempfile import NamedTemporaryFile
from thread import get_ident, allocate_lock

from pyramid.response import Response

import ROOT as R

from rootpy import ROOTError

from weboot import log
log = log.getChild("renderable")

from .actions import HasActions, action
from .locationaware import LocationAware


def renderer_view(context, request):
    log.debug("renderer_view {0}".format(context))
    return context.content


def context_renderable_as(context, format):
    """
    Test if `context` can be rendered as `format`.

    Not a method of Renderable so that we can ask it of non-Renderables.
Пример #18
0
import fnmatch
import re

from contextlib import closing
from cStringIO import StringIO
from itertools import groupby
from tarfile import open as open_tar, TarInfo

from pyramid.httpexceptions import HTTPNotFound
from pyramid.location import lineage
from pyramid.response import Response
from pyramid.traversal import traverse
from pyramid.url import static_url

from weboot import log
log = log.getChild("multitraverser")
from weboot.resources.actions import action
from weboot.resources.combination import Combination

from weboot.utils.plat import TemporaryDirectory

from .locationaware import LocationAware
from .renderable import Renderable, Renderer, context_renderable_as
# from .root.stackplot import StackPlot

# This dictionary is from http://pypi.python.org/pypi/tex
# MIT license (C) 2010 Volker Grabsch
_latex_special_chars = {
    u'$': u'\\$',
    u'%': u'\\%',
    u'&': u'\\&',