mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
record_fields: Include information about optionality of fields
This was reported as a wish for log schema generation, so add it...
This commit is contained in:
parent
0374d0fe42
commit
f4bb8fae33
6 changed files with 61 additions and 52 deletions
3
NEWS
3
NEWS
|
@ -201,6 +201,9 @@ New Functionality
|
|||
- Environment variables for the execution of log rotation postprocessors can
|
||||
be set via ``Log::default_rotation_postprocessor_cmd_env``.
|
||||
|
||||
- The ``record_field`` record was extended by ``optional`` and ``record_fields()``
|
||||
can now be used to determine the optionality of record fields.
|
||||
|
||||
Changed Functionality
|
||||
---------------------
|
||||
|
||||
|
|
|
@ -891,6 +891,7 @@ type record_field: record {
|
|||
## :zeek:see:`record_fields` (if it has one).
|
||||
value: any &optional;
|
||||
default_val: any &optional; ##< The value of the :zeek:attr:`&default` attribute if defined.
|
||||
optional: bool; ##< True if the field is :zeek:attr:`&optional`, else false.
|
||||
};
|
||||
|
||||
## Table type used to map record field declarations to meta-information
|
||||
|
|
|
@ -1348,6 +1348,7 @@ TableValPtr RecordType::GetRecordFieldsVal(const RecordVal* rv) const
|
|||
nr->Assign(1, logged);
|
||||
nr->Assign(2, std::move(fv));
|
||||
nr->Assign(3, FieldDefault(i));
|
||||
nr->Assign(4, fd->GetAttr(detail::ATTR_OPTIONAL) != detail::Attr::nil);
|
||||
auto field_name = make_intrusive<StringVal>(FieldName(i));
|
||||
rval->Assign(std::move(field_name), std::move(nr));
|
||||
}
|
||||
|
|
|
@ -1,66 +1,68 @@
|
|||
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||
[a=42, b=Foo, c=<uninitialized>, d=Bar, e=tt]
|
||||
{
|
||||
[a] = [type_name=count, log=F, value=42, default_val=<uninitialized>],
|
||||
[d] = [type_name=string, log=T, value=Bar, default_val=<uninitialized>],
|
||||
[b] = [type_name=string, log=F, value=Foo, default_val=Foo],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[e] = [type_name=any, log=F, value=tt, default_val=<uninitialized>]
|
||||
[a] = [type_name=count, log=F, value=42, default_val=<uninitialized>, optional=F],
|
||||
[d] = [type_name=string, log=T, value=Bar, default_val=<uninitialized>, optional=F],
|
||||
[b] = [type_name=string, log=F, value=Foo, default_val=Foo, optional=T],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[e] = [type_name=any, log=F, value=tt, default_val=<uninitialized>, optional=F]
|
||||
}
|
||||
F
|
||||
c value, F
|
||||
c default , F
|
||||
c optional, T
|
||||
{
|
||||
[a] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[f] = [type_name=enum Monochrome::color, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Bar],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[m] = [type_name=record myrec, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[e] = [type_name=enum color, log=F, value=<uninitialized>, default_val=BLUE]
|
||||
[a] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[f] = [type_name=enum Monochrome::color, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Bar, optional=T],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[m] = [type_name=record myrec, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[e] = [type_name=enum color, log=F, value=<uninitialized>, default_val=BLUE, optional=T]
|
||||
}
|
||||
{
|
||||
[a] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[f] = [type_name=enum Monochrome::color, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Bar],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[m] = [type_name=record myrec, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[e] = [type_name=enum color, log=F, value=<uninitialized>, default_val=BLUE]
|
||||
[a] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[f] = [type_name=enum Monochrome::color, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Bar, optional=T],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[m] = [type_name=record myrec, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[e] = [type_name=enum color, log=F, value=<uninitialized>, default_val=BLUE, optional=T]
|
||||
}
|
||||
{
|
||||
[a] = [type_name=count, log=F, value=42, default_val=<uninitialized>],
|
||||
[d] = [type_name=string, log=T, value=Bar, default_val=<uninitialized>],
|
||||
[b] = [type_name=string, log=F, value=Foo, default_val=Foo],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[e] = [type_name=any, log=F, value=mystring, default_val=<uninitialized>]
|
||||
[a] = [type_name=count, log=F, value=42, default_val=<uninitialized>, optional=F],
|
||||
[d] = [type_name=string, log=T, value=Bar, default_val=<uninitialized>, optional=F],
|
||||
[b] = [type_name=string, log=F, value=Foo, default_val=Foo, optional=T],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[e] = [type_name=any, log=F, value=mystring, default_val=<uninitialized>, optional=F]
|
||||
}
|
||||
{
|
||||
|
||||
}
|
||||
{
|
||||
[myfield] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>]
|
||||
[myfield] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F]
|
||||
}
|
||||
{
|
||||
[a] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[f] = [type_name=enum Monochrome::color, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Bar],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[m] = [type_name=record myrec, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[e] = [type_name=enum color, log=F, value=<uninitialized>, default_val=BLUE]
|
||||
[a] = [type_name=bool, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[f] = [type_name=enum Monochrome::color, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Bar, optional=T],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[m] = [type_name=record myrec, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[e] = [type_name=enum color, log=F, value=<uninitialized>, default_val=BLUE, optional=T]
|
||||
}
|
||||
{
|
||||
[a] = [type_name=count, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Foo],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[e] = [type_name=any, log=F, value=<uninitialized>, default_val=<uninitialized>]
|
||||
[a] = [type_name=count, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[d] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[b] = [type_name=string, log=F, value=<uninitialized>, default_val=Foo, optional=T],
|
||||
[c] = [type_name=double, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[e] = [type_name=any, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F]
|
||||
}
|
||||
{
|
||||
[a] = [type_name=set[double], log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[d] = [type_name=table[double,string] of table[string] of vector of string, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[f] = [type_name=vector of enum color, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[b] = [type_name=set[double,string], log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[c] = [type_name=set[double,record tt], log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[g] = [type_name=table[string] of enum color, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[e] = [type_name=vector of vector of string, log=F, value=<uninitialized>, default_val=<uninitialized>]
|
||||
[a] = [type_name=set[double], log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[d] = [type_name=table[double,string] of table[string] of vector of string, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[f] = [type_name=vector of enum color, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[b] = [type_name=set[double,string], log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[c] = [type_name=set[double,record tt], log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[g] = [type_name=table[string] of enum color, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[e] = [type_name=vector of vector of string, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=F]
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||
Info record_fields\x0a, {
|
||||
[extra1] = [type_name=string, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[extra2] = [type_name=string, log=F, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[ts] = [type_name=time, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[extra3] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[msg] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>],
|
||||
[extra4] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>]
|
||||
[extra1] = [type_name=string, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[extra2] = [type_name=string, log=F, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[ts] = [type_name=time, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[extra3] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=T],
|
||||
[msg] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=F],
|
||||
[extra4] = [type_name=string, log=T, value=<uninitialized>, default_val=<uninitialized>, optional=T]
|
||||
}
|
||||
Info record, [ts=XXXXXXXXXX.XXXXXX, msg=msg, extra1=extra1 value, extra2=extra2 value, extra3=extra3 value, extra4=extra4 value]
|
||||
|
|
|
@ -52,7 +52,9 @@ event zeek_init()
|
|||
local t: record_field_table;
|
||||
t = record_fields(x);
|
||||
print t;
|
||||
print t["c"]?$value;
|
||||
print "c value", t["c"]?$value;
|
||||
print "c default ", t["c"]?$default_val;
|
||||
print "c optional", t["c"]$optional;
|
||||
|
||||
t = record_fields(x$e);
|
||||
print t;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue