Data Model¶
Bro/Zeek log data model.
-
class
zlogging.model.Model(*args, **kwargs)¶ Bases:
objectLog data model.
- Variables
__fields__ (
OrderedDictmappingstrandBaseType) – Fields of the data model.__record_fields__ (
OrderedDictmappingstrandRecordType) – Fields ofrecorddata 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_fieldandset_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
Modelclass shall process first annotations then assignments. Should there be any conflicts,ModelErrorwill 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
formatis not supproted, i.e.Mode.to{format}()does not exist.- Return type
Any
-
tojson()¶ Serialise data model as JSON log format.
- Returns
An
OrderedDictmapping each field and serialised JSON serialisable data.- Return type
OrderedDict[str, Any]
-
toascii()¶ Serialise data model as ASCII log format.
- Returns
An
OrderedDictmapping 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_factorywill 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_factorywill 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
Modelclass, 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))