NAME

eris::role::schema - Role for implementing a schema

VERSION

version 0.006

SYNOPSIS

To implement a schema that takes the processed log entry without field filtering, you could:

package my::app::schema::full;

use Moo;

with qw(eris::role::schema);

sub _build_flatten        { 0 }
sub _build_use_dictionary { 0 }

sub match_log { 1 }

ATTRIBUTES

index_name_strftime

Defaults to a daily index pattern, '%Y.%m.%d' per Logstash.

index_name

Defaults to taking the schema's class, trimming off the namespace and then replacing '::' with an underscore. It then joins this with index_name_strftime to form the index name that's evaluated foreach document.

Without overriding this via a config element, we get:

Schema Class            Index Name
--------------------    --------------
eris::schema::syslog    yslog-%Y.%m.%d
eris::schema::access    ccess-%Y.%m.%d
my::app::schema::log    y_app_schema_log-%Y.%m.%d

default_type

The type for the Elasticsearch index to assume. Defaults to 'log'.

types

A HashRef of valid types for the Elasticsearch index, defaults to just the default_type.

dictionary

An instance of eris::dictionary configured for the schema. Parameters passed via the dictionary sub section of the config will be used to build the dictionary.

use_dictionary

A boolean, if true the fields in the document will be filtered by the dictionary element.

dictionaries

A hashref to configure the loading the dictionaries. Defaults to empty.

final

Boolean, defaults to true. If true this schema "steals" the document and the only one bulk item will be appended to the as_bulk per document. Set to false to indexing the same log into multiple indices.

You'll need to consider the priority of the schema if you set this to false to ensure the schema is early enough in the chain to accept the document.

flatten

Boolean, defaults to true. If true only the context hash from the eris::log object is indexed. If set to false, the complete hash is used instead.

METHODS

as_bulk

Takes an eris::log object and returns the bulk newline delimited JSON to add that object to the cluster.

to_document

Takes an eris::log object and returns a hash reference representing that document for indexing.

INTERFACE

match_log()

Takes an eris::log and determines if this schema applies.

Returns boolean

AUTHOR

Brad Lhotsky <brad@divisionbyzero.net>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2015 by Brad Lhotsky.

This is free software, licensed under:

The (three-clause) BSD License