Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Server side event support #12059

Conversation

robszewczyk
Copy link
Contributor

@robszewczyk robszewczyk commented Nov 20, 2021

Problem

Initial cut at the server event logging API.

Change overview

In the current form,

  • Logging API. For any of the generated Events::*::Type objects, the API looks as follows:

    EventOptions eventOptions;
    Events::TestEvent::Type event;
    EndpointId endpoint;
    EventNumber eid;
    LogEvent(event, endpoint, options, eid);

  • the API is not completely hooked up in this draft, this is will change before converting to a regular PR

  • test code to emit events as a result of a command.

Testing

How was this tested? (at least one bullet point required)

  • Test code for emitting events compiles

Not yet completely hooked up to the EventManagement but the key aspect
of the API present.
The event is being logged from the TestEmitTestEventRequest command,
which both provides a flavor the API and sets us up for a loopback/unit
test
@github-actions
Copy link

github-actions bot commented Nov 20, 2021

PR #12059: Size comparison from 5bad4ed to 6708064

Increases (1 build for linux)
platform target config section 5bad4ed 6708064 change % change
linux all-clusters-app debug (read only) 1745009 1745105 96 0.0
.rodata 137461 137557 96 0.1
Decreases (1 build for esp32)
platform target config section 5bad4ed 6708064 change % change
esp32 all-clusters-app m5stack (read only) 902623 902619 -4 -0.0
.flash.text 897239 897235 -4 -0.0
Full report (38 builds for efr32, esp32, k32w, linux, mbed, nrfconnect, p6, qpg, telink)
platform target config section 5bad4ed 6708064 change % change
efr32 lighting-app BRD4161A (read only) 750448 750448 0 0.0
(read/write) 119692 119692 0 0.0
.bss 117892 117892 0 0.0
.data 1800 1800 0 0.0
.text 750440 750440 0 0.0
BRD4161A+rpc (read only) 737972 737972 0 0.0
(read/write) 136320 136320 0 0.0
.bss 134396 134396 0 0.0
.data 1924 1924 0 0.0
.text 737964 737964 0 0.0
lock-app BRD4161A (read only) 727504 727504 0 0.0
(read/write) 113380 113380 0 0.0
.bss 111620 111620 0 0.0
.data 1756 1756 0 0.0
.text 727496 727496 0 0.0
window-app BRD4161A (read only) 728488 728488 0 0.0
(read/write) 113700 113700 0 0.0
.bss 111940 111940 0 0.0
.data 1760 1760 0 0.0
.text 728480 728480 0 0.0
esp32 all-clusters-app c3devkit (read only) 831588 831588 0 0.0
(read/write) 1223170 1223170 0 0.0
.dram0.bss 59424 59424 0 0.0
.dram0.data 14092 14092 0 0.0
.flash.rodata 164408 164408 0 0.0
.flash.text 831588 831588 0 0.0
.iram0.text 61394 61394 0 0.0
m5stack (read only) 902623 902619 -4 -0.0
(read/write) 422480 422480 0 0.0
.dram0.bss 64776 64776 0 0.0
.dram0.data 34056 34056 0 0.0
.flash.rodata 192368 192368 0 0.0
.flash.text 897239 897235 -4 -0.0
.iram0.text 122943 122943 0 0.0
k32w lighting-app k32w061+se05x+release (read/write) 707304 707304 0 0.0
.bss 77212 77212 0 0.0
.data 1912 1912 0 0.0
.text 622380 622380 0 0.0
lock-app k32w061+debug (read/write) 598736 598736 0 0.0
.bss 67716 67716 0 0.0
.data 1880 1880 0 0.0
.text 523340 523340 0 0.0
shell k32w061+debug (read/write) 664112 664112 0 0.0
.bss 78876 78876 0 0.0
.data 1848 1848 0 0.0
.text 577588 577588 0 0.0
linux all-clusters-app debug (read only) 1745009 1745105 96 0.0
(read/write) 130440 130440 0 0.0
.bss 60272 60272 0 0.0
.data 1042 1042 0 0.0
.data.rel.ro 63824 63824 0 0.0
.dynamic 592 592 0 0.0
.got 4112 4112 0 0.0
.init 27 27 0 0.0
.init_array 560 560 0 0.0
.rodata 137461 137557 96 0.1
.text 1471890 1471890 0 0.0
bridge-app debug+rpc (read only) 1324829 1324829 0 0.0
(read/write) 76432 76432 0 0.0
.bss 41520 41520 0 0.0
.data 1568 1568 0 0.0
.data.rel.ro 28352 28352 0 0.0
.dynamic 592 592 0 0.0
.got 3984 3984 0 0.0
.init 27 27 0 0.0
.init_array 408 408 0 0.0
.rodata 112028 112028 0 0.0
.text 1115397 1115397 0 0.0
chip-tool debug (read only) 4999941 4999941 0 0.0
(read/write) 166376 166376 0 0.0
.bss 39848 39848 0 0.0
.data 2272 2272 0 0.0
.data.rel.ro 118752 118752 0 0.0
.dynamic 592 592 0 0.0
.got 4416 4416 0 0.0
.init 27 27 0 0.0
.init_array 472 472 0 0.0
.rodata 269386 269386 0 0.0
.text 4419877 4419877 0 0.0
lighting-app debug+rpc (read only) 1593937 1593937 0 0.0
(read/write) 109616 109616 0 0.0
.bss 47152 47152 0 0.0
.data 1234 1234 0 0.0
.data.rel.ro 55920 55920 0 0.0
.dynamic 608 608 0 0.0
.got 4136 4136 0 0.0
.init 27 27 0 0.0
.init_array 536 536 0 0.0
.rodata 129649 129649 0 0.0
.text 1329282 1329282 0 0.0
ota-provider-app debug (read only) 1272377 1272377 0 0.0
(read/write) 75048 75048 0 0.0
.bss 44096 44096 0 0.0
.data 784 784 0 0.0
.data.rel.ro 25080 25080 0 0.0
.dynamic 592 592 0 0.0
.got 4016 4016 0 0.0
.init 27 27 0 0.0
.init_array 448 448 0 0.0
.rodata 114047 114047 0 0.0
.text 1060738 1060738 0 0.0
ota-requestor-app debug (read only) 1358113 1358113 0 0.0
(read/write) 78784 78784 0 0.0
.bss 46560 46560 0 0.0
.data 848 848 0 0.0
.data.rel.ro 26280 26280 0 0.0
.dynamic 592 592 0 0.0
.got 3992 3992 0 0.0
.init 27 27 0 0.0
.init_array 472 472 0 0.0
.rodata 125064 125064 0 0.0
.text 1133074 1133074 0 0.0
shell debug (read only) 799185 799185 0 0.0
(read/write) 65832 65832 0 0.0
.bss 23336 23336 0 0.0
.data 242 242 0 0.0
.data.rel.ro 37752 37752 0 0.0
.dynamic 592 592 0 0.0
.got 3528 3528 0 0.0
.init 27 27 0 0.0
.init_array 344 344 0 0.0
.rodata 78703 78703 0 0.0
.text 616466 616466 0 0.0
tv-app debug (read only) 1876257 1876257 0 0.0
(read/write) 318392 318392 0 0.0
.bss 249800 249800 0 0.0
.data 2768 2768 0 0.0
.data.rel.ro 60144 60144 0 0.0
.dynamic 592 592 0 0.0
.got 4432 4432 0 0.0
.init 27 27 0 0.0
.init_array 616 616 0 0.0
.rodata 158021 158021 0 0.0
.text 1573106 1573106 0 0.0
mbed all-clusters-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2290040 2290040 0 0.0
.bss 182028 182028 0 0.0
.data 5224 5224 0 0.0
.heap 849192 849192 0 0.0
.text 1252640 1252640 0 0.0
lighting-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2273936 2273936 0 0.0
.bss 172196 172196 0 0.0
.data 5576 5576 0 0.0
.heap 858672 858672 0 0.0
.text 1236536 1236536 0 0.0
lock-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2249840 2249840 0 0.0
.bss 171084 171084 0 0.0
.data 5568 5568 0 0.0
.heap 859792 859792 0 0.0
.text 1212440 1212440 0 0.0
pigweed-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 1139744 1139744 0 0.0
.bss 11752 11752 0 0.0
.data 4368 4368 0 0.0
.heap 1020328 1020328 0 0.0
.text 103128 103128 0 0.0
shell CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2050480 2050480 0 0.0
.bss 156272 156272 0 0.0
.data 4968 4968 0 0.0
.heap 875208 875208 0 0.0
.text 1013080 1013080 0 0.0
nrfconnect lighting-app nrf52840dk_nrf52840 (read/write) 865027 865027 0 0.0
bss 110604 110604 0 0.0
rodata 95828 95828 0 0.0
text 582972 582972 0 0.0
nrf52840dk_nrf52840+rpc (read/write) 827395 827395 0 0.0
bss 106960 106960 0 0.0
rodata 87012 87012 0 0.0
text 557140 557140 0 0.0
nrf5340dk_nrf5340_cpuapp (read/write) 790082 790082 0 0.0
bss 111980 111980 0 0.0
rodata 91084 91084 0 0.0
text 512444 512444 0 0.0
lock-app nrf52840dk_nrf52840 (read/write) 840427 840427 0 0.0
bss 109628 109628 0 0.0
rodata 92300 92300 0 0.0
text 563064 563064 0 0.0
nrf5340dk_nrf5340_cpuapp (read/write) 765730 765730 0 0.0
bss 111040 111040 0 0.0
rodata 87604 87604 0 0.0
text 492628 492628 0 0.0
pigweed-app nrf52840dk_nrf52840 (read/write) 497327 497327 0 0.0
bss 51824 51824 0 0.0
rodata 45780 45780 0 0.0
text 339436 339436 0 0.0
pump-app nrf52840dk_nrf52840 (read/write) 846567 846567 0 0.0
bss 109768 109768 0 0.0
rodata 94008 94008 0 0.0
text 567248 567248 0 0.0
pump-controller-app nrf52840dk_nrf52840 (read/write) 840127 840127 0 0.0
bss 109664 109664 0 0.0
rodata 92256 92256 0 0.0
text 562684 562684 0 0.0
shell nrf52840dk_nrf52840 (read/write) 778003 778003 0 0.0
bss 109112 109112 0 0.0
rodata 73064 73064 0 0.0
text 521244 521244 0 0.0
nrf5340dk_nrf5340_cpuapp (read/write) 693058 693058 0 0.0
bss 110096 110096 0 0.0
rodata 67708 67708 0 0.0
text 441856 441856 0 0.0
p6 all-clusters-app default (read/write) 2302976 2302976 0 0.0
.bss 115008 115008 0 0.0
.data 2528 2528 0 0.0
.heap 915808 915808 0 0.0
.text 1261240 1261240 0 0.0
lock-app default (read/write) 2215944 2215944 0 0.0
.bss 100944 100944 0 0.0
.data 2400 2400 0 0.0
.heap 930000 930000 0 0.0
.text 1174208 1174208 0 0.0
qpg lighting-app qpg6100+debug (read only) 494080 494080 0 0.0
(read/write) 114144 114144 0 0.0
.bss 50256 50256 0 0.0
.data 1008 1008 0 0.0
.text 488760 488760 0 0.0
lock-app qpg6100+debug (read only) 469044 469044 0 0.0
(read/write) 114140 114140 0 0.0
.bss 49200 49200 0 0.0
.data 964 964 0 0.0
.text 463724 463724 0 0.0
persistent-storage-app qpg6100+debug (read only) 105416 105416 0 0.0
(read/write) 114142 114142 0 0.0
.bss 8994 8994 0 0.0
.data 272 272 0 0.0
.text 100096 100096 0 0.0
telink lighting-app tlsr9518adk80d (read/write) 768410 768410 0 0.0
bss 79116 79116 0 0.0
noinit 37160 37160 0 0.0
text 533546 533546 0 0.0


