Return-Path: X-Original-To: apmail-felix-dev-archive@www.apache.org Delivered-To: apmail-felix-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A8F0310EEC for ; Sun, 27 Oct 2013 19:04:53 +0000 (UTC) Received: (qmail 98219 invoked by uid 500); 27 Oct 2013 19:04:49 -0000 Delivered-To: apmail-felix-dev-archive@felix.apache.org Received: (qmail 98088 invoked by uid 500); 27 Oct 2013 19:04:35 -0000 Mailing-List: contact dev-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list dev@felix.apache.org Received: (qmail 98065 invoked by uid 99); 27 Oct 2013 19:04:30 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 27 Oct 2013 19:04:30 +0000 Date: Sun, 27 Oct 2013 19:04:30 +0000 (UTC) From: "Pierre De Rop (JIRA)" To: dev@felix.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Created] (FELIX-4294) Dependency Manager Shell improvements MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 Pierre De Rop created FELIX-4294: ------------------------------------ Summary: 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)