Subversion Repositories XServices

Compare Revisions

Ignore whitespace Rev 198 → Rev 199

/xservices/trunk/src/main/java/net/brutex/xservices/util/cache/CacheServlet.java
23,19 → 23,19
import java.util.concurrent.ExecutorService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
 
import lombok.extern.slf4j.Slf4j;
import net.brutex.xservices.types.scm.ObjectFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
 
/**
* @author Brian Rosenberger, bru(at)brutex.de
*
*/
 
 
@Slf4j
public class CacheServlet extends HttpServlet
{
private static final Logger logger = LogManager.getLogger();
List<File> configfiles = new ArrayList<File>();
int cacheinterval;
private final ObjectFactory FACTORY = new ObjectFactory();
54,7 → 54,7
if (name.startsWith("cvs-config-")) {
String configfile = getServletContext()
.getInitParameter(name);
this.logger.info("CVS configuration file: " + configfile);
log.info("CVS configuration file: {}", configfile);
this.configfiles.add(new File(configfile));
}
}
63,8 → 63,8
this.cacheinterval = Integer.parseInt(getServletContext()
.getInitParameter("cvs-cache-interval"));
} catch (NumberFormatException e) {
this.logger.debug("Could not read parameter 'cvs-cache-interval' from web.xml. Using default value '" + this.cacheinterval + "' minutes");
log.debug("Could not read parameter 'cvs-cache-interval' from web.xml. Using default value '{}' minutes", this.cacheinterval );
}
this.logger.info("CacheServlet set to " + this.cacheinterval + " minutes interval.");
log.info("CacheServlet set to '{}' minutes interval.", this.cacheinterval);
}
}
/xservices/trunk/src/main/java/net/brutex/xservices/util/cache/FindingsCacheServlet.java
30,6 → 30,8
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.ws.rs.core.Response;
 
import lombok.extern.slf4j.Slf4j;
import net.brutex.xservices.types.scm.ItemListType;
import net.brutex.xservices.types.scm.ItemType;
import net.brutex.xservices.types.scmfindings.FindingDetailsType;
43,18 → 45,16
import org.apache.commons.configuration2.builder.fluent.Configurations;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.jcs.access.exception.CacheException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
 
/**
* @author Brian Rosenberger, bru(at)brutex.de
*
*/
 
