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
React Timeline Chart and Table Component #8562
Conversation
41d77ba
to
07cb163
Compare
e6bcec9
to
f765753
Compare
0267fbe
to
26e68d9
Compare
1e21e88
to
c5073e5
Compare
@miq-bot add-reviewer @DavidResende0 Opening this PR up for review. Any additional updates or changes I'd want to do on this i've listed under |
app/javascript/components/timeline-options/timeline-options-simple.schema.js
Outdated
Show resolved
Hide resolved
app/javascript/components/timeline-options/timeline-options-simple.schema.js
Show resolved
Hide resolved
app/javascript/components/timeline-options/timeline-options.jsx
Outdated
Show resolved
Hide resolved
@MelsHyrule Does this PR drop d3? I don't see the package.json nor yarn.lock changing, unless I'm misreading? |
@Fryguy Ah i removed the referenced in the code but not in package.json, will remove now, thanks for catching that |
1e4198c
to
82d1310
Compare
@@ -43,7 +43,7 @@ const smartAndOrStatements = (group, array) => { | |||
export const buildUrl = (values) => { | |||
// TODO: Different timeline show different data, ensure all necesary data is pulled | |||
let url = `/api/event_streams?limit=5000&offset=0&expand=resources`; | |||
url += `&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host.name,source`; | |||
url += `&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host,source`; |
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.
I noticed you removed host.name - won't that make it a lot more expensive if it's returning the entire host object?
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.
Yes, that was causing the issue 4) above. That was removed and I added issue 7) to add the proper ems_id/host_id filter[] as we're not filtering properly right now.
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.
I was thinking of either a virtual column or something that would make it more reliable as the host.name
sometimes comes back and others it doesn't from the same API request. It makes the logic needlessly complex in the UI.
Example API response without host.name:
{
"href": "http://localhost:3000/api/event_streams/48428",
"id": "48428",
"event_type": "MODIFY_URI",
"ems_id": "2",
"type": "EmsEvent",
"timestamp": "2022-10-05T04:00:31Z",
"created_on": "2022-10-05T03:29:55Z",
"source": "IBM_POWER_HMC",
"host_id": "1",
"group": "configuration",
"group_level": "detail",
"group_name": "Configuration/Reconfiguration"
},
and with a host.name(from the same API request):
{
"href": "http://localhost:3000/api/event_streams/67912",
"id": "67912",
"event_type": "MODIFY_URI",
"ems_id": "2",
"type": "EmsEvent",
"timestamp": "2022-10-06T09:58:54Z",
"created_on": "2022-10-06T09:28:19Z",
"source": "IBM_POWER_HMC",
"host_id": "7",
"group": "configuration",
"group_level": "detail",
"group_name": "Configuration/Reconfiguration",
"host": {
"name": "porthos"
}
},
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.
I've opened this PR to add virtual columns to address this problem: ManageIQ/manageiq#22398
|
||
window.moment = require('moment'); | ||
require('moment-strftime'); | ||
require('moment-timezone'); | ||
require('moment-duration-format')(window.moment); | ||
|
||
require('@pf3/timeline'); |
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.
🙌
@@ -65,7 +64,7 @@ | |||
"codemirror": "~5.58.2", | |||
"connected-react-router": "~6.7.0", | |||
"create-react-context": "~0.3.0", | |||
"d3-7.6.1": "npm:d3@^7.6.1", | |||
"d3": "^7.8.2", |
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.
Wish we could comment that this is only needed for @carbon/charts
Details
|
cbc1e63
to
bca12e3
Compare
Checked commit MelsHyrule@bca12e3 with ruby 2.6.10, rubocop 1.28.2, haml-lint 0.35.0, and yamllint |
Sent in chat: ok, so the remaining TBD is: See above for details on each. We can fix each separately in followup PRs. EDIT: It's ODD that @MelsHyrule only fixes even issues. |
Well you see @jrafanie they're a PRIME opportunity |
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.
LGTM
What happens in other screens like VM timelines? Do we also get non-vm events there? Or does that fall into the same concern about the emas_id/host_id |
Yes, it's the same thing |
See client UI code in: ManageIQ/manageiq-ui-classic#8562 ManageIQ/manageiq-ui-classic#8642 Previously, the UI needed to run an API request including the vm, host, and ext management system and all of their data because sometimes the event stream didn't have a vm, host or ems so the UI code would need to add conditional logic as vm.name, host.name and ext_mangement_system would be empty for some entries and exist for others. See [1]. We can add virtual columns to always return a name or null if the relationship doesn't exist or the name is null. This saves us lots of data if we're only using a single column from each relationship. For a specific API call with proper timestamp filtering so we only return tens of thousands of event_streams: "name": "event_streams", "count": 299925, "subcount": 1000, "subquery_count": 39487, "pages": 40, Before: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host,source,message,vm,ext_management_system&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z 20.07 s 2.59 MB ``` After: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host_name,source,message,vm_or_template_name,ext_management_system_name&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z (replacing ext_management_system, host, and vm with ext_management_system_name, host_name, and vm_or_template_name) 20.10 s 375.04 KB ``` [1] If you use association.method format: vm_or_template.name, ext_management_system.name, host.name, you are missing sections if they're nil, leading to client code needing to have conditional logic: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template": { "name": "vm1" }, "ext_management_system": { "name": "ems1" } }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "ext_management_system": { "name": "ems1" } }, ``` If you use virtual columns, it's flat and easy to use: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": "vm1", "ext_management_system_name": "ems1" }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": null, "ext_management_system_name": "ems1" }, ```
See client UI code in: ManageIQ/manageiq-ui-classic#8562 ManageIQ/manageiq-ui-classic#8642 Previously, the UI needed to run an API request including the `vm`, `host`, and `ext management system` and all of their data because sometimes the event stream didn't have a `vm`, `host` or `ems` so the UI code would need to add conditional logic as `vm.name`, `host.name` and `ext_mangement_system.name` would be empty for some entries and exist for others. See [1]. We can add virtual columns to always return a name or null if the relationship doesn't exist or the name is null. This saves us lots of data if we're only using a single column from each relationship. For a specific API call with proper timestamp filtering so we only return tens of thousands of event_streams: "name": "event_streams", "count": 299925, "subcount": 1000, "subquery_count": 39487, "pages": 40, Before: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host,source,message,vm,ext_management_system&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z 20.07 s 2.59 MB ``` After: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host_name,source,message,vm_or_template_name,ext_management_system_name&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z (replacing ext_management_system, host, and vm with ext_management_system_name, host_name, and vm_or_template_name) 20.10 s 375.04 KB ``` [1] If you use association.method format: vm_or_template.name, ext_management_system.name, host.name, you are missing sections if they're nil, leading to client code needing to have conditional logic: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template": { "name": "vm1" }, "ext_management_system": { "name": "ems1" } }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "ext_management_system": { "name": "ems1" } }, ``` If you use virtual columns, it's flat and easy to use: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": "vm1", "ext_management_system_name": "ems1" }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": null, "ext_management_system_name": "ems1" }, ```
See client UI code in: ManageIQ/manageiq-ui-classic#8562 ManageIQ/manageiq-ui-classic#8642 This is a followup to ManageIQ#22361 Previously, the UI needed to run an API request including the `vm`, `host`, and `ext management system` and all of their data because sometimes the event stream didn't have a `vm`, `host` or `ems` so the UI code would need to add conditional logic as `vm.name`, `host.name` and `ext_mangement_system.name` would be empty for some entries and exist for others. See [1]. We can add virtual columns to always return a name or null if the relationship doesn't exist or the name is null. This saves us lots of data if we're only using a single column from each relationship. For a specific API call with proper timestamp filtering so we only return tens of thousands of event_streams: "name": "event_streams", "count": 299925, "subcount": 1000, "subquery_count": 39487, "pages": 40, Before: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host,source,message,vm,ext_management_system&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z 20.07 s 2.59 MB ``` After: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host_name,source,message,vm_or_template_name,ext_management_system_name&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z (replacing ext_management_system, host, and vm with ext_management_system_name, host_name, and vm_or_template_name) 20.10 s 375.04 KB ``` [1] If you use association.method format: vm_or_template.name, ext_management_system.name, host.name, you are missing sections if they're nil, leading to client code needing to have conditional logic: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template": { "name": "vm1" }, "ext_management_system": { "name": "ems1" } }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "ext_management_system": { "name": "ems1" } }, ``` If you use virtual columns, it's flat and easy to use: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": "vm1", "ext_management_system_name": "ems1" }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": null, "ext_management_system_name": "ems1" }, ```
See client UI code in: ManageIQ/manageiq-ui-classic#8562 ManageIQ/manageiq-ui-classic#8642 This is a followup to ManageIQ#22361 Previously, the UI needed to run an API request including the `vm`, `host`, and `ext management system` and all of their data because sometimes the event stream didn't have a `vm`, `host` or `ems` so the UI code would need to add conditional logic as `vm.name`, `host.name` and `ext_mangement_system.name` would be empty for some entries and exist for others. See [1]. We can add virtual delegates to always return a name or null if the relationship doesn't exist or the name is null. This saves us lots of data if we're only using a single column from each relationship. For a specific API call with proper timestamp filtering so we only return tens of thousands of event_streams: "name": "event_streams", "count": 299925, "subcount": 1000, "subquery_count": 39487, "pages": 40, Before: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host,source,message,vm,ext_management_system&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z 20.07 s 2.59 MB ``` After: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host_name,source,message,vm_or_template_name,ext_management_system_name&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z (replacing ext_management_system, host, and vm with ext_management_system_name, host_name, and vm_or_template_name) 15.89 s 391 KB ``` [1] If you use association.method format: vm_or_template.name, ext_management_system.name, host.name, you are missing sections if they're nil, leading to client code needing to have conditional logic: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template": { "name": "vm1" }, "ext_management_system": { "name": "ems1" } }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "ext_management_system": { "name": "ems1" } }, ``` If you use virtual columns, it's flat and easy to use: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": "vm1", "ext_management_system_name": "ems1" }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": null, "ext_management_system_name": "ems1" }, ```
See client UI code in: ManageIQ/manageiq-ui-classic#8562 ManageIQ/manageiq-ui-classic#8642 This is a followup to ManageIQ#22361 Previously, the UI needed to run an API request including the `vm`, `host`, and `ext management system` and all of their data because sometimes the event stream didn't have a `vm`, `host` or `ems` so the UI code would need to add conditional logic as `vm.name`, `host.name` and `ext_mangement_system.name` would be empty for some entries and exist for others. See [1]. We can add virtual delegates to always return a name or null if the relationship doesn't exist or the name is null. This saves us lots of data if we're only using a single column from each relationship. For a specific API call with proper timestamp filtering so we only return tens of thousands of event_streams: "name": "event_streams", "count": 299925, "subcount": 1000, "subquery_count": 39487, "pages": 40, Before: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host,source,message,vm,ext_management_system&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z 20.07 s 2.59 MB ``` After: ``` http://localhost:3000/api/event_streams?limit=5000&offset=0&expand=resources&attributes=group,group_level,group_name,id,event_type,ems_id,type,timestamp,created_on,host_name,source,message,vm_or_template_name,ext_management_system_name&filter[]=ems_id=2&filter[]=type=EmsEvent&filter[]=group=[configuration,other]&filter[]=group_level=[warning,detail,critical]&filter[]=timestamp%3E2022-10-01T22:19:39.148Z&filter[]=timestamp%3C2022-10-5T22:19:39.148Z (replacing ext_management_system, host, and vm with ext_management_system_name, host_name, and vm_or_template_name) 15.89 s 391 KB ``` [1] If you use association.method format: vm_or_template.name, ext_management_system.name, host.name, you are missing sections if they're nil, leading to client code needing to have conditional logic: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template": { "name": "vm1" }, "ext_management_system": { "name": "ems1" } }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "ext_management_system": { "name": "ems1" } }, ``` If you use virtual columns, it's flat and easy to use: ``` { "href": "http://localhost:3000/api/event_streams/20409", "id": "20409", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:31Z", "created_on": "2022-10-03T12:35:09Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": "vm1", "ext_management_system_name": "ems1" }, { "href": "http://localhost:3000/api/event_streams/20410", "id": "20410", "event_type": "INVALID_URI", "ems_id": "2", "type": "EmsEvent", "timestamp": "2022-10-03T13:05:51Z", "created_on": "2022-10-03T12:35:24Z", "host_name": null, "source": "IBM_POWER_HMC", "message": null, "group": "other", "group_level": "detail", "group_name": "Other", "vm_or_template_name": null, "ext_management_system_name": "ems1" }, ```
Continuation of the React conversion for the timelines page. Part 1 of the page conversion can be found here #8496
This PR depends on ManageIQ/manageiq#22304 (or it's replacement ManageIQ/manageiq#22305) for optimization of the Event Streams API call.
Removed
@pf3/timeline
and old D3 code (https://github.com/ManageIQ/manageiq-ui-classic/blob/master/app/javascript/oldjs/miq_timeline.js) part of the update to jQuery3 #5585 (comment)BEFORE
AFTER
Post Notes:
Useful links for timeline-chart dispatch events
Line Chart scaleType
Removed `@pf3/timeline` in terms of `d3`
so we will see in the yarn.lock multiple imports which i dont see any problem with, this is just the natural behavior of package imports
Next Steps:
Improve API call #8642
Improve Table
Apply Reviews