30,8 → 30,6 |
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; |
45,16 → 43,18 |
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); |
FindingsConfigBean cbean = new FindingsConfigBean(i, LogManager.getLogger("worker-"+i+ "." + this.getClass().getName())); |
i++; |
|
|
81,9 → 81,9 |
int cacheinterval = Integer.parseInt(getServletContext() |
.getInitParameter("cvs-cache-interval")); |
cbean.setCacheinterval(cacheinterval); |
log.info("FindingsCacheServlet set to "+ cacheinterval + " minutes interval."); |
logger.info("FindingsCacheServlet set to "+ cacheinterval + " minutes interval."); |
} catch (NumberFormatException e) { |
log.warn("Could not read parameter 'cvs-cache-interval' from web.xml. Using default value '" |
logger.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) { |
log.error("Could not read parameter file at '"+f.getAbsolutePath()+"'"); |
logger.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.log.debug("Fetching list of files using '" |
FindingsCacheServlet.logger.debug("Fetching list of files using '" |
+ cvsconfig.getAbsolutePath() + "' config file"); |
|
|
List<Object> filepatterns = config.getList("FILESEARCH"); |
cbean.setFilepatterns(filepatterns); |
FindingsCacheServlet.log.debug("Checking '" |
FindingsCacheServlet.logger.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.log.debug("Checking '" |
FindingsCacheServlet.logger.debug("Checking '" |
+ contentpatterns.size() |
+ "' patterns for content matching"); |
|
122,7 → 122,7 |
executor.submit(new ThisRunnable(cbean)); |
|
} |
log.info("FindingsCacheServlet has been initialized."); |
logger.info("FindingsCacheServlet has been initialized."); |
|
} |
|
133,14 → 133,14 |
String filename = getServletContext().getInitParameter( |
"cvs-findings-configuration"); |
if (filename == null) { |
log.warn("'cvs-findings-configuration' init parameter is not specified."); |
logger.warn("'cvs-findings-configuration' init parameter is not specified."); |
return false; |
} |
final File findingsconfig = new File(filename); |
log.info("CVS findings configuration file found at '" |
logger.info("CVS findings configuration file found at '" |
+ findingsconfig.getAbsolutePath() + "'"); |
if ((!findingsconfig.canRead()) || (findingsconfig.isDirectory())) { |
log.info("CVS findings configuration file '" |
logger.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); |
log.info("Adding CVS configuration file: " + configfile); |
logger.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()) { |
log.warn("CVS configuration file '" |
logger.warn("CVS configuration file '" |
+ f.getAbsolutePath() |
+ "' is specified, but does not exist. Removing from list."); |
removelist.add(f); |
} else if (!f.canRead()) { |
log.warn("CVS configuration file '" |
logger.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.log.info("Processing '" |
FindingsCacheServlet.logger.info("Processing '" |
+ fileslist.getItems().size() + "' files and directories."); |
|
while (!this.isInterrupted) { |
216,7 → 216,7 |
Object o = iterF.next(); |
if (this.isInterrupted) |
break; |
FindingsCacheServlet.log.debug("Scanning filename '" |
FindingsCacheServlet.logger.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.log |
FindingsCacheServlet.logger |
.debug("Match found for '" |
+ i.getFullname() + "'"); |
break; |
} |
FindingsCacheServlet.log |
FindingsCacheServlet.logger |
.debug("No match found for '" + i.getFullname() |
+ "'"); |
} |
} |
FindingsCacheServlet.log |
FindingsCacheServlet.logger |
.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.log |
FindingsCacheServlet.logger |
.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.log |
FindingsCacheServlet.logger |
.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.log |
FindingsCacheServlet.logger |
.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.log |
FindingsCacheServlet.logger |
.info("FINDINGS for CVSROOT '" + t.getROOT() |
+ "' have been updated in cache."); |
} catch (CacheException e) { |
FindingsCacheServlet.log.error(e.getMessage(), e); |
FindingsCacheServlet.logger.error(e.getMessage(), e); |
} |
} |
try { |
int cacheinterval = configuration.getCacheinterval(); |
FindingsCacheServlet.log.debug("Now sleeping for '" |
FindingsCacheServlet.logger.debug("Now sleeping for '" |
+ cacheinterval + "' minutes"); |
Thread.currentThread(); |
Thread.sleep(cacheinterval * 60000); |
FindingsCacheServlet.log.debug("Waking up after '" |
FindingsCacheServlet.logger.debug("Waking up after '" |
+ cacheinterval + "' minutes of sleep"); |
} catch (InterruptedException e) { |
this.isInterrupted = true; |
FindingsCacheServlet.log |
FindingsCacheServlet.logger |
.warn("FindingsCacheServlet cache was interrupted. Shutting down."); |
} |
} |
361,9 → 361,9 |
executor.shutdown(); |
try { |
executor.awaitTermination(3, TimeUnit.SECONDS); |
log.info("Cache Worker Threads have shut down."); |
logger.info("Cache Worker Threads have shut down."); |
} catch (InterruptedException e) { |
log.error("Cache Worker Threads did not terminate within timeout.", e); |
logger.error("Cache Worker Threads did not terminate within timeout.", e); |
} |
super.destroy(); |
} |