#include <app/ConcreteEventPath.h>
#include <app/EventLoggingDelegate.h>
#include <app/data-model/Decode.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#include <app/data-model/Decode.h>
#include <app/data-model/Encode.h>

};

template <typename T>
CHIP_ERROR LogEvent(const T & aEventData, EndpointId aEndpoint, EventOptions aEventOptions, EventNumber & aEventNumber)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to decide whether we're doing the EventSchema thing (which would mean endpoint, etc is included in the EventOptions) or whether we are getting the cluster and event id from the data type and passing in the endpoint like this.

Seems to me that EventSchema should just go away.

That said event priority is not statically deducible from the data type, so we will need to pass that in, via either the EventOptions or some other mechanism.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed.

I'd rather we consolidate around EventOptions, remove EventSchema (schema is poor term for it anyways) and consequently, remove mpEventSchema from EventOptions.

};

template <typename T>
CHIP_ERROR LogEvent(const T & aEventData, EndpointId aEndpoint, EventOptions aEventOptions, EventNumber & aEventNumber)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aEventNumber needs documentation. Is this an outparam? And in/out param? What purpose does it serve?

When would it be used, outside of our test command?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EventNumber is outParam,

Yes, we need to consolidate around EventOption, remove EventSchema, and put ConcreteEventPath as a member inside EventOption

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EventNumber is outParam,

My point is that this should be documented, not in a github comment.

Comment on lines 358 to 359
chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
const chip::app::Clusters::TestCluster::Commands::TestEmitTestEventRequest::DecodableType & commandData)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
const chip::app::Clusters::TestCluster::Commands::TestEmitTestEventRequest::DecodableType & commandData)
CommandHandler * commandObj, const ConcreteCommandPath & commandPath,
const Commands::TestEmitTestEventRequest::DecodableType & commandData)

Comment on lines +362 to +363
DataModel::List<const Structs::SimpleStruct::Type> arg5;
DataModel::List<const SimpleEnum> arg6;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not pass these in the command payload?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd recommend using NullablesAndOptionalsStruct since it covers lists as well as nullables/optionals, and embedding that in both the command and the event.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That was the original pattern I was shooting for, but the interface to go from DecodableType to Type proved to be marginally more complicated, so I mocked up something temporary. Will fix.

@stale
Copy link

stale bot commented Nov 30, 2021

This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

@stale stale bot added the stale Stale issue or PR label Nov 30, 2021
EventLogger<T> eventData(aEventData);
ConcreteEventPath path(aEndpoint, aEventData.GetClusterId(), aEventData.GetEventId());
// log the actual event
aEventNumber = 0;
Copy link
Contributor

@yufengwangca yufengwangca Dec 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall the eventNumber be an monotonically increasing ephemeral unique number?

@stale stale bot removed the stale Stale issue or PR label Dec 2, 2021
yunhanw-google added a commit to yunhanw-google/connectedhomeip that referenced this pull request Dec 6, 2021
yunhanw-google added a commit to yunhanw-google/connectedhomeip that referenced this pull request Dec 7, 2021
yunhanw-google added a commit to yunhanw-google/connectedhomeip that referenced this pull request Dec 7, 2021
yunhanw-google added a commit to yunhanw-google/connectedhomeip that referenced this pull request Dec 7, 2021
yunhanw-google added a commit to yunhanw-google/connectedhomeip that referenced this pull request Dec 7, 2021
yunhanw-google added a commit that referenced this pull request Dec 7, 2021
* Port change from #12059

* Hook server with IM EventManagment and adjust EventManagment

* run codegen
@yunhanw-google
Copy link
Contributor

Merged by Integrate IM event with server #12641

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants