protected void processFeatureEvent(FeatureEvent event, List<Feature> toInstall) throws InterruptedException, Exception { if(event.getType() == EventType.FeatureInstalled) { toInstall.add(event.getFeature()); LinkedHashMultimap<Feature,FeatureConfigSnapshotHolder> result = configPusher.pushConfigs(toInstall); toInstall.removeAll(result.keySet()); } else if(event.getType() == EventType.FeatureUninstalled) { toInstall.remove(event.getFeature()); } }
public JmxFeatureEvent(FeatureEvent event) { try { String[] itemNames = FeaturesServiceMBean.FEATURE_EVENT; Object[] itemValues = new Object[itemNames.length]; itemValues[0] = event.getFeature().getName(); itemValues[1] = event.getFeature().getVersion(); itemValues[2] = event.getRegion(); switch (event.getType()) { case FeatureInstalled: itemValues[2] = FeaturesServiceMBean.FEATURE_EVENT_EVENT_TYPE_INSTALLED; break; case FeatureUninstalled: itemValues[2] = FeaturesServiceMBean.FEATURE_EVENT_EVENT_TYPE_UNINSTALLED; break; default: throw new IllegalStateException("Unsupported event type: " + event.getType()); } data = new CompositeDataSupport(FEATURE_EVENT, itemNames, itemValues); } catch (OpenDataException e) { throw new IllegalStateException("Cannot form feature event open data", e); } }
@Override public void run() { List<Feature> toInstall = new ArrayList<Feature>(); FeatureEvent event = null; boolean interuppted = false; while(true) { try { if(!interuppted) { if(toInstall.isEmpty()) { event = queue.take(); } else { event = queue.poll(POLL_TIME, TimeUnit.MILLISECONDS); } if(event != null && event.getFeature() !=null) { processFeatureEvent(event,toInstall); } } else if(toInstall.isEmpty()) { LOG.error("ConfigPushingRunnable - exiting"); return; } } catch (InterruptedException e) { LOG.error("ConfigPushingRunnable - interupted"); interuppted = true; } catch (Exception e) { LOG.error("Exception while processing features {} event {}", toInstall, event, e); } } }
@Override public void registerListener(FeaturesListener listener) { listeners.add(listener); try { Set<String> repositoriesList = new TreeSet<>(); Map<String, Set<String>> installedFeatures = new TreeMap<>(); synchronized (lock) { repositoriesList.addAll(state.repositories); installedFeatures.putAll(copy(state.installedFeatures)); } for (String uri : repositoriesList) { Repository repository = repositories.create(URI.create(uri), false); listener.repositoryEvent(new RepositoryEvent(repository, RepositoryEvent.EventType.RepositoryAdded, true)); } for (Map.Entry<String, Set<String>> entry : installedFeatures.entrySet()) { for (String id : entry.getValue()) { Feature feature = org.apache.karaf.features.internal.model.Feature.valueOf(id); listener.featureEvent(new FeatureEvent(FeatureEvent.EventType.FeatureInstalled, feature, entry.getKey(), true)); } } } catch (Exception e) { LOGGER.error("Error notifying listener about the current state", e); } }
public void featureEvent(FeatureEvent event) { if (!event.isReplay()) { Notification notification = new Notification(FEATURE_EVENT_TYPE, objectName, sequenceNumber++); notification.setUserData(new JmxFeatureEvent(event).asCompositeData()); sendNotification(notification); } }
Feature feature = dstate.featuresById.get(name); if (feature != null) { callback.callListeners(new FeatureEvent(FeatureEvent.EventType.FeatureUninstalled, feature, entry.getKey(), false)); Feature feature = dstate.featuresById.get(name); if (feature != null) { callback.callListeners(new FeatureEvent(FeatureEvent.EventType.FeatureInstalled, feature, entry.getKey(), false));
public void featureEvent(FeatureEvent event) { try { EventAdmin eventAdmin = tracker.getService(); if (eventAdmin == null) { return; } Dictionary<String, Object> props = new Hashtable<>(); props.put(EventConstants.TYPE, event.getType()); props.put(EventConstants.EVENT, event); props.put(EventConstants.TIMESTAMP, System.currentTimeMillis()); props.put(EventConstants.FEATURE_NAME, event.getFeature().getName()); props.put(EventConstants.FEATURE_VERSION, event.getFeature().getVersion()); String topic; switch (event.getType()) { case FeatureInstalled: topic = EventConstants.TOPIC_FEATURES_INSTALLED; break; case FeatureUninstalled: topic = EventConstants.TOPIC_FEATURES_UNINSTALLED; break; default: throw new IllegalStateException("Unknown features event type: " + event.getType()); } eventAdmin.postEvent(new Event(topic, props)); } catch (IllegalStateException e) { LOGGER.warn("Unable to post event to EventAdmin", e); } }
for (Group group : groups) { Feature feature = event.getFeature(); String name = feature.getName(); String version = feature.getVersion(); FeatureEvent.EventType type = event.getType(); clusterFeatureState.setName(event.getFeature().getName()); clusterFeatureState.setVersion(event.getFeature().getVersion()); if (FeatureEvent.EventType.FeatureInstalled.equals(event.getType())) { clusterFeatureState.setInstalled(Boolean.TRUE); } else { clusterFeatureState.setInstalled(Boolean.FALSE); clusterFeatures.put(event.getFeature().getName() + "/" + event.getFeature().getVersion(), clusterFeatureState);
for (Group group : groups) { Feature feature = event.getFeature(); String name = feature.getName(); String version = feature.getVersion(); FeatureEvent.EventType type = event.getType(); clusterFeatureState.setName(event.getFeature().getName()); clusterFeatureState.setVersion(event.getFeature().getVersion()); if (FeatureEvent.EventType.FeatureInstalled.equals(event.getType())) { clusterFeatureState.setInstalled(Boolean.TRUE); } else { clusterFeatureState.setInstalled(Boolean.FALSE); clusterFeatures.put(event.getFeature().getName() + "/" + event.getFeature().getVersion(), clusterFeatureState);