-
Notifications
You must be signed in to change notification settings - Fork 898
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
Add ems_events for ems_event_filter_column for ems cluster subclasses #23296
base: master
Are you sure you want to change the base?
Add ems_events for ems_event_filter_column for ems cluster subclasses #23296
Conversation
EmsCluster was properly having ems_cluster_id as the ems_event_filter_column, subclasses had cluster_id as the column.
@kbrock any thoughts on this change? Note, event_where_clause for ems cluster is a real cluster in that it tries to do an or of all host_ids and vm ids from event streams... that feels like it will destroy performance completely. I did just the ems_cluster_id where clause for now as that's what I need to fix the issue but we'll only see timelines for events specific for that cluster, which I think is what we want. |
FactoryBot.create(:event_stream) | ||
expect(EventStream.where(obj.event_stream_filters["EmsEvent"]).to_a).to eq([event]) | ||
expect(EventStream.where(obj.event_where_clause(:ems_events)).to_a).to eq([event]) | ||
klasses = klass.constantize.descendants.collect(&:name).unshift(klass) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note, EmsCluster does the right thing, but subclasses weren't. This test recreated reported issue so the fix above can verify the problem is addressed.
has_many :ems_events, | ||
->(cluster) { | ||
where("ems_cluster_id" => cluster.id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
at least in terms of how ems_cluster_id
is concerned, can we use foreign_key
?
And getting rid of the or
seems to change this quite a bit
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Absolutely. Great idea. It feels like this was a POC for a fix for the first issue of not being able to show cluster subclasses on the timelines. I had a test for the base cluster class but subclasses weren't tested so I recreated it with them and was able to fix it with the code above.
For the second question, do we show other objects on the cluster timeline such as events from vms or hosts in the cluster, I think that's secondary question. We would need to ensure the UI passes limits to display it properly. I don't know if we should cowardly refuse to try to draw a timeline with 10,000+ events on it. For now, I was going to try to fix the bug first and then open it up for discussion on how to properly display it for large number of objects/events.
Ok. so all in all, showing any even from any object in the cluster seems useful, but since the query is so bad and so many objects come back, it is not useful. This new change is cluster only events and that reduces the number of events and will speed it up a bit. I do feel we should update it to use |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just the one change
@@ -182,6 +182,17 @@ def parent_datacenter | |||
detect_ancestor(:of_type => 'EmsFolder') { |a| a.kind_of?(Datacenter) } | |||
end | |||
|
|||
has_many :ems_events, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yea. I think we can just use has_many :ems_events
.
I read this and it makes me think the change is to change the subclasses to not change the column name and just use the base class' ems_cluster_id, but that's not the change in the PR, so I don't understand. |
EmsCluster was properly having ems_cluster_id as the ems_event_filter_column, subclasses had cluster_id as the column.
Fixes a UI timeline bug shown for Ems clusters as seen below: