mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-06 19:12:23 +00:00
added a BundleTracker as instrumentation for catching unexpected STOP events in bundles at runtime
This commit is contained in:
1 parent
3e7a89ef23
commit
a427a06d5c
2 files changed
+112
No files matched your search
+98
@@ -0,0 +1,98 @@
|
||||
package com.sap.sailing.server.admin;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.BundleEvent;
|
||||
import org.osgi.util.tracker.BundleTracker;
|
||||
|
||||
/**
|
||||
* Bundle tracker for tracking of the lifecycle of important runtime bundles
|
||||
* based on the extender pattern.
|
||||
* In order to track a bundle just add 'TrackLifecycle: true' to its OSGI manifest (MANIFEST.MF).
|
||||
* @author Frank (C5163874)
|
||||
*
|
||||
*/
|
||||
public class ExtenderBundleTracker extends BundleTracker<Bundle> {
|
||||
|
||||
private final Logger logger = Logger.getLogger(ExtenderBundleTracker.class.getName());
|
||||
|
||||
private static int allBundleStatesMask = Bundle.UNINSTALLED | Bundle.INSTALLED | Bundle.RESOLVED | Bundle.STARTING | Bundle.STOPPING | Bundle.ACTIVE;
|
||||
|
||||
public ExtenderBundleTracker(BundleContext context) {
|
||||
super(context, allBundleStatesMask, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bundle addingBundle(Bundle bundle, BundleEvent event) {
|
||||
String symbolicName = bundle.getSymbolicName();
|
||||
logger.info(symbolicName + " " + getBundleStateAsText(event));
|
||||
|
||||
return bundle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modifiedBundle(Bundle bundle, BundleEvent event, Bundle object) {
|
||||
String symbolicName = bundle.getSymbolicName();
|
||||
logger.info(symbolicName + " " + getBundleStateAsText(event));
|
||||
|
||||
if(event != null && event.getType() == BundleEvent.STOPPING) {
|
||||
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
||||
StringBuffer b = new StringBuffer();
|
||||
for(StackTraceElement traceElement: stackTrace) {
|
||||
b.append(traceElement.toString() + "\n");
|
||||
}
|
||||
logger.info(b.toString());
|
||||
}
|
||||
|
||||
String trackManifestEntry = (String) bundle.getHeaders().get("TrackLifecycle");
|
||||
if (trackManifestEntry != null) {
|
||||
trackLifecycle(bundle, event);
|
||||
}
|
||||
}
|
||||
|
||||
private void trackLifecycle(Bundle bundle, BundleEvent event) {
|
||||
if(event != null) {
|
||||
switch(event.getType()) {
|
||||
case BundleEvent.STOPPING:
|
||||
logger.severe("Bundle " + bundle.getSymbolicName() + " STOPPING");
|
||||
logger.severe("--- " + event);
|
||||
break;
|
||||
case BundleEvent.STOPPED:
|
||||
logger.severe("Bundle " + bundle.getSymbolicName() + " STOPPED");
|
||||
logger.severe("--- " + event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getBundleStateAsText(BundleEvent event) {
|
||||
String bundleState = "";
|
||||
if(event != null) {
|
||||
switch (event.getType()) {
|
||||
case BundleEvent.INSTALLED: bundleState = "INSTALLED";
|
||||
break;
|
||||
case BundleEvent.RESOLVED: bundleState = "RESOLVED";
|
||||
break;
|
||||
case BundleEvent.LAZY_ACTIVATION: bundleState = "LAZY_ACTIVATION";
|
||||
break;
|
||||
case BundleEvent.STARTING: bundleState = "STARTING";
|
||||
break;
|
||||
case BundleEvent.STARTED: bundleState = "STARTED";
|
||||
break;
|
||||
case BundleEvent.STOPPING: bundleState = "STOPPING";
|
||||
break;
|
||||
case BundleEvent.STOPPED: bundleState = "STOPPED";
|
||||
break;
|
||||
case BundleEvent.UPDATED: bundleState = "UPDATED";
|
||||
break;
|
||||
case BundleEvent.UNRESOLVED: bundleState = "UNRESOLVED";
|
||||
break;
|
||||
case BundleEvent.UNINSTALLED: bundleState = "UNINSTALLED";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return bundleState;
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.sap.sailing.server.admin;
|
||||
|
||||
import org.eclipse.osgi.framework.console.CommandInterpreter;
|
||||
import org.eclipse.osgi.framework.console.CommandProvider;
|
||||
|
||||
public class ServerCommandProvider implements CommandProvider {
|
||||
public void _hello(CommandInterpreter ci) {
|
||||
ci.print("Hello, " + ci.nextArgument());
|
||||
}
|
||||
|
||||
public String getHelp() {
|
||||
return "\thello - say hello\n";
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user