예제 #1
0
def initialize_handler(configuration, engine):
    """Initialize the handler from configuration."""

    metadata = MetaData()

    files = {}
    parsers = {}
    sinks = {}
    for filename, patterns in configuration.get_file_to_patterns().items():

        files[filename] = LogFile(filename)
        parsers[filename] = []

        for name, pattern in patterns.items():
            parser = Parser(pattern['regex'], pattern['fields'], pattern['datetime-format'])

            parsers[filename].append(parser)

            (table, model) = get_table(metadata, name, pattern['fields'], pattern['order'])

            sinks[parser] = Sink(sessionmaker(bind=engine), table, model)

    # SqlAlchemy will auto create tables, but it will not update existing ones.
    metadata.create_all(engine)

    handler = Handler(files, parsers, sinks)
    notifier = Handler.get_notifier(handler)

    # Kick off a scan before blocking on file updates.
    handler.handle_all()

    return notifier
예제 #2
0
    def test_difference(self):
        """Test that two tables don't return the same instances."""

        (table, model_class) = get_table(self.metadata, "table_2", self.fields, self.order)

        self.assertNotEqual(self.table, table)
        self.assertNotEqual(self.model_class, model_class)
예제 #3
0
    def test_order_ignoring(self):
        """Assert special orders are ignored."""

        self.order.append("id")
        self.order.append("date")
        self.order.append("time")

        (table, model_class) = get_table(self.metadata, "table_2", self.fields, self.order)  # pylint: disable=W0612

        model = model_class({"id": 1, "time": datetime.now(), "test1": "test1", "test2": "test2"})

        for key in model.get_data().keys():
            self.assertNotIn(key, ["id", "date", "time"])
예제 #4
0
    def test_field_ignoring(self):
        """Assert special fields are ignored."""

        self.fields.append("id")
        self.fields.append("date")
        self.fields.append("time")

        (table, model_class) = get_table(self.metadata, "table_2", self.fields, self.order)  # pylint: disable=W0612

        for column in table.columns:
            if column.name == "id":
                self.assertEqual(type(column.type), Integer)
            elif column.name == "time":
                self.assertEqual(type(column.type), DateTime)
            self.assertNotEqual("date", column.name)
예제 #5
0
파일: app.py 프로젝트: bheiskell/logolas
def _config(configuration):
    """Get Logolas web configuration."""

    fields = []
    for patterns in configuration.get_file_to_patterns().values():
        for pattern in patterns.values():
            fields.extend(pattern['fields'])

    fields = list(frozenset(fields))

    tables = []
    for patterns in configuration.get_file_to_patterns().values():
        for name, pattern in patterns.items():
            pair = get_table(db.metadata, name, pattern['fields'], pattern['order'])
            tables.append(pair)

    return { 'fields': fields, 'tables': tables }
예제 #6
0
    def setUp(self): #pylint: disable=C0103
        """Initialize"""

        engine = create_engine('sqlite:///:memory:')
        metadata = MetaData()

        (self.table, self.model) = get_table(
            metadata,
            'table',
            [ 'time', 'test1', 'test2' ],
            [ 'test2', 'test1' ],
        )

        metadata.create_all(engine)

        self.sessionmaker = sessionmaker(bind=engine)

        self.sink = Sink(self.sessionmaker, self.table, self.model)
예제 #7
0
 def setUp(self):  # pylint: disable=C0103
     """Initialize"""
     self.metadata = MetaData()
     self.fields = ["time", "test1", "test2"]
     self.order = ["test2", "test1"]
     (self.table, self.model_class) = get_table(self.metadata, "table", self.fields, self.order)