Data Model¶
Bro/Zeek log data model.
-
class
zlogging.model.
Model
(*args, **kwargs)¶ Bases:
object
Log data model.
- Variables
__fields__ (
OrderedDict
mappingstr
andBaseType
) – Fields of the data model.__record_fields__ (
OrderedDict
mappingstr
andRecordType
) – Fields ofrecord
data type in the data model.__empty_field__ (bytes) – Placeholder for empty field.
__unset_field__ (bytes) – Placeholder for unset field.
__set_separator__ (bytes) – Separator for set/vector fields.
- Warns
BroDeprecationWarning – Use of
bro_*
type annotations.- Raises
ModelValueError – In case of inconsistency between field data types, or values of
unset_field
,empty_field
andset_separator
.ModelTypeError – Wrong parameters when initialisation.
Note
Customise the
Model.__post_init__
method in your subclassed data model to implement your own ideas.Example
Define a custom log data model using the prefines Bro/Zeek data types, or subclasses of
BaseType
:class MyLog(Model): field_one = StringType() field_two = SetType(element_type=PortType)
Or you may use type annotations as PEP 484 introduced when declaring data models. All available type hints can be found in
typing
:class MyLog(Model): field_one: zeek_string field_two: zeek_set[zeek_port]
However, when mixing annotations and direct assignments, annotations will take proceedings, i.e. the
Model
class shall process first annotations then assignments. Should there be any conflicts,ModelError
will be raised.See also
See
_aux_expand_typing()
for more information about processing the fields.-
property
unset_field
¶ bytes: placeholder for empty field
-
property
empty_field
¶ bytes: placeholder for unset field
-
property
set_separator
¶ bytes: separator for set/vector fields
-
__post_init__
()¶ Post-processing customisation.
-
__call__
(format)¶ Serialise data model with given format.
- Parameters
format (str) – Serialisation format.
- Returns
The serialised data.
- Raises
ModelFormatError – If
format
is not supproted, i.e.Mode.to{format}()
does not exist.- Return type
Any
-
tojson
()¶ Serialise data model as JSON log format.
- Returns
An
OrderedDict
mapping each field and serialised JSON serialisable data.- Return type
OrderedDict[str, Any]
-
toascii
()¶ Serialise data model as ASCII log format.
- Returns
An
OrderedDict
mapping each field and serialised text data.- Return type
OrderedDict[str, str]
-
asdict
(dict_factory=None)¶ Convert data model as a dictionary mapping field names to field values.
- Parameters
dict_factory (Optional[type]) – If given,
dict_factory
will be used instead of built-indict
.- Returns
A dictionary mapping field names to field values.
- Return type
Dict[str, Any]
-
astuple
(tuple_factory=None)¶ Convert data model as a tuple of field values.
- Parameters
tuple_factory (Optional[type]) – If given,
tuple_factory
will be used instead of built-intuple
.- Returns
A tuple of field values.
- Return type
Tuple[Any]
-
zlogging.model.
new_model
(name, **fields)¶ Create a data model dynamically with the appropriate fields.
- Parameters
name (str) – data model name
**fields – defined fields of the data model
Any] fields (Dict[str,) –
- Returns
created data model
- Return type
Examples
Typically, we define a data model by subclassing the
Model
class, as following:class MyLog(Model): field_one = StringType() field_two = SetType(element_type=PortType)
when defining dynamically with
new_model()
, the definition above can be rewrote to:MyLog = new_model('MyLog', field_one=StringType(), field_two=SetType(element_type=PortType))