Goal
Allow administrators to view the last N (configurable) changes in the domain/server configurations made by other authorized administrators.
Requirements
There should be management operations to list the configuration changes.
Actually there are management operations at domain and host controller level, below you can see the add operation to enable the configuration changes and limit its history size, the following operation list the changes
Domain Level
/core-service=management/service=configuration-changes:add(max-history=100) /core-service=management/service=configuration-changes:list-changes
Host Level
/host=master/subsystem=core-management/service=configuration-changes:add(max-history=100) /host=master/subsystem=core-management/service=configuration-changes:list-changes
Actually the list-changes at domain level doesn't work, the design notes document related to the configuration changes
Design notes for Configuration changes in domain mode
Design notes for moving Configuration changes to the Core Management Subsystem
The list-changes for host level works and will be used as the entry point to list the changes in HAL.
Details
See below some samples from list-changes
[domain@localhost:9990 /] /host=master/subsystem=core-management/service=configuration-changes:list-changes
{
"outcome" => "success",
"result" => [
{
"operation-date" => "2016-06-24T19:30:49.485Z",
"domain-uuid" => "b957755a-0c00-4895-b196-c0246899cb2e",
"access-mechanism" => "HTTP",
"remote-address" => "127.0.0.1/127.0.0.1",
"outcome" => "success",
"operations" => [{
"name" => "org.jboss.testlog",
"category" => "org.jboss.testlog",
"filter-spec" => undefined,
"handlers" => undefined,
"level" => "INFO",
"use-parent-handlers" => true,
"address" => [
("profile" => "default"),
("subsystem" => "logging"),
("logger" => "org.jboss.testlog")
],
"operation" => "add",
"operation-headers" => {
"access-mechanism" => "HTTP",
"caller-type" => "user"
}
}]
},
{
"operation-date" => "2016-06-24T19:30:15.695Z",
"domain-uuid" => "e08c4b39-c691-433b-8bae-8a81dcb6e50c",
"access-mechanism" => "HTTP",
"remote-address" => "127.0.0.1/127.0.0.1",
"outcome" => "success",
"operations" => [{
"operation" => "composite",
"address" => [],
"steps" => [{
"address" => [
("profile" => "default"),
("subsystem" => "transactions")
],
"operation" => "write-attribute",
"name" => "statistics-enabled",
"value" => true
}],
"operation-headers" => {
"access-mechanism" => "HTTP",
"caller-type" => "user"
}
}]
},
{
"operation-date" => "2016-06-24T19:30:05.170Z",
"domain-uuid" => "397f292f-ffab-49eb-a0b8-52a283ed0868",
"access-mechanism" => "HTTP",
"remote-address" => "127.0.0.1/127.0.0.1",
"outcome" => "success",
"operations" => [{
"user-name" => "sa",
"security-domain" => "",
"jndi-name" => "java:jboss/datasources/ExampleDS",
"pool-name" => "",
"new-connection-sql" => "",
"connection-url" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE",
"driver-class" => "",
"datasource-class" => "",
"driver-name" => "h2",
"valid-connection-checker-class-name" => "",
"check-valid-connection-sql" => "",
"background-validation" => false,
"validate-on-match" => false,
"stale-connection-checker-class-name" => "",
"exception-sorter-class-name" => "",
"share-prepared-statements" => false,
"jta" => true,
"use-ccm" => true,
"transaction-isolation" => "",
"set-tx-query-timeout" => false,
"statistics-enabled" => false,
"track-statements" => "NOWARN",
"use-fast-fail" => false,
"allow-multiple-users" => false,
"spy" => false,
"enabled" => false,
"password" => "sa",
"name" => "enabled",
"address" => [
("profile" => "default"),
("subsystem" => "datasources"),
("data-source" => "ExampleDS")
],
"operation" => "write-attribute",
"value" => true,
"operation-headers" => {
"access-mechanism" => "HTTP",
"caller-type" => "user"
}
}]
},
{
"operation-date" => "2016-06-24T19:30:01.052Z",
"domain-uuid" => "95ed4fe3-1fa4-48e8-b7d0-bf9dfc5f1e42",
"access-mechanism" => "HTTP",
"remote-address" => "127.0.0.1/127.0.0.1",
"outcome" => "success",
"operations" => [{
"user-name" => "sa",
"security-domain" => "",
"jndi-name" => "java:jboss/datasources/ExampleDS",
"pool-name" => "",
"new-connection-sql" => "",
"connection-url" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE",
"driver-class" => "",
"datasource-class" => "",
"driver-name" => "h2",
"valid-connection-checker-class-name" => "",
"check-valid-connection-sql" => "",
"background-validation" => false,
"validate-on-match" => false,
"stale-connection-checker-class-name" => "",
"exception-sorter-class-name" => "",
"share-prepared-statements" => false,
"jta" => true,
"use-ccm" => true,
"transaction-isolation" => "",
"set-tx-query-timeout" => false,
"statistics-enabled" => false,
"track-statements" => "NOWARN",
"use-fast-fail" => false,
"allow-multiple-users" => false,
"spy" => false,
"enabled" => true,
"password" => "sa",
"name" => "enabled",
"address" => [
("profile" => "default"),
("subsystem" => "datasources"),
("data-source" => "ExampleDS")
],
"operation" => "write-attribute",
"value" => false,
"operation-headers" => {
"access-mechanism" => "HTTP",
"caller-type" => "user"
}
}]
},
{
"operation-date" => "2016-06-24T19:24:06.687Z",
"domain-uuid" => "aa4e799c-7ac1-4a90-96a1-b8e88058af3f",
"access-mechanism" => "NATIVE",
"remote-address" => "127.0.0.1/127.0.0.1",
"outcome" => "success",
"operations" => [{
"address" => [
("host" => "master"),
("core-service" => "management"),
("service" => "configuration-changes")
],
"operation" => "write-attribute",
"name" => "max-history",
"value" => 20,
"operation-headers" => {
"caller-type" => "user",
"access-mechanism" => "NATIVE"
}
}]
},
{
"operation-date" => "2016-06-24T17:17:47.737Z",
"access-mechanism" => "NATIVE",
"remote-address" => "127.0.0.1/127.0.0.1",
"outcome" => "success",
"operations" => [{
"address" => [("host" => "master")],
"operation" => "reload",
"operation-headers" => {
"caller-type" => "user",
"access-mechanism" => "NATIVE"
}
}]
},
{
"operation-date" => "2016-06-24T16:56:40.487Z",
"domain-uuid" => "a6de0c9b-600b-4a3a-9166-032753e48679",
"access-mechanism" => "HTTP",
"remote-address" => "127.0.0.1/127.0.0.1",
"outcome" => "success",
"operations" => [{
"name" => "pool2",
"max-threads" => 10L,
"address" => [
("profile" => "default"),
("subsystem" => "batch-jberet"),
("thread-pool" => "pool2")
],
"operation" => "add",
"operation-headers" => {
"access-mechanism" => "HTTP",
"caller-type" => "user"
}
}]
},
The result shows a standard set of attributes, as there many attributes to be displayed, they must be displayed in a tabular mode, read-only.
There will be no automatic update, the user must click on the refresh button to update the GUI to the latest configuration changes for the selected host.
GUI Proposals
As these data are associated to the host level, a good place to show is at the drop down menu for each host item, see prototype images.
A panel as the following should be displayed.
There is a button to enable/disable the configuration-changes at
/host=master/subsystem=core-management/service=configuration-changes
The "enable" button will ask the user to input the number of history size, it is a optional field (default is 10). Then it will add the service as
/host=master/subsystem=core-management/service=configuration-changes:add(max-history=20)
The disable button will remove the service.
The standard fields will be displayed in the table: data, access mechanism, remote address, resource and operation.
When the user selects any item from the table, the remaining data will be displayed in the section named "Configuration Change Details" below the table as raw results for the selected item.
There is a "refresh" button to reload the configuration-changes:list-changes
A text field named "quick filter" is to be added, it will filter the results in the table, as the user types in it.
Also there should be a limit of 20 items to show in the table and a pagination component should be added.
Related issues
Configuration Change reporting
[WFCORE-671] Configuration change reporting - JBoss Issue Tracker
Configuration Change reporting - HAL
[HAL-616] Configuration Change Notifications - JBoss Issue Tracker
Design notes for Configuration changes in domain mode
Design notes for moving Configuration changes to the Core Management Subsystem
Comments