[ 
https://issues.apache.org/jira/browse/FELIX-4294?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13806445#comment-13806445
 ] 

Marcel Offermans commented on FELIX-4294:
-----------------------------------------

You're welcome. I remember that during a face to face meeting, Xander and I 
discussed some other possible extensions he had as well. I'm sure he has some 
feedback on this as well. :)

> Dependency Manager Shell improvements
> -------------------------------------
>
>                 Key: FELIX-4294
>                 URL: https://issues.apache.org/jira/browse/FELIX-4294
>             Project: Felix
>          Issue Type: Improvement
>          Components: Dependency Manager
>    Affects Versions: dependencymanager-3.1.0
>            Reporter: Pierre De Rop
>            Assignee: Pierre De Rop
>            Priority: Minor
>
> This issue proposes two enhancements regarding the dependency manager shell.
> 1) display component names more consistently
> =====================================
> - some components are sometimes displayed with a "class " prefix, while 
> others are not:
> class org.amdatu.multitenant.adapter.TenantAdapter registered
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=18)
>  registered
> For readability, the "class " could be just removed.
> - When a component does not contain any service properties, an empty "()" is 
> displayed after the component name
> pierre.multitenant.both.Both() registered
>  org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=3) 
> registered
> As in previous case and for readability, it makes sense to not append an 
> empty "()" after the component name, if it has no properties.
> 2) add "filter" and "nofilters" options for filter displayed components
> =====================================================
> By default, the  "dm"  shell command dumps all components. But sometimes, it 
> is desirable to display a subset of all components, 
> using a regular expression on the component name or on the component service 
> properties.
> We can of course do this using gogo shell "grep", but the problem is that we 
> may miss some important informations, like the component bundle id, or the 
> component dependencies.
> As an example, let's assume we are using the AMDATU mutli-tenancy framework. 
> With AMDATU MT, many internal AMDATU components are instantiated behind the 
> scene for a given tenant bundle.
> In the following example, we have three tenant bundles, and if we type "dm", 
> then we are getting a long list of components, including:
>   - application tenant components: pierre.multitenant.*
>   - some internal amdatu mt components (org.amdatu.multitenant.*):
> g! dm
> [2] org.amdatu.multitenant.conf
>   
> org.osgi.service.cm.ManagedServiceFactory(service.pid=org.amdatu.tenant.factory)
>  registered
>     org.amdatu.multitenant.TenantFactoryConfiguration service required 
> available
>     org.osgi.service.log.LogService service optional available
> [3] org.amdatu.multitenant.factory
>   org.amdatu.multitenant.TenantFactoryConfiguration() registered
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.TenantLifeCycleListener service optional available
>   
> org.amdatu.multitenant.Tenant(service.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,service.factoryPid=org.amdatu.tenant.factory,org.amdatu.tenant.name=bar2,felix.fileinstall.filename=file:/home/nxuser/work/osgi/amdatu/felix-framework-4.2.1/load/org.amdatu.tenant.factory-2.cfg,foo=bar)
>  registered
>   
> org.amdatu.multitenant.Tenant(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,org.amdatu.tenant.name=Platform
>  Tenant) registered
>   
> org.amdatu.multitenant.Tenant(service.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,service.factoryPid=org.amdatu.tenant.factory,felix.fileinstall.filename=file:/home/nxuser/work/osgi/amdatu/felix-framework-4.2.1/load/org.amdatu.tenant.factory-1.cfg,foo=bar2)
>  registered
> [5] org.amdatu.multitenant.org.apache.felix.dependencymanager.runtime
>   class org.apache.felix.dm.runtime.DependencyManagerRuntime registered
>     org.osgi.service.log.LogService service optional unavailable
>     active (DependencyManager-Component=*) bundle optional unavailable
>   org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=3) 
> registered
>   Adapter for interface org.amdatu.multitenant.Tenant registered
>     org.amdatu.multitenant.Tenant service optional available
>     org.osgi.service.log.LogService service optional available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=32)(org.apache.felix.dependencymanager.aspect=32)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee)(bundle.id=5))
>  service required available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=33)(org.apache.felix.dependencymanager.aspect=33)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)(bundle.id=5)) service 
> required available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=34)(org.apache.felix.dependencymanager.aspect=34)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c)(bundle.id=5))
>  service required available
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,bundle.id=5)
>  registered
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=5)
>  registered
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,bundle.id=5)
>  registered
>   class org.apache.felix.dm.runtime.DependencyManagerRuntime registered
>     org.osgi.service.log.LogService service optional unavailable
>     active (DependencyManager-Component=*) bundle optional unavailable
>   class org.apache.felix.dm.runtime.DependencyManagerRuntime registered
>     org.osgi.service.log.LogService service optional unavailable
>     active (DependencyManager-Component=*) bundle optional unavailable
> [16] pierre.multitenant.tenant
>   pierre.multitenant.tenant.Tenant2() registered
>   class pierre.multitenant.tenant.Tenant1 registered
>     pierre.multitenant.tenant.Tenant2 service required available
>     org.osgi.service.log.LogService service required available
>     pierre.multitenant.both.Both service required available
>     pierre.multitenant.platform.Platform service required available
>   pierre.multitenant.tenant.Tenant2() registered
>   class pierre.multitenant.tenant.Tenant1 registered
>     pierre.multitenant.tenant.Tenant2 service required available
>     org.osgi.service.log.LogService service required available
>     pierre.multitenant.both.Both service required available
>     pierre.multitenant.platform.Platform service required available
>   org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=2) 
> registered
>   Adapter for interface org.amdatu.multitenant.Tenant with filter 
> (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) registered
>     org.amdatu.multitenant.Tenant 
> (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) service optional 
> available
>     org.osgi.service.log.LogService service optional available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=32)(org.apache.felix.dependencymanager.aspect=32)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee)(bundle.id=16))
>  service required available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=34)(org.apache.felix.dependencymanager.aspect=34)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c)(bundle.id=16))
>  service required available
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,bundle.id=16)
>  registered
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,bundle.id=16)
>  registered
> [17] pierre.multitenant.platform
>   org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=1) 
> registered
>   Adapter for interface org.amdatu.multitenant.Tenant with filter 
> (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) registered
>     org.amdatu.multitenant.Tenant 
> (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) service optional available
>     org.osgi.service.log.LogService service optional available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=33)(org.apache.felix.dependencymanager.aspect=33)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)(bundle.id=17)) service 
> required available
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=17)
>  registered
>   pierre.multitenant.platform.Platform() registered
>     org.osgi.service.log.LogService service required available
>     pierre.multitenant.both.Both service required available
> [18] pierre.multitenant.both
>   pierre.multitenant.both.Both() registered
>   org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=3) 
> registered
>   Adapter for interface org.amdatu.multitenant.Tenant registered
>     org.amdatu.multitenant.Tenant service optional available
>     org.osgi.service.log.LogService service optional available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=32)(org.apache.felix.dependencymanager.aspect=32)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee)(bundle.id=18))
>  service required available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=33)(org.apache.felix.dependencymanager.aspect=33)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)(bundle.id=18)) service 
> required available
>   class org.amdatu.multitenant.adapter.TenantAdapter registered
>     org.amdatu.multitenant.Tenant 
> (|(service.id=34)(org.apache.felix.dependencymanager.aspect=34)) service 
> required available
>     org.osgi.service.log.LogService service optional available
>     org.amdatu.multitenant.adapter.BundleDataStore 
> (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c)(bundle.id=18))
>  service required available
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,bundle.id=18)
>  registered
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=18)
>  registered
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,bundle.id=18)
>  registered
>   pierre.multitenant.both.Both() registered
>   pierre.multitenant.both.Both() registered
> So, what we would like to do is to be able to filter the displayed components 
> with a new filter option.
> For example: To display only the application components matching 
> "pierre.multitenant.*:
> g! dm filter pierre.multitenant.*
> Current component filters:[pierre.multitenant.*]
> g! dm
> [16] pierre.multitenant.tenant
>   pierre.multitenant.tenant.Tenant2() registered
>   pierre.multitenant.tenant.Tenant2() registered
> [17] pierre.multitenant.platform
>   pierre.multitenant.platform.Platform() registered
>     org.osgi.service.log.LogService service required available
>     pierre.multitenant.both.Both service required available
> [18] pierre.multitenant.both
>   pierre.multitenant.both.Both() registered
>   pierre.multitenant.both.Both() registered
>   pierre.multitenant.both.Both() registered
> To display all PLATFORM tenants:
> g! dm nofilters
> g! dm filter .*pid=org.amdatu.tenant.PLATFORM.*
> g! dm
> [3] org.amdatu.multitenant.factory
>   
> org.amdatu.multitenant.Tenant(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,org.amdatu.tenant.name=Platform
>  Tenant) registered
> [5] org.amdatu.multitenant.org.apache.felix.dependencymanager.runtime
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=5)
>  registered
> [16] pierre.multitenant.tenant
>   Adapter for interface org.amdatu.multitenant.Tenant with filter 
> (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) registered
>     org.amdatu.multitenant.Tenant 
> (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) service optional 
> available
>     org.osgi.service.log.LogService service optional available
> [17] pierre.multitenant.platform
>   Adapter for interface org.amdatu.multitenant.Tenant with filter 
> (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) registered
>     org.amdatu.multitenant.Tenant 
> (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) service optional available
>     org.osgi.service.log.LogService service optional available
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=17)
>  registered
> [18] pierre.multitenant.both
>   
> org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=18)
>  registered
> To display every components except any components having the service property 
> "org.amdatu.tenant.name=bar2":
> g! dm nofilters
> g! dm filter !.*org.amdatu.tenant.name=bar2.*
> - Filters are cumulative: you can call "dm filter XXX" multiple times and 
> each filter can have multiple regex (space separated).
> - Components are displayed only if their name or their service properties are 
> matching at least one of the the specified filter.
> - Filters can be negated, using the special "!" prefix.
> - "dm filter" without any arguments just displays the current filters.
> - "dm nofilters" disable every previously added filter.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to