-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #96 from assimbly/develop
Develop
- Loading branch information
Showing
35 changed files
with
1,570 additions
and
172 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
108 changes: 0 additions & 108 deletions
108
dil/src/main/java/org/assimbly/dil/event/EventCollector.java
This file was deleted.
Oops, something went wrong.
227 changes: 227 additions & 0 deletions
227
dil/src/main/java/org/assimbly/dil/event/EventConfigurer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,227 @@ | ||
package org.assimbly.dil.event; | ||
|
||
import ch.qos.logback.classic.Level; | ||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import org.apache.camel.CamelContext; | ||
import org.apache.camel.spi.EventNotifier; | ||
import org.assimbly.dil.event.collect.MessageCollector; | ||
import org.assimbly.dil.event.collect.LogCollector; | ||
import org.assimbly.dil.event.collect.StepCollector; | ||
import org.assimbly.dil.event.domain.Collection; | ||
import org.assimbly.dil.event.domain.Filter; | ||
import org.assimbly.dil.event.domain.Store; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import ch.qos.logback.classic.LoggerContext; | ||
|
||
import java.util.ArrayList; | ||
|
||
|
||
public class EventConfigurer { | ||
|
||
protected Logger log = LoggerFactory.getLogger(getClass()); | ||
|
||
private CamelContext context; | ||
|
||
private String collectorId; | ||
|
||
private Collection configuration; | ||
private String type; | ||
|
||
public EventConfigurer(String collectorId, CamelContext context) { | ||
this.collectorId = collectorId; | ||
this.context = context; | ||
} | ||
|
||
public String checkConfiguration(String jsonConfiguration) { | ||
|
||
try { | ||
configuration = new Collection().fromJson(jsonConfiguration); | ||
} catch (JsonProcessingException e) { | ||
return e.getMessage(); | ||
} | ||
|
||
if(configuration == null){ | ||
return "Invalid event format (json)"; | ||
} | ||
|
||
type = configuration.getType(); | ||
|
||
if(type==null){ | ||
return "Event type is missing. Valid types are message,log and step."; | ||
}else if(!type.equals("log") && !type.equals("message") && !type.equals("step")){ | ||
return "Invalid event collector: " + type + ". Valid types are message,log and step."; | ||
} | ||
|
||
String id = configuration.getId(); | ||
|
||
if(!this.collectorId.equals(id)){ | ||
return "CollectorId of endpoint and configuration don't match. CollectorId endpoint=" + collectorId + " and CollectorID configuration=" + id; | ||
} | ||
|
||
//remove if configuration already exists | ||
if(isConfigured()){ | ||
remove(collectorId); | ||
} | ||
|
||
return "ok"; | ||
|
||
} | ||
|
||
public String add(String jsonConfiguration) { | ||
|
||
String checkMessage = checkConfiguration(jsonConfiguration); | ||
|
||
if(!checkMessage.equals("ok")){ | ||
return checkMessage; | ||
}else{ | ||
|
||
try { | ||
|
||
switch (type) { | ||
case "message": | ||
configureMessageCollector(); | ||
break; | ||
case "step": | ||
configureStepCollector(); | ||
break; | ||
case "log": | ||
configureLogCollector(); | ||
break; | ||
} | ||
} catch (Exception e){ | ||
return e.getMessage(); | ||
} | ||
|
||
return "configured"; | ||
|
||
} | ||
} | ||
|
||
|
||
public String remove(String collectorId) { | ||
|
||
log.info("Removing collector with id=" + collectorId); | ||
|
||
Object collector = context.getRegistry().lookupByName(collectorId); | ||
|
||
if(collector instanceof MessageCollector){ | ||
((MessageCollector) collector).shutdown(); | ||
context.getManagementStrategy().removeEventNotifier((EventNotifier)collector); | ||
log.info("Removed message collector with id=" + collectorId); | ||
}else if(collector instanceof StepCollector){ | ||
((StepCollector) collector).shutdown(); | ||
context.getManagementStrategy().removeEventNotifier((EventNotifier)collector); | ||
log.info("Removed step collector with id=" + collectorId); | ||
}else if(collector instanceof LogCollector ){ | ||
LogCollector logCollector = (LogCollector) collector; | ||
removeLogger(logCollector); | ||
log.info("Removed log collector with id=" + collectorId); | ||
}else{ | ||
log.warn("Collector with id=" + collectorId + " does not exist"); | ||
} | ||
|
||
return "removed"; | ||
} | ||
|
||
public boolean isConfigured(){ | ||
Object collector = context.getRegistry().lookupByName(collectorId); | ||
if(collector==null){ | ||
return false; | ||
}else{ | ||
return true; | ||
} | ||
} | ||
|
||
|
||
public void configureStepCollector() { | ||
|
||
log.info("Configure collection of step events"); | ||
String id = configuration.getId(); | ||
ArrayList<String> events = configuration.getEvents(); | ||
ArrayList<Filter> filters = configuration.getFilters(); | ||
ArrayList<Store> stores = configuration.getStores(); | ||
|
||
StepCollector stepCollector = new StepCollector(id, events, filters, stores); | ||
stepCollector.setIgnoreCamelContextEvents(true); | ||
stepCollector.setIgnoreCamelContextInitEvents(true); | ||
stepCollector.setIgnoreExchangeEvents(true); | ||
stepCollector.setIgnoreServiceEvents(true); | ||
stepCollector.setIgnoreStepEvents(true); | ||
|
||
context.getManagementStrategy().addEventNotifier(stepCollector); | ||
context.getRegistry().bind(id, stepCollector); | ||
} | ||
|
||
public void configureMessageCollector() { | ||
|
||
log.info("Configure collection of message events"); | ||
|
||
String id = configuration.getId(); | ||
ArrayList<String> events = configuration.getEvents(); | ||
ArrayList<Filter> filters = configuration.getFilters(); | ||
ArrayList<Store> stores = configuration.getStores(); | ||
|
||
MessageCollector messageCollector = new MessageCollector(id, events, filters, stores); | ||
messageCollector.setIgnoreCamelContextEvents(true); | ||
messageCollector.setIgnoreCamelContextInitEvents(true); | ||
messageCollector.setIgnoreRouteEvents(true); | ||
messageCollector.setIgnoreServiceEvents(true); | ||
messageCollector.setIgnoreStepEvents(true); | ||
|
||
context.getManagementStrategy().addEventNotifier(messageCollector); | ||
context.getRegistry().bind(id, messageCollector); | ||
|
||
} | ||
|
||
public void configureLogCollector() { | ||
|
||
log.info("Configure collection of log events"); | ||
|
||
String id = configuration.getId(); | ||
String tag = "LOG"; | ||
ArrayList<String> events = configuration.getEvents(); | ||
ArrayList<Filter> filters = configuration.getFilters(); | ||
ArrayList<Store> stores = configuration.getStores(); | ||
|
||
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); | ||
|
||
LogCollector logCollector = new LogCollector(id, tag, events, filters, stores); | ||
logCollector.setContext(loggerContext); | ||
logCollector.setName(collectorId); | ||
logCollector.start(); | ||
|
||
ArrayList<String> packageNames = configuration.getEvents(); | ||
|
||
for(String packageName: packageNames){ | ||
addLogger(logCollector, packageName, "info"); | ||
} | ||
|
||
context.getRegistry().bind(id, logCollector); | ||
|
||
} | ||
|
||
private void addLogger(LogCollector logCollector, String packageName, String logLevel){ | ||
|
||
ch.qos.logback.classic.Logger logbackLogger = null; | ||
|
||
if(packageName.equalsIgnoreCase("all") || packageName.equalsIgnoreCase("root")){ | ||
logbackLogger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); | ||
}else{ | ||
logbackLogger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(packageName); | ||
} | ||
|
||
//setAdditive to true, so that it's treated as an additional log (log is kept in the main log file) | ||
logbackLogger.setAdditive(true); | ||
logbackLogger.setLevel(Level.toLevel(logLevel)); | ||
logbackLogger.addAppender(logCollector); | ||
|
||
} | ||
|
||
private void removeLogger(LogCollector logCollector){ | ||
logCollector.stop(); | ||
ch.qos.logback.classic.Logger logbackLogger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(logCollector.getName()); | ||
logbackLogger.detachAppender(logCollector.getName()); | ||
} | ||
|
||
} |
Oops, something went wrong.