@Slf4j
public class FindingsCacheServlet extends HttpServlet {
 
private static final long serialVersionUID = 4041338473949999960L;
private static final Logger logger = LogManager.getLogger();
private final List<File> configfiles = new ArrayList<File>();
private final ObjectFactory FACTORY = new ObjectFactory();
private ExecutorService executor;
71,7 → 71,7
int i = 1;
for(File f: configfiles) {
//Initialise configuration bean using default values
FindingsConfigBean cbean = new FindingsConfigBean(i, LogManager.getLogger("worker-"+i+ "." + this.getClass().getName()));
FindingsConfigBean cbean = new FindingsConfigBean(i);
i++;
81,9 → 81,9
int cacheinterval = Integer.parseInt(getServletContext()
.getInitParameter("cvs-cache-interval"));
cbean.setCacheinterval(cacheinterval);
logger.info("FindingsCacheServlet set to "+ cacheinterval + " minutes interval.");
log.info("FindingsCacheServlet set to "+ cacheinterval + " minutes interval.");
} catch (NumberFormatException e) {
logger.warn("Could not read parameter 'cvs-cache-interval' from web.xml. Using default value '"
log.warn("Could not read parameter 'cvs-cache-interval' from web.xml. Using default value '"
+ cbean.getCacheinterval()+ "' minutes");
}
92,7 → 92,7
try {
config = configs.properties(f);
} catch (ConfigurationException e) {
logger.error("Could not read parameter file at '"+f.getAbsolutePath()+"'");
log.error("Could not read parameter file at '"+f.getAbsolutePath()+"'");
return;
}
99,13 → 99,13
File cvsconfig = new File(config.getString("CVSROOTCONFIGFILE"));
cbean.setCvsconfig(cvsconfig);
FindingsCacheServlet.logger.debug("Fetching list of files using '"
FindingsCacheServlet.log.debug("Fetching list of files using '"
+ cvsconfig.getAbsolutePath() + "' config file");
List<Object> filepatterns = config.getList("FILESEARCH");
cbean.setFilepatterns(filepatterns);
FindingsCacheServlet.logger.debug("Checking '"
FindingsCacheServlet.log.debug("Checking '"
+ filepatterns.size()
+ "' patterns for file name and path matching.");
112,7 → 112,7
List<Object> contentpatterns = config.getList("CONTENTSEARCH");
cbean.setContentpatterns(contentpatterns);
FindingsCacheServlet.logger.debug("Checking '"
FindingsCacheServlet.log.debug("Checking '"
+ contentpatterns.size()
+ "' patterns for content matching");
122,7 → 122,7
executor.submit(new ThisRunnable(cbean));
}
logger.info("FindingsCacheServlet has been initialized.");
log.info("FindingsCacheServlet has been initialized.");
 
}
133,14 → 133,14
String filename = getServletContext().getInitParameter(
"cvs-findings-configuration");
if (filename == null) {
logger.warn("'cvs-findings-configuration' init parameter is not specified.");
log.warn("'cvs-findings-configuration' init parameter is not specified.");
return false;
}
final File findingsconfig = new File(filename);
logger.info("CVS findings configuration file found at '"
log.info("CVS findings configuration file found at '"
+ findingsconfig.getAbsolutePath() + "'");
if ((!findingsconfig.canRead()) || (findingsconfig.isDirectory())) {
logger.info("CVS findings configuration file '"
log.info("CVS findings configuration file '"
+ findingsconfig.getAbsolutePath() + "' does not exist.");
return false;
}
158,7 → 158,7
String name = (String) attributes.nextElement();
if (name.startsWith("cvs-config-")) {
String configfile = getServletContext().getInitParameter(name);
logger.info("Adding CVS configuration file: " + configfile);
log.info("Adding CVS configuration file: " + configfile);
this.configfiles.add(new File(configfile));
}
}
168,12 → 168,12
List<File> removelist = new ArrayList<File>();
for (File f : configfiles) {
if (!f.exists()) {
logger.warn("CVS configuration file '"
log.warn("CVS configuration file '"
+ f.getAbsolutePath()
+ "' is specified, but does not exist. Removing from list.");
removelist.add(f);
} else if (!f.canRead()) {
logger.warn("CVS configuration file '"
log.warn("CVS configuration file '"
+ f.getAbsolutePath()
+ "' does exist, but is not readable. Removing from list.");
removelist.add(f);
203,7 → 203,7
ObjectFactory FACTORY = new ObjectFactory();
FindingsListType findingsList = FACTORY.createFindingsListType();
 
FindingsCacheServlet.logger.info("Processing '"
FindingsCacheServlet.log.info("Processing '"
+ fileslist.getItems().size() + "' files and directories.");
 
while (!this.isInterrupted) {
216,7 → 216,7
Object o = iterF.next();
if (this.isInterrupted)
break;
FindingsCacheServlet.logger.debug("Scanning filename '"
FindingsCacheServlet.log.debug("Scanning filename '"
+ i.getFullname() + "' for pattern '"
+ (String) o + "'");
p = Pattern.compile((String) o);
231,17 → 231,17
finding.setData(it.getData());
finding = copyDetails(finding, i);
findingsList.getFindings().add(finding);
FindingsCacheServlet.logger
FindingsCacheServlet.log
.debug("Match found for '"
+ i.getFullname() + "'");
break;
}
FindingsCacheServlet.logger
FindingsCacheServlet.log
.debug("No match found for '" + i.getFullname()
+ "'");
}
}
FindingsCacheServlet.logger
FindingsCacheServlet.log
.debug("Processing file content for '"
+ findingsList.getFindings().size()
+ "' entries in the list.");
257,7 → 257,7
Object o = iter.next();
if (this.isInterrupted)
break;
FindingsCacheServlet.logger
FindingsCacheServlet.log
.debug("Scanning file content for file '"
+ t.getFullname() + "' for pattern '"
+ (String) o + "'");
293,7 → 293,7
fd.getMatchLists().add(gmg);
}
t.getFindingLists().add(fd);
FindingsCacheServlet.logger
FindingsCacheServlet.log
.debug("Found matching content at index '" + s
+ "' in file '" + t.getFullname()
+ "' with pattern '" + p1.toString()
302,7 → 302,7
 
if (!isFound) {
findingsList.getFindings().remove(t);
FindingsCacheServlet.logger
FindingsCacheServlet.log
.debug("Found matching filename for '"
+ t.getFullname()
+ "' but content didn't match. Removing.");
311,24 → 311,24
try {
instance.getCacheInstance().put(
"FINDINGS-" + t.getROOT(), findingsList);
FindingsCacheServlet.logger
FindingsCacheServlet.log
.info("FINDINGS for CVSROOT '" + t.getROOT()
+ "' have been updated in cache.");
} catch (CacheException e) {
FindingsCacheServlet.logger.error(e.getMessage(), e);
FindingsCacheServlet.log.error(e.getMessage(), e);
}
}
try {
int cacheinterval = configuration.getCacheinterval();
FindingsCacheServlet.logger.debug("Now sleeping for '"
FindingsCacheServlet.log.debug("Now sleeping for '"
+ cacheinterval + "' minutes");
Thread.currentThread();
Thread.sleep(cacheinterval * 60000);
FindingsCacheServlet.logger.debug("Waking up after '"
FindingsCacheServlet.log.debug("Waking up after '"
+ cacheinterval + "' minutes of sleep");
} catch (InterruptedException e) {
this.isInterrupted = true;
FindingsCacheServlet.logger
FindingsCacheServlet.log
.warn("FindingsCacheServlet cache was interrupted. Shutting down.");
}
}
361,9 → 361,9
executor.shutdown();
try {
executor.awaitTermination(3, TimeUnit.SECONDS);
logger.info("Cache Worker Threads have shut down.");
log.info("Cache Worker Threads have shut down.");
} catch (InterruptedException e) {
logger.error("Cache Worker Threads did not terminate within timeout.", e);
log.error("Cache Worker Threads did not terminate within timeout.", e);
}
super.destroy();
}
/xservices/trunk/src/main/java/net/brutex/xservices/util/cache/FindingsConfigBean.java
16,18 → 16,22
 
package net.brutex.xservices.util.cache;
 
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
 
import java.io.File;
import java.util.List;
 
import org.apache.logging.log4j.Logger;
 
 
/**
* @author Brian Rosenberger, bru(at)brutex.de
*
*/
@Slf4j
public class FindingsConfigBean {
 
private Logger logger;
 
private final int instanceid;
 
private File cvsconfig;
35,11 → 39,11
private List<Object> filepatterns;
private List<Object> contentpatterns;
 
public FindingsConfigBean(int instanceid, Logger logger) {
public FindingsConfigBean(int instanceid) {
this.instanceid = instanceid;
this.logger = logger;
logger.debug("Initialise FindingsConfigBean instance '" + instanceid + "'");
 
log.debug("Initialise FindingsConfigBean instance '" + instanceid + "'");
 
}
 
